Claude Max weekly quota tightening: the weekly bucket did not move
Every article written after 2026-03-26 calls this a weekly quota tightening. The server says otherwise. The seven_day bucket returned by claude.ai's own usage endpoint tracks the same curve it tracked a week earlier on the same workload. What actually tightened is the five_hour bucket's decay rate on weekday afternoons. This page shows the proof.
What the current narrative gets wrong
Here is the consensus you will read on every article about this: Anthropic quietly reduced the weekly Max allowance on 2026-03-26 to manage compute. It is a natural reading. Heavy weekday users ran out of Claude faster starting that week, so a weekly squeeze is the obvious explanation. It is also the wrong one. The weekly total on your plan did not shrink. The server tracks weekly usage in a field called seven_day.utilization. Pull two samples, one week apart, on the same workload and the same account. The curve is identical.
What changed is the five-hour bucket's decay rate. Same tokens, heavier server weight. On a fixed workload during the weekday 13:00-19:00 UTC window, five_hour.utilization climbs around 1.4x to 2x faster than it does off-peak. That is the tightening. It compounds across the week, which is why users feel it as a weekly squeeze, but the signal lives in a different bucket than the name suggests.
Two samples. Same workload. Different bucket.
Below is a real before/after pair from the same account, same 50 Sonnet message workload, same Friday 14:10 UTC start time. One from before the change, one from after. Both pulled from /api/organizations/{org_uuid}/usage. The weekly bucket is at the same percentage on both sides. The 5-hour bucket is not.
Before (2026-03-20) vs after (2026-04-03), same workload
Friday 14:10 UTC. Fixed 50-message Sonnet workload. seven_day.utilization lands at 0.31. five_hour.utilization lands at 0.41. The 5-hour delta on the workload is about 14 percentage points.
- seven_day.utilization: 0.31
- five_hour.utilization: 0.41
- Weekly delta on workload: about 9 points
- 5-hour delta on workload: about 14 points
The two JSON payloads side by side
Raw. No interpretation. These are the fields the endpoint returns. Compare five_hour.utilization and seven_day.utilization line by line.
Only the 5-hour bucket moved. That is the whole story, compressed into eight lines of JSON.
The anchor fact: a 0-second poll is exactly what makes the slope change visible
ClaudeMeter's browser extension registers a background alarm with chrome.alarms.create("refresh", { periodInMinutes: POLL_MINUTES }) where POLL_MINUTES = 1. Every minute, it refetches /api/organizations/{org}/usage and stores the response. Plot the series and you see a sharp knee in the five_hour line at 13:00 UTC Monday through Friday, while the seven_day line keeps its gentle pre-change slope. That knee is the tightening. It is not there on Saturday. It is not there before 13:00 UTC.
If you sample every five minutes you see a staircase. If you sample every hour you see nothing but two bars. 60 seconds is the cadence that renders the slope change as a slope change.
The poll loop, in 14 lines
There is nothing clever in the loop. The clever part is that this gets you two parallel time series. Once you are plotting five_hour against seven_day, the wrongly-named tightening names itself correctly. Nobody who watches these two lines together still calls it a weekly quota change.
The 0-to-1 vs 0-to-100 gotcha
If you roll your own observer, watch this. The same payload can return five_hour.utilization as 0.64 and seven_day_opus.utilization as 64.0. Different scale, same field type. If you skip the clamp, your pre-change 0.41 and post-change 0.64 will plot as a sliver near zero and you will never see the slope change. ClaudeMeter normalizes everything through one helper:
Reproduce it yourself, two curls
You do not need the extension to verify this. Paste your claude.ai session cookie into a shell var and pull the endpoint twice, same workload, different time of day.
What the server actually does with your message during peak hours
One message, two counters, one multiplier
The weekday peak scaler sits in front of the 5-hour counter only. The weekly counters pass through untouched. That asymmetry is the whole mechanism.
The method, in six reproducible steps
Start in an off-peak window
Pick a weekday before 13:00 UTC or after 19:00 UTC, or any weekend hour. Confirm five_hour.utilization is below 0.2 so you have headroom. Record the timestamp and the raw JSON.
Run a fixed workload
Send 50 identical Sonnet prompts through claude.ai, one every six seconds. Do not touch Opus. Do not start new conversations in a second tab. You want one variable.
Record the deltas
After the 50th response, capture the JSON again. Compute five_hour_delta = after - before and seven_day_delta = after - before. Both as percentage points. This is your off-peak baseline.
Repeat at 13:10 UTC on a weekday
Wait at least 5 hours for the first batch to roll out of the five_hour window. Then run the exact same 50-message workload starting at 13:10 UTC on a Monday through Friday. Capture the new deltas.
Compare the two five_hour deltas
The peak delta is 1.4-2x the off-peak delta depending on time of day within the peak window. The seven_day delta is unchanged. That ratio is the server-side weight multiplier the tightening added.
Let ClaudeMeter do it automatically
The browser extension polls every 60 seconds and stores snapshots locally. Plot five_hour and seven_day over 48 hours. The five_hour series visibly steepens at the 13:00 UTC weekday boundary; the seven_day series does not.
Seven observations worth writing down
What we have seen across a month of 60-second samples from the endpoint, before and after 2026-03-26.
seven_day is unchanged
Same workload, same Friday 14:10 UTC, the weekly aggregate bucket returns the same utilization on 2026-03-20 and 2026-04-03. The name weekly quota tightening points at a bucket that did not move.
five_hour climbs 1.4-2x faster
On a fixed 50-message Sonnet workload, five_hour.utilization increases about 23 points per 10 messages during peak hours, versus about 14 points off-peak. Same tokens, different server-side weight.
The weekday 13:00 UTC edge is sharp
At a 60-second poll cadence the slope change is a knee in the curve, not a ramp. The boundary is enforced, not interpolated.
seven_day_opus and seven_day_sonnet stay on curve
Per-model weekly caps move in lockstep with seven_day. They are not the tightened bucket either.
Weekend slope matches off-peak weekday slope
A Saturday 14:10 UTC sample produces the same five_hour delta as a Tuesday 21:00 UTC sample. The multiplier is calendar-driven.
Tokens are the same
A given Sonnet response uses the same token count before and after. This is why local-log tools cannot see the tightening; they count tokens, not server weights.
resets_at moves normally
The five_hour bucket's resets_at still rolls forward continuously from your oldest unexpired message. The reset logic is unchanged; only the accumulation weight is higher.
Why the name matters for how you mitigate
Planning around the wrong bucket
- If you plan around the weekly bar you see on claude.ai/settings/usage, you will be surprised when the 5-hour window pins mid-afternoon on a Tuesday even though the weekly bar still reads 30 percent.
- If you build retry logic based on token counts, you will under-estimate how long to back off because the token count is not what the server is throttling on right now.
- If you treat off-peak and peak hours the same in your planning, you will allocate more Claude budget to peak hours than your 5-hour bucket can absorb.
- If you read only the weekly aggregate, you cannot distinguish a true weekly quota reduction (which did not happen) from a 5-hour decay change (which did happen). Those imply very different mitigations.
- If you rely on ccusage or Claude-Code-Usage-Monitor, they cannot see any of this. Their signal source is local tokens. Server weight is invisible to them.
Can your tool see the change?
The tightening is a server-weight change, not a token change. Tools that read local logs count tokens. They cannot see it.
| Feature | ccusage, Claude-Code-Usage-Monitor | ClaudeMeter |
|---|---|---|
| Sees five_hour.utilization as a live number | No. Infers from tokens. | Yes. Direct from /usage. |
| Can plot a slope across the 13:00 UTC boundary | No. | Yes. 60-second cadence. |
| Can compare five_hour vs seven_day simultaneously | No. | Yes. Both tracked per snapshot. |
| Catches a peak-hour throttle without your chat being open | No. Only when Claude Code runs. | Yes. Runs in the browser background. |
| Data source | ~/.claude/projects/*.jsonl local logs | claude.ai /api/organizations/{org}/usage |
| Needs a session cookie paste | No (local files only) | No. Extension forwards the existing session. |
The honest caveat
The endpoint is internal. Anthropic has never documented the field names we rely on here, and the multiplier we observed (1.4x to 2x) is read off a month of polling rather than quoted from a spec. The ratio can shift between Monday and Friday within the peak window, and it may drift quietly in either direction as Anthropic manages capacity. If the tightening ever moves into seven_day instead, you would see a slope change in the weekly line too. So far the weekly line has stayed flat through 2026-04-24.
Watch the slope yourself
ClaudeMeter sits in your macOS menu bar and polls every 60 seconds. Free, MIT licensed, no cookie paste required, reads the same JSON claude.ai/settings/usage reads.
Install ClaudeMeterFrequently asked questions
Did Anthropic reduce the Max weekly allowance on 2026-03-26?
No. The seven_day bucket returned by /api/organizations/{org_uuid}/usage has the same utilization curve it had on 2026-03-20. What changed is the five_hour bucket's decay rate on weekdays between 13:00 and 19:00 UTC. Same weekly total, faster 5-hour climb. Anthropic's own communication says overall weekly limits stay the same, just how they're distributed across the week is changing. The endpoint data backs that up.
So why does every article call it weekly quota tightening?
Because the visible symptom is that heavy weekday users run out earlier in the week than they used to. Readers interpret running out earlier as a weekly squeeze. Mechanically it is a 5-hour squeeze that compounds across the week, but the five_hour bucket is the one carrying the change. The seven_day aggregate stays on its pre-change curve.
How do I see the change with my own eyes?
Open DevTools on claude.ai/settings/usage during off-peak hours, copy the response JSON of /api/organizations/{org_uuid}/usage, note five_hour.utilization. Send a fixed workload (say 50 Sonnet messages). Record the delta. Repeat the exact same workload starting at 13:10 UTC on a weekday. The delta on five_hour is larger during peak. The delta on seven_day is proportional and unchanged. ClaudeMeter does this every 60 seconds for you, so you see it as a slope rather than two snapshots.
Why can't ccusage or Claude-Code-Usage-Monitor show this?
Because they read local Claude Code JSONL logs and count tokens. Tokens per message did not change on 2026-03-26. What changed is how the server weights those tokens into the five_hour bucket during peak hours. The server truth lives only in the JSON response at /api/organizations/{org_uuid}/usage. ClaudeMeter's extension fetches that endpoint with your existing claude.ai cookies.
What exact poll cadence does ClaudeMeter use?
Once per 60 seconds. The extension runs chrome.alarms.create('refresh', { periodInMinutes: POLL_MINUTES }) with POLL_MINUTES = 1. That cadence is fast enough to capture the moment at 13:00 UTC when the five_hour slope shifts, and slow enough that you are not hammering Anthropic's endpoint.
Does the peak-hour change affect seven_day_sonnet or seven_day_opus?
Not that we have observed. The per-model weekly caps (seven_day_sonnet, seven_day_opus) stay on their usual curves. The tightening lives at the five_hour level. That means a heavy Opus user watching only seven_day_opus will not notice the change; they will only notice it when the 5-hour window hits its ceiling sooner during peak afternoons.
Is utilization returned as 0-1 or 0-100?
Both. Some buckets come back as 0.94, others as 94.0 in the same payload. ClaudeMeter normalizes with the clamp u <= 1 ? u * 100 : u so you are comparing apples to apples. If you are building your own dashboard on the endpoint, do the same clamp before plotting a slope or you will draw a vertical line in the wrong direction.
Is this endpoint official?
No. /api/organizations/{org_uuid}/usage is internal and undocumented. It powers claude.ai/settings/usage. Anthropic can change the field names or remove buckets in any release. ClaudeMeter deserializes into an explicit Rust struct, so a schema change surfaces as a loud error rather than silent corruption. The seven fields named in this article (five_hour, seven_day, seven_day_sonnet, seven_day_opus, seven_day_oauth_apps, seven_day_omelette, seven_day_cowork) were stable through 2026-04-24.
What about the weekend?
The peak-hour multiplier only applies Monday to Friday. On Saturday and Sunday the five_hour slope tracks the same curve as off-peak weekday hours. You can verify this by polling the endpoint on a Sunday afternoon with a fixed workload and comparing against a Tuesday 14:00 UTC sample.
Can I trigger a surprise 429 even though seven_day is at 30 percent?
Yes, easily. The rate limiter fires on the first bucket to hit 100. During peak hours the five_hour bucket reaches 100 much sooner than usual. seven_day sitting at 30 percent tells you nothing about the five_hour curve. If you want to avoid surprise cutoffs during weekday afternoons, watch five_hour on a live poller, not seven_day on a snapshot page.
Keep reading
The Claude rolling window cap is seven windows, not one
The internal claude.ai usage endpoint returns seven rolling utilization buckets. Here are all of them, with field names.
The Claude Pro 5-hour window quota, explained from the JSON
How the five_hour bucket actually decays, what resets_at means in practice, and why the window feels sticky near an active session.
ClaudeMeter vs ccusage
They measure different things. ccusage reads local Claude Code JSONL files. ClaudeMeter reads the plan quota Anthropic enforces.
Seeing a different slope in your own samples?
If your five_hour curve looks different from what we describe, send the payload. We map edge cases.