Skip to content
LogoLogo

Rate Limits

Each account has an overall ceiling (below). Some routes also have their own, lower per-route limits. BLOX counts these limits for each account over a rolling 60-second window. The first limit that you reach causes a 429 response. The per-route limits are all in the account ceiling, so one route cannot use all of your account ceiling.

Per-route write limits

BLOX counts each limit for each account over a rolling 60-second window.

EndpointLimit
POST /v1/payouts300/min
POST /v1/wallet/token/withdrawals30/min
POST /v1/wallet/fiat/withdrawals30/min
POST /v1/payouts/beneficiaries20/min
POST /v1/wallet/bank-accounts/{bankAccountId}/address20/min
POST /v1/wallet/deposits/check-missed30/min
POST /v1/wallet/deposits/{id}/redrive60/min
POST /v1/payouts/beneficiaries/{beneficiaryId}/address20/min
Changes to allowed senders (Wallet): POST, PATCH, and DELETE on /v1/wallet/bank-accounts/{bankAccountId}/address/whitelist60/min, shared by the three methods
Changes to allowed senders (Payout): POST, PATCH, and DELETE on /v1/payouts/beneficiaries/{beneficiaryId}/address/whitelist60/min, shared by the three methods
POST /v1/payouts/deposits/check-missed30/min
POST /v1/payouts/deposits/{id}/redrive60/min
POST /v1/checkout120/min

Per-route read limits

EndpointLimit
GET /v1/payouts/{id} and GET /v1/payouts/active-banks600/min, shared by the two endpoints
GET /v1/payout/prefund/balance60/min

Account ceiling

BLOX applies this limit to all endpoints together, for each account.

EnvironmentRate Limit
Sandbox100 requests/minute
Production1000 requests/minute

The sandbox ceiling is intentionally low. A load test that passes in sandbox at 100/min does not show the capacity that is available in production. Use the production ceiling to plan your load. The per-route limits above are parts of that ceiling.

Exceeded Limits

If you send more requests than a limit permits, BLOX returns 429 in the standard error format of the merchant API:

{
  "code": "RATE_LIMITED",
  "message": "Too many payout requests. Please try again later.",
  "requestId": "…"
}

Retry with exponential backoff. Rate-limit metadata headers are not always in the response.

If a write request gets a 429 response, BLOX did not process the request. Retry it with the same Idempotency-Key. This retry is safe. Refer to Idempotency.

Best Practices

  1. Use exponential backoff: If you get a 429 response, wait before you retry.
  2. Cache responses: Keep data in a cache where possible, to send fewer API calls.
  3. Do not send repeated requests for the payout status: Register a PAYOUT webhook and use the payout.updated webhook event. Get the payout only to reconcile, or to find the status after you did not receive a webhook event. Top-ups also have webhook events (payout.prefund_completed). Thus, you do not need to send repeated requests to the balance endpoint. Get the balance when a webhook event arrives.