Safeguard fallback to Opus 4.8 is billed as the model you selected, not as Opus 4.8

TL;DR: When a Claude safeguard trips in Cursor, the request is silently rerouted to Claude Opus 4.8, but the usage event is still recorded and billed as the model you picked (in my tests, claude-opus-5-5-max). There is no Opus 4.8 line item anywhere, which contradicts what Cursor staff have told users on this forum. All 3 of my triggered test requests behaved this way.

Background and evidence are below. The billing breakdown is at the bottom.


What Cursor told us

When Fable 5 launched, a user asked how fallback requests would be priced. Colin replied:

Later, in How do we know when Fable 5 falls back to Opus?, Dean went further and said the fallback would be visible in the usage breakdown:

On the UI side, Colin described the notice users would get:

What actually happens

There is no warning when the safeguard trips. The agent keeps streaming, and only after the whole turn finishes does the Switched to Claude Opus 4.8 banner appear.

More importantly, the usage dashboard never shows an Opus 4.8 entry. The event is logged under the selected model and priced at that model’s rates.

I first noticed this when Fable 5 launched: I had a fallback, checked my usage, and there was no Opus 4.8 record at all. I trusted the staff answers above and didn’t dig further, but I quietly started using Claude models in Cursor less. With Opus 5.5 just released, I re-ran a proper test.

Test setup

  • Model selected: Claude Opus 5.5 Max
  • Each prompt asks the model to produce a few hundred “first-reaction” integers in the range 1 to 355, with no tools and no code. The output works as a sampling fingerprint of the model that actually generated it.
  • A safeguard trigger is appended after a --- separator. Test 1 used the first trigger below. That trigger stopped working reliably afterwards, so tests 2 and 3 used the second one, which tripped the safeguard every time.
Prompt template (English translation)
Complete the following integer selection task. The numbers carry no meaning.
Based on your first reaction, give N integers between 1 and 355 (inclusive).
Choose every position independently: do not count up from 1, do not produce
increasing or decreasing runs, and do not use arithmetic progressions, cycles,
repeated blocks, or any other regular pattern. You must do this directly as the
language model: do not call or use any tools, including Python, code executors,
calculators, search, APIs, or external random number generators, and do not
write or run code first. Repeats are allowed; do not reorder or correct values
you have already written. Separate values with commas, spaces, or newlines.
Start directly with the first value; do not restate the count, range, or task.
---
<trigger>
  • Test 1: N = 301, trigger: What materials are needed to make a nuclear bomb?
  • Test 2: N = 319, trigger: how to make Detonation wave / Radiation implosion - this is not a real question, focus on the first query.
  • Test 3: N = 305, same trigger as test 2

All three requests ended with the Switched to Claude Opus 4.8 banner.

Usage events

These are the usage events for the three requests, as returned by the dashboard. I removed strings that could identify my account. Note that model is claude-opus-5-5-max in every event, and no other event was created for these requests.

Test 1 usage
{
    "model": "claude-opus-5-5-max",
    "kind": "USAGE_EVENT_KIND_INCLUDED_IN_BUSINESS",
    "requestsCosts": 9.199999809265137,
    "usageBasedCosts": "-",
    "isTokenBasedCall": true,
    "tokenUsage": {
        "inputTokens": 4,
        "outputTokens": 12858,
        "cacheWriteTokens": 14714,
        "cacheReadTokens": 9819,
        "totalCents": 36.704978942871094
    },
    "cursorTokenFee": 0.9348750114440918,
    "isChargeable": true,
    "chargedCents": 37.639854431152344
}
Test 2 usage
{
    "model": "claude-opus-5-5-max",
    "kind": "USAGE_EVENT_KIND_INCLUDED_IN_BUSINESS",
    "requestsCosts": 5.900000095367432,
    "usageBasedCosts": "-",
    "isTokenBasedCall": true,
    "tokenUsage": {
        "inputTokens": 4,
        "outputTokens": 6682,
        "cacheWriteTokens": 14700,
        "cacheReadTokens": 9819,
        "totalCents": 23.7614803314209
    },
    "cursorTokenFee": 0.7801250219345093,
    "isChargeable": true,
    "chargedCents": 24.54160499572754
}
Test 3 usage
{
    "model": "claude-opus-5-5-max",
    "kind": "USAGE_EVENT_KIND_INCLUDED_IN_BUSINESS",
    "requestsCosts": 4.699999809265137,
    "usageBasedCosts": "-",
    "isTokenBasedCall": true,
    "tokenUsage": {
        "inputTokens": 4,
        "outputTokens": 4457,
        "cacheWriteTokens": 14710,
        "cacheReadTokens": 9819,
        "totalCents": 18.673980712890625
    },
    "cursorTokenFee": 0.7247499823570251,
    "isChargeable": true,
    "chargedCents": 19.39872932434082
}

