Claude Haiku 5.5 Returning 400 Errors After Switching From Haiku 4.5? The Breaking Changes and Exact Fixes (2026)
Short answer: Claude Haiku 5.5 rejects several request shapes that Haiku 4.5 accepted. The usual culprits: budget_tokens thinking, a custom temperature or any top_k, and an assistant prefill. Each returns a 400 error. Switch thinking to {"type": "adaptive"}. Drop the sampling parameters. End your messages with a user turn. Then recount tokens. The new tokenizer makes the same text about 30% longer, which can push big prompts over the 100,000-token line where Haiku 5.5 costs five times more.
Haiku 5.5 came out on October 7 at a tenth of Haiku 4.5’s input price. Plenty of developers changed one string in their config, hit deploy, and watched every request come back 400.
The model ID swap is the easy part. Anthropic’s migration guide lists ten changes, and five of them can turn a working request into an error.
Here’s what breaks, the exact fix for each, and the cost catch hiding in the pricing table.
Jump to a Fix
- Why Does Claude Haiku 5.5 Return a 400 Error When Haiku 4.5 Worked?
- How Do You Fix the budget_tokens Thinking Error?
- Why Does temperature or top_k Break Haiku 5.5?
- What Replaces Assistant Prefill?
- Is Claude Haiku 5.5 Actually Cheaper Than Haiku 4.5?
- Changes That Don’t Error but Still Bite
- Tips
- Warnings
- FAQ
- Sources
Why Does Claude Haiku 5.5 Return a 400 Error When Haiku 4.5 Worked?
Claude Haiku 5.5 returns a 400 error for request parameters that Claude Haiku 4.5 accepted, including manual thinking budgets, non-default sampling values, assistant prefill, and the older computer use tool, according to Anthropic’s Haiku 5.5 migration guide.
Use this table to match your error to its cause:
| What your Haiku 4.5 request sends | Haiku 5.5 result | Fix |
|---|---|---|
thinking: {"type": "enabled", "budget_tokens": N} |
400 error | Use {"type": "adaptive"} plus an effort level |
temperature other than 1 |
400 error | Remove it |
top_p other than 0.99 (including 1) |
400 error | Remove it |
Any top_k, or temperature and top_p together |
400 error | Remove them |
| Final assistant turn (prefill) | 400 error, even with thinking off | End with a user turn; use structured outputs |
computer_20250124 tool |
400 error on Claude API and Google Cloud | Move to computer_toolset_20260801 |
| Edited earlier turns sent back with thinking blocks | 400 error (newer accounts) | Keep conversations append-only |
Table: our summary of the breaking changes in Anthropic’s Claude Haiku 5.5 migration guide, checked October 8, 2026.
The first three rows cover most of the errors people report. Fix those and you’re probably 90% of the way there.
How Do You Fix the budget_tokens Thinking Error?
To fix the Claude Haiku 5.5 budget_tokens error, replace thinking: {"type": "enabled", "budget_tokens": N} with thinking: {"type": "adaptive"} and control how much the model thinks through output_config.effort instead of a token budget.
Before, on Haiku 4.5:
"thinking": { "type": "enabled", "budget_tokens": 8000 }
After, on Haiku 5.5:
"thinking": { "type": "adaptive" },
"output_config": { "effort": "medium" }
Three follow-on changes trip people up here:
- Thinking is on by default. Even if you never set
thinking, responses can start with thinking blocks. If you ran Haiku 4.5 without thinking, pick a lower effort level rather than trying to switch it off. - Don’t read
content[0]as the answer. The first block may be thinking. Select blocks bytype. - Thinking counts toward max_tokens. A small
max_tokenscan stop withstop_reason: "max_tokens"after thinking and before any text.
When I checked the guide’s thinking section, I noticed one more quiet difference: Haiku 5.5 returns thinking blocks with an empty thinking field by default. If your logs showed summarized reasoning before, add "display": "summarized" to get it back.

