Skip to main content

Guides

Why Claude Code Freezes on 429 — and What to Do About It

Claude Code 429 Retry-After freeze explained
See a hard limit surfaced clearly — not a blank hang — so you can wait, change plan, or resume when ready.

You are mid-prompt, the spinner has been turning for twenty seconds, and a banner finally surfaces: HTTP 429 — Retry-After: 1187s. Claude Code is not crashed. It is not slow. It has been told by Anthropic to stop sending requests for the next twenty minutes, and it is going to honor that quietly. Here is what is actually happening on the wire, why the editor freezes instead of failing, and what to do other than wait.

What a 429 actually means in Claude Code

HTTP 429 is the status code servers use to say "too many requests." When Claude Code talks to the Anthropic API, every prompt is a POST to https://api.anthropic.com/v1/messages. If your account has exceeded one of its rate-limit buckets — the 5-hour rolling cap, the 7-day rolling cap, or the per-minute TPM and RPM ceilings — the server returns 429 instead of the streamed completion you were waiting for.

The response carries a Retry-After header. The value is the number of seconds the server wants you to wait before trying again. It is not a guess. It is the exact remainder of the window that just rejected you.

Claude Code's response to a 429 is to pause the conversation. The editor does not crash, the session does not end, and the prompt you submitted is not discarded — it is held in the local transcript while the extension waits out the Retry-After. From the outside this looks like a freeze. From the inside it is a deliberate, polite hold. The freeze is the feature.

That politeness is also the problem. The countdown can be one minute. It can be twenty. It can be Retry-After: 3600 if you were the one who shoved Anthropic over the 5-hour ceiling on the wrong account on the wrong day. The editor has no idea how long to budget for, and neither do you, until the header arrives.

Why `Retry-After` exists and what the number means

Retry-After is in the HTTP spec for exactly this reason: servers need a way to push back on clients without lying about the situation. Anthropic emits it on every 429 they return. The number you see is what the rolling-window arithmetic computed at the instant your request landed.

Three things drive the number you actually see:

  • Which limit you tripped. The 5-hour window, the 7-day window, and the per-minute TPM and RPM caps each have their own residual time. The 429 carries the longest remaining wait of whichever limit you crossed.
  • How far over you went. A request that nudges you one token past the cap returns a tiny Retry-After. A request that lands a 20K-token completion right as the window snaps closed can return the full window length, because the window had to roll your entire heavy turn off the books before allowing another.
  • What other traffic that account is carrying. If Claude Code has been chewing on a long Task chain — sub-agents, big completions, parallel tool calls — the account is already loaded. A 429 in that state often comes with a longer countdown than a 429 on a quiet account, because the rolling window has more weight to shed.

The countdown the extension shows you is the server's best honest answer. It tends to feel longer than it should because, in human terms, "wait twenty minutes" is "wait forever" — especially when your TodoWrite list still has nine open items.

The single-account ceiling that nobody mentions

Every rate limit Anthropic publishes is per account. The 5-hour window is yours. The 7-day window is yours. The TPM and RPM caps are yours. Claude Code does not multiplex accounts. It logs in with one set of credentials, and every prompt you write costs against that one bucket.

That is the structural fact the docs do not lead with. A senior developer running Claude Code as their daily driver — code review, refactoring sub-agents, autonomous fix loops — is funneling a workload designed for a small team through a single user's billing slot. When the slot fills, everything stops. Not just the loud autonomous loops. The Friday-morning "fix this typo" prompt too.

The Reddit thread that captured this best is the one that ran for a week with the same opening line in every post:

burn through the whole damn quota in ONE OR TWO DAYS

The complaint is not that the cap exists. The complaint is that nothing about the surface area of Claude Code prepares you for what one account's cap feels like under real engineering load. You hit it, the editor freezes, and the workflow you built around Claude assistance becomes a workflow that just stares at a countdown.

What developers usually try first

Once the freeze becomes a pattern, every team converges on the same four moves:

  1. Wait it out. Honest, simple, and the most expensive option per minute. Twenty minutes of Retry-After is twenty minutes of lost flow plus however long it takes to remember what you were doing.
  2. Switch to a second account by hand. Close VS Code, swap your ~/.claude/credentials.json to a backup that points at a different Claude.ai login, reopen the editor, re-prime the conversation. Three to five minutes per swap if you have a script. Five to fifteen if you don't.
  3. Restart the editor and pray context survives. Sometimes Claude Code resumes the active session on launch. Sometimes it does not. The TodoWrite list usually survives. The cached file reads usually do not.
  4. Cargo-cult a shell script. The classic move: download someone's claude-swap gist, alias it to cc, and rotate accounts from the terminal. Works until Anthropic ships a credential-schema change and your script silently writes a broken file.