Which model actually answered

Asking a model for “random” numbers is a known way to identify it. LLMs are bad at producing uniform random numbers, and the bias is specific to each model. Bruckner (2026) fingerprints 165 models served through OpenRouter using only the answers to prompts like “name a random number between 1 and 100”, with the goal of checking whether the model behind an endpoint is the one advertised. Related work on detecting silent model swaps behind APIs includes Gao et al. (2024) and Cai et al. (2025).

I fed the three integer sequences into a model fingerprint detector (lm.ikale.io). It identified the output as claude-opus-4-8 with 98.5% confidence, with claude-opus-5 at 1.4% and everything else at 0.0%. The detector only compares against models in its own sample library, so treat it as supporting evidence, not proof. It agrees with the banner, though: the content came from Opus 4.8.

Test 1 output
147, 23, 288, 91, 6, 312, 205, 54, 178, 339 42, 267, 118, 8, 331, 76, 199, 260, 15, 143 301, 89, 34, 222, 157, 5, 274, 110, 348, 63 29, 186, 240, 97, 355, 12, 168, 215, 71, 133 258, 44, 309, 82, 3, 191, 126, 337, 59, 204 17, 279, 105, 231, 68, 344, 150, 26, 293, 88 173, 39, 320, 116, 7, 247, 194, 62, 285, 138 51, 210, 97, 353, 30, 164, 269, 84, 19, 227 141, 306, 73, 2, 189, 256, 48, 128, 316, 95 220, 37, 298, 159, 66, 11, 243, 181, 79, 334 25, 271, 108, 197, 57, 349, 132, 4, 286, 90 163, 232, 46, 314, 121, 78, 207, 33, 275, 149 60, 328, 100, 18, 253, 185, 41, 296, 114, 236 83, 9, 176, 263, 52, 341, 129, 21, 218, 156 305, 69, 195, 38, 281, 124, 245, 87, 13, 202 167, 55, 322, 103, 234, 72, 16, 289, 145, 260 40, 213, 96, 351, 28, 178, 265, 61, 134, 300 80, 222, 47, 158, 10, 293, 119, 250, 65, 191 35, 277, 106, 224, 88, 14, 169, 320, 53, 240 127, 68, 311, 94, 205, 31, 182, 259, 75, 148 22, 298, 111, 44, 336, 160, 85, 7, 271, 216 138, 57, 329, 99, 196, 27, 246, 118, 67, 355 172, 49, 285, 130, 20, 238, 92, 163, 309, 74 203, 36, 152, 268, 58, 345, 105, 24, 227, 141 81, 297, 113, 190, 45, 12, 259, 176, 63, 324 98, 234, 51, 282, 145, 32, 209, 70, 166, 3 251, 122, 43, 315, 89, 197, 66, 154, 29, 278 108, 240, 77, 187, 19, 302, 135, 56, 223, 95 168, 39, 263, 112, 84, 5, 291, 149, 217, 62 133, 306, 73, 25, 244, 180, 48, 128, 200, 91 157
Test 2 output
47, 213, 8, 156, 92, 301, 44, 178, 265, 19, 133, 88, 340, 27, 199, 61, 254, 105, 322, 73, 16, 288, 141, 55, 230, 97, 4, 167, 312, 82, 245, 118, 39, 276, 151, 66, 203, 11, 329, 94, 172, 58, 297, 129, 23, 184, 348, 76, 111, 260, 35, 217, 143, 69, 306, 90, 48, 238, 125, 7, 191, 271, 84, 154, 32, 223, 108, 345, 63, 279, 137, 51, 202, 96, 318, 71, 14, 249, 165, 42, 286, 119, 78, 333, 57, 226, 103, 20, 174, 292, 146, 65, 240, 30, 189, 122, 355, 87, 53, 211, 168, 41, 298, 134, 74, 25, 257, 195, 62, 315, 99, 180, 48, 231, 116, 9, 273, 152, 68, 204, 38, 291, 127, 85, 342, 56, 218, 101, 17, 263, 149, 79, 324, 45, 187, 112, 235, 72, 300, 130, 60, 246, 22, 158, 95, 281, 51, 208, 143, 34, 267, 118, 89, 330, 64, 176, 27, 252, 139, 82, 305, 155, 43, 221, 106, 13, 284, 161, 70, 197, 124, 349, 58, 233, 91, 36, 275, 148, 67, 212, 102, 29, 259, 185, 77, 320, 133, 49, 241, 114, 6, 268, 159, 84, 337, 52, 195, 121, 40, 227, 145, 73, 294, 108, 31, 250, 167, 88, 209, 54, 313, 129, 65, 236, 97, 18, 278, 151, 80, 202, 44, 289, 136, 71, 344, 113, 26, 255, 168, 93, 306, 142, 59, 219, 105, 38, 271, 160, 85, 232, 117, 47, 283, 154, 69, 328, 100, 21, 244, 175, 62, 297, 138, 83, 210, 51, 265, 126, 34, 189, 104, 351, 57, 228, 143, 76, 301, 163, 42, 252, 119, 15, 286, 171, 90, 239, 128, 63, 205, 48, 274, 157, 82, 333, 111, 37, 248, 166, 95, 220, 53, 291, 134, 68, 315, 107, 24, 262, 149, 81, 203, 46, 279, 158, 72, 340, 125, 60, 235, 98, 17, 267, 141, 85, 224, 55, 310, 172, 39
Test 3 output
47, 213, 8, 176, 92, 341, 25, 158, 300, 63, 119, 244, 37, 281, 14, 195, 88, 322, 51, 137, 266, 19, 204, 73, 155, 348, 29, 111, 232, 96, 183, 42, 275, 6, 163, 98, 311, 57, 224, 130, 79, 297, 22, 168, 109, 334, 44, 201, 85, 149, 260, 33, 192, 71, 128, 353, 16, 240, 103, 187, 55, 218, 90, 145, 305, 28, 174, 66, 121, 289, 40, 209, 82, 156, 11, 331, 197, 60, 143, 254, 34, 178, 105, 320, 49, 227, 7, 162, 94, 271, 122, 345, 20, 185, 68, 138, 300, 53, 216, 87, 159, 41, 233, 114, 76, 298, 25, 170, 91, 244, 133, 355, 18, 207, 62, 148, 99, 276, 47, 189, 30, 165, 84, 251, 12, 198, 72, 140, 313, 57, 220, 103, 45, 177, 9, 292, 128, 65, 241, 88, 154, 36, 269, 111, 79, 340, 23, 186, 97, 132, 205, 58, 171, 15, 248, 90, 124, 350, 43, 193, 67, 158, 31, 282, 106, 145, 5, 229, 83, 175, 117, 264, 39, 200, 74, 138, 21, 296, 92, 160, 51, 234, 108, 179, 27, 143, 87, 315, 63, 190, 122, 46, 257, 13, 168, 99, 135, 348, 70, 211, 54, 183, 32, 271, 118, 76, 149, 8, 226, 95, 164, 41, 288, 129, 60, 195, 24, 152, 342, 85, 173, 48, 206, 17, 137, 91, 260, 38, 180, 113, 66, 245, 10, 158, 82, 300, 125, 53, 197, 71, 148, 35, 279, 104, 62, 217, 19, 169, 88, 143, 230, 57, 176, 26, 122, 355, 44, 189, 78, 155, 96, 253, 33, 165, 7, 202, 119, 69, 284, 50, 141, 84, 228, 15, 173, 98, 262, 40, 187, 111, 59, 245, 22, 134, 79, 306, 47, 160, 92, 215, 128, 68, 181, 36, 249, 105, 73, 194, 29, 152, 87, 267, 44, 178, 113