Why Does temperature or top_k Break Haiku 5.5?
Claude Haiku 5.5 only accepts temperature set to 1 and top_p set to its default of 0.99, so any other value, any top_k, or a request that sends both temperature and top_p returns a 400 error.
The simplest fix is to delete all three parameters. Anthropic’s guide says to steer the model with prompting instead.
This one hides well. Sampling parameters often live in a shared client wrapper or an SDK default, not in the call you’re looking at. Search the whole codebase for temperature, not just the file that builds the request.
Watch out for top_p: 1. A lot of code sets it as a “neutral” value. On Haiku 5.5 it’s still an error.
What Replaces Assistant Prefill?
On Claude Haiku 5.5, a request whose messages end with an assistant turn returns a 400 error even with thinking turned off, so you need to end every request with a user turn and replace the prefill based on what it was doing.
- Forcing JSON or a format: use structured outputs, or a tool with enum fields for classification. (Bedrock doesn’t support structured outputs, so use tools there.)
- Skipping a preamble: ask for a direct answer in the system prompt.
- Continuing a cut-off reply: move the partial text into the user message and ask the model to continue from there.
- Reminders: put them in the user turn.
Honestly, the JSON case is the one worth doing properly. Structured outputs are more reliable than a prefilled { ever was.
Is Claude Haiku 5.5 Actually Cheaper Than Haiku 4.5?
Claude Haiku 5.5 costs $0.10 per million input tokens and $0.50 per million output tokens for prompts up to 100,000 tokens, versus $1 and $5 for Claude Haiku 4.5, but prompts over 100,000 tokens jump to $0.50 and $2.50, according to Anthropic’s pricing page as of October 2026.
There’s a catch that the headline “90% cheaper” skips. Haiku 5.5 uses the newer tokenizer, which Anthropic says produces about 30% more tokens for the same text. So a prompt that was 90,000 tokens on Haiku 4.5 becomes roughly 117,000 on Haiku 5.5, and lands in the expensive tier.
When I compared three typical request sizes using Anthropic’s published prices, I found that the savings shrink from 87% to 35% once a prompt crosses that line:
| Request (as measured on Haiku 4.5) | Haiku 4.5 cost per 1,000 requests | Same text on Haiku 5.5 (+30% tokens) | Haiku 5.5 cost per 1,000 requests | Change |
|---|---|---|---|---|
| 2,000 in / 300 out (classifier, short chat) | $3.50 | 2,600 in / 390 out | $0.46 | −87% |
| 20,000 in / 1,000 out (RAG answer) | $25.00 | 26,000 in / 1,300 out | $3.25 | −87% |
| 90,000 in / 2,000 out (long document) | $100.00 | 117,000 in / 2,600 out (over 100K tier) | $65.00 | −35% |
Table: our calculation using Anthropic’s standard (non-batch, uncached) prices checked October 8, 2026, with a flat 30% token increase. Real increases vary by content, and adaptive thinking adds output tokens not shown here.
Still cheaper in every row. But if your budget assumed “90% off,” the long-document jobs will surprise you.
Count tokens with model set to claude-haiku-5-5 before you trust any estimate. Reusing Haiku 4.5 counts is exactly how the third row happens. If you’re comparing against the bigger models too, our breakdown of Claude Sonnet 5.5 vs Opus 5.5 cost per task uses the same approach.
Changes That Don’t Error but Still Bite
Not every migration problem announces itself with a 400. These ones fail silently:
- Model ID format. The Claude API ID is
claude-haiku-5-5, with no date suffix and no separate alias. If you’re used to aliases quietly pointing at an older model, see our note on why a Claude Opus alias might still be Opus 5. - Replaying conversations across accounts. Thinking blocks only work in the account that produced them. Another account’s request succeeds, but the reasoning is dropped.
- Refusals. Haiku 5.5 can return
stop_reason: "refusal"from safety classifiers, with no server-side fallback. Handle it. - Priority Tier. Not supported on Haiku 5.5. If you have a Priority Tier commitment on Haiku 4.5, plan capacity separately.
- Forced tool_choice. It works, but the model skips thinking before the tool call. Use
autoif you want it to reason first.
Most people skip the refusal handling and regret it the first time a batch job stalls on one input.
Tips
- In Claude Code,
/claude-api migrate this project to claude-haiku-5-5applies the ID swap and breaking parameter changes, then gives you a checklist. - Run your test suite against Haiku 5.5 in a branch before switching production. Most errors show up on the first call.
- Raise
max_tokenson short-output calls to leave room for thinking, or lower the effort level. - Check Anthropic’s model deprecations page for how long Haiku 4.5 stays available, so you don’t rush the migration.
Warnings
- Don’t assume Managed Agents users are affected the same way. Anthropic says they only need the model name change.
- Don’t strip thinking blocks from tool-result turns. Pass them back unmodified.
- Don’t reuse Haiku 4.5 cost dashboards. Token counts, and therefore costs, change shape.
- If your currency isn’t USD, card fees apply on top of API bills. Our look at the hidden 2% on foreign subscriptions explains why.
FAQ
Can I turn thinking off completely on Claude Haiku 5.5?
Anthropic’s guidance is to use a lower effort level rather than switching thinking off. At low effort the model thinks less and can skip thinking entirely on simple requests.
Does Claude Haiku 5.5 support a 1M token context window?
Yes. Claude Haiku 5.5 has a 1M token context window and up to 128K output tokens, but prompts over 100,000 tokens are billed at the higher price tier.
Is the batch API cheaper for Claude Haiku 5.5?
Yes. Anthropic’s Batch API gives a 50% discount, bringing Haiku 5.5 to $0.05 input and $0.25 output per million tokens for prompts up to 100,000 tokens.
Sources
- Claude Platform Docs — Claude Haiku 5.5 migration guide
- Claude Platform Docs — Pricing
- Claude Platform Docs — Effort
🔗 Related guides
Fact-checked against Anthropic’s Claude Platform documentation as of October 8, 2026. Prices and parameter rules can change; cost figures in the comparison table are our own calculation.
