Skip to main content
Rate limiting keeps the Escrow API stable. There is a limited number of requests you can make per time window for each endpoint family. Going beyond that limit returns HTTP 429 with error.code RATE_LIMITED. Limits apply per merchant, with a separate quota for test and live (your sk_test_ / sk_live_ key). Hitting the limit on one family does not freeze other families.

Rate limit headers

On success and on 429, read these response headers: On 429 you also get Retry-After (seconds), matching x-ratelimit-reset.

Error body

Standard limits

Most secret key routes share the standard family. Test mode is for development and integration testing, not load testing.

Extended limits

These foundational routes have their own higher buckets in live mode so critical flows keep moving. In test mode they use the standard limit above.

Handling a 429

  1. Read x-ratelimit-reset (seconds).
  2. Pause requests to that endpoint family until the window ends.
  3. If you see sustained 429s across many families, pause and investigate. An unchecked poll loop is usually the cause.

Staying within limits

  • Prefer webhooks over polling GET /escrows/{id} after checkout or payout.
  • Cache stable lookups such as GET /identity/banks.
  • Page through lists (default 20, max 100). See Pagination.
  • Use idempotency keys on money moving POSTs so timeouts do not double release or double pay.
If you need higher sustained limits for production traffic, contact Demat support with the endpoint family, expected peak rate, and a short description of your integration.