The Ten-Cent Haiku

Claude Haiku 5.5 launched at $0.10 per million input tokens and $0.50 output, 90% below Haiku 4.5, yet Anthropic's own average saving is 75%. The gap is three pieces of fine print: prompts over 100K tokens pay 5x, a new tokenizer counts the same text as more tokens, and effort defaults to medium while the headline benchmarks run higher. A 99K prompt costs $0.0104 and a 101K prompt $0.0530; a 40-turn agent that crosses the line costs 3.7x what it would below it. At this price, trying the cheap model first costs 2.5% of an Opus 5.5 call, so the hard part of routing is no longer money. The pricing, the three catches with worked numbers, and a Python tutorial that measures the tokenizer change, the 100K exposure and the best effort level on your own traffic.

Published 2026-10-08 by Dor Amir on the Nadir blog.

Filed under Pricing & Models.

TL;DR.

Anthropic released Claude Haiku 5.5 on October 7. The headline price is $0.10 per million input tokens and $0.50 per million output tokens, 90% below Haiku 4.5's $1 and $5, and level with OpenAI's GPT-6 Luna. Anthropic says the average workload will cost about 75% less than on Haiku 4.5.

The gap between 90% and 75% is the fine print, and it has three parts:

None of these makes the launch less important. It makes it more important. At $0.10, trying the cheap model first costs about 2.5% of an Opus 5.5 call on a typical request, down from about 19% with Haiku 4.5. The cost of a wrong guess has collapsed. What's left is knowing which requests Haiku 5.5 will finish correctly, and keeping them under 100K.

This post covers the pricing, the three catches with worked numbers, what the price drop does to routing math, and a Python tutorial that measures all of it on your own traffic before you switch.

Prices are Anthropic's list prices as published on October 7, 2026. Benchmark figures are vendor-reported. All cost examples are illustrative, not Nadir customer data.

What shipped.

Per million tokensHaiku 5.5, prompt up to 100KHaiku 5.5, prompt over 100KHaiku 4.5Sonnet 5.5Opus 5.5
Input$0.10$0.50$1.00$2.00$4.00
Output$0.50$2.50$5.00$10.00$20.00
Cache write$0.125$0.625$1.25$2.50$5.00
Cache read$0.01$0.05$0.10$0.10$0.20

Haiku 5.5 has a 1M-token context window and up to 128K output tokens. It is on the Claude Platform, AWS, Google Cloud and Microsoft Azure under the model ID claude-haiku-5-5. The Batch API takes another 50% off. Anthropic also cut Sonnet 5.5 cache reads from $0.20 to $0.10 in the same announcement.

The benchmark jump over Haiku 4.5 is large. On Anthropic's table, Haiku 5.5 scores 72.4% on OSWorld 2.1 (offline subset) against 15.7% for Haiku 4.5 and 48.9% for GPT-6 Luna, and 39.2% on Terminal-Bench 4.0 against 0.0% and 16.4%. Sonnet 5.5 is still well ahead on agentic coding at 70.6% on Terminal-Bench, which is why Anthropic positions Haiku for high-volume work: extraction, classification, summaries and sub-agents, with Sonnet and Opus kept for demanding coding.

Catch one: the 100K line.

Chart: Claude Haiku 5.5 cost per request vs prompt length with 1,000 output tokens. Cost rises slowly to $0.0104 at 99K, then jumps to $0.0530 at 101K. Haiku 4.5's flat rate is shown dashed for comparison.
Chart: Claude Haiku 5.5 cost per request vs prompt length with 1,000 output tokens. Cost rises slowly to $0.0104 at 99K, then jumps to $0.0530 at 101K. Haiku 4.5's flat rate is shown dashed for comparison.

Anthropic prices Haiku 5.5 by prompt length. We read the table the way long-context tiers usually work elsewhere: once a prompt is over 100,000 tokens, the whole request, output included, bills at the higher rate. That reading produces a step, not a slope. Going from 99K to 101K adds 2% more prompt and multiplies the bill by 5.1x. Anthropic's materials don't say how cached tokens count toward the line, so check your first invoice against your own logs. We assume here that they count.

