Claude Haiku 5.5: what breaks when you switch

10 min readKacper KlusekBy Kacper Klusek

On this page9 sections
Title card reading A tenth of the price. Not a drop-in, with the Claude Haiku 5.5 mark top left and a gold-outlined funnel of glowing request rows entering a small model chip, two rows snapping at the seam.

Anthropic shipped Claude Haiku 5.5 on October 7 at a tenth of Haiku 4.5’s sticker price, and the obvious move is to point your high-volume traffic at it. Claude Haiku 5.5 is real savings, Anthropic’s own blended math says about 75% rather than the sticker’s 90%, and six request shapes, five of which Haiku 4.5 accepted, now return a 400. This post walks the switch as a production change, not a model-string edit: the tiered pricing and what counts toward its 100,000-token threshold, the tokenizer that hands part of the discount back, the requests that now error, what adaptive thinking does to your response parser and your token math, and where the model belongs in a routing table.

The price is tiered, and the threshold counts your cache reads

The pricing page lists two rows for one model. A request whose prompt is up to 100,000 tokens pays $0.10 per million input tokens and $0.50 per million output, against Haiku 4.5’s $1 and $5. A request over the threshold pays $0.50 and $2.50, which is still half of Haiku 4.5 but five times the headline. The announcement says prompts up to 100,000 tokens made up around 90% of requests to the previous Haiku, so most workloads land in the cheap tier. Cache reads drop from $0.10 to $0.01 per million in that tier, and the Batch API still halves everything, down to $0.05 input.

The threshold itself is the part worth engineering around. Prompt length counts all input tokens, and the page says it plainly: “a request over the threshold pays the higher prices even when part of its prompt is a cache hit”.

The trap: the 100,000-token threshold counts cache reads and cache writes, and each request is priced on its own. A long cached prefix does not make the request cheap. It can hold every call in the 5x tier, so prompt caching lowers your bill without ever lowering your tier.

The tokenizer hands part of the discount back

Haiku 5.5 uses the same newer tokenizer as Claude 4.7 and later models, and the migration guide quantifies what that does to a bill: “the same input text produces approximately 30% more tokens on Claude Haiku 5.5 than on Claude Haiku 4.5”. Images move more: a 2,000 by 1,500 pixel image costs about 2.5 times as many visual tokens. Two practical consequences follow. A max_tokens limit tuned for Haiku 4.5 can now cut off equivalent output, and any per-token math you carried over misses the roughly 30% more tokens the same text now produces.

Fold the tiers and the tokenizer together and the honest number is the one in the announcement itself: “On average, it now costs around 75% less to run.” VKTR’s launch analysis lands close for the common case, estimating short-prompt workloads “should still cost roughly 85% to 90% less” after the tokenizer change. Budget on 75%, treat anything better as your workload’s shape, and recompute cost per task from your own traces rather than the sticker.

Six request shapes that now return a 400

The migration guide reads like an API changelog, and the breaking entries cluster into six shapes. Sampling is the one that hits config files: on Haiku 5.5 a temperature other than exactly 1 returns a 400, top_p must be its default 0.99 (a top_p of 1 errors), any top_k errors, and a request that includes both temperature and top_p errors even at their defaults. Assistant prefill is gone outright: Haiku 4.5 accepted a trailing assistant turn when thinking was off, and the new model rejects it with a 400 whether thinking is on or off. Manual thinking budgets go the same way, since budget_tokens returns a 400 and the replacement is adaptive thinking plus an effort level. Conversations become append-only: a thinking block sent back after any change to system, tools or earlier messages returns a 400 on accounts created since August 31, 2026 (older accounts see it only when they opt in). The old computer_20250124 tool errors in favor of a new computer toolset, with a separate tool version and beta header on Bedrock. And per the adaptive thinking docs, turning thinking off is itself constrained: allowed at high effort or below, a 400 at xhigh or max.

Table of six request shapes, each with what Claude Haiku 4.5 did and the 400 error or replacement Claude Haiku 5.5 returns, covering sampling parameters, assistant prefill, thinking budgets, conversation edits, computer use and disabling thinking at high effort.
The six breaking request shapes, from the Haiku 5.5 migration guide and the adaptive thinking docs.

None of these show up in a demo, because a demo sends default sampling, no prefill and single turns. They show up in production config, where every 400 is a request you used to serve. Grep your codebase for temperature, top_p, top_k, budget_tokens and trailing assistant turns before you change the model string.

Adaptive thinking rewrites your parser and your token math

Adaptive thinking is on by default, so a Haiku 5.5 response can open with one or more thinking blocks even when the request never mentions thinking. Code that reads content[0] as the answer breaks on day one. The what’s new page is unambiguous about the fix: select blocks by their type field, never by position, and pass thinking blocks back unmodified with tool results.

response = client.messages.create(
    model="claude-haiku-5-5",
    max_tokens=16000,
    thinking={"type": "adaptive"},
    output_config={"effort": "low"},
    messages=[...],
)
text = "".join(
    b.text for b in response.content if b.type == "text"
)

