Skip to main content

What happened

The API could not retrieve a live exchange rate for the currency pair in your request. This returns HTTP 503 with error code RATE_UNAVAILABLE.

Common causes

  • Rate provider timeout — the upstream provider took too long to respond
  • Currency pair not configured — the requested pair is not set up for your account
  • Polling lag — rate data has not been refreshed yet (brief window, resolves automatically)
  • All providers down — every configured provider for this pair is unavailable

Recovery

This is a transient error in most cases. A simple retry with backoff resolves it.
1. Retry with backoff Wait 2-5 seconds and retry the request. Most rate provider issues resolve within seconds.
autoPayout.purpose is required. Every purpose except intercompany and, by default, prefunding (documentation policy can still require documents on a prefunding payout above a configured amount) also requires at least one previously-uploaded supporting document: upload it first with POST /v2/documents (purpose transaction_support) and pass its doc_... id in autoPayout.documents, otherwise the order is rejected before it is created. Use "purpose": "intercompany" with a recipient already on the customer’s whitelist to skip the document. 2. Check pair and recipient requirements Verify that the source and destination asset pair is supported, and fetch the recipient fields required for the destination shape:
If the pair is not supported, you will receive an UNSUPPORTED_PAIR error instead. 3. Contact support If the error persists after multiple retries over 30+ seconds, contact support with:
  • The instance value from the error response
  • The currency pair you are requesting
  • The approximate time of the first failure

Prevention

  • Check pair availability before quoting — call the requirements endpoint during onboarding to confirm supported pairs and recipient fields
  • Implement retry logic — wrap order requests in a retry loop with exponential backoff (2s, 4s, 8s) and a maximum of 3-5 attempts
  • Handle gracefully in your UI — show a “rates temporarily unavailable, please try again” message rather than a generic error