Each of these options trades minutes for minutes. None of them eliminate the freeze — they just relocate it. Manual switching turns a twenty-minute API hold into a three-minute context loss, which feels better but is not actually free. Restarting the editor turns the hold into a session-resumption gamble. Shell scripts turn the hold into a maintenance burden you carry every Claude Code update cycle.

The pattern under all four moves is the same: you are reaching for a second account because your first account is exhausted. The structural answer is not to perform that reach faster. It is to remove the need to perform it at all.

The structural fix: account pooling

The mechanism is not complicated. A local proxy on your machine sits between Claude Code and api.anthropic.com. Every API call the extension makes hits the proxy first. The proxy maintains a pool of Claude.ai accounts that you already pay for. It picks the account with the most projected remaining headroom in the current window, forwards the request, and returns the response upstream to Claude Code unchanged.

When the active account returns 429, the proxy reads the Retry-After header, marks that account as cooling, picks the next-best account, and re-issues the request. Claude Code never sees the failure. There is no countdown. There is no banner. The session continues.

This is the part most teams never wire up themselves because it reads like infrastructure work. Power Claude is free to download and try, no credit card needed — download free and start the 7-day trial — it rotates the accounts you already own so the freeze stops interrupting you.

The two requirements that separate a working pool from a broken one are mundane:

  • Smart routing, not round-robin. Naively cycling through accounts in order fails the moment two of them are both near their caps — you ping-pong between the same two cooling accounts until the freeze you were trying to avoid arrives anyway. A real router checks projected remaining TPM, RPM, and rolling-window budget per account before each request.
  • Header passthrough. Claude Code reads response metadata to estimate its own usage. The proxy must forward X-RateLimit-* headers and timing data unchanged, or the extension's local accounting drifts.

What pooling does not do is raise any single account's cap, change Anthropic's billing, or "bypass" anything. The accounts you pool are accounts you already own. Each one still operates inside its own published ceiling. The user-visible improvement comes from the simple math of N caps instead of one.

Frequently asked questions

How long is the Retry-After value when I hit a 429 in Claude Code?

It varies by which limit you tripped. A per-minute TPM trip usually returns a Retry-After under sixty seconds. A 5-hour rolling-window trip can return anything from a few minutes to a full hour, depending on how far over the cap your last turn pushed you. A 7-day rolling-window trip is rare but returns the longest values — hours, sometimes more — because the window has the most ground to recover.

Does adding more Claude accounts to my machine violate Anthropic's terms of service?

Anthropic's published terms permit each individual to hold multiple Claude.ai accounts so long as each account belongs to that person and is not being resold or shared with other users. Pooling accounts you legitimately pay for and personally control is consistent with those terms. Pooling accounts that belong to colleagues, contractors, or anyone whose login you do not own is not. Check Anthropic's current TOS before assuming yesterday's reading still applies.

If my account is rate-limited, does the limit still tick down or do I lose that time?

The limit ticks down. Rate-limit windows in the Anthropic API are rolling and decay with wall-clock time, not with usage. Whether you are actively prompting or staring at a frozen editor, the window is closing at the same rate. The freeze is wasted time on your end, but it is not wasted recovery time on the server's end.

Why does Claude Code sometimes freeze for several minutes before showing the 429?

The extension waits for the streamed response to begin before it knows the request failed. Anthropic occasionally accepts a request, holds it briefly, then returns the 429 — usually when the rate-limiter is sweeping a hot account. The visible freeze in those cases is partly the API's pre-rejection pause and partly Claude Code's retry-with-backoff loop running silently before the banner surfaces.

Can I keep using `/fast` mode while pooling accounts?

Yes. Claude Code's /fast toggle and account pooling solve different bottlenecks. /fast addresses generation latency by changing how Anthropic's servers prioritize your request. Pooling addresses request-availability by changing which account your request goes against. The two stack — a heavy session can run both at once with no interference.

Closing

The freeze is a contract Claude Code is honoring on your behalf, not a bug. The question is whether you want one account's ceiling to define the contract, or whether you would rather pool the accounts you already pay for and let routing make the freeze invisible. Balanced Mode is the extension we built when we got tired of watching the countdown ourselves.

If you want to run it against a long session of your own, the 14-day Premium Trial is $0 today and you can cancel anytime before day 15 — it layers smart routing, the watchdog, and usage analytics on top of pooling. Not ready to put a card down? Install Power Claude Free instead: the 7-day free trial gives you full Pro access, no credit card.