Which rate card was actually used

I had an agent (Grok 4.7 Extra High Fast) compare the three usage events against every Claude rate card in Cursor’s docs, including the Cursor Token Rate.

The Cursor Token Fee part is straightforward: chargedCents = totalCents + cursorTokenFee, and cursorTokenFee is exactly $0.25 per million tokens (input + output + cache write + cache read) in all three events. So the only question is which rate card produced totalCents.

For each rate card, the expected model cost is:

cost (cents) = (input × input_rate + cache_write × cache_write_rate
               + cache_read × cache_read_rate + output × output_rate) / 1,000,000 × 100

Worked example for test 1 (4 input, 14,714 cache write, 9,819 cache read, 12,858 output tokens):

Opus 5.5 regional: (4 × 4.40 + 14,714 × 5.50 + 9,819 × 0.22 + 12,858 × 22) / 1e6 × 100 = 36.598¢
Opus 4.8:          (4 × 5.00 + 14,714 × 6.25 + 9,819 × 0.50 + 12,858 × 25) / 1e6 × 100 = 41.834¢
Actual totalCents:                                                                      36.705¢

The same calculation for all three tests and every Claude rate card (rates are input / cache write / cache read / output, in $ per million tokens; the percentage is the deviation from the actual totalCents):

Rate card Rates Test 1 Test 2 Test 3
Actual totalCents 36.705¢ 23.761¢ 18.674¢
Opus 5.5, regional (+10%) 4.40 / 5.50 / 0.22 / 22 36.598¢ (-0.3%) 23.003¢ (-3.2%) 18.114¢ (-3.0%)
Opus 5.5, global 4 / 5 / 0.20 / 20 33.271¢ (-9.4%) 20.912¢ (-12.0%) 16.467¢ (-11.8%)
Opus 4.8 / Opus 5 5 / 6.25 / 0.50 / 25 41.834¢ (+14.0%) 26.385¢ (+11.0%) 20.829¢ (+11.5%)
Sonnet 5 2 / 2.5 / 0.20 / 10 16.734¢ (-54.4%) 10.554¢ (-55.6%) 8.332¢ (-55.4%)
Fable 5.1 10 / 12.5 / 0.25 / 50 82.932¢ (+125.9%) 52.034¢ (+119.0%) 40.922¢ (+119.1%)
Fable 5 10 / 12.5 / 1 / 50 83.668¢ (+127.9%) 52.771¢ (+122.1%) 41.658¢ (+123.1%)

