Skip to main content
A plan sets two limits on a key: a per-minute request rate and a longer-window quota. The data is identical across plans — paid plans buy throughput, not different numbers. Every tool is available on every plan; see /pricing. Choose Builder over Starter when you need the higher ceilings for fan-out, batch jobs, or bursty agent traffic.

Hitting a ceiling

Both limits return HTTP 429, distinguished by code:
If a 429 response carries a Retry-After header, honor it. rate_limit_exceeded is the per-minute limit and clears quickly. quota_exhausted clears only when the daily or monthly quota window resets, so stop the job instead of looping.

Response headers

Authenticated /v1 tool responses include budget headers when Unkey reports the corresponding state during key verification: If Unkey returns multiple rate-limit rows, the API exposes an exceeded row first; otherwise it exposes the row with the lowest remaining value. /health, /ready, docs, and any unconfigured local-dev keyless path do not include these headers. Schema 2 conditional requests have one nuance: a matching If-None-Match returns 304 Not Modified, then the auth boundary refunds the quota credit. The X-Credits-Remaining header on that 304 is the value from the pre-refund verification response, so it can be one credit lower than the final refunded balance. The API does not make an extra Unkey call just to reread the balance after the refund. See Errors and retries for a retry loop that handles both cases.