Anthropic says about 90% of Haiku 4.5 requests were under 100K, so most traffic never sees the higher rate. The 10% that do are not random. They are the long-document jobs, the RAG calls with too many chunks, and above all agent sessions, which start small and grow every turn.

Chart: per-turn cost of a 40-turn Haiku 5.5 agent session. Turns 1 to 17 cost about $0.002 each. At turn 18 the context passes 100K and each turn costs about $0.011, rising to $0.016. Session total $0.338, against $0.092 with no cliff and $0.095 if the agent compacts at 95K.
Chart: per-turn cost of a 40-turn Haiku 5.5 agent session. Turns 1 to 17 cost about $0.002 each. At turn 18 the context passes 100K and each turn costs about $0.011, rising to $0.016. Session total $0.338, against $0.092 with no cliff and $0.095 if the agent compacts at 95K.

Take an agent that starts with 20K tokens of system prompt and tools, adds 5K per turn of tool results and history, and writes 1K tokens per turn, with the prefix cached. For 17 turns it costs about $0.002 a turn. At turn 18 the context passes 100K and every turn after costs $0.011 to $0.016. The 40-turn session comes to $0.338. Priced at the short rate throughout, it would be $0.092. Compacting the context back to 30K whenever it reaches 95K, including the cost of the summary call, brings it to $0.095.

That's a 3.7x difference from one design choice. We've seen the same shape on Grok's 200K line and GPT-5.6 Codex's 272K line. The fix is the same too: give long-running agents a context budget below the line, and treat compaction as a pricing decision, not only a quality one. Compaction has its own cache cost, and at Haiku prices the summary call is cheap enough that it usually wins.

Catch two: the tokenizer.

A price per token only means something next to a token count. Haiku 5.5 moved to the tokenizer used by Sonnet 5.5 and Opus 5.5. Anthropic's footnote says the 75% average already accounts for the extra tokens. DataCamp puts the increase at about 30% for the same text.

Here's what that does to the 90% headline, for a request that is 3,000 input and 800 output tokens on the new tokenizer:

Tokens in / outCost per requestvs Haiku 4.5
Haiku 4.5, old tokenizer (30% fewer)2,308 / 615$0.00538baseline
Haiku 4.5, if counts were equal3,000 / 800$0.00700
Haiku 5.53,000 / 800$0.00070-87%

So the short-prompt saving is 87 to 90% depending on your text, before effort. It's still a large cut, and the gap is the reason to re-count your own tokens instead of trusting a per-token ratio. One useful side effect: since Haiku 5.5 now shares a tokenizer with Sonnet 5.5 and Opus 5.5, a request should count about the same on all three, which makes routing between them easier to price.

Catch three: effort.

Haiku 5.5 takes an effort setting from low to max, and the API default is medium. Higher effort means more thinking, and thinking tokens bill as output.

The setting matters for quality. VentureBeat's reading of Anthropic's charts puts Terminal-Bench 4.0 at about 39% at maximum effort and about 20% at the default. If you take the headline score and run the default, you may be buying a different model than the one you benchmarked.

The setting matters less for cost than it would on a bigger model, because Haiku 5.5's output is so cheap:

Chart: cost per 1,000 requests at 3,000 input and 800 visible output tokens. Opus 5.5 $28.00, Sonnet 5.5 $14.00, Haiku 4.5 $5.38, Haiku 5.5 with 6K thinking tokens $3.70, with 1K thinking $1.20, visible output only $0.70.
Chart: cost per 1,000 requests at 3,000 input and 800 visible output tokens. Opus 5.5 $28.00, Sonnet 5.5 $14.00, Haiku 4.5 $5.38, Haiku 5.5 with 6K thinking tokens $3.70, with 1K thinking $1.20, visible output only $0.70.

