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 HTTP429, 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.