/v1 limit is currently 1000 requests per 60 seconds. Limits are applied per key, per surface — your public /v1 traffic and your Admin /admin/v1 traffic are metered independently, and each key has its own budget.
Every response carries headers that tell you exactly where you stand, so you can pace requests proactively instead of waiting to be throttled.
Limits are enforced per key. Rotating a key or issuing additional keys does not raise your total throughput on a surface — each key carries its own independent budget against the same backend.
How metering works
- Per key. Each API key (
ch_org_…orch_admin_…) is metered separately. One noisy key never starves another. - Per surface. The public surface (
https://server.chataigne.ai/v1) and the Admin surface (https://server.chataigne.ai/admin/v1) have independent counters. Exhausting one does not affect the other. - 60-second window. The counter resets every 60 seconds.
X-RateLimit-Resettells you when the current window resets.
Rate limit headers
Every response — successful or not — includes the following headers:The maximum number of requests permitted in the current window for this key and surface.
The number of requests remaining in the current window. When this reaches
0, further requests are rejected with 429 until the window resets.The Unix timestamp (seconds) at which the current window resets and
X-RateLimit-Remaining is replenished.Only present on
429 responses. The number of seconds to wait before retrying. Always honor this value.Example response headers
When you’re throttled (429)
When a key exceeds its budget for a surface, the API responds with429 Too Many Requests, a Retry-After header, and a standard error body of type rate_limit_error.
429 response
Error body
Backoff guidance
Build retry logic into every client. The recommended strategy:- Honor
Retry-Afterfirst. On a429, wait at least the number of seconds it specifies before retrying. - Use exponential backoff with jitter for other transient failures (e.g.
500 api_error). Double the delay each attempt and add a small random offset to avoid synchronized retry storms across clients. - Cap your retries. Stop after a few attempts (e.g. 5) and surface the error rather than retrying indefinitely.
- Pace proactively. Watch
X-RateLimit-Remainingand throttle yourself as it approaches zero — don’t wait for the429. - Make retries safe. For resource-creating
POSTs, send anIdempotency-Keyso a retry never creates a duplicate.
Reducing your request volume
Before scaling up retries, scale down the number of calls you make:Expand related objects
Use
expand[] to inline related resources in a single request — e.g. ?expand[]=locations — instead of fetching them one by one.Paginate efficiently
Request larger pages (
limit up to 100) and use cursor pagination (starting_after) to walk lists with fewer round trips.Send idempotency keys
Idempotency-protected retries return the original response without doing duplicate work — safe to retry after a
429.Use request IDs
Capture
X-Request-Id from throttled responses so support can trace any anomalous limiting quickly.Need a higher limit for a specific integration? Reach out with your
org_… id and a representative request_id so we can review your traffic pattern.