Add 6,000 thinking tokens to every request and Haiku 5.5 costs $3.70 per 1,000 requests, still less than Haiku 4.5 with no thinking and about a quarter of Sonnet 5.5 before Sonnet's own thinking. The thinking counts used here are assumptions to show the scale; measure yours with the tutorial below. The point is that model and effort are now one decision with two dials. "Haiku 5.5 at high, or Sonnet 5.5 at low?" is a real question for a lot of traffic, and the answer depends on the task, not the price sheet. We showed in Cheaper on Paper how a model that thinks more can cost more than one with a higher list price. At these prices that's unlikely against Sonnet, but likely enough against GPT-6 Luna, which matches Haiku 5.5's per-token price, that you should compare cost per solved task, not per token.

What a $0.10 model does to routing math.

Routing has always been a bet: send a request to the cheap model, and if the answer isn't good enough, pay for the expensive one too. The retry tax is the cost of the losing bets.

The size of that tax is set by the price ratio. On the 3,000-in, 800-out request:

Cheap modelCost per requestAs a share of one Opus 5.5 call ($0.028)
Haiku 4.5 (old tokenizer)$0.0053819%
Haiku 5.5, visible output only$0.000702.5%
Haiku 5.5, 6K thinking tokens$0.0037013%

At 2.5%, a failed cheap attempt is nearly free in money. Route half the requests to Haiku 5.5 and re-run 10% of those on Opus 5.5 after they fail a check, and cost per request falls 44%. Route 70% with 15% re-run and it falls 58%. Both are illustrative, at list prices, and both depend entirely on your traffic.

Two things haven't got cheaper. Latency: a request that fails on Haiku and re-runs on Opus takes both calls' time. Detection: the savings only hold if you can tell which answers failed, or predict in advance which requests will. A $0.10 model makes being wrong cheap, but not harmless, and a wrong answer that nobody catches costs more than either call. A cheap model also changes cache behaviour: moving a conversation between models throws away its prompt cache, so route whole tasks or sessions, not individual turns within them.

Tutorial: price Haiku 5.5 on your own traffic.

You need a sample of real requests from your logs (a few hundred is enough), an Anthropic API key, and a way to check whether an answer is right: unit tests, an exact-match field, or a rubric. The steps count tokens, price them with the 100K line, find your best effort level, and work out what routing would save.

Step 1: measure the tokenizer change.

count_tokens is free and counts with the tokenizer of the model you name.

import anthropic, json, statistics

client = anthropic.Anthropic()

def count(model, req):
    return client.messages.count_tokens(
        model=model,
        system=req.get("system", ""),
        messages=req["messages"],
    ).input_tokens

sample = [json.loads(line) for line in open("sample_requests.jsonl")]

ratios = []
for req in sample:
    old = count("claude-haiku-4-5", req)
    new = count("claude-haiku-5-5", req)
    req["tokens_in"] = new
    ratios.append(new / old)

print(f"new / old tokens: median {statistics.median(ratios):.2f}, "
      f"p90 {sorted(ratios)[int(len(ratios) * 0.9)]:.2f}")

Multiply your Haiku 4.5 bill by this ratio before you apply the new prices. Code, JSON and non-English text often move differently from English prose, so look at the p90, not only the median.

Step 2: price each request with the 100K line.

# USD per million tokens, Anthropic list prices, October 7, 2026.
SHORT = dict(input=0.10, output=0.50, cache_write=0.125, cache_read=0.01)
LONG = dict(input=0.50, output=2.50, cache_write=0.625, cache_read=0.05)
LINE = 100_000

def haiku55_cost(prompt_tokens, output_tokens, cache_read=0, cache_write=0):
    """prompt_tokens includes cached tokens. Assumes the whole request
    reprices once the prompt is over the line."""
    p = SHORT if prompt_tokens <= LINE else LONG
    uncached = prompt_tokens - cache_read - cache_write
    return (uncached * p["input"] + cache_read * p["cache_read"]
            + cache_write * p["cache_write"] + output_tokens * p["output"]) / 1e6

over = [r for r in sample if r["tokens_in"] > LINE]
near = [r for r in sample if 0.8 * LINE < r["tokens_in"] <= LINE]
print(f"{len(over) / len(sample):.1%} of requests over 100K, "
      f"{len(near) / len(sample):.1%} within 20% of the line")

