- Aggregate tier budget — a per-merchant token bucket sized by your plan. Every request consumes at least one token; expensive endpoints consume more.
- Per-route caps — tight per-key (or per-IP for unauth flows) limits on specific sensitive routes, layered on top of the budget.
429.
Aggregate tier budget
Tokens refill on a sliding 60-second window. Sub-users share the merchant’s bucket — sub-user count never multiplies your budget.
Each request deducts from the bucket according to its cost class:
The expensive endpoints — these dispatch to marketplace workers or hit
external-marketplace APIs, so each call costs 5 tokens against your
tier budget:
So a
standard merchant (60 tokens / minute) can burn the whole budget
on 60 cheap calls or 12 expensive ones, or any mix in between. A
premium merchant gets 36 expensive calls; enterprise gets 72.
Need more? Upgrade tier or contact support.
Per-route caps
Independent of the tier budget, these tighter limits apply on specific endpoints. They use their own counters — exhausting one doesn’t affect the others or the tier budget.Sensitive merchant operations (per-merchant key)
Normal writes (per-merchant key)
POST /merchant/users (create), POST /merchant/users/{id}/fund,
POST /merchant/users/{id}/suspend|reactivate, trade URL CRUD,
API key name update.
Public auth flow (per-IP)
Login, register, refresh, password reset, email/2FA challenge, Discord OAuth start. Tighter per-IP caps to slow brute-force.Webhooks (per-IP)
Inbound provider webhooks (gatepay, onramp, crypto, marketplace callbacks): 60/min per source IP.Response headers
For routes covered by a per-route cap, the standard rate-limit headers are returned on every response:
The aggregate tier budget does not emit per-request headers — it
only signals on rejection, via:
The
429 body is the standard envelope:
Backing off
Honourretry-after when present, otherwise use exponential backoff:
Per-IP caveats
If you’re calling from a single egress IP across many merchant keys (e.g. a multi-tenant proxy), you may hit per-IP caps on auth endpoints before per-key caps. Split egress IPs or contact support.Request ID
Every response envelope carries arequestId field — include it in
support tickets so we can trace the exact request: