The Claude Code rate limit is eight floats, not one number

Your 429 came from one of them crossing 1.0. The Claude settings page shows four. The other four can pin to 1.0 with every visible bar still green. Here is what is actually in the payload, why your local token counter cannot see it, and the brew command that puts all eight in your menu bar.

M
Matthew Diakonov
6 min read
Direct answer, verified May 16, 2026

There is no single Claude Code rate-limit number.

Claude Code on Pro and Max is gated by eight utilization floats returned by a cookie-authenticated GET to /api/organizations/{org_uuid}/usage on claude.ai. Any one of them at 1.0 returns a 429 on the next prompt. The 5-hour float was doubled on May 7, 2026; the four weekly caps were not. Source: Anthropic support article on Claude Code with Pro/Max.

The eight floats, named

Below is the exact Rust struct claude-meter deserializes the /usage response into. Each Option<Window> is one utilization float plus its own resets_at timestamp. The comments are mine; the field names are exactly what Anthropic returns.

claude-meter/src/models.rs

That is the contract. Marketing numbers like "Max 20x" or "~45 prompts per 5-hour window" are downstream estimates that wobble with model choice, context length, and tokenizer version. The floats are the truth.

What the Settings page shows you, and what it doesn't

claude.ai/settings/usage renders four bars. The JSON it fetches contains four more fields that no UI surface ever exposes.

Featureclaude.ai/settings/usageClaudeMeter (all 8)
five_hourYes (top bar)Rolling 5-hour window. Doubled on May 7, 2026.
seven_dayYes (second bar)Weekly all-model bucket. NOT doubled in May.
seven_day_sonnetYes (third bar)Sonnet-only weekly cap.
seven_day_opusYes (fourth bar)Opus-only weekly cap. First wall on heavy refactor weeks.
seven_day_oauth_appsNoOAuth-authenticated weekly cap. Claude Code traffic counts here.
seven_day_omeletteNoAnthropic-internal feature bucket. Surfaces in the JSON; never named in the UI.
seven_day_coworkNoAnother internal feature bucket. Same story.
extra_usage.utilizationNo (a spend line, not a bar)Metered overage cap. When this hits 1.0 you 429 with green bars.

The two most common silent 429 culprits are extra_usage.utilization (your metered overage cap is exhausted) and seven_day_oauth_apps (Claude Code traffic specifically counts toward an OAuth-only weekly bucket on top of every other bucket it touches). Neither shows up as a bar on the Settings page. Both can pin to 1.0 with every visible bar still in the green.

When does the rate limit reset?

Every bucket carries its own resets_at timestamp. None of them is a cliff. The 5-hour window rolls: the cost of message one ages off five hours after message one, the cost of message two ages off five hours after message two, and so on. The resets_at field on five_hour is the time of the next single age-off, not the moment the bar returns to 0 percent. Same for the weekly fields over a seven-day window.

Practically: if you burned through the bucket in a single 30-minute burst, the bar drops in a single step five hours after that burst. If you spread it across four hours, the bar drains in four steps over the next four hours. ClaudeMeter renders the local-clock version of resets_atas "-> resets Sat May 16 18:42 (in 2h)" so you can stop refreshing the Settings page.

See all eight floats in 30 seconds

1

1. Install the menu-bar app

Single brew cask. macOS 12+. No keychain prompt if you also load the extension in step 2.

2

2. Load the browser extension once

Clone the repo, open chrome://extensions, enable Developer mode, Load unpacked → extension/. Pin the icon. The extension calls /api/organizations/{org}/usage with the cookies you already have and posts the snapshot to a loopback bridge.

3

3. Visit claude.ai once

The first poll fires on chrome.alarms with POLL_MINUTES = 1 (extension/background.js line 3). Your menu bar lights up within a minute. claude-meter --json prints the same payload to stdout for tmux or Starship.

Local terminal

Why ccusage cannot tell you this

ccusage is great. It reads ~/.claude/projects/<project>/<session>.jsonl and sums input and output tokens against a model price card. That is a cost calculator for tokens that left your laptop.

The plan quota is not in your local logs. It is on Anthropic's server, as the eight utilization floats above. claude.ai web chat fills the same buckets but never writes to your local JSONL. Server-side cache reweighting (cached prefixes at 0.10x, cold-turn input at 1.25x) means even your tracked tokens do not sum to the server's float. Two different numbers, two different questions. Run both tools side by side; they answer different things.

Burning through your weekly quota by Tuesday?

20-minute call. Walk through what your eight floats actually look like on a heavy week and whether ClaudeMeter changes anything for your workflow.

Frequently asked questions

What is the Claude Code rate limit in one number?