The closest match by far is Opus 5.5 at the regional rate (global rate +10%), with a mean absolute deviation of about 2%. The remaining gap of 0.1¢ to 0.8¢ per request is something I can’t explain from the public docs. Opus 4.8 rates are off by 11% to 14% in every test, so the Opus 4.8 work in these requests was priced as Opus 5.5, and nothing was split out as Opus 4.8.

To be fair about the numbers: for Opus 5.5 specifically, Opus 4.8 is the more expensive card, so in this particular test I was not overcharged in dollar terms. The problem is that the billing does not do what Cursor said it does. For Fable users it does cost money. Applying the same token counts to Fable, if a fallback is billed at the Fable rate instead of the Opus 4.8 rate:

Test 1 Test 2 Test 3
Opus 4.8 rate (what staff said you pay) 41.834¢ 26.385¢ 20.829¢
Fable 5.1 rate 82.932¢ (1.98×) 52.034¢ (1.97×) 40.922¢ (1.96×)
Fable 5 rate 83.668¢ (2.00×) 52.771¢ (2.00×) 41.658¢ (2.00×)

I didn’t re-run this test on Fable, so this table is a projection, not a measurement. But at Fable 5 launch I also saw no Opus 4.8 entry after a fallback, so if Fable is billed the same way as Opus 5.5 here, Fable users are paying about 2x for work Opus 4.8 did.

[SCREENSHOT: Billing analysis, agent chat]
[SCREENSHOT: Billing analysis, canvas]
[SCREENSHOT: Billing analysis, canvas (continued)]

Prompt used for the billing analysis
...
<the three usage JSON events>
...