The "near" group is the one to watch. Requests that sit at 80 to 100K today will cross the line the next time someone adds a tool, a few-shot example or a longer retrieval window. For agents, run the same check on every turn of a session, not on the first request.

Step 3: sweep effort and score each level.

def run(req, effort):
    resp = client.messages.create(
        model="claude-haiku-5-5",
        max_tokens=16000,
        system=req.get("system", ""),
        messages=req["messages"],
        output_config={"effort": effort},
    )
    text = "".join(b.text for b in resp.content if b.type == "text")
    u = resp.usage
    cost = haiku55_cost(u.input_tokens + u.cache_read_input_tokens
                        + u.cache_creation_input_tokens,
                        u.output_tokens,  # includes thinking tokens
                        u.cache_read_input_tokens,
                        u.cache_creation_input_tokens)
    return text, cost

def check(req, answer):
    ...  # your unit tests, exact match, or rubric. Return True or False.

results = {}
for effort in ["low", "medium", "high", "max"]:
    solved, spend = 0, 0.0
    for req in sample:
        answer, cost = run(req, effort)
        spend += cost
        solved += check(req, answer)
    results[effort] = (solved / len(sample), spend / max(solved, 1))
    print(f"{effort:>6}: solve rate {solved / len(sample):.1%}, "
          f"cost per solved task ${spend / max(solved, 1):.5f}")

Pick by cost per solved task, not cost per request. A level that costs twice as much but solves 30% more can be the cheaper one. Run the same loop on your current model as the baseline, keeping its own effort setting.

Step 4: price the routing decision.

def blended(share_to_haiku, miss_rate, haiku_cost, big_cost):
    """share_to_haiku: share of requests sent to Haiku 5.5.
    miss_rate: share of those that fail a check and re-run on the big model."""
    return ((1 - share_to_haiku) * big_cost
            + share_to_haiku * haiku_cost
            + share_to_haiku * miss_rate * big_cost)

solve_rate, haiku_per_solved = results["high"]
haiku_cost = haiku_per_solved * solve_rate   # back to cost per request
big_cost = 0.028                             # your measured baseline per request

for share in (0.3, 0.5, 0.7):
    c = blended(share, 1 - solve_rate, haiku_cost, big_cost)
    print(f"route {share:.0%}: {1 - c / big_cost:.1%} cheaper per request")

This uses the overall solve rate as the miss rate, which is pessimistic: a good router sends Haiku the requests it is most likely to solve, so the miss rate on routed traffic should be lower than on the whole sample. The gap between the two is what a router is worth.

Where Nadir fits.

Nadir makes the per-request decision this tutorial is approximating. Send model="auto" and a trained classifier reads each prompt and picks the tier from the models you've configured, against the quality floor you set on the API key. It routes whole requests, so a request sent to the cheap tier never touches the expensive one, and each response reports the routing decision and its cost in the metadata. If you want only the decision, POST /v1/bucket returns simple, medium or complex with a probability for each, and you call your own providers, at whatever effort level you chose in Step 3.

When a model like Haiku 5.5 lands, the expensive part is not changing the model string. It's finding out how much of your traffic can move without anyone noticing a worse answer. Observe mode records the decision Nadir would have made on every request without changing a single response, so you can compare the routed share and projected cost against your own Step 3 numbers before you switch. Start with a free key.

Conclusion.

Claude Haiku 5.5 cuts the price of a short request by about 90% and brings a cheap model within sight of frontier agent benchmarks. Three details decide what you actually pay: a 100K line above which every token costs 5x, a tokenizer that counts the same text as somewhat more tokens, and an effort setting whose default is not the one behind the best scores. Keep agents under the line, re-count your tokens, and pick effort by cost per solved task. Then use the new price ratio for what it is: at 2.5% of a premium call, trying the cheap model first is almost free, and the only hard part left is choosing which requests to send it.