There isn't one. Claude Code on Pro and Max is gated by eight separate utilization floats returned by GET claude.ai /api/organizations/{org_uuid}/usage. Each float lives between 0.0 and 1.0; any one of them hitting 1.0 returns a 429 on the next prompt. The four visible ones on claude.ai/settings/usage are five_hour, seven_day, seven_day_sonnet, and seven_day_opus. The four the UI does not show are seven_day_oauth_apps, seven_day_omelette, seven_day_cowork, and extra_usage.utilization. Field names verified in claude-meter's UsageResponse struct, src/models.rs lines 19-28.

Why did Claude Code rate-limit me when my bars looked green on claude.ai?

Because four of the eight enforcement floats are not rendered on claude.ai/settings/usage. The most common silent cause is extra_usage.utilization (your metered overage hit its monthly cap) and the second-most is seven_day_oauth_apps (the OAuth-only bucket Claude Code traffic counts toward separately). The five_hour bar can read 40 percent, the three model bars can read 50 to 70 percent, and the next prompt still 429s because one of the four hidden floats is at 1.0.

When does the Claude Code rate limit reset?

Each bucket carries its own resets_at timestamp in the JSON. The five-hour window rolls continuously: when you sent your oldest message in the current window ages off, that message's cost drops out and the float decreases. resets_at on the five_hour field is the timestamp of that next age-off, not a cliff reset to zero. Weekly buckets behave the same way over seven days. ClaudeMeter prints the per-bucket reset clock as a local timestamp ('-> resets Sat May 16 18:42 (in 2h)') in src/format.rs lines 90-113.

Did the Claude Code rate limit actually double in May 2026?

Only the five_hour float did. Anthropic announced on May 7, 2026 that the 5-hour rate limit doubled for Pro, Max, Team, and seat-based Enterprise, and peak-hour throttling was removed for Pro and Max. The weekly caps (seven_day, seven_day_sonnet, seven_day_opus, seven_day_oauth_apps) were not changed. In practice many heavy users now hit the weekly walls earlier in the week instead of bumping into the 5-hour wall mid-flow.

Why does ccusage say I have headroom right before Claude Code 429s?

ccusage reads ~/.claude/projects/<project>/<session>.jsonl on your machine and sums token counts against a price card. The plan limits Anthropic enforces live as the eight utilization floats on its server. The two are different data sources answering different questions. ccusage is good for 'what would these prompts have cost at API prices?' It cannot read the server quota because the server quota is not in your local logs. ClaudeMeter reads the server quota directly; running both is reasonable.

How do I see my real Claude Code rate-limit numbers before the 429?

Install ClaudeMeter: brew install --cask m13v/tap/claude-meter, then load the browser extension from the GitHub releases page once. The extension polls /api/organizations/{org}/usage every 60 seconds using your existing claude.ai cookies (no password, no token, no manual cookie paste) and POSTs the parsed snapshot to a localhost-only bridge on 127.0.0.1:63762 (BRIDGE constant in extension/background.js line 2). The menu-bar app redraws the four visible bars plus the four hidden floats. You can also run /Applications/ClaudeMeter.app/Contents/MacOS/claude-meter --json for a one-shot JSON dump in a terminal or tmux status line.

Does this work with Claude Code on the API tier, or only with Pro/Max?

Pro and Max only. The /api/organizations/{org_uuid}/usage endpoint is part of the claude.ai web account surface; it returns plan-utilization floats for subscription seats. API-key-only customers do not have a 'plan quota' in that sense, they have per-key rate limits that surface as 429 headers on the Anthropic API itself. ClaudeMeter is built for the subscription cohort because that is the cohort whose limits are invisible until they fire.

What does 'rate limit reached, please try again later' inside Claude Code actually mean?

It means your last prompt would have crossed 1.0 on one of the eight floats. The CLI does not tell you which float because Anthropic's 429 response body does not disambiguate. The only ways to find out are: (a) open DevTools on claude.ai/settings/usage and check the network call to /usage to see which field is at 1.0, (b) curl http://127.0.0.1:63762/snapshots with ClaudeMeter running and inspect the parsed snapshot, or (c) run claude-meter --json directly. Knowing which float fired matters because the reset clock is different for each bucket.

Is it safe to run a Rust binary that reads my claude.ai cookies?

ClaudeMeter is MIT-licensed open source; the entire data path is in /Users/<you>/claude-meter/src/. Two routes exist: the browser-extension route never touches your cookie jar (the extension calls the API with credentials: 'include' and posts the parsed snapshot to localhost), and the keychain route shells out to security find-generic-password to read Chrome Safe Storage on your own machine. No telemetry, no analytics, no network egress beyond claude.ai itself. The bridge listens on 127.0.0.1:63762 (loopback only), so nothing on your LAN can reach it.

Will Anthropic change the endpoint or block third-party readers?

The endpoint is undocumented and could change at any time. It has not changed in the year since claude.ai/settings/usage shipped. Because ClaudeMeter is a thin parser over the same JSON the Settings page renders, breakages tend to be field-shape changes that update with a one-line patch to src/models.rs. Anthropic has never blocked the endpoint behind a CSRF check or per-request token; the only auth is the same session cookie your browser already holds.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.