Claude Sonnet 5.5, released on September 28, 2026, costs the same as Sonnet 5, so many teams will try it by changing one line: the model ID. On a typical Sonnet 5 integration that change alone can return errors. Anthropic’s migration guide lists five request settings that Sonnet 5.5 rejects with a 400 error, a new way to turn thinking off, and several changes that fail silently.
This guide collects them in the order you will meet them, with Anthropic’s exact error text, and then groups the work by the model you are moving from. Everything here comes from Anthropic’s migration guide and What’s new page as published on launch day, plus the preserved-thinking documentation linked below; the OpenRouter alias check is our own observation.
- 01thinking: {"type": "disabled"} now errors. The replacement, between_tools, only works up to high effort.At xhigh or max it returns a 400, and effort cannot change mid-conversation while it is set.
- 02Forced tool choice is gone. Use auto with strict tools and say when to call them.The same rejection applies on the token-counting endpoint. On Amazon Bedrock, strict tools are not available, so validate tool input in code.
- 03Thinking blocks are bound to the model, the conversation and the account.Edit earlier history on a newer account and the request fails; move a conversation to another account and the reasoning is dropped.
- 04Some changes do not error at all, so test the output, not just the status code.Notes between tool calls move into thinking blocks, effort levels are recalibrated, and a router alias may already point at Sonnet 5.5.
01 — The errorsThe five settings that return a 400 error
Anthropic names five request settings that Sonnet 5.5 refuses. Each one returns an invalid_request_error with HTTP status 400, so the request fails before the model runs. The error strings below are Anthropic’s; an ellipsis marks where we shortened one.
| Setting | Error returned | Fix |
|---|---|---|
thinking: {"type": "disabled"} | "thinking.type.disabled" is not supported for this model. Use "thinking.type.between_tools" for the lowest thinking setting … | Send {"type": "between_tools"} at low, medium or high effort |
tool_choice {"type": "any"} or {"type": "tool"} | tool_choice: type "tool" and "any" are not supported for this model. | Use auto with strict: true, and say in the prompt when the tool applies |
thinking: {"type": "enabled", "budget_tokens": N} | "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" … | Remove the budget; set output_config.effort and test two or three levels |
Non-default temperature, top_p or top_k | 400 invalid_request_error | Remove the parameters |
A prefilled final assistant turn | This model does not support assistant message prefill. The conversation must end with a user message. | Structured outputs for format; system-prompt or user-turn instructions for the rest |
Which of the five you hit depends on your starting model. Sonnet 5 already rejected thinking budgets, sampling parameters and prefill, so a Sonnet 5 integration meets only the first two rows. Code written for Sonnet 4.5 or Haiku 4.5 can meet all five.
For forced tool choice, Anthropic’s replacement is tool_choice: {"type": "auto"} with the tool marked strict: true, so that any call the model makes matches the schema. Because the model may now answer without calling the tool, the prompt has to say when the tool applies. A request can carry at most 20 strict tools, and strict mode needs additionalProperties: false on every object. On Amazon Bedrock, structured outputs and strict tools are not available for Sonnet 5.5, so send auto alone and validate the tool input in your own code.
02 — Thinking offTurning thinking off now means between_tools
On Sonnet 5.5 a request with no thinking field runs with adaptive thinking, as it did on Sonnet 5. Teams that switched thinking off on Sonnet 5 to save tokens or latency need the new setting, thinking: {"type": "between_tools"}. Anthropic describes it as the lowest thinking setting: the model does no up-front thinking, and short progress notes between tool calls still come back as thinking blocks with their summary text. Without tools, the response is text only.
- Accepted at
low,mediumandhigheffort;xhighormaxreturns a 400. - Effort cannot change mid-conversation; a per-message effort that differs returns a 400.
- It takes no other field:
display,budget_tokensorblock_bindingwith it returns a 400. - Older Python and TypeScript SDKs fail type checking on it; update the SDK or send the value as raw JSON.
One detail matters for teams that ran Sonnet 5 with thinking off at a high effort level. Anthropic’s own before-and-after example moves a Sonnet 5 request from disabled at xhigh to between_tools at high, because xhigh is no longer allowed with thinking off. If a workload genuinely needs xhigh or max, it has to accept adaptive thinking. With Anthropic’s server-side fallback turned on, a between_tools request that falls back to Sonnet 5 runs there with thinking disabled.
03 — Thinking blocksThinking blocks are tied to the model, the conversation and the account
Model
Sonnet 5.5 reads thinking blocks from Sonnet 5, Opus 4.8, Haiku 4.5 and earlier models, but not from Opus 5, Opus 5.5, Fable or Mythos. No other model reads Sonnet 5.5's blocks. Unreadable blocks are dropped, the request returns 200, and dropped blocks are not billed.
Conversation
Each block is signed over the conversation before it. For accounts created on or after August 31, 2026, 00:00 UTC, replaying a block after changing the system prompt, the tools or an earlier message returns a 400.
Account
Sonnet 5.5 thinking blocks work only in the account that produced them, or a linked account. Sent from another account, they are dropped and the model answers without that reasoning.
The fix for the second rule is to keep conversations append-only. Change instructions or tools with mid-conversation system messages instead of editing earlier turns. With adaptive thinking, the beta header thinking-binding-controls-2026-08-01 plus thinking.block_binding.prefix_mismatch_behavior: "drop_block" lets a request drop failing blocks instead of erroring, and reports each drop in an input_transformations array. With between_tools, sending block_binding returns a 400, so keep the history append-only. Anthropic’s preserved-thinking documentation warns that dropping hides the error without fixing the edit, and that the model may spend extra tokens re-creating lost reasoning.
The account rule is new with Sonnet 5.5 and is part of Anthropic’s defence against distillation. Most developers will not notice it. The case that does notice is a conversation that moves between accounts, including switching accounts mid-session in Claude Code: the session continues, but without its earlier reasoning.
04 — AgentsComputer use, the advisor tool and refusals
Computer use needs the toolset. On the Claude API and Google Cloud, Sonnet 5.5 accepts computer use only through computer_toolset_20260801. The older computer_20251124 tool, sent by Sonnet 5 and 4.6 integrations, returns a 400 there but still works on Amazon Bedrock. The even older computer_20250124 is rejected on every platform. Remove the fine-grained-tool-streaming-2025-05-14 beta header when you move, because it errors alongside a toolset entry; set eager_input_streaming: true on each tool instead.
The advisor tool accepts fewer advisors. A Sonnet 5.5 executor needs Opus 5, Opus 5.5, Sonnet 5.5, Fable 5 or 5.1, or Mythos 5 or 5.1 as its advisor. Opus 4.8, 4.7 and 4.6, Sonnet 5 and Sonnet 4.6 return a 400, and the advice now comes back encrypted.
More refusal categories. Sonnet 5.5 can decline under five named categories: cyber, bio, frontier_llm, reasoning_extraction and general_harms. A decline arrives as stop_reason: "refusal", not as an HTTP error, so code that only checks the status code will miss it. The server-side fallback beta (fallbacks: "default", Claude API only) retries cyber and frontier-LLM declines on Sonnet 5 and does not retry the other three.
05 — By modelWhat to change, by the model you run today
The guide’s checklist works cumulatively: start at the top and stop at your model. The table condenses it. Anthropic also ships a Claude Code command, /claude-api migrate, that applies the model-ID swap and the parameter changes across a codebase and then lists what to verify by hand. Teams on Claude Managed Agents only need to change the model name.
| Moving from | Errors to fix | Also check |
|---|---|---|
| Sonnet 5 | Thinking disabled; forced tool choice; computer_20251124 on the Claude API and Google Cloud; Sonnet 5 or Opus 4.8 as advisor | Notes between tool calls move into thinking blocks; new refusal categories; re-run the effort sweep |
| Sonnet 4.6 | Everything above, plus thinking budgets and non-default sampling parameters | Thinking now runs when the field is omitted, and its text is omitted by default (set display to summarized to show it); about 30% more tokens for the same text; images can cost about 2.5 times the tokens |
| Sonnet 4.5 | Everything above, plus assistant prefill and computer_20250124 on every platform | Set effort explicitly; parse tool input with a standard JSON parser; remove interleaved-thinking and context-window beta headers; move output_format to output_config.format |
| Sonnet 4 or 3.7 Sonnet | Everything above | Move to text_editor_20250728 and code_execution_20260521; handle the refusal and model_context_window_exceeded stop reasons; expect trailing newlines in tool string parameters; remove two legacy beta headers |
| Haiku 4.5 | Everything for Sonnet 4.5 except the Sonnet 4 tool changes | Higher price per token and more tokens per text; the caching minimum falls from 4,096 to 512 tokens |
Two cost notes sit inside that table. Sonnet 5.5 uses Sonnet 5’s tokenizer, which produces about 30% more tokens than Sonnet 4.6, 4.5 or Haiku 4.5 for the same text, so a team moving from those models should recount tokens rather than compare old and new bills per token. Images are also processed at a higher resolution, and Anthropic’s example of a 2000 by 1500 pixel image costs about 2.5 times the tokens it did on Sonnet 4.6.
06 — Silent changesThe changes that do not return an error
- Progress notes go quiet. Notes longer than a sentence or two that the model writes between tool calls now come back as
thinkingblocks, empty at the default display setting. An interface that streams them to users shows nothing. Setdisplayto"summarized", or to"updates"with a beta header, or usebetween_tools. - Code that reads the first block breaks. A response can start with a
thinkingblock, so read blocks by type, and pass thinking blocks back unchanged in tool loops. - Effort levels are recalibrated. The default on the API is
high, and a named level does not produce the same amount of thinking as on Sonnet 5. Anthropic suggestsmediumfor well-specified agentic coding andmediumorlowfor chat. Our effort ladder reference compares the levels across vendors. - Aliases can move for you. At our check at 21:28 UTC on September 28, OpenRouter’s
~anthropic/claude-sonnet-latestpointed at Sonnet 5.5; on September 25 it pointed at Sonnet 5. Code calling that alias changed model with no deploy. The alias and retirement ledger tracks these moves.
One change helps: the minimum prompt that can be cached drops to 512 tokens from 1,024 on Sonnet 5, so shorter prompts can now be cached. Pricing, benchmarks and safeguards are covered in our Sonnet 5.5 launch post.
07 — ConclusionMost Sonnet 5 code needs two fixes and a new test pass
Pin the model ID, fix the two errors in a branch, and test streamed output and refusals before switching traffic
The errors are the easy part: they fail loudly and the messages name the fix. The quiet changes, such as empty progress notes, dropped reasoning and recalibrated effort, only show up when someone reads the output. Run your own evaluation set at two effort levels on Sonnet 5.5, and keep Sonnet 5 as the fallback until the numbers hold. Retirement dates for the older models are on our deprecation calendar.