Claude Code 429 error: what it means and how to fix it
A Claude Code 429 rate limit error means one of your limits ran out, not that Claude is down: on a subscription your 5-hour, weekly or model limit, with an API key your tier's per-minute rate limit or a monthly spend cap.
Contents
A Claude Code 429 rate limit error means one of your limits ran out, not that Claude is down. Which one is in the text: You've hit your session limit · resets 3:45pm is your plan's 5-hour window, Request rejected (429) is an API key's per-minute rate limit, and enforced_spend_limit_reached is the organization's monthly spend cap.
Before that line reached you, Claude Code had already tried again. Its error reference says it "retries transient failures up to 10 times with exponential backoff before showing you an error" (Claude Code docs), and 10 is the default of CLAUDE_CODE_MAX_RETRIES (environment variables). What's on screen is the error that didn't clear by itself.
Which 429 is it? Read the message#
The first words of the error tell you which limit it is. Rows one to five are quoted from Claude Code's error reference and row six from Anthropic's rate-limit page, both read on 22 October 2026 (Claude Code docs, Claude docs).
| What you see | What it means | How long |
|---|---|---|
You've hit your session limit · resets 3:45pm |
Your plan's 5-hour window is full | Until the time shown |
You've hit your weekly limit · resets Mon 12:00am |
Your plan's weekly limit is full | Until the time shown |
You've hit your Opus limit or Sonnet limit |
That model family's limit only | Until the time shown, or switch model |
API Error: Server is temporarily limiting requests (not your usage limit) |
A short server-side throttle | Moments; Claude Code retries it |
API Error: Request rejected (429) |
Your API key's (or Bedrock or Google Cloud project's) rate limit | Seconds to a minute |
rate_limit_error with enforced_spend_limit_reached |
Your API organization's monthly spend cap | Until the 1st of next month, 00:00 UTC |
529 Overloaded is missing from the table on purpose: "A 529 is not your usage limit and doesn't count against your quota" (Claude Code docs).
Why it happens: how the limits work#
Three kinds of limit answer with a 429.
- Plan limits on Pro, Max and Team: a 5-hour session window and a weekly limit, both shared across models, plus model-specific limits for Opus and Sonnet (when the 5-hour window starts and resets).
- API rate limits, per organization and per model, in requests, input tokens and output tokens per minute. Anthropic uses a token bucket, so "your capacity is continuously replenished up to your maximum limit, rather than being reset at fixed intervals", and 60 requests per minute "might be enforced as 1 request per second" (Claude docs). Parallel subagents that start together make exactly that kind of burst.
- A monthly spend cap per tier, which on 22 October 2026 stood at $500 for Start, $1,000 for Build and $200,000 for Scale. Hitting it returns the same
rate_limit_erroras a rate limit, told apart byerror.details.error_codereadingenforced_spend_limit_reached. There's noretry-afterheader on it, and retrying fails until access resumes (Claude docs).
A spend limit you set yourself, below the cap, is not a 429. It comes back as HTTP 400 invalid_request_error, starting You have reached your specified API usage limits (Claude docs).
How to fix a Claude Code 429#
- Run
/statusto see which credential is active. Claude Code's docs warn that "a strayANTHROPIC_API_KEYin your environment can route requests through a low-tier key". Claude Code prefers a set key over your logged-in subscription: an interactive session asks you to approve it once, andclaude -puses it without asking (environment variables). To go back to the plan,unset ANTHROPIC_API_KEY, delete theexportline from~/.zshrcor~/.bashrc, restartclaudeand/login. - On a plan limit,
/usageshows the bars and the reset times.You've hit your Opus limitorSonnet limitclears with/modeland the other family. The session and weekly limits are shared across models, so another model won't help there. - On an API rate limit,
retry-afteris "the number of seconds to wait until you can retry the request" (Claude docs). Wait that long, then stagger the burst so parallel subagents don't start in the same second. - On the spend cap, ask for a higher tier on the Console's Rate limits page or raise your own limit under Billing. If neither happens, access comes back at 00:00 UTC on the 1st.
- In CI,
CLAUDE_CODE_RETRY_WATCHDOG=1makes Claude Code retry 429 and 529 capacity errors indefinitely instead of failing (Claude Code docs). AddCLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS=1800000to give up on a request after 30 minutes (Claude Code v2.1.295 or later, environment variables). A spend-limit 429 fails at once either way. - Or move the work.
/usage-creditsturns on usage credits, a bigger plan raises the limits, and another account you own has limits of its own. Claude limit reached: what to do has the rest.
How Shuriken handles it#
Shuriken launches every Claude Code chat with ANTHROPIC_BASE_URL set to a small proxy on your own computer, one per chat. Every 429 reaches the proxy before Claude Code, and the wait it asks for decides what happens.
- Under a minute, the proxy holds the request and resends it after the
retry-afterseconds, or every 15 seconds when there are none, for at most 5 minutes. Claude Code and its subagents see a slow request. - A minute or more, plan usage limits included: Shuriken hot swaps the chat to another of your sources with room, even before your switch point, and sends the held request there. The subagents go with it. A Switched to … card names the account that took over (source switching).
Before 3.0.0 we got the second case wrong. A plan limit that arrived without retry-after looked to the proxy like any throttle: it waited 15 seconds, tried again, and kept at it until the 5 minutes ran out. Then Claude Code got You've hit your limit, and a Workflow's subagents died on it while another account had room. Since 3.0.0, released on 12 October 2026, the proxy reads the 429's anthropic-ratelimit-unified-status header first. rejected means the plan's limit, so the chat moves, and a limit that names Fable stops only Fable.
If an account is refused outright, with an expired sign-in or disabled access, the chat moves to another usable source instead of ending; that came in 3.3.0 (A refused account no longer ends your chat). If every source is out, the chat shows one pause card ("Paused: no Claude source has usage left") and carries on by itself once a source has room again.
Use accounts you own and are entitled to use; providers' terms may not allow sharing a subscription sign-in. Download Shuriken.
Try the free tool: Claude limit reset tracker
Sources
- Claude Code docs: Error reference (accessed 22 October 2026)
- Claude docs: Rate limits (accessed 22 October 2026)
- Claude Code docs: Environment variables (accessed 25 October 2026)
Frequently asked questions
Does a 429 mean Claude is down?
No. It means you reached a limit: the plan's window, the key's per-minute rate or a spend cap. Problems on Anthropic's side come back as 529 Overloaded, and a 529 doesn't count against your usage.
Why do I get a 429 when I still have usage left on my plan?
Check /status first. If it shows an API key, Claude Code is sending requests on that key's tier, not your Pro or Max plan, because a set ANTHROPIC_API_KEY wins even when you're logged in. Run unset ANTHROPIC_API_KEY and restart claude to go back to the plan.
How long should I wait after a 429?
Whatever the error names. You've hit your session limit · resets 3:45pm means 3:45pm, and an API key's 429 carries retry-after in seconds while its bucket refills continuously. A spend-cap 429 has no retry-after at all and holds until 00:00 UTC on the 1st of next month, unless someone raises the cap.
Does Claude Code retry 429 errors automatically?
Yes for temporary throttles. Claude Code makes up to 10 tries with exponential backoff before the error appears, and CLAUDE_CODE_MAX_RETRIES changes the 10. Retrying doesn't clear a spend-limit or used-up-credit 429, which isn't a throttle.