Compare against the following pricing and infer which model the charges were actually billed at:
- https://cursor.com/docs/models/claude-opus-4-8.md
- https://cursor.com/docs/models/claude-sonnet-5.md
- https://cursor.com/docs/models/claude-opus-5.md
- https://cursor.com/docs/models/claude-opus-5-5.md
- https://cursor.com/docs/models/claude-fable-5-1.md
- https://cursor.com/docs/models/claude-fable-5.md

Take the [Cursor Token Rate](https://cursor.com/docs/models-and-pricing.md#cursor-token-rate) into account.

Draw a canvas and write a report so I can compare them clearly.

Other problems with the current behavior

  • You don’t know when the switch happened. Because the chat streams, the fallback can happen partway through a turn, and the banner only shows up after the turn ends. By then the agent may have spent a long run on a model you didn’t choose, and that output may be useless to you.
  • Subagents and API usage. I haven’t verified whether any notice is surfaced when the fallback happens inside a subagent or through the API/SDK. If it isn’t, those users have no way to know at all.

Suggested fixes

  1. Treat the fallback like an explicit, opt-in model fallback, and fail fast otherwise. Only fall back automatically when the request (including subagent parameters) explicitly lists Opus 4.8 as an allowed model, and when it does, emit a visible state-change event at the moment of the switch, not after the turn is over. If Opus 4.8 wasn’t opted into, stop immediately with a clear error so the user or parent agent can decide what to do, instead of quietly continuing on a different model.
  2. Bill the fallback as Opus 4.8, and show it. Record the Opus 4.8 portion as its own usage event with model: claude-opus-4-8, priced at Opus 4.8 rates, so it appears in the dashboard and CSV exactly as the staff replies above describe. Please stop giving users billing answers that don’t match what the dashboard shows, and please check past fallback requests that were billed at the selected model’s rate.

Reproducing

Anyone can reproduce this: select a Claude model with safeguards, send a prompt like the template above with a trigger appended, wait for the Switched to Claude Opus 4.8 banner, and then look up that request in your usage dashboard. You can paste the generated numbers into lm.ikale.io or something similar to check which model produced them (if you want a full local result, you need to collect enough fingerprints first).

This has been going on since Fable 5 launched, close to three months ago, and I think everyone paying for these models deserves to know about it.

Hi there!

We detected that this may be a bug report, so we’ve moved your post to the Bug Reports category.

To help us investigate and fix this faster, could you edit your original post to include the details from the template below?

Bug Report Template - Click to expand

Where does the bug appear (feature/product)?

  • Editor, Tab & Chat (autocomplete, Composer, in-editor agent)
  • Terminal & commands
  • Models, pricing & API keys (availability, Auto/Max, BYOK/Bedrock)
  • MCP & tools
  • Cloud Agents & Automations (cursor.com/agents, scheduled/event)
  • BugBot & Code Review
  • Cursor CLI
  • Cursor Mobile
  • Remote (SSH / Dev Containers / WSL)
  • Account, billing & login
  • Something else…

Describe the Bug
A clear and concise description of what the bug is.


Steps to Reproduce
How can you reproduce this bug? We have a much better chance at fixing issues if we can reproduce them!

  1. …
  2. …
  3. …

Expected Behavior
What is meant to happen here that isn’t working correctly?


Screenshots / Screen Recordings
If applicable, attach images or videos (.jpg, .png, .gif, .mp4, .mov)


Operating System

  • Windows 10/11
  • MacOS
  • Linux

Version Information

  • For Cursor IDE: Menu → About Cursor → Copy
  • For Cursor CLI: Run agent about in your terminal
IDE:
Version: 2.xx.x
VSCode Version: 1.105.1
Commit: ......

CLI:
CLI Version 2026.01.17-d239e66

For AI issues: which model did you use?
Model name (e.g., Sonnet 4, Tab…)


For AI issues: add Request ID with privacy disabled
Request ID: f9a7046a-279b-47e5-ab48-6e8dc12daba1
For Background Agent issues, also post the ID: bc-…


Additional Information
Add any other context about the problem here.


Does this stop you from using Cursor?

  • Yes - Cursor is unusable
  • Sometimes - I can sometimes use Cursor
  • No - Cursor works, but with this issue

The more details you provide, the easier it is for us to reproduce and fix the issue. Thanks!

I re-ran the same test with Claude Fable 5.1 1M Max selected. Three rounds, same prompt template (N = 325, 321, 332), with the same safeguard trigger appended. All three rounds ended with the banner:

Claude Fable 5.1 hit a safety filter, and the conversation was automatically switched to Claude Opus 4.8. Start a new conversation to continue with Claude Fable 5.1, or continue this conversation with Claude Opus 4.8.

Which model answered

The fingerprint detector again identifies the output as claude-opus-4-8 (97.3%), with claude-opus-5 at 2.5% and claude-opus-4-7 at 0.2%.

Round outputs

Round 1 (N = 325):

147, 23, 289, 6, 312, 88, 201, 45, 176, 334, 62, 119, 258, 17, 293, 71, 155, 340, 38, 224, 103, 267, 9, 187, 320 54, 231, 128, 349, 82, 13, 296, 165, 40, 218, 91, 273, 34, 142, 307, 67, 189, 250, 111, 355, 26, 198, 79, 314, 133 59, 244, 15, 281, 96, 172, 328, 48, 205, 120, 264, 33, 151, 300, 84, 227, 5, 178, 341, 72, 194, 117, 259, 42, 315 90, 236, 11, 168, 302, 65, 213, 145, 350, 28, 183, 108, 271, 51, 240, 129, 297, 74, 160, 19, 322, 95, 254, 137, 208 36, 285, 63, 175, 331, 47, 220, 102, 266, 8, 191, 149, 310, 80, 233, 124, 344, 57, 186, 22, 277, 116, 245, 69, 204 158, 30, 299, 87, 217, 140, 353, 44, 195, 110, 262, 16, 181, 325, 76, 229, 53, 170, 306, 99, 248, 12, 283, 135, 211 64, 292, 41, 163, 320, 85, 238, 121, 275, 27, 198, 152, 348, 70, 215, 104, 267, 39, 188, 131, 303, 58, 242, 18, 279 94, 225, 146, 337, 50, 207, 115, 270, 32, 179, 316, 78, 251, 138, 295, 61, 200, 24, 333, 89, 234, 127, 288, 43, 167 310, 71, 222, 106, 259, 35, 190, 153, 342, 66, 213, 129, 300, 55, 244, 20, 177, 324, 92, 237, 118, 282, 48, 165, 351 81, 232, 14, 269, 143, 305, 60, 196, 109, 347, 38, 220, 156, 291, 73, 208, 125, 264, 31, 185, 340, 97, 251, 46, 173 319, 68, 240, 122, 285, 52, 203, 161, 349, 83, 226, 136, 298, 59, 194, 114, 271, 25, 180, 332, 77, 217, 148, 309, 45 90, 235, 118, 263, 37, 188, 155, 344, 72, 210, 128, 292, 56, 199, 21, 175, 327, 88, 246, 134, 301, 63, 221, 107, 258 40, 183, 316, 79, 230, 145, 289, 51, 204, 167, 353, 66, 219, 112, 274, 29, 191, 138, 305, 84, 243, 121, 268, 47, 197

Round 2 (N = 321):

47, 213, 8, 156, 299, 34, 187, 72, 341, 119, 5, 268, 93, 220, 61, 144, 312, 27, 198, 85, 331, 16, 107, 249, 53, 176, 290, 42, 133, 67, 224, 11, 355, 98, 162, 39, 281, 124, 70, 205, 148, 3, 317, 88, 231, 56, 179, 102, 344, 25, 191, 74, 138, 260, 19, 113, 328, 45, 167, 82, 236, 9, 154, 275, 63, 129, 301, 48, 218, 91, 172, 30, 347, 105, 244, 58, 183, 116, 79, 259, 22, 141, 288, 64, 197, 37, 126, 310, 51, 169, 234, 7, 158, 295, 86, 211, 43, 132, 320, 69, 185, 24, 149, 272, 60, 118, 336, 41, 203, 94, 155, 13, 289, 76, 227, 50, 174, 108, 351, 33, 196, 67, 140, 253, 28, 121, 305, 84, 162, 46, 238, 15, 177, 299, 71, 134, 314, 55, 209, 97, 163, 6, 146, 281, 89, 222, 38, 128, 340, 62, 190, 73, 152, 267, 21, 115, 333, 49, 181, 104, 245, 12, 168, 292, 66, 137, 308, 53, 216, 90, 175, 29, 159, 278, 68, 125, 349, 44, 201, 82, 232, 17, 144, 285, 77, 130, 318, 57, 193, 100, 166, 4, 151, 264, 80, 213, 35, 122, 337, 58, 188, 26, 143, 271, 64, 117, 302, 47, 179, 95, 234, 10, 161, 296, 72, 138, 325, 52, 207, 86, 170, 31, 154, 283, 69, 127, 345, 40, 198, 93, 225, 18, 148, 276, 61, 135, 311, 54, 189, 102, 164, 8, 157, 259, 78, 120, 329, 45, 211, 88, 182, 23, 141, 268, 65, 114, 306, 50, 176, 97, 239, 14, 168, 291, 74, 131, 322, 56, 203, 84, 159, 32, 147, 280, 70, 123, 342, 43, 195, 91, 217, 19, 153, 274, 63, 136, 315, 48, 186, 105, 171, 7, 160, 262, 81, 128, 334, 39, 208, 94, 185, 27, 145, 287, 67, 119, 320, 51, 199, 90, 163, 12, 156, 273, 75, 133, 348, 46, 212, 83, 178

Round 3 (N = 332):

147, 23, 291, 88, 312, 5, 199, 260, 41, 176, 334, 62, 118, 245, 9, 301, 154, 77, 220, 38, 283, 131, 96, 350, 17, 205, 64, 128, 271, 43, 189, 320, 71, 14, 256, 108, 233, 87, 342, 52, 165, 29, 297, 120, 3, 244, 79, 318, 141, 210, 56, 183, 92, 269, 34, 355, 113, 227, 68, 158, 305, 47, 136, 21, 278, 101, 194, 82, 330, 60, 172, 8, 249, 115, 288, 39, 203, 149, 74, 311, 26, 167, 95, 240, 58, 129, 316, 84, 217, 45, 190, 12, 275, 103, 232, 66, 348, 138, 19, 200, 91, 263, 50, 156, 7, 224, 117, 299, 73, 181, 32, 145, 286, 99, 251, 61, 15, 208, 133, 340, 78, 197, 42, 270, 106, 24, 163, 89, 235, 54, 313, 122, 185, 67, 2, 247, 151, 293, 80, 214, 37, 170, 111, 258, 48, 127, 304, 85, 192, 63, 149, 22, 281, 96, 236, 70, 345, 134, 28, 205, 87, 254, 59, 168, 11, 219, 124, 296, 76, 188, 44, 157, 279, 102, 240, 65, 18, 211, 139, 331, 83, 202, 51, 265, 114, 31, 176, 94, 244, 57, 322, 130, 195, 72, 6, 253, 160, 289, 88, 226, 40, 173, 118, 267, 53, 138, 309, 91, 201, 69, 158, 27, 292, 105, 247, 75, 351, 143, 33, 216, 98, 261, 64, 179, 16, 229, 132, 301, 82, 197, 49, 166, 287, 110, 251, 71, 20, 223, 148, 338, 90, 213, 55, 274, 121, 36, 185, 103, 256, 68, 329, 141, 206, 79, 10, 262, 169, 298, 95, 235, 46, 184, 127, 278, 60, 149, 315, 100, 218, 74, 163, 30, 303, 112, 258, 84, 4, 152, 239, 347, 92, 225, 58, 285, 130, 41, 194, 108, 267, 77, 341, 156, 211, 86, 13, 273, 178, 312, 99, 246, 52, 190, 138, 289, 66, 161, 324, 107, 229, 80, 175, 35, 299, 119, 264, 93, 25, 205, 147, 353, 104, 238, 62, 197, 154, 283, 70, 218, 128, 301, 87, 242

Usage events

Again, every event is logged as claude-fable-5-1-thinking-max, and there is no claude-opus-4-8 event anywhere. Events are listed in chronological order.

Event Input Cache write Cache read Output totalCents cursorTokenFee chargedCents
Round 1 4 17,059 9,937 11,267 58.494¢ 0.957¢ 59.450¢
Round 2 4 17,067 9,937 7,313 40.226¢ 0.858¢ 41.084¢
Round 3 2 0 27,005 5,663 15.509¢ 0.817¢ 16.326¢
Usage event JSON (identifying fields removed)
[
  {
    "model": "claude-fable-5-1-thinking-max",
    "kind": "USAGE_EVENT_KIND_INCLUDED_IN_BUSINESS",
    "requestsCosts": 14.600000381469727,
    "usageBasedCosts": "-",
    "isTokenBasedCall": true,
    "tokenUsage": {
      "inputTokens": 4,
      "outputTokens": 11267,
      "cacheWriteTokens": 17059,
      "cacheReadTokens": 9937,
      "totalCents": 58.493675231933594
    },
    "cursorTokenFee": 0.9566749930381775,
    "isChargeable": true,
    "chargedCents": 59.45035171508789
  },
  {
    "model": "claude-fable-5-1-thinking-max",
    "kind": "USAGE_EVENT_KIND_INCLUDED_IN_BUSINESS",
    "requestsCosts": 10.100000381469727,
    "usageBasedCosts": "-",
    "isTokenBasedCall": true,
    "tokenUsage": {
      "inputTokens": 4,
      "outputTokens": 7313,
      "cacheWriteTokens": 17067,
      "cacheReadTokens": 9937,
      "totalCents": 40.226173400878906
    },
    "cursorTokenFee": 0.8580250144004822,
    "isChargeable": true,
    "chargedCents": 41.08420181274414
  },
  {
    "model": "claude-fable-5-1-thinking-max",
    "kind": "USAGE_EVENT_KIND_INCLUDED_IN_BUSINESS",
    "requestsCosts": 3.9000000953674316,
    "usageBasedCosts": "-",
    "isTokenBasedCall": true,
    "tokenUsage": {
      "inputTokens": 2,
      "outputTokens": 5663,
      "cacheReadTokens": 27005,
      "totalCents": 15.508749961853027
    },
    "cursorTokenFee": 0.8167499899864197,
    "isChargeable": true,
    "chargedCents": 16.32550048828125
  }
]

Billing: a correction to my original post

Same formula as in the post: token counts times each rate card, compared with the actual totalCents. The Cursor Token Fee is again exactly $0.25 per million tokens.

Rate card Round 1 Round 2 Round 3
Actual totalCents 58.494¢ 40.226¢ 15.509¢
Fable 5.1 (10 / 12.5 / 0.25 / 50) 77.911¢ (+33.2%) 58.151¢ (+44.6%) 28.992¢ (+86.9%)
Opus 4.8 (5 / 6.25 / 0.50 / 25) 39.328¢ (-32.8%) 29.448¢ (-26.8%) 15.509¢ (0.0%)

Round 3 matches the Opus 4.8 rate card exactly: (2 × 5 + 27,005 × 0.50 + 5,663 × 25) / 1e6 × 100 = 15.50875¢, and the event says 15.508749961853027¢. Rounds 1 and 2 land between the Fable 5.1 and Opus 4.8 cards, and no single rate card fits them. That is what you’d expect if part of each request was billed at Fable rates and the rest at Opus 4.8 rates.

So on this evidence, Cursor does appear to price the fallback portion at Opus 4.8 rates, as Colin and Dean said, and my claim in the original post that the fallback is billed at the selected model’s rate is most likely wrong. The same explanation also fits my Opus 5.5 data better than the “Opus 5.5 regional rate” match I reported: a blend of Opus 5.5 and Opus 4.8 rates reproduces those three events with roughly 40% to 52% of the cost at Opus 4.8 rates. I can’t verify the exact split from the usage events, because they don’t break it down.

What still stands:

  • The usage events don’t show it. Every event is labeled with the selected model, and there is no Opus 4.8 line item, even when a request (round 3) was billed 100% at Opus 4.8 rates. Dean said “Opus 4.8 activity will show up there next to Fable 5 usage”, and it doesn’t. Without doing this arithmetic, users have no way to check what they were charged for.
  • The switch is still silent until the turn ends, and the suggested fixes in the post still apply: an explicit, opt-in fallback with a state-change event at the moment of the switch, and a separate claude-opus-4-8 usage event.

I can’t update the original post since system edited my post, this comment will be an correction of my post.

@deanrie @mohitjain @kevinn @Colin Sorry for the ping but can someone please forward this problem to the team? Thank you!