Claude Code 529 Overloaded: What It Retries For You, and What It Won't
A 529 isn't your usage limit and doesn't touch your quota. Claude Code already retried ten times before it told you. The useful question is which failures it retries automatically, which it deliberately doesn't, and the one environment variable that stops an unattended run dying on a transient capacity blip.
A Claude Code 529 is not your usage limit, and it does not count against your quota. It means the API is at capacity across all users right now — nothing is wrong with your account, your key, or your request — and because capacity is tracked per model, switching with /model is a better first move than retrying.
It has already been retried. By the time an overloaded error reaches you, Claude Code has tried up to ten times with exponential backoff:
API Error: Repeated 529 Overloaded errors. The API is at capacity — this is usually
temporary. Try again in a moment. If it persists, check https://status.claude.com.So hammering the same prompt achieves nothing except joining the queue behind everyone else doing the same thing. The useful moves are different.
Switch model before you retry
Capacity is tracked per model. A 529 on one model doesn't mean the others are saturated, so /model is a more productive response than retrying:
/modelThis is the single highest-value thing in this post if you're blocked right now. Most people retry the same model repeatedly because the error doesn't mention that capacity is per-model.
What gets retried automatically, and what doesn't
Transient failures are retried up to 10 times with exponential backoff before anything surfaces. Knowing the boundary tells you whether waiting will help.
Retried for you:
- Server errors, overloaded responses and timeouts that arrive before any response has streamed
- Connections dropped before Claude completes any part of its response, thinking included
- Stalled streams where nothing has arrived yet
- Temporary 429 throttles
- Requests exceeding the context limit — retried with a reduced
max_tokens
Deliberately not retried:
- TLS certificate validation failures — reported on the first attempt so you can fix them immediately rather than watching ten silent retries
- Mid-stream failures after Claude has started text or tool calls — the completed work is kept instead
- Failures arriving after the response finished — the response is kept and the turn ends normally
- Policy check denials — the denied request is never re-sent to the same model or a fallback
- Spend-limit 429s — a gateway marks these
x-should-retry: false, and they aren't capacity problems
That mid-stream rule is the one people misread as a bug. If Claude got halfway through and the connection died, you'll see something like:
API Error: Connection lost mid-response. The response above may be incomplete.The completed work was kept rather than discarded to start over. Reply continue and it resumes from the last completed block. In non-interactive mode with -p, it does that automatically up to three times before giving up.
While it is retrying, the spinner tells you where you are:
Retrying in Ns · attempt x/yAnd if nothing arrives for 20 seconds while a request is pending, you get a network hint rather than silence. (During advisor review that banner waits 90 seconds instead, because advisors legitimately take longer.)
The flag that keeps unattended runs alive
This is the part missing from most 529 write-ups, and it's the direct answer to issue #60577 — transient capacity errors aborting long-running tasks with no auto-recovery.
If you run unattended — scheduled jobs, CI, long agentic tasks you walk away from — ten retries is not enough, because a capacity blip can outlast the backoff window. Set:
CLAUDE_CODE_RETRY_WATCHDOG=1In unattended sessions that retries 429 and 529 capacity errors indefinitely, and raises the retry count for other transient errors to 300, which is roughly three hours of backoff. It also removes the CLAUDE_CODE_MAX_RETRIES cap entirely.
The related knobs:
| Variable | Default | What it does |
|---|---|---|
CLAUDE_CODE_MAX_RETRIES | 10 | Retry attempts. Capped at 15 as of v2.1.186. |
CLAUDE_CODE_RETRY_WATCHDOG | unset | Set to 1 for indefinite capacity retries in unattended runs. |
API_TIMEOUT_MS | 600000 | Per-request timeout — 10 minutes. |
Don't set the watchdog for interactive work. Sitting through three hours of backoff at your keyboard is worse than seeing the overloaded error and switching model.
Request timed out is a different problem
Ten minutes is the default per-request timeout. If you're hitting it, the cause is usually one of three things, and only one is fixed by raising the limit:
- The model is generating a very large response — break the work into smaller prompts instead
- A slow network or proxy — this is the case where raising
API_TIMEOUT_MSis the right call - High load — retry, or switch model
Reaching for API_TIMEOUT_MS when the real cause is an oversized task just means waiting longer for the same failure.
Session limits look similar and aren't
A capacity error and a usage limit produce different messages, and conflating them sends you down the wrong path:
You've hit your session limit · resets 3:45pm
You've hit your weekly limit · resets Mon 12:00am
You've hit your Opus limit · resets 3:45pmSession and weekly limits are shared across all models, so /model won't rescue you there. But Opus limit and Sonnet limit apply only to that model family — switching does work for those. Usage counts against session and weekly allowances simultaneously.
Since v2.1.234, an interactive session on a claude.ai subscription can wait it out instead:
Usage limit reached · continuing automatically at 3:45pm · esc to cancelPress Esc at an empty prompt to cancel the wait. You can toggle it under /config → Continue automatically at usage limit, and separately in the Desktop app's Code tab — they're independent settings.
If limits are what you keep hitting rather than capacity, the causes are worth understanding separately; I went through them in why Claude Code burns tokens while you're not even using it.
A quick triage order
- Read the message. Capacity (
529), rate limit (429), timeout and usage limit are four different problems. - If it's a 529 overloaded error —
/modelfirst, don't retry the same one. - Check status.claude.com for an active incident before debugging your own setup.
- If it happened mid-response, reply
continuerather than re-running the whole task. - For unattended runs, set
CLAUDE_CODE_RETRY_WATCHDOG=1so a blip doesn't kill a three-hour job. - Run
/statusto confirm which credential is actually active — a 429 often traces to the wrong one.
Key takeaways
- A 529 overloaded error is a capacity error, not a usage limit, and does not count against your quota.
- Capacity is tracked per model, so /model is more likely to unblock you than retrying the same one.
- An overloaded error means it already retried up to 10 times with exponential backoff before telling you.
- Mid-stream failures are deliberately not retried — completed work is kept, and 'continue' resumes from the last block.
- CLAUDE_CODE_RETRY_WATCHDOG=1 retries capacity errors indefinitely in unattended runs. Don't use it interactively.
Frequently asked questions
Does a 529 error use up my usage limit?
No. A 529 is a capacity error, not a usage limit, and it does not count against your quota. It means the API is at capacity across all users at that moment. It is also not an account problem or a bad request.
Should I keep hitting retry when I see a 529?
Not manually. Claude Code has already retried several times with exponential backoff before it shows you that message, so an immediate manual retry just queues behind everyone else doing the same thing. Because capacity is tracked per model, switching with /model is more likely to work than retrying the same one.
How do I stop an unattended Claude Code run dying on a transient 529?
Set CLAUDE_CODE_RETRY_WATCHDOG to 1. In unattended sessions that retries 429 and 529 capacity errors indefinitely, and raises the retry count for other transient errors to 300, which works out to roughly three hours of backoff. It also removes the CLAUDE_CODE_MAX_RETRIES cap.
Why did Claude Code stop mid-response instead of retrying?
That is deliberate. Once Claude has completed a block of text or a tool call, Claude Code keeps the completed work rather than throwing it away to retry. Reply with continue and it picks up from the last completed block. In non-interactive mode with -p it does this automatically, up to three times.
The pattern worth internalising: most of these errors are already being handled for you, and the ones that aren't are unhandled on purpose — because retrying would throw away work or re-send something that was denied. Knowing which bucket you're in turns a vague "the API is broken" into a two-second decision.
If your error isn't a capacity problem at all, every Claude Code error and its fix sorts the rest by cause, with a one-line answer for each.
If the symptom is the CLI feeling sluggish rather than erroring, that's a separate class of problem — Claude Code slow, hanging, or eating memory covers the silent ones, including a search failure that reports itself as healthy. Managing what these tools carry into a session is the problem ContextZero came out of.
References
- Error reference — Claude Code docscode.claude.com · accessed 2026-08-27
- Environment variables — Claude Code docscode.claude.com · accessed 2026-08-27
- Transient 529 Overloaded errors abort long-running tasks with no auto-recovery (issue #60577)github.com · accessed 2026-08-27
Last reviewed October 8, 2026
Tahir Nazir
Senior AI Engineer & Full-Stack Lead
5+ years shipping AI-powered products — RAG pipelines, agentic workflows, and MCP tooling. Top Rated on Upwork with a 100% job success score.
More about Tahir →Keep reading
New posts land here first. Follow along by RSS, or get in touch if you are building something similar.
Related articles
Why Claude Code Uses So Many Tokens (and How to See Where They Go)
Every request carries your whole conversation, so context size — not message count — sets what a turn costs. How to see your Claude Code token usage with /usage and /context, why it climbs while you're idle, and what thinking, plan mode and /compact really cost.TroubleshootingAI Engineering17 min readClaude Code 'Autocompact Is Thrashing', Slow or Hanging? Start With the Silent Failures
High CPU, frozen commands and missing search results usually trace to a handful of specific causes — a thrashing auto-compact loop, a bundled ripgrep that won't run, or WSL quietly returning fewer matches while claude doctor reports everything as OK.TroubleshootingAI Engineering9 min readClaude Code Not Working? Every Error and Its Fix
Every Claude Code error I've written up, grouped by what actually broke: network and enterprise setup, cost and context limits, or setup and tools. Find your exact message in the lookup table, get the one-line answer, then follow the link to the full fix.TroubleshootingAI Engineering13 min read