Global limit
Every authenticated merchant gets 1,000 requests per minute, shared across all/v1/* endpoints. The limit resets on a rolling 60-second window.
Endpoint-specific limits
Some endpoints are more expensive or more sensitive and carry a tighter ceiling:| Endpoint | Limit |
|---|---|
POST /v1/fx/quote | 30 / minute per IP |
GET /v1/fx/rate | 30 / minute per IP |
POST /v1/fx/exchange | 10 / minute per IP |
POST /v1/api-keys | Reduced (sensitive operations ceiling) |
POST /v1/api-keys/{id}/revoke | Reduced (sensitive operations ceiling) |
POST /v1/webhooks/{id}/test | Reduced (sensitive operations ceiling) |
POST /v1/merchant/security/portal-link | Reduced (sensitive operations ceiling) |
Headers on every response
| Header | Value |
|---|---|
X-RateLimit-Limit | Maximum requests permitted in the current window. |
X-RateLimit-Remaining | Requests remaining in the current window. |
X-RateLimit-Reset | Unix timestamp (seconds) when the current window resets. |
429 Too Many Requests with an additional header:
| Header | Value |
|---|---|
Retry-After | Seconds to wait before retrying. |
Handling 429
Treat429 as transient. Back off for at least the number of seconds in Retry-After before retrying. Use jittered exponential backoff when retrying many requests at once — retrying everything at the exact Retry-After moment creates a thundering herd that trips the limiter again.