Skip to main content
There are two layers: a global budget that applies to ordinary traffic, and per-route throttles that are far stricter. The per-route throttle is the one that will surprise you, because it fires during integration testing.

Global budget

Every response carries the current budget:

Per-route throttles

Auth and money routes carry their own, tighter limits. These are enforced in addition to the global budget — the stricter of the two wins.
The login throttle is per-email as well as per-IP. Rotating source IPs does not widen it — that is deliberate, it defeats credential stuffing across residential proxy pools. In practice it means an integration test that loops over login six times will get a 429 on the sixth call and stay blocked for the rest of the 15-minute window, for that email address, everywhere. Cache the token; do not re-login per request.

Reading a 429

Retry-After is emitted in milliseconds, not seconds. It is the same unit as x-ratelimit-reset, not the RFC 9110 delta-seconds a generic HTTP client will assume. The value above is ~890 seconds (≈15 minutes), not ~890,000 seconds. Divide by 1000 before you sleep on it, or you will back off for ten days. Both units are stated here because a partner’s retry layer will otherwise get this wrong silently.

Backoff guidance

  • Retry on 429 and 503. Do not retry 400, 401, 403 or 404 — they are deterministic.
  • Use exponential backoff with jitter, seeded from Retry-After in milliseconds.
  • Never retry a payment-initiating call faster than the PSP’s own webhook can arrive; see Idempotency and retries for what is and is not safe to repeat.

Quota increases

There is no self-serve quota console. If your integration needs more than the global budget, talk to your Droplinked counterpart with a request-per-second figure and the routes involved — the throttles above are per-route, so raising one does not require raising all.