Anthropic 429 enforced_spend_limit_reached: the spend-cap you should not retry
Your Claude API calls start returning HTTP 429 with type rate_limit_error, but waiting a few seconds does nothing. If error.details.error_code is enforced_spend_limit_reached, this is your organization's monthly tier spend cap, not a rate limit. Here's how to recognise it, what the caps are, and what to do instead of retrying.
Last reviewed 7 Nov 2026
The short version
- Anthropic's usage tiers carry a monthly spend cap. Hitting it pauses API usage until 00:00 UTC on the 1st of next month (or until you get a higher tier).
- While paused, requests return
429witherror.type = rate_limit_erroranderror.details.error_code = enforced_spend_limit_reached. - There is no
retry-afterheader. Do not tight-loop or rely on the SDK's default retries. - A spend limit you set is a different path: HTTP
400invalid_request_error, message starting with “You have reached your specified…”. - Ordinary rate limits are also
429, but they usually carryretry-afterand do not set thaterror_code.
1. What the response looks like
Anthropic's rate limits docs (read 7 Nov 2026) show this shape when the tier monthly spend cap is reached:
{
"type": "error",
"error": {
"type": "rate_limit_error",
"message": "You have reached your API usage limits: your organization has crossed its monthly API usage threshold, set based on your organization's API tier. You will regain access on 2026-09-01 at 00:00 UTC.",
"details": { "error_code": "enforced_spend_limit_reached" }
},
"request_id": "req_018EeWyXxfu5pfWkrYcMdjWG"
}On the Messages API, read error.details.error_code. The documented sample message also names the UTC date when access resumes. The errors page groups this under 429 rate_limit_error along with ordinary rate limits and Claude Code workspace spend limits — so status alone is not enough.
2. Triage table: which “limit” did you hit?
| Kind | HTTP | How to recognise it | Waiting help? |
|---|---|---|---|
| Ordinary rate limit (RPM / ITPM / OTPM) | 429 | Usually has retry-after; no enforced_spend_limit_reached | Yes — wait that many seconds |
| Tier monthly spend cap | 429 | error.details.error_code is enforced_spend_limit_reached; no retry-after | No — until 00:00 UTC next month, or a tier increase |
| Spend limit you set (org or workspace) | 400 | invalid_request_error; message starts with “You have reached your specified…” | No — raise or remove the limit |
| Empty Console credit balance | 400 | Message about credit balance too low (see our credit balance guide) | No — buy credits |
| Claude Code workspace spend limit | Often 429 | Checked separately; can include retry-after | Sometimes — read the header; not the same as the org tier cap |
3. Current tier caps (and where to see yours)
Each of the Start, Build and Scale tiers carries a monthly spend cap — the maximum your organization can spend on the API each calendar month (docs, 7 Nov 2026):
| Usage tier | Monthly spend cap |
|---|---|
| Start | $500 USD |
| Build | $1,000 USD |
| Scale | $200,000 USD |
| Custom | No monthly spend cap (arranged with account team) |
You can see your organization's tier and current limits on the Rate limits page in the Claude Console, and you can set your own lower spend limit on the Billing page. Your own limit cannot exceed the tier cap. The Default Workspace still cannot have a spend limit — see Anthropic Default Workspace limits.
4. Handle it in code (don't treat every 429 alike)
async function createMessage(body) {
const res = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": process.env.ANTHROPIC_API_KEY,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
body: JSON.stringify(body),
});
if (res.status !== 429) return res;
const payload = await res.json().catch(() => ({}));
const code = payload?.error?.details?.error_code;
if (code === "enforced_spend_limit_reached") {
// No retry-after. Alert a human; do not tight-loop.
throw new Error("Anthropic tier monthly spend cap reached");
}
const wait = Number(res.headers.get("retry-after"));
if (Number.isFinite(wait) && wait > 0) {
await new Promise((r) => setTimeout(r, wait * 1000));
return fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": process.env.ANTHROPIC_API_KEY,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
body: JSON.stringify(body),
});
}
throw new Error("Anthropic 429 without a clear retry");
}The official SDK retries transient failures (including rate limits) with exponential backoff by default and honours retry-after when present. Because the spend-cap 429 has no that header, those retries keep failing until the month rolls or the tier rises — so catch enforced_spend_limit_reached explicitly and stop.
5. What to do when production hits the cap
- Confirm
error.details.error_code === "enforced_spend_limit_reached"(and note the resume date in the message). - Stop automatic retries for that organization; page a human.
- Open the Rate limits page and use Request tier increase if you need access before next month (Claude Platform on AWS: contact your account rep or support; that flow is not available).
- Separately, set your own spend limits below the tier cap so the next surprise is a
400you chose, not a hard stop at the tier ceiling. Remember: no spend limit on the Default Workspace — move agent keys to a capped workspace. - Something outside the app that tells you the same day when spend is far above normal, before the monthly cap trips.
Not sure whether your Anthropic (and OpenAI / OpenRouter) limit settings would actually stop a loop or a leaked key? The free AI key limit audit checks them in a few minutes (no sign-up, no key needed). Related: credit balance too low, workspace spend limits via the API, runaway AI agent cost.
Where KeyBark fits (and where it doesn't)
KeyBark reads Anthropic organization cost from our servers about every 15 minutes during the beta (Admin cost report, including Default Workspace spend) and emails you when a daily or monthly dollar threshold you set is crossed, or when today's spend jumps above your 7-day average. That covers the “spend is far above normal” item before the monthly tier cap trips. On paid plans an opt-in kill switch (beta) can disable a named key when a threshold is crossed.
Limits, honestly: KeyBark does not see 429 responses from your app, does not read your usage tier or monthly spend cap, and does not request tier increases for you. Checks run on a schedule, so an alert can arrive after money has been spent. KeyBark is not a proxy and can't block a request. Set Anthropic's own spend limits (and a sensible tier) first; KeyBark is a second line of warning on top.
FAQ
What does Anthropic enforced_spend_limit_reached mean?
Your Claude Console organization has hit its usage tier's monthly API spend cap. Requests return HTTP 429 with error.type rate_limit_error and error.details.error_code enforced_spend_limit_reached. Access resumes at 00:00 UTC on the first day of the next month, or sooner if you move to a higher tier. The response has no retry-after header.
Should I retry an Anthropic 429 with enforced_spend_limit_reached?
No. Anthropic's rate-limits docs say this 429 has no retry-after header, and retries (including the SDK's automatic retries) keep failing until access resumes. Branch on error.details.error_code before treating any 429 as a wait-and-retry rate limit.
How is this different from a spend limit I set myself?
A spend limit you configure on the Billing page (or a workspace spend limit) returns HTTP 400 with error type invalid_request_error; the message starts with “You have reached your specified API usage limits” (or the workspace wording). The tier monthly spend cap returns 429 with enforced_spend_limit_reached. Raise or remove your own limit to restore access; for the tier cap, request a higher tier or wait until next month.
What are the Anthropic monthly spend caps by tier?
As of the docs read on 7 Nov 2026: Start $500, Build $1,000, Scale $200,000 (USD per calendar month). Custom-tier organizations have no monthly spend cap; their limits are arranged with their account team. Check your current tier on the Rate limits page in the Claude Console.
Sources (read 7 Nov 2026): Anthropic Rate limits and API errors. KeyBark is not affiliated with Anthropic.
KeyBark watches your OpenAI, Anthropic and OpenRouter spend from the server and flags a crossed threshold or spike by email and on your dashboard. Free for one key.