Documentation
Rate limits
How Chersus throttles requests: per-account windows, the 429 response and Retry-After header, and how to raise a limit for your workload.
Last updated
Rate limits scale with your tier, and they exist for one reason: to keep latency predictable for everyone on shared CPU infrastructure. We apply them per account, per minute, across all services. A chained run counts as one request.
Reading the headers
Every response carries the current window state:
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 598
X-RateLimit-Reset: 1725192000
Handling 429
When the window is exhausted, Chersus returns 429 with a Retry-After header in
seconds. Back off and retry once the window resets. Chersus never bills a request it
rejects for rate limiting.
{
"error": {
"code": "rate_limited",
"message": "Too many requests. Retry after 3 seconds."
}
}
Queue work client-side with a token bucket rather than retrying in a tight loop. For batch jobs, chain services so one request does the work of several.
rate_limited sits alongside every other error in errors, which
covers what bills and what does not.
Retries and idempotency
Send an Idempotency-Key header with a unique value per logical request whenever a
retry is possible. Chersus keeps the key and the resulting trace_id for 24 hours,
with no content. A repeat with the same key returns status: "duplicate" and the
original trace_id. It runs nothing, bills nothing, and your client keeps the first
response.
Other limits
A single run accepts at most 100,000 characters of input. The validator rejects larger inputs before anything runs or bills. Region is an account setting, not a request field; the audit trace records the region that served each run.
Raising limits
Limits rise automatically with your monthly character tier. On the Corporate or Volume tier and need dedicated throughput, or a single-tenant European cluster? Ask about reserved capacity.