Claude Code's Opus 4.7 limit lives in one server field called seven_day_opus
Every other explainer quotes abstractions: “about 240 Opus prompts a week on Max”, “switch to Sonnet to save quota”, “use effort medium.” The actual gate is concrete. One utilization fraction, on one JSON endpoint, computed with a new 4.7 tokenizer that spends 1.0x to 1.35x more tokens on the same text. Here is the field, the endpoint, and how to watch it move while Claude Code is running.
The shape of the limit, in one sentence
Claude Code running on Opus 4.7 is throttled by two server-side utilization floats that must both stay below 1.0: five_hour (shared across every model you use) and seven_day_opus (Opus-only weekly). Both arrive on the same JSON payload at GET /api/organizations/{org_uuid}/usage. There is no per-version bucket, so Opus 4.7 and Opus 4.6 both write to seven_day_opus — the difference is how fast 4.7 fills it.
The anchor fact: here is the field, verbatim
The struct ClaudeMeter deserializes the response into declares every bucket the server returns. The Opus 4.7 gate is on line 23:
And here is the shape of the JSON the server actually returns on a live account. The bar labeled “Opus weekly” on claude.ai/settings/usage is drawn from the seven_day_opus object below:
What Opus 4.7 changed that fills the float faster
Six things in the Opus 4.7 release notes that change how fast seven_day_opus.utilization rises for the same Claude Code session you had a month ago on 4.6.
New tokenizer (1.0x to 1.35x)
The Opus 4.7 tokenizer maps the same English text to up to 35% more tokens than 4.6. Server-side accounting uses the 4.7 count, so the same prompt fills seven_day_opus faster than it did a month ago.
Adaptive thinking by default
Opus 4.7's adaptive thinking decides its own reasoning depth. Thinking output counts toward the Opus-only bucket. On the same effort level, 4.7 spends more thinking tokens than 4.6.
New xhigh effort level
The xhigh effort tier did not exist on 4.6. If Claude Code is set to it (or defaults promote it), each prompt's server-side cost rises, and seven_day_opus rises with it.
Rate limits raised to compensate
Anthropic publicly confirmed they raised subscriber rate limits on 4.7 to offset higher thinking token use. The denominator changed, but the field you watch (seven_day_opus.utilization) is still a single opaque fraction.
Thinking content hidden by default
Opus 4.7 omits thinking content from response payloads unless you opt in to summarized. That output is still generated and still billed against seven_day_opus, it just does not show up in your console log.
Sampling params removed
temperature, top_p, and top_k all 400 on Opus 4.7. This does not change quota math, but breaks old Claude Code configs and can cause retries that double-bill seven_day_opus if you do not catch them.
One Claude Code request, one bucket increment
The exact chain of effects from a Claude Code call on Opus 4.7 to the two utilization floats that gate your next request.
Claude Code -> seven_day_opus + five_hour
1. Claude Code sends Opus 4.7 request
Through your OAuth-authed claude.ai session. The request carries your org_uuid so the server knows which bucket set to update.
2. Tokenizer expands prompt 1.0x to 1.35x
The 4.7 tokenizer runs server-side. The same characters produce more tokens than they did on 4.6. That count is what lands in accounting.
3. Adaptive thinking generates thinking tokens
The model chooses its own reasoning depth. Thinking tokens count as output. If you requested summarized display, you see a summary; the full thinking is still billed.
4. Server increments seven_day_opus + five_hour
Both floats move. seven_day_opus is Opus-only (Sonnet traffic does not touch it). five_hour is shared. Weights include peak-hour, attachment cost, tool calls.
5. Rate limiter checks utilization >= 1.0
Trip on EITHER float and the next Claude Code request returns 429. The error does not name the bucket that tripped, so you have to watch both.
Everything that feeds the Opus float
None of these appear as separate fields in the response. They all collapse into one opaque utilization number, which is exactly why watching it live is the only reliable signal.
Inputs to seven_day_opus.utilization
Why local-token tools cannot give you this number
ccusage and Claude-Code-Usage-Monitor read ~/.claude/projects/**/*.jsonl and sum the tokens recorded in those files. That is genuinely useful for Claude Code spend accounting. It is not the number the rate limiter checks.
Three concrete gaps stop local-log tools from mirroring seven_day_opus. First: the Opus 4.7 tokenizer runs server-side, so the authoritative token count never lands in your JSONL at 4.7's expanded scale. Second: adaptive-thinking tokens are generated by the server. With the 4.7 default of display: omitted, the thinking content is not even in your response. Third: the peak-hour multiplier and plan-specific denominators are private to Anthropic.
All three land on the one float. The single endpoint that returns the post-weighting, post-tokenizer number is /api/organizations/{org_uuid}/usage. ClaudeMeter reads it every 60 seconds and surfaces the float verbatim.
Reproduce it yourself in one curl
Open DevTools on claude.ai/settings/usage, copy the Cookie header from the Network panel, and hit the endpoint directly. Filter to .seven_day_opus to see the field that gates Opus 4.7 on your account:
How ClaudeMeter renders it
The same field shows up in two places inside ClaudeMeter. In the CLI and menu bar it is printed by src/format.rs:
And the browser extension popup renders the row only when the field is present, because some accounts do not have it yet:
There is no inference, no transformation beyond the 0-to-1 vs 0-to-100 normalization. What Anthropic returns is what you see.
The concrete numbers
From the implementation and Anthropic's Opus 4.7 docs. No invented benchmarks.
What every prompt has to be true before it runs
Preconditions for a successful Opus 4.7 call
- seven_day_opus.utilization < 1.0 (Opus-only weekly float). This is the field whose ceiling is the specific reason Opus 4.7 requests 429.
- five_hour.utilization < 1.0 (shared across every model, including Sonnet). Claude Code cannot send any request, Opus or otherwise, when this is pinned.
- Your session cookie on claude.ai is still valid. All three fields come from the same /api/organizations/{org_uuid}/usage endpoint, authed with your browser session.
- Your extra_usage config, if enabled, is not out_of_credits. When overage runs out, Claude Code also stops even if both utilization floats are below 1.0.
Server truth vs local logs
Two different questions. Both have legitimate answers. Only one matches what Anthropic enforces on Opus 4.7.
| Feature | Local log tools | ClaudeMeter |
|---|---|---|
| Reads the server-enforced Opus quota | No, reads local JSONL | Yes, reads /api/organizations/{org_uuid}/usage |
| Sees seven_day_opus.utilization | Not available locally | Yes, surfaced verbatim |
| Accounts for Opus 4.7's 1.0x to 1.35x tokenizer | No, pre-tokenizer counts only | Yes, the server applies it before counting |
| Counts adaptive-thinking tokens you cannot see | No, omitted thinking is not in your JSONL | Yes, already baked into utilization |
| Counts peak-hour weighting | No, multiplier is server-private | Yes, already baked into utilization |
| Reads your local ~/.claude/projects JSONL | Yes, this is its primary source | No, not the source of truth for quota |
| Works offline | Yes | No, polls claude.ai |
| Requires a claude.ai session | No | Yes |
Everything Opus 4.7 touches that a local counter cannot see
The server is the only thing with a complete view of what lands in seven_day_opus. ClaudeMeter is a thin wrapper on the same endpoint the Settings page calls.
utilization
The honest caveat
The endpoint is internal and undocumented. Field names have been stable for many months, but Anthropic could rename, split, or remove seven_day_opus in any release. ClaudeMeter deserializes into a strict Rust struct, so if the shape changes the menu bar surfaces a parse error and we patch the same day. There is also a realistic chance Anthropic will add a separate Opus-4.7-only bucket at some point; today, 4.7 and 4.6 share the same float. Until either of those things happens, this is the field that enforces the cap.
Watch your Opus 4.7 float live
ClaudeMeter sits in your macOS menu bar and refreshes the two floats that gate Claude Code every 60 seconds. Free, MIT licensed, no cookie paste, reads the same JSON claude.ai/settings/usage reads.
Install ClaudeMeterFrequently asked questions
Does Claude Code on Opus 4.7 use the same usage bucket as Sonnet?
Partially. Every Claude Code request, regardless of model, counts against the shared five_hour bucket on /api/organizations/{org_uuid}/usage. Opus 4.7 requests also count against a separate seven_day_opus bucket that Sonnet requests do not touch. That second bucket is why you can have plenty of Sonnet headroom and still get rate-limited on Opus: the Opus-only float hit 1.0 while the shared float was nowhere near. It is declared in claude-meter/src/models.rs line 23 as pub seven_day_opus: Option<Window>.
How does the new Opus 4.7 tokenizer change my usage?
Anthropic's what's-new doc for Opus 4.7 says the new tokenizer maps the same text to 1.0x to 1.35x as many tokens (up to ~35% more, varies by content). The tokenizer change does not add a new field to the usage payload. It makes seven_day_opus.utilization climb faster for the same prompt. If a coding session used 40% of your Opus weekly on 4.6, the same session can use 40% to 54% on 4.7. The server does not tell you which factor applied; only the aggregate utilization number moves.
What about adaptive thinking, does that also count?
Yes, and it is the bigger effect for most Claude Code users. Opus 4.7 uses adaptive thinking by default when the caller opts in, and burns more thinking tokens than 4.6 at the same effort level. Thinking tokens are real output tokens from the server's point of view and flow into the same seven_day_opus float. Anthropic announced they raised plan rate limits to offset this, but the weighting still lands on one opaque utilization number. You cannot back it out after the fact.
Where exactly does Anthropic store the Opus-only weekly quota?
In the JSON at GET https://claude.ai/api/organizations/{your_org_uuid}/usage under the key seven_day_opus. The shape is { utilization: number, resets_at: ISO8601 } — same Window struct as five_hour and seven_day, defined at claude-meter/src/models.rs lines 3-7. The bar on claude.ai/settings/usage labeled 'Opus weekly usage' is drawn from this exact field.
Can ccusage or Claude-Code-Usage-Monitor show me my Opus 4.7 quota?
No. Those tools read ~/.claude/projects/**/*.jsonl and sum local tokens. Local token counts miss three things the server applies before it writes to seven_day_opus: the 4.7 tokenizer's 1.0x to 1.35x expansion (counted server-side), thinking tokens (generated server-side and not always written to JSONL in full), and any peak-hour weighting Anthropic has layered on. The only number that matches what the Opus-rate-limiter checks is the one returned by /api/organizations/{org_uuid}/usage.
Why does the 'Opus weekly' bar on Settings sometimes jump without me sending anything?
Because Claude Code running in a background agentic loop keeps sending requests while you are not in the chat. Opus 4.7 also tends to produce more regular progress updates and fewer subagents by default, which changes the shape of a session's token bill without changing anything you typed. ClaudeMeter polls the endpoint every 60 seconds so you see the float move while the session runs.
Does 'switching to Sonnet' actually free up Opus quota?
It frees up seven_day_opus, yes. It does not free up five_hour, because five_hour aggregates across models. So if a Sonnet-heavy day burns five_hour, you can be Opus-healthy and still locked out of Claude Code because the shared 5-hour float is pinned. Two floats, one AND gate. Both have to stay below 1.0.
Is the utilization field 0-to-1 or 0-to-100?
Both, inconsistently, across buckets in the same payload. We have seen five_hour returned as 0.72 next to seven_day_opus returned as 94.0 in the same response. The extension normalizes with one clamp at popup.js:6-11: u <= 1 ? u * 100 : u. If you write your own client and skip that clamp, a bucket at 0.94 will render as 'less than 1 percent' and you will walk into a 429 on your next Opus 4.7 request.
Does task_budget or effort=medium reduce what lands in seven_day_opus?
Yes, but only indirectly. task_budget is an advisory token cap the model sees as a running countdown; effort=medium cuts adaptive-thinking spend. Both reduce the output tokens the model generates, so they reduce what the server writes to seven_day_opus. Neither tells you how much you saved. The honest way to measure savings is to compare seven_day_opus.utilization between two comparable sessions with and without the budget or with different effort levels.
Is seven_day_opus the only Opus-specific field?
Yes. There is a seven_day_sonnet field as well (Sonnet-only weekly) and a shared seven_day (all models combined), but no per-model 5-hour bucket and no per-version bucket for 4.7 vs 4.6. From the server's perspective, Opus 4.7 and Opus 4.6 both write to seven_day_opus. The only way to tell 4.7 apart is indirectly: your float rises faster than it did on 4.6 for the same workload.
Where does this leave me if I'm on a Max plan?
The field names are the same. What changes is the denominator baked into utilization. Max 5x and Max 20x have higher ceilings, so the same absolute workload produces a lower fraction. ClaudeMeter reads the fraction verbatim, so the plan is implicit in the numbers you see. The rate limiter trips at utilization >= 1.0 regardless of plan.
Keep reading
Claude Pro's 5-hour window is one float on a sliding clock
The 5-hour bucket is not a 45-message counter and it does not reset at your first prompt plus 5h. Where the field lives and how the clock slides.
The Claude rolling window cap is seven windows, not one
The same /usage endpoint returns seven rolling buckets: five_hour, seven_day, seven_day_sonnet, seven_day_opus, and three more. Hit any one, get throttled.
ClaudeMeter vs ccusage
ccusage counts tokens in ~/.claude/projects. ClaudeMeter reads seven_day_opus. Different questions, different answers, and only one of them matches the rate limiter.
Seeing a different shape on seven_day_opus?
If your payload returns extra Opus-specific fields, a 4.7-only bucket, or a utilization that disagrees with Settings, send it over. We map every variant we see.
Book a 15-minute call →