The token math changes twice over. Thinking tokens count toward max_tokens, so a tight limit can stop a response with stop_reason: "max_tokens" after a thinking block and before any text, which your retry logic will read as an empty answer. And in multi-turn work the migration guide notes that thinking blocks from earlier assistant turns now stay in context and count as input tokens, where Haiku 4.5 kept only the latest turn’s. A long agent conversation grows its input bill beyond what the tokenizer change alone explains. You also cannot prompt your way out: the prompting guide for Haiku 5.5 reports that “telling the model in the prompt to answer directly didn’t stop it from thinking.”

Effort is the cost control now, and it interacts with your cache

The replacement for thinking budgets is the effort parameter, set through output_config.effort with five levels from low to max. Haiku 5.5 and Opus 5.5 default to medium where most Claude models default to high, and Anthropic’s effort docs recommend starting at medium for most work including agentic coding, dropping to low for chat, short tool tasks and simple high-volume requests, and reserving high for knowledge work and strict instruction following. The levels trade real money for real behavior: in Anthropic’s own testing, moving from low to medium roughly halved early stopping and more than doubled output tokens per attempt.

The cache interaction is easy to miss. Changing the top-level effort value between requests invalidates the prompt cache for the conversation, and the per-message effort override that keeps the cache intact is a beta header on Haiku 5.5. The rest of the caching story got better: the prompt caching docs put the minimum cacheable prompt at 512 tokens, down from 4,096 on Haiku 4.5, so prompts that silently failed to cache on the old model now cache on the new one. If you last did the caching math when we compared caching economics across providers, redo it: the same announcement also halved Sonnet 5.5 cache reads to $0.10 per million, which Anthropic says cuts most agentic Sonnet workloads by around 20%, moving both ends of your router’s comparison at once.

Refusals arrive with no server-side fallback, and your client owns what happens next

Haiku 5.5 runs safety classifiers that can decline a request with stop_reason: "refusal" across four categories (cyber, frontier LLM, bio, general harms), there is no server-side fallback, and the prompting guide notes that resending the same request usually returns another refusal. If you are coming from Haiku 4.5, these refusals are new, so a migration that only swaps the model string ships an unhandled stop reason.

We hold a strong opinion here from running a small model in our own production path. Every pull request in our repositories is reviewed by one call to a 27B open-weight judge model on a European inference endpoint, and its answer counts only after deterministic validation: the reply must be valid JSON, the verdict one of two allowed values, and every reason must name a changed file and a numbered rule. Anything else is treated as no verdict, and a person decides. That last branch earns its keep, because the model’s verdict is not stable run to run: we watched it reject the same unchanged finding twice and approve it on the third pass. A cheap model in production needs exactly that shape around it: validate the output before it counts, give the invalid case a defined no-op path, and never let a retry loop stand in for one.

Where Haiku 5.5 belongs in your routing table

Anthropic’s routing guidance in the announcement is unusually direct: Sonnet 5.5 and Opus 5.5 remain the choice for complex agentic coding, while Haiku 5.5 is “best suited to more narrowly scoped tasks that might otherwise have been cost-prohibitive with previous versions of Claude”, and it pairs with the larger models as a subagent. The benchmark table backs the split: 72.4% on OSWorld 2.1’s offline subset for computer use against Sonnet 5.5’s 83.9 on the same subset, and 39.2% on Terminal-Bench 4.0 against Sonnet’s 70.6. The spec sheet is larger-model class now, with a 1M token context window and 128K output tokens, up from 200K and 64K, and a June 2026 knowledge cutoff per the model overview.

What the price cut does not buy is headroom. The rate limits page gives Haiku 5.5 the same limits as Haiku 4.5 and Sonnet 5.5 on every usage tier (the Start tier allows 1,000 requests and 2 million input tokens per minute), so ten times cheaper is not ten times more throughput, and Priority Tier is not supported at all. For model routing the operational notes matter as much as the quality split: the model ID is a fixed claude-haiku-5-5 with no date suffix, it is live on the Claude API, Amazon Bedrock, Google Cloud and Microsoft Foundry, structured outputs are unavailable on Bedrock, and VKTR notes Anthropic commits to serving it until at least October 7, 2027. Whether your provider mix should lean further into Anthropic is a separate question, one the payment data in our vendor-adoption ranking speaks to.

The takeaway

Claude Haiku 5.5 is the rare price cut that is also an API migration. Budget on Anthropic’s blended 75% rather than the sticker’s 90%, check whether your long-prompt traffic crosses the 100,000-token tier with cache reads counted, and grep for the six request shapes that now 400 before you touch the model string. Then rebuild the parser assumptions (blocks by type, thinking inside max_tokens) and give refusals a handled path, because there is no server-side fallback behind you. It is the same ship-today discipline we applied to Gemini 4 Argon on Wednesday: the model is callable in an afternoon, and the gap between callable and operable is where the week goes.

Sources

See this working in a system we built