Rate limits
Clopos Open API v2 applies a three-tier rate limit, each with a 1-minute sliding window and standard IETFRateLimit-* response headers. The tiers layer so that an abusive client IP, a flood of invalid tokens, and a noisy tenant each hit their own ceiling without starving the others.
The three tiers
Tier 1 — Auth endpoint
60 requests per minute per client IP, applied to
POST /v2/auth only.integrator_id or brand is in the body. Re-use issued tokens until they are close to expires_at rather than calling /v2/auth on every request — you will exhaust this quota quickly if you do not.
Tier 2 — IP pre-limit (flood guard)
600 failed requests per minute per client IP, applied to all authenticated routes.
Tier 3 — Per-tenant limit
300 requests per minute per
integrator_id:brand pair, applied to all authenticated routes.- Minting new tokens for the same
(integrator_id, brand)does not reset the counter — all tokens share the same budget. - The budget is per
(integrator_id, brand)pair. A single integrator serving many brands gets a separate 300 req/min budget for each brand. - Distributing traffic across many workers or processes does not multiply the quota — the limit is enforced centrally.
Response headers
Every authenticated response includes standard IETFRateLimit-* headers for the tier that is currently most constrained, so you can track your budget without parsing bodies:
| Header | Meaning |
|---|---|
RateLimit-Limit | Total requests allowed in the current 1-minute window for this tier. |
RateLimit-Remaining | How many requests you can still make before being throttled. |
RateLimit-Reset | Seconds until the current window resets. |
RateLimit-Remaining gets low — it is always cheaper than recovering from a 429.
What a 429 looks like
When any tier is exceeded, the API responds with429 Too Many Requests. Back off for at least RateLimit-Reset seconds before retrying.
Handling throttling
A few patterns work well in practice:- Watch the headers, not the errors. Adjust your request cadence based on
RateLimit-Remainingrather than waiting for a429. - Back off exponentially on retry. If you do get throttled, wait at least
RateLimit-Resetseconds before retrying, then double the wait on each consecutive failure. - Re-use JWTs. Call
/v2/authat most once per token lifetime (~1 hour). Hammering the auth endpoint wastes your Tier 1 budget and does nothing for your Tier 3 budget. - Fix errors fast. If you hit Tier 2, it means something in your client is spamming invalid requests. Fix the root cause — retries against a broken request only burn your IP budget.
- Batch where possible. List endpoints support pagination with
limitup to 200 for most resources — one larger list call is always cheaper than many small ones against your Tier 3 budget. - Avoid tight polling loops. Until webhooks ship, polling is sometimes unavoidable — but keep intervals reasonable (seconds, not milliseconds) and use
date[0]/date[1]or sort filters to fetch only what changed. - Use a single integrator per workload. Splitting traffic across many integrators to multiply the quota is a policy violation; Clopos monitors for it.
Need a higher limit?
If 300 requests per minute is not enough for a legitimate use case (for example, a large delivery marketplace or a migration batch job), contact Clopos support at [email protected] with yourintegrator_id, the brand(s) involved, and a description of the workload. Quotas are adjusted on a per-tenant basis.