budget_exceeded
The agent used its budget for the current period.
HTTP 429 · rate_limit_error · retry after the time in Retry-After
What happened
Section titled “What happened”The agent used its budget for the current period. The response
carries Retry-After in seconds, and the message says when the period resets. On
POST /v1/actions the message is the budget decision’s own sentence, verbatim, and the refusal is
recorded and sealed: the envelope carries the sealed action in error.action. A budget another
request reserved first becomes a recorded budget_exceeded too. A replay of the same
Idempotency-Key answers with the same refusal, and its Retry-After counts down to the same reset.
What to do
Section titled “What to do”Wait until the time in the message, or ask an admin to raise the budget. A 429 is not a reason to retry at once: the next attempt is refused and recorded the same way until the window resets.
Example
Section titled “Example”{ "error": { "type": "rate_limit_error", "code": "budget_exceeded", "message": "Budget \"agent-rate\" reached: 60 of 60 calls this minute. Try again in 14 s.", "param": null, "action": { "object": "action", "id": "act_01k6w4a2c4e6g8j0m2p4r6t8v0", "state": "sealed", "status": "denied", "deed": "deed_01k6w4a4e6g8j0m2p4r6t8w0y2", "…": "…" }, "request_id": "req_01j9zr3m5k8q2w7x4t6v0b1c9d", "doc_url": "https://docs.deedglass.com/errors/budget_exceeded" }}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) |
BudgetExceededError with code === "budget_exceeded" |
Python (deedglass) |
deedglass.BudgetExceededError with .code == "budget_exceeded" |