Sources: Anthropic, [Claude Haiku 5.5](https://www.anthropic.com/claude-haiku-5-5), October 7, 2026 (pricing, the 100K threshold, the 75% average estimate, the tokenizer note and benchmark table). [VentureBeat](https://venturebeat.com/technology/anthropic-launches-claude-haiku-5-5-with-90-api-price-reduction-matching-gpt-6-luna), October 7, 2026 (Terminal-Bench by effort level, competitor prices). [DataCamp](https://www.datacamp.com/blog/claude-haiku-5-5) (tokenizer estimate of about 30%, Batch API discount). [MarkTechPost](https://www.marktechpost.com/2026/10/07/anthropic-releases-claude-haiku-5-5-a-small-model-with-1m-context-priced-at-0-10-per-million-input-tokens/), October 7, 2026. Opus 5.5 and Sonnet 5.5 prices from Anthropic's model pricing as of October 8, 2026. Benchmark scores are vendor-reported. The agent session, effort and routing figures are illustrative calculations at list prices, and assume the whole request reprices above 100K with cached tokens counting toward the line.

More on pricing & models

What Nadir is

Nadir is an LLM router. Nadir sizes every prompt and routes it to the cheapest model that still clears your quality bar. A small decision model reads each prompt against your model menu and picks the lowest-cost model it expects to handle it. When the decision model is uncertain or unavailable, the request goes to the strongest model on the menu. The routing step makes no call to your model provider.

Nadir runs two ways. The decision API returns a model, reasoning-effort, cache, context, and policy recommendation without calling a model provider, beside the gateway you already run. That is how a shadow-mode evaluation works, and its projected savings stay advisory. The OpenAI compatible managed proxy executes the route, and migration is a two-line change: point the base URL at api.getnadir.com and set model to auto. On that path an optional verifier can score a complete non-streaming answer and escalate to a stronger model when it misses the configured bar. Streaming bypasses post-generation verification. BYOK is supported on every tier.

For coding agents, Nadir Auto is a terminal launcher for Claude Code or Codex that asks Nadir for the main-session model before each turn, with your configured model as the fallback and cost ceiling. Delegation integrations for Claude Code, Codex, or Cursor instead recommend a model tier for subagent work, and the agent decides. Either way inference runs on your own provider account, so Nadir holds no provider keys on that path.

What the numbers are, and what they are not

Nadir publishes each evaluation with its scope. On checkable code, run-check-escalate solved 392 of 395 common HumanEval and MBPP problems (99.2%), graded by running the canonical tests; that applies only to tasks with runnable deterministic tests. Nadir-Tumbler posts an arena_score of 72.3 on RouterArena's public scorer, 5th of 23 routers, which measures the routing decision on RouterArena's own model pool. A reference-assisted RouterBench evaluation over 11,420 held-out triples produced a 60% lower projected cost than always-Opus with about 98% retained quality and a 1.7% catastrophic-route rate. That experiment gave the verifier the expensive-model reference answer, which production does not have, so it is a research ceiling and not the deployed path.

None of these is a production guarantee, a universal savings rate, or a forecast for any particular workload. Customer savings are reported from measured execution against a declared baseline, and customer quality only from outcome-labelled traffic. Projected savings and realized savings are separate artifacts and are never blended.

Design-partner program

Three rungs, picked by risk appetite. Rung 0 Shadow runs advisory decision calls alongside live traffic and returns a projected receipt, with nothing in the request path changed. Rung 1 Hosted is the two-line swap on a production slice and returns a realized receipt. Rung 2 On-prem is a supervised six-week proof of concept inside the partner's VPC, where no prompt, response, or usage reaches Nadir. The commitments are the same at every rung. Apply for a rung directly: Rung 0 Shadow, Rung 1 Hosted, or Rung 2 On-prem. Not sure which fits? Start at getnadir.com/contact/?reason=design-partner.

Licensing

NadirClaw is the self-hosted core, source-available under the PolyForm Noncommercial License. Source-available is the correct label; NadirClaw is not open source. Nadir Route's hosted plan has no base fee and charges a variable fee only on measured savings from requests Nadir executed.

Pages on this site

Machine-readable summaries of this site: llms.txt and llms-full.txt.