Claude thinking tokens: what they cost and how to spend less

By NeverPayTwice · November 15, 2026 · 5-minute read

Short answer: thinking tokens are billed as output tokens, at the output price, whether or not you see them. On the newest Claude models thinking is on by default and its text comes back empty unless you ask for a summary, so it is easy to pay for a lot of it without noticing.

Each response tells you how much was thinking. The main way to spend less is the effort setting; on some models you can also switch thinking off.

How thinking is billed

Thinking is counted inside usage.output_tokens, and output is the most expensive kind of token: five times the input price on current Claude models. usage.output_tokens_details.thinking_tokens tells you how many of the output tokens were thinking.

Example: a Claude Sonnet 5.5 response with 400 output tokens, 150 of them thinking. Output costs $10 per million tokens, so the thinking cost 150 × $10 ÷ 1,000,000 = $0.0015 and the visible answer $0.0025. Small for one response, but at the same ratio thinking is over a third of every output dollar you spend.

Hidden is not free. On Claude Opus 5.5, Sonnet 5.5, Haiku 5.5, Fable 5.2 and other recent models, the default display setting returns thinking blocks with empty text. Setting thinking: {"type": "adaptive", "display": "summarized"} shows a readable summary instead. The display setting only changes what you see: the thinking happens, and is billed, the same either way.

Can you turn thinking off?

It depends on the model. From Anthropic's API reference:

ModelThinking by defaultTurning it offDefault effort
Claude Opus 5.5OnNot possible: {"type": "disabled"} returns an error. Lower the effort instead.medium
Claude Sonnet 5.5On{"type": "between_tools"}, at effort high or below. disabled returns an error.high
Claude Haiku 5.5On{"type": "disabled"}, at effort high or belowmedium
Claude Fable 5.2Always onNot possible. Lower the effort instead.high
Claude Opus 5On{"type": "disabled"}, at effort high or belowhigh
Claude Opus 4.8 / 4.7Off unless you set {"type": "adaptive"}Leave it out, or disabledhigh

The old fixed thinking budget (budget_tokens) is gone on these models: sending it returns an error. Effort replaced it.

Effort: the main dial

Effort goes in output_config and takes low, medium, high, xhigh or max. It controls how deeply the model thinks and how many tokens it spends overall; lower effort also means fewer tool calls and shorter replies around them.

response = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=16000,
    output_config={"effort": "low"},
    messages=[{"role": "user", "content": "Classify this ticket: ..."}],
)
print(response.usage)   # output_tokens includes the thinking

Anthropic's guidance: chat, classification and other high-volume, simple requests often do well at low, with medium as the step down where quality holds; coding and long multi-step agent work gain the most from higher effort. Try a lower effort on a sample of real requests and compare the answers before changing it everywhere, and judge cost per finished task: a cheaper request that needs a retry isn't cheaper.

Two mistakes that make thinking cost more

max_tokens too low. Thinking counts toward max_tokens. If the limit is too tight, the response stops partway with stop_reason: "max_tokens", you pay for every token it produced, and you have to run it again. Don't set it lower than the job needs.

Changing effort in the middle of a conversation. Changing the top-level effort between turns invalidates the prompt cache for the conversation, so the next request pays full price for history that was cached. Pick an effort per kind of request and keep it. (On the newest models a per-message effort setting avoids this; it is in beta.)

How much of your bill is thinking?

Save each response's JSON as one line in a file (in Python, message.to_json()) and run our free bill-check script on it. One of the lines it prints is "thinking (billed as output)", with its dollar amount and share of the total. It prints numbers only and sends nothing anywhere. (Download it, or get it with the other scripts on GitHub.)

python3 claude_api_bill_check.py responses.jsonl

If thinking is a large share and the requests are simple, effort is the first thing to test. The nine things to check when the bill is high covers the other usual causes.

Or let something watch the bill for you

NeverPayTwice is a small app we make. It tracks your AI usage and its cost per day and per model against a monthly budget you set, flags every time you paid again for something you had already bought, and keeps a receipt for each AI purchase. It runs on your own computer; nothing is uploaded and API keys are never stored. Mac, Windows or Linux, $9 one time.

See it with sample data first, no sign-up.

Try the demoGet NeverPayTwice · $9

Sources: Anthropic's API documentation on extended and adaptive thinking, the effort setting and model migration, and the API pricing page, checked November 15, 2026. Model behaviour and prices change; check the current pages if something doesn't match.