Claude Code rolling 5h + weekly quota: it is four clocks, not two.
If you only use Claude Code (no browser chat), the bucket that 429s you first is almost never the one displayed on claude.ai/settings/usage. It is seven_day_oauth_apps, the OAuth-clients-only weekly cap, and the Settings page does not render it as a bar. Here is the four-clock model, the field names, and the live read path.
Direct answer (verified 2026-05-13)
For Claude Code, the rolling 5h + weekly quota is four independent rolling buckets, each a utilization float between 0.0 and 1.0 with its own resets_at: five_hour, seven_day, seven_day_opus, and seven_day_oauth_apps. Any one at 1.0 fires the next 429. The fourth one fills only from Claude Code + MCP traffic; browser chat does not touch it. The Settings page hero bar maps to seven_day only. Source: github.com/m13v/claude-meter/src/models.rs.
The struct that names every bucket
The open-source claude-meter Rust app deserializes the same JSON claude.ai/settings/usage fetches on page load. Seven Window fields, one per enforcement bucket. For a Claude Code user, four of them are the ones that 429 you (five_hour, seven_day, seven_day_opus, seven_day_oauth_apps).
What the JSON actually looks like, mid-week
A Claude Code-heavy account, no browser chat this week. The Settings page renders 62 percent. /usage from inside Claude Code prints Session 28%, Week 62%. The bucket that fires the next 429 is seven_day_oauth_apps at 94 percent, which neither display shows.
Why Claude Code is the case where this matters
Browser chat and Claude Code share the first three buckets. They diverge on the fourth. seven_day_oauth_apps fills only from OAuth-authenticated clients, which is Claude Code and MCP. claude.ai web uses cookie auth and does not touch it. So a user who does 100 percent of their work in Claude Code is charging the bucket twice (seven_day and seven_day_oauth_apps) on every turn, while a browser-only user charges only once.
| Feature | claude.ai web chat (cookie) | Claude Code (OAuth) |
|---|---|---|
| five_hour | Charged. Every Claude Code message lands here on a 5-hour rolling clock. | Charged. Every browser chat message lands here too. Shared bucket. |
| seven_day (overall) | Charged. Blended weekly across all your traffic. | Charged. Same bucket. Settings page hero bar maps to this one. |
| seven_day_opus | Charged on Opus 4.5 and Opus 4.7 turns only. Adaptive thinking tokens count. | Charged on Opus chats only. |
| seven_day_sonnet | Charged on Sonnet turns only. | Charged on Sonnet chats only. |
| seven_day_oauth_apps | Charged. Claude Code traffic is OAuth-authenticated. So is MCP. | Not charged. claude.ai chat uses cookie auth, not OAuth. |
The four clocks, one section each
Each bucket is a rolling float with its own reset. A 5-hour reset does not advance the weekly clocks, and a weekly reset does not unlock the 5-hour. They all run in parallel.
1. five_hour — the 5-hour rolling window.
Starts 5 hours after your first message in the current rolling window. Every Claude Code turn and every browser chat message charges it. Doubled on Pro, Max, Team, and seat-based Enterprise on May 6 2026. resets_at lands roughly 5 hours from your first message of the window, not at a fixed clock time. This is the one /usage prints as 'Session' and the one Settings shows as the small bar.
2. seven_day — the overall 168-hour bucket.
Rolls 168 hours after the first message of the weekly cycle. Charged by every model, every client. The Settings page hero bar (the big horizontal one with the percent on top) maps to this field. It was not doubled on May 6. For Claude Code-heavy accounts this number is almost always lower than the per-model and OAuth-apps buckets, which is why /settings/usage misleads people.
3. seven_day_opus — Opus-only weekly.
Every Opus 4.5 and Opus 4.7 turn charges this in addition to seven_day. Adaptive thinking is on by default for Opus 4.7, and thinking tokens count as real output tokens for the float. A Claude Code session that runs heavy refactors on Opus eats seven_day_opus roughly 4x faster than seven_day_sonnet on the same task. The Settings page does not surface this as its own bar.
4. seven_day_oauth_apps — the Claude Code-only weekly.
The bucket that fills only from OAuth-authenticated traffic: Claude Code and MCP clients. Browser chat does not touch it. For users who do all their work in Claude Code and never open claude.ai web, this bucket fills fastest because every turn charges it AND charges seven_day. claude.ai/settings/usage does not render it as a bar. You can see it on the raw /usage JSON or in any tool that polls that endpoint.
5. extra_usage — the optional fifth gate.
Not a rolling window, a dollar cap. If you enabled metered billing, prompts past plan caps flow through at API prices up to your monthly_credit_limit. When used_credits crosses the cap, /api/organizations/{org_uuid}/overage_spend_limit returns out_of_credits: true and a disabled_until timestamp. So you can clear all four bucket walls and still 429 on the dollar cap. claude-meter shows this as a separate row with a BLOCKED suffix when it fires.
What the live meter shows
Same JSON, formatted as one row per bucket. This is what claude-meter status prints, and what the macOS menu bar dropdown renders. The hot bucket is the one your eye lands on.
The four lines that poll the JSON
The browser extension reuses your existing claude.ai cookie via credentials: "include" on a single fetch. Once a minute. The four floats come back on the same request. No interruption to whatever Claude Code is doing.
Reading your own state in 60 seconds
You do not need claude-meter installed to check. The endpoint is reachable to your existing cookie and the JSON is human-readable. Five steps.
Open the live JSON in DevTools.
Visit claude.ai/settings/usage, open DevTools (Cmd+Option+I), switch to the Network tab, filter on /usage, refresh. The response of /api/organizations/{org_uuid}/usage is the full enforcement state. Click the Response tab.
Find the four numbers that matter for Claude Code.
five_hour.utilization, seven_day.utilization, seven_day_opus.utilization, seven_day_oauth_apps.utilization. Each is a float between 0.0 and 1.0. The Settings page only renders seven_day as a visible bar, so check the other three by eye.
Whichever is highest is your wall.
The 429 follows the max. If seven_day_oauth_apps is 0.94 and seven_day is 0.62, you will 429 from oauth_apps. The Settings bar will keep showing 62 percent right up until the 429 fires.
Read resets_at on the hot bucket, not the visible one.
Each Window has its own resets_at. Waiting for the 5-hour reset will not unlock seven_day_oauth_apps. If oauth_apps is the wall, you wait until its resets_at, drop the rest of the week's work to claude.ai web (which does not charge oauth_apps), or enable extra usage.
Or skip the manual polling.
claude-meter (MIT, github.com/m13v/claude-meter) pins each bucket to the macOS menu bar and refreshes every 60 seconds via the browser extension. No cookie paste, no expiring token. brew install --cask m13v/tap/claude-meter, install the extension from the releases page, visit claude.ai once.
Stuck on the OAuth-apps bucket every week?
Book 15 minutes. Walk through your live JSON, see which of the four buckets is actually bottlenecking your Claude Code loop, and pick a Sonnet/Opus split (or a browser-chat overflow) that holds for the week.
Frequently asked questions
How do the rolling 5h and weekly quotas work for Claude Code?
Claude Code charges four independent rolling buckets on every turn. five_hour is a 5-hour sliding window across all your Anthropic activity. seven_day is the overall 168-hour rolling cap. seven_day_opus is the Opus-only 168-hour cap. seven_day_oauth_apps is the 168-hour cap that fills only from OAuth clients, which means Claude Code and MCP traffic; claude.ai browser chat does not touch it. Each is a utilization float between 0.0 and 1.0 with its own resets_at timestamp. Any one at 1.0 returns the next 429. The endpoint is GET claude.ai/api/organizations/{org_uuid}/usage and the Rust struct that declares every field is at src/models.rs lines 18-28 in github.com/m13v/claude-meter.
Why am I rate limited when /usage says 41% and the Settings page says 62%?
Because /usage and the Settings page hero bar both surface seven_day (the overall weekly bucket), but the 429 follows whichever of the four buckets is highest. For a Claude Code-heavy account that does no browser chat, the bucket climbing fastest is usually seven_day_oauth_apps. It can sit at 0.94 while seven_day reads 0.62 because seven_day is a blended average across Claude Code, browser chat, and any other OAuth client traffic on your org. The Settings page does not render seven_day_oauth_apps as its own bar, so the bucket biting you is invisible until you open DevTools or run a tool that reads the full JSON.
Are the 5-hour and weekly clocks independent?
Yes. The 5-hour clock rolls 5 hours after your first message in the rolling window. Each weekly clock rolls 168 hours after the first message of that weekly cycle, separately per bucket. A 5-hour reset does not advance the weekly clock, and a weekly reset does not unlock the 5-hour bucket. Both timestamps come back on the same JSON response as resets_at. claude-meter renders each as a relative duration so you can see which one bites first.
Did the May 6 2026 rate-limit doubling apply to the weekly quota too?
No. Anthropic doubled the rolling 5-hour limit on Pro, Max, Team, and seat-based Enterprise plans on May 6 2026. The weekly caps were not doubled. So Claude Code users on Max see roughly 2x the 5-hour throughput but the same weekly headroom. The most common surprise after May 6 is the 5-hour bar looking healthy while seven_day_opus or seven_day_oauth_apps quietly climbs past 90 percent earlier in the week than it used to.
Why does ccusage say 5% used while Claude Code 429s me?
Different ledgers. ccusage walks ~/.claude/projects/<project>/<session>.jsonl on your disk and totals input_tokens plus output_tokens against a price card. That gives you a faithful local token count and dollar estimate. The four utilization floats live on Anthropic's server, are weighted by peak-hour multipliers, factor in attachments and tool-call overhead, and include any browser-chat traffic the JSONL files never see. ccusage and a server-truth meter answer different questions on purpose. Run both.
What is the fastest way to see all four floats without installing anything?
Open claude.ai/settings/usage in Chrome. Open DevTools (Cmd+Option+I), switch to the Network tab, filter on /usage. Refresh the page. The fetch on page load returns the full JSON with every Window field. Click the Response tab to see the entire enforcement state. Whichever utilization is closest to 1.0 is the bucket that will 429 your next prompt. The fields you care about for Claude Code are five_hour, seven_day, seven_day_opus, and seven_day_oauth_apps.
Will Anthropic block tools that poll /api/organizations/{org_uuid}/usage?
It is your own session calling the same endpoint claude.ai/settings/usage already calls every time you open the page. claude-meter polls once per minute per browser, well below normal browsing traffic. The endpoint is undocumented, which means Anthropic can rename fields, not that they prohibit reading them. The Rust types in src/models.rs declare every Window field as Option, so when the JSON shape changes the next release patches the new fields in one line.
If I turn on extra usage / metered billing, do these four limits stop applying?
They convert, they do not vanish. With metered billing on, prompts past plan caps go through at standard API prices until you hit your monthly_credit_limit. When used_credits crosses that cap, GET /api/organizations/{org_uuid}/overage_spend_limit returns out_of_credits: true and a disabled_until timestamp. So you stop being rate-limited by a plan bucket and start being rate-limited by a dollar cap. Both are 429s. claude-meter renders the dollar cap as a separate Extra usage row with a BLOCKED suffix when it fires.
What is the quickest install if I want this live in the menu bar?
brew install --cask m13v/tap/claude-meter to install the macOS menu bar app, install the browser extension from github.com/m13v/claude-meter/releases, then visit claude.ai once. The extension hands the live claude.ai session to the menu bar app, so there is no cookie paste. Numbers refresh every 60 seconds and match claude.ai/settings/usage exactly because the source endpoint is the same.
More on Claude Code's rolling-window enforcement.
Related guides
Claude Max rolling 5-hour weekly limit: the two limits are actually four
Same idea, zoomed in on Max plans specifically. All seven buckets named, the May 6 2026 doubling, and how to read the live JSON.
Claude Code rolling 5-hour usage: three ledgers, three answers
/usage is a snapshot. ccusage reads local JSONL. The float that 429s your loop is on the server and counts browser chat too. Which tool reads which.
Claude Code weekly quota meter (vs. typing /usage every 10 minutes)
Open-source menu bar polls the same endpoint /usage reads, every 60 seconds, without breaking your agentic loop.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.