rate_limited
You sent too many requests in a short time.
HTTP 429 · rate_limit_error · retry after the time in Retry-After
What happened
Section titled “What happened”You sent too many requests in a short time. The response carries
Retry-After in whole seconds, at least 1. Three limits send it:
-
Sign-in limits): “Too many requests. Retry after 5 s.”
-
The failed-auth limiter for API keys, step 2 of the bearer check, before the key is parsed: more than 10 invalid keys a minute from one address (then a penalty of 1 s that doubles with each further failure, up to 15 minutes, and resets after 10 clean minutes), or on one key prefix. Only
invalid_api_keyfailures count; revoked and expired keys and successful checks don’t. The message: “Too many requests with invalid API keys from this address. Try again in 4 seconds.” -
Open long polls: each agent may hold 20 open
GET /v1/actions/{id}?wait=requests at once; the 21st getsRetry-After: 1and “This agent already has 20 open waits. Close one, or poll without wait.”
These limits live in each server process, so behind N instances a client gets up to N times the budget.
What to do
Section titled “What to do”Wait the number of seconds in Retry-After, then retry. A 429 is never stored for
idempotent replay, so the same Idempotency-Key is safe to reuse. For the key limiter, fix the key
first: retrying a bad key only lengthens the penalty.
Example
Section titled “Example”{ "error": { "type": "rate_limit_error", "code": "rate_limited", "message": "Too many requests with invalid API keys from this address. Try again in 4 seconds.", "param": null, "request_id": "req_01j9zr3m5k8q2w7x4t6v0b1c9d", "doc_url": "https://docs.deedglass.com/errors/rate_limited" }}The message is for a person and can get more exact over time: branch on type and code, never on the message.
In the SDKs
Section titled “In the SDKs”| SDK | Raised as |
|---|---|
TypeScript (@deedglass/sdk) |
RateLimitError with code === "rate_limited" |
Python (deedglass) |
deedglass.RateLimitError with .code == "rate_limited" |