Skip to content

Rate limits

Limits are per key, per minute, and reads and writes have separate budgets. Exhausting one does not affect the other.

Limit
Writes (POST, DELETE)60 / minute
Reads (GET)600 / minute

You never have to guess

Every response carries the current state of your budget:

RateLimit: limit=60, remaining=41, reset=27
RateLimit-Limit: 60
RateLimit-Remaining: 41
RateLimit-Reset: 27

reset is seconds until the window rolls over. Both the current draft-ietf-httpapi-ratelimit-headers names and the widely-deployed legacy ones are sent, so whichever your HTTP client understands is there.

When you exceed one

You get 429 with code: RATE_LIMIT_EXCEEDED and a Retry-After header, in seconds:

json
{
  "type": "https://api.zefi.ai/problems/rate-limit-exceeded",
  "title": "Rate limit exceeded",
  "status": 429,
  "code": "RATE_LIMIT_EXCEEDED",
  "detail": "Quota of 60 write requests per minute exhausted. Retry in 4s."
}

Honour Retry-After rather than retrying on a schedule of your own. The window is fixed, not rolling, so the value is exact — backing off for longer wastes budget, and retrying sooner just spends another rejection.

Staying inside them

Batch rather than loop: one call creating 50 links costs one write, where fifty calls cost fifty. See Creating links in bulk.

If a limit is genuinely too low for what you are building, talk to us rather than working around it — the budget is per key and can be raised.

Zefi API v1