Claude thinking tokens: what they cost and how to spend less
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:
| Model | Thinking by default | Turning it off | Default effort |
|---|---|---|---|
| Claude Opus 5.5 | On | Not possible: {"type": "disabled"} returns an error. Lower the effort instead. | medium |
| Claude Sonnet 5.5 | On | {"type": "between_tools"}, at effort high or below. disabled returns an error. | high |
| Claude Haiku 5.5 | On | {"type": "disabled"}, at effort high or below | medium |
| Claude Fable 5.2 | Always on | Not possible. Lower the effort instead. | high |
| Claude Opus 5 | On | {"type": "disabled"}, at effort high or below | high |
| Claude Opus 4.8 / 4.7 | Off unless you set {"type": "adaptive"} | Leave it out, or disabled | high |
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.
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.