Skip to content

rate_limited

You sent too many requests in a short time.

HTTP 429 · rate_limit_error · retry after the time in Retry-After

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_key failures 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 gets Retry-After: 1 and “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.

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.

HTTP 429 · rate_limited
{
"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.

SDK Raised as
TypeScript (@deedglass/sdk) RateLimitError with code === "rate_limited"
Python (deedglass) deedglass.RateLimitError with .code == "rate_limited"