Rate Limits
Requests to the KnoxCall Management API (/v1) are rate-limited per API key. The limit is
enforced consistently across every API worker, so a burst spread across parallel connections
counts against the same budget — there is no per-process loophole.
This page covers the Management API (
api.knoxcall.com/v1) — the control plane you use
to configure routes, secrets, clients, and so on. Rate limits on your proxy traffic
(the routes you expose to your own callers) are configured separately, per route / per
client / per tenant — see Rate Limiting overview.Rate-limit headers
When a limit is configured for a request, the response includes these headers — on every response, not only on a429, so you can watch your remaining budget as you go:
A normal, well-under-budget response looks like this:
The 429 response
When you exceed the limit, the request is rejected with HTTP429 and the canonical
error envelope using the rate_limit_exceeded type. The response
also carries a Retry-After header telling you exactly how long to wait:
Backoff guidance
- Respect
Retry-Afterfirst. On a429it is the authoritative wait — sleep that many seconds before retrying. - Watch
X-RateLimit-Remainingproactively. If it is trending toward0, slow down before you get a429rather than after. - Add jitter. When several workers hit the limit together, a fixed
Retry-Aftermakes them all retry in lockstep. Add a small random offset (e.g.Retry-After + random(0, 1s)) to spread the retries. - Cap your retries. Use exponential backoff with a ceiling and a maximum attempt count; surface a clear error to the caller rather than retrying forever.
What’s Next?
Errors
The canonical error envelope and the full type → status table.
Idempotency
Retry mutating requests safely without creating duplicates.
Proxy rate limiting
Per-route / per-client / per-tenant limits on your own proxy traffic.
API Overview
Base URLs, response envelope, pagination, and quick examples.