Rate limits
Rate limits are applied per API key, per minute. When you exceed a limit, the API returns 429.
| Endpoint | Limit (per minute) |
|---|
GET /api/payouts/account-requirements | 500 |
POST /api/payouts/account-requirements | 500 |
GET /api/payouts/deposit-options | 60 |
GET /api/payouts/fee | 60 |
GET /api/payouts/amount-limits | 60 |
GET /api/payouts/quote | 20 |
POST /api/payouts/transfer | 20 |
POST /api/payouts/transfer/v2 | 20 |
POST /api/payouts/transfer/v2/confirm-transfer | 20 |
GET /api/payouts/transfer/{transfer_id} | 30 |
GET / POST /api/payouts/recipients | 30 |
GET / PATCH / DELETE /api/payouts/recipients/{id} | 30 |
Responses include x-ratelimit-remaining and x-ratelimit-reset headers so you can pace requests and back off before hitting the limit.
All errors return a JSON body with a single human-readable error field.
{ "error": "Invalid or missing API key" }
Status codes
| Code | Meaning |
|---|
400 | Validation error — bad parameters, unsupported currency, or an amount outside your limits. |
401 | Missing, malformed, or revoked API key. |
403 | Not permitted — recipient not owned by your account, transfer method not enabled, failed compliance screening, unverified wallet, or a disallowed IP. |
404 | Resource not found (for example, an unknown transfer or recipient). |
409 | Conflict — a duplicate customer_uuid, or a tx_hash already used by another transfer. |
429 | Rate limit exceeded. Retry after the window resets. |
500 | Internal server error. |
503 | A compliance or wallet-verification service is unavailable. Retry after a short delay. |
Treat 503 and 429 as retryable. Use the rate-limit headers to schedule retries, and add jitter to avoid retry storms.