DEV Community

Pesimmoq
Pesimmoq

Posted on

Claude Opus 5.5 / Sonnet 5.5: 5 settings that return 400 when you only change the model name

Claude Opus 5.5 shipped on September 22, 2026 and Claude Sonnet 5.5 on September 28. If you take code that runs on Opus 5 or Sonnet 5 and change only the model string, one of these five settings will return an HTTP 400. All five are in Anthropic's official migration guides; I reproduced the first one against the live API on October 6 and pasted the exact responses below.

A static scanner that finds these in your code (file:line) is open source: claude5-migration-kit.

python scan.py path/to/your/app --target opus-5-5
python scan.py path/to/your/app --target sonnet-5-5
Enter fullscreen mode Exit fullscreen mode

1. thinking: {"type": "disabled"} returns 400

Opus 5.5 cannot turn thinking off. On Opus 5 you could send disabled at high effort or below. On Opus 5.5, both disabled and enabled + budget_tokens are rejected at every effort level:

"thinking.type.disabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.
Enter fullscreen mode Exit fullscreen mode

Omit thinking (same as adaptive) and lower output_config.effort where you used to disable thinking.

Sonnet 5.5 replaces disabled with between_tools. It is the lowest thinking setting: no up-front thinking, only the short notes between tool calls.

To turn thinking off on this model, send "thinking": {"type": "between_tools"} instead of {"type": "disabled"}. The model does not think before responding. The short updates it writes between tool calls come back as thinking blocks.
Enter fullscreen mode Exit fullscreen mode
# Sonnet 5
client.messages.create(model="claude-sonnet-5", max_tokens=16000,
                       thinking={"type": "disabled"}, output_config={"effort": "xhigh"}, messages=[...])

# Sonnet 5.5
client.messages.create(model="claude-sonnet-5-5", max_tokens=16000,
                       thinking={"type": "between_tools"}, output_config={"effort": "high"}, messages=[...])
Enter fullscreen mode Exit fullscreen mode

between_tools works only at high effort or below (400 with xhigh / max), takes no other field (display, budget_tokens and block_binding are 400), and cannot be combined with per-message effort changes. In a request without tools it answers without thinking at all, so move multi-step reasoning tasks back to adaptive.

Both responses above are verbatim from the API (max_tokens: 64, no charge for a 400).

2. Forced tool_choice returns 400

{"type": "any"} and {"type": "tool", "name": ...} are rejected on both models, including on the token-counting endpoint:

tool_choice: type "tool" and "any" are not supported for this model.
Enter fullscreen mode Exit fullscreen mode

Use tool_choice: {"type": "auto"}, mark the tool strict: true so the input matches the schema, and say in the prompt when to call it. Strict tools are capped at 20 per request and need additionalProperties: false on every object. If you only wanted JSON, use structured outputs (output_config.format) instead of a tool. On Amazon Bedrock, Opus 5.5 and Sonnet 5.5 have no structured outputs (strict included): send auto, name the tool in the prompt, and validate the input yourself.

3. computer_20251124 returns 400 on the Claude API and Google Cloud

Declare computer use as the computer_toolset_20260801 toolset (no beta header). Sonnet 5.5 also rejects computer_20250124 on every platform. Amazon Bedrock keeps computer_20251124. The fine-grained-tool-streaming-2025-05-14 header is a 400 next to a toolset entry; set eager_input_streaming: true on the tools that need it.

4. Editing conversation history returns 400 (or drops the thinking)

The preserved-thinking check that Fable 5.1 introduced now applies to both models: thinking blocks are bound to the model and to the conversation prefix. Editing system, tools or earlier turns and then sending the thinking blocks back is a 400 on accounts created on or after August 31, 2026 (enforced by default), or a dropped block otherwise.

  • Keep history append-only. Change instructions with a mid-conversation {"role": "system", ...} message.
  • Change tools with tool_addition / tool_removal; with the inline-tools-2026-09-15 beta you can include full definitions.
  • To shrink history, use on-demand compaction (compact-2026-09-04): you receive a signed summary block and send it first on the next request.
  • Sonnet 5.5 thinking blocks are also account-bound: sent from another organization they are silently dropped.

5. Sonnet 5.5 rejects Opus 4.x / Sonnet 5 as advisors

With a Sonnet 5.5 executor, the advisor must be Opus 5, Opus 5.5, Sonnet 5.5, Fable 5 / 5.1 or Mythos 5 / 5.1. Opus 4.8 / 4.7 / 4.6, Sonnet 5, Sonnet 4.6 and Haiku 5.5 return 400. Advice comes back encrypted as advisor_redacted_result.

Changes that don't fail, but matter

  • Opus 5.5 defaults to effort: medium (Opus 5: high). Carry over a request without effort and it runs one level lower. Anthropic reports that 5.5 at medium matches or beats Opus 5 at high; start there and sweep.
  • Sonnet 5.5 effort levels are recalibrated. Start coding agents at medium, general work at high, max_tokens 128K with streaming.
  • Text between tool calls now arrives in thinking blocks, empty at the default display. A UI that streams progress notes goes quiet with no error. Use display: "updates" (beta header thinking-display-updates-2026-08-18).
  • More refusal categories. Opus 5.5 adds bio; Sonnet 5.5 has cyber, bio, frontier_llm, reasoning_extraction, general_harms. Server-side fallback only retries cyber and frontier_llm on Sonnet 5. Since September 24, refusals before any output in bio / frontier_llm / reasoning_extraction are billed.
  • Prompt cache minimum is 512 tokens (Sonnet 5: 1,024). Sonnet 5.5 cache reads dropped to $0.10/MTok on October 7 (0.05x).
  • Priority Tier is not supported on Opus 5.5.
  • Sonnet 4.5 retires on November 30, 2026. Replacement: Sonnet 5.5.

Summary

# Symptom Fix
1 disabled → 400 Opus 5.5: omit + lower effort. Sonnet 5.5: between_tools (≤ high)
2 tool_choice: any → 400 auto + strict + name the tool in the prompt
3 computer_20251124 → 400 computer_toolset_20260801
4 edited history → 400 append-only; system messages, tool_addition, compaction
5 advisor → 400 Opus 5 / 5.5, Sonnet 5.5, Fable

The seven things that already broke when moving from 4.x to Opus 5 / Sonnet 5 (temperature, budget_tokens, prefill, max_tokens eaten by thinking, content[0] on refusals, empty thinking text, the ~30% tokenizer increase) still apply.

The full guide, with per-model checklists, the prompt re-tuning table across 4.7 → 4.8 → Opus 5 → Fable 5.1 → 5.5, prompt caching and history design, and verification scripts, is a 70-page PDF: Claude 5 Migration Guide ($19). Written with AI assistance; every API behavior was checked against the live API or the official docs before publication.

Official sources: Opus 5.5 migration guide · Sonnet 5.5 migration guide

Top comments (0)