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.

M
Matthew Diakonov
9 min read
4.9from Sourced from the live claude.ai usage endpoint
Field name from claude-meter/src/models.rs line 23
Same JSON the Settings page itself fetches
Verifiable in 30 seconds with one curl

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:

claude-meter/src/models.rs

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:

claude.ai/api/organizations/{org_uuid}/usage

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

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

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

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

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

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

Your prompt
Adaptive thinking
xhigh effort
Tool calls
Attachments
Peak-hour multiplier
seven_day_opus.utilization
Settings 'Opus weekly' bar
Rate limiter (>= 1.0 trips 429)
ClaudeMeter 7d Opus row

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:

claude.ai/api/organizations/{org_uuid}/usage

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:

claude-meter/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:

claude-meter/extension/popup.js

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.

0utilization floats that must stay below 1.0
0endpoint that returns both
0%max token expansion on the 4.7 tokenizer
0sClaudeMeter poll cadence

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.

FeatureLocal log toolsClaudeMeter
Reads the server-enforced Opus quotaNo, reads local JSONLYes, reads /api/organizations/{org_uuid}/usage
Sees seven_day_opus.utilizationNot available locallyYes, surfaced verbatim
Accounts for Opus 4.7's 1.0x to 1.35x tokenizerNo, pre-tokenizer counts onlyYes, the server applies it before counting
Counts adaptive-thinking tokens you cannot seeNo, omitted thinking is not in your JSONLYes, already baked into utilization
Counts peak-hour weightingNo, multiplier is server-privateYes, already baked into utilization
Reads your local ~/.claude/projects JSONLYes, this is its primary sourceNo, not the source of truth for quota
Works offlineYesNo, polls claude.ai
Requires a claude.ai sessionNoYes

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.

seven_day_opus
utilization
4.7 tokenizer
adaptive thinking
xhigh effort
tool calls
peak-hour
attachments

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 ClaudeMeter

Frequently 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.

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