Reference & Support
Errors and Limits
What each error means, and request limits.
Error format
Errors share one shape:
| Field | Value |
|---|---|
code | Machine-readable cause, for example validation_failed. |
status | The HTTP status. |
title | A short summary. |
detail | What to change, naming the field at fault when there is one. |
category | client (your request), upstream (a network or provider) or internal (ours). |
request_id | Quote it when you contact us. |
Common codes
| Code | Status | Meaning |
|---|---|---|
unauthorized | 401 | Missing, malformed, unknown or revoked API key. |
forbidden | 403 | The key lacks the scope, or the action is not allowed. |
kyb_required | 403 | Live mode needs a verified business. |
not_found | 404 | The resource does not exist for this project. |
wallet_not_found | 404 | No wallet matches; send x-customer-id. |
validation_failed | 400, 409 | The request is invalid; detail says what to change. |
insufficient_funds | 400 | The balance does not cover the amount and fees. |
idempotency_conflict | 409 | The idempotency key was used for a different request. |
passkey_credential_invalid | 409 | The passkey assertion did not verify. |
transfer_reverted | 409 | The network rejected the transfer. |
chain_unavailable | 400, 409, 502 | The network or route is not available for this request. |
rate_limit_exceeded | 429 | Too many requests; wait and retry. |
upstream_unavailable | 502, 503, 504 | A network or provider is unavailable; retry later. |
unknown | 500 | Something failed on our side; retry, and quote request_id. |
Rate limits
| Limit | Requests per 60 seconds |
|---|---|
| Per API key | 300 |
| Per business | 3,000 |
Over the limit, requests return 429 rate_limit_exceeded. Responses carry no Retry-After or rate-limit headers, so back off and retry with increasing delays.