Tokens for Good logo Tokens for Good

Claude rate limit error: which limit did you actually hit?

Two completely different systems produce the words "rate limit", and the fix depends entirely on which one you are in. If you are calling the API, a rate_limit_error with HTTP 429 means you exceeded a per-minute quota and you should back off and retry. If you are on a Pro or Max subscription, you almost certainly hit a usage limit instead, which is a five-hour or weekly window rather than a per-minute quota, and no amount of retrying will clear it.

Two systems, one confusing word

The API has rate limits. They are enforced per organization and measured in requests per minute (RPM), input tokens per minute (ITPM), and output tokens per minute (OTPM), separately for each model. Your ceilings are set by your organization's usage tier, and Anthropic uses a token bucket algorithm, so capacity replenishes continuously rather than resetting on the hour. Exceed one and you get a 429 whose body carries "type": "rate_limit_error", plus a retry-after header telling you how many seconds to wait.

Subscriptions have usage limits. Pro, Max, Team, and Enterprise plans meter a rolling five-hour session window plus weekly caps, one across all models and a separate one for Opus. There is no per-minute quota to tune, no retry-after, and no requests-per-second figure that matters. Access pauses until that window rolls off.

The two never mix, because they belong to separate products on separate billing. A subscription has no usage tier and no RPM. An API key has no five-hour window. If someone tells you to "add exponential backoff" for a session limit, they have diagnosed the wrong system.

How to tell which one you hit

Start with the credential, not the message. Are you calling the Claude API with a key, or using claude.ai, the desktop app, or Claude Code signed in with a subscription? That answers it most of the time. In Claude Code, run /status: a Login method row means subscription, an API key row means metered. Run /usage: plan usage bars mean subscription; only a session cost figure means API billing. The full breakdown is in Claude Code: subscription or API billing.

Then read what you were actually handed:

Fixing it on the API

A 429 with a retry-after header is an ordinary, expected part of running at volume. In rough order of leverage:

Fixing it on a subscription

None of the above applies. There is no backoff strategy for a window; there is a clock. Your options:

What Claude Code shows in each case

Claude Code sits on both systems, which is exactly why the confusion concentrates there. It distinguishes them, if you know what you are reading.

A transport-level 429 surfaces as Request rejected (429) or Server is temporarily limiting requests. Claude Code retries these automatically within its retry budget, so a brief throttle usually resolves itself while you watch. If it persists, you are pressed against a real per-minute ceiling and the fixes above apply.

A spend limit or exhausted usage credits also arrives as a 429, but Claude Code deliberately fails at once rather than retrying, because retrying a spend cap can never succeed. Look for spend limit reached or Credit balance is too low.

A subscription usage limit is stated plainly: "You've hit your session limit" or "You've hit your weekly limit", with the reset time. There is no retry involved and nothing is wrong with your account.

One more error swept into the same search and neither of these: "Claude reached its tool-use limit for this turn" is a structural cap on how many tool calls one response may make. It resets on the next turn, and your plan is untouched.

If you keep hitting limits, look at what is not being used

A closing observation for the subscription case. People who hit usage limits are running genuinely heavy agentic work, and they are usually the same people whose weekly bars finish well short of full, because one intense afternoon can exhaust a five-hour window while the weekly ceiling is barely touched. Subscription capacity is a ceiling, not a balance: whatever is left when a window resets is gone.

Tokens for Good puts that recurring surplus to work. Your Claude Code claims a queued nonprofit, researches its real-world impact against a fixed methodology with citations, and submits a structured report, then stops. Every organization is researched twice by independent contributors, then validated, consolidated, scored deterministically, and human-reviewed before it reaches the public directory. It runs on the subscription you already pay for with no separate API cost, and it can run on a schedule in the background, so it fills the windows your own work never reaches. "Tokens" here means AI model tokens, not crypto: no coin, no wallet, no blockchain. See how the research works, read what Tokens for Good is, or set it up from the docs.

Frequently asked questions

What does rate_limit_error mean in Claude?
It is the error type the Claude API returns with HTTP 429 when your organization exceeds a per-minute limit on requests, input tokens, or output tokens for a given model. The response includes a retry-after header telling you how many seconds to wait. It is an API concept and does not apply to Pro or Max subscription usage.
Why am I getting a 429 from Claude when my usage looks low?
Per-minute limits can be hit in a sub-minute burst, since an allowance like 60 requests per minute may be enforced as one request per second. A sharp increase in traffic can also trip acceleration limits below your posted ceiling. Cap your concurrency, pace your queue, and ramp new volume up over hours rather than minutes.
Is a Claude rate limit the same as hitting my usage limit on Pro or Max?
No. API rate limits are per-minute quotas set by your organization usage tier and clear in seconds. Subscription usage limits are a rolling five-hour session window and weekly caps, and they clear when that window resets, which can be hours or days. Retrying does nothing for a usage limit.
How do I fix a Claude 429 error?
Back off and retry, honoring the retry-after header, then reduce the pressure structurally: cache your stable prefix, since cache reads do not count toward the input tokens per minute limit on most models; move asynchronous work to the Batch API, which has its own limits and costs 50% less; cap concurrency; and request a higher tier in the Claude Console if you have genuinely outgrown yours.
Why does my 429 have no retry-after header?
Because it is probably a spend cap rather than a rate limit. Both return 429 with error type rate_limit_error, but a spend cap sends no retry-after and carries error_code enforced_spend_limit_reached in the error details. Retrying cannot succeed; usage resumes at the start of the next month or when you move to a higher tier.
What does Claude Code do when it hits a rate limit?
For a temporary 429 it retries automatically within its retry budget, showing Request rejected (429) or a message about the server temporarily limiting requests. For a spend limit or exhausted usage credits it fails immediately rather than retrying. For a subscription usage limit it tells you which window you hit and when it resets, and recent versions can wait for the reset and continue the task for you.

Hitting session limits while your weekly bar sits half empty?

That gap is paid-for capacity that expires at every reset. Tokens for Good turns it into verified nonprofit research, on the subscription you already have.

See how Tokens for Good works