Add Claude Opus 5.5 pricing

Merged
DO
1mo ago
+789-50

This pull request was posted by Claude Code using claude-opus-5-5 on behalf of Douwe.

Adds Claude Opus 5.5 (released 2026-09-22) across every provider that hosts it, and fixes the mispricing it hit on day one.

Prices

Opus 5.5 is cheaper than Opus 5 on every key, and bills cache hits at 0.05x base input rather than the usual 0.1x.

ProviderModel idinput5m cache write1h cache writecache readoutput
anthropicclaude-opus-5-5$4$5$8$0.20$20
google (Vertex, global)claude-opus-5-5$4$5—$0.20$20
aws (Bedrock, global)global.anthropic.claude-opus-5-5$4$5$8$0.20$20
aws (Bedrock, regional, +10%)anthropic.claude-opus-5-5, us./eu./jp./au. profiles$4.40$5.50$8.80$0.22$22
openrouteranthropic/claude-opus-5.5$4$5—$0.20$20

The context window is 1M on all of them. The new entries accept the same id forms as every other Claude entry on each provider: the dated -YYYYMMDD form on anthropic, @date on google, -v1 and bare on aws, and :beta on openrouter. This follows Fable 5.1 (#671) and Opus 5's aliases. ~anthropic/claude-opus-latest on OpenRouter now resolves to Opus 5.5. That entry gets a dated price (start_date: 2026-09-22) instead of an overwrite, so requests before the switch keep Opus 5's rate.

The bug this fixes

Today, claude-opus-5-5 resolves to the Opus 5 record on anthropic, google and aws, because those entries match by prefix/substring (starts_with: claude-opus-5, contains: …claude-opus-5). Opus 5.5 is priced at $5/$25 instead of $4/$20, and cache reads at 2.5x their real rate, with no error. This is the same failure #671 fixed for Fable 5.1. So the existing Opus 5 clauses are tightened to stop at Opus 5:

  • anthropic.yml: starts_with: claude-opus-5 → equals + regex: ^claude-opus-5-\d{8}$
  • google.yml: contains: claude-opus-5 → ends_with + contains: claude-opus-5@
  • aws.yml (global): contains → ends_with + contains: …-v1
  • aws.yml (regional): exact matches or a -v1 suffix, including exact us./eu./jp./au. aliases for the unversioned profile ids (the form Bedrock lists); the Fable 5.1 entry misses these, see #690.

The tightened Opus 5 clauses still match the bare id, the dated (-YYYYMMDD, @YYYYMMDD, -v1:0) forms and the existing claude-opus-5.0/claude-5-opus aliases. What they stop matching is anything else after the claude-opus-5 prefix, as #671 did for Fable 5.

openrouter.yml already used equals clauses.

Tests

Parametrized regressions in Python (tests/test_price_regressions.py), JS (matcher.test.ts) and Go (api_test.go). They assert that each Opus 5.5 id form resolves to its own record, pin its cache-read rate at 1/2.5 of Opus 5's, pin the absolute totals, and check both sides of the -latest date boundary. A separate test pins that Opus 5's dated and -v1:0 forms still resolve to Opus 5 after the tightening. They fail on main, where Opus 5.5 resolves to Opus 5.

Sources

  • Anthropic list price and the 0.05x cache multiplier: https://platform.claude.com/docs/en/about-claude/pricing
  • Bedrock: AWS price list API, AmazonBedrockFoundationModels → "Claude Opus 5.5 (Amazon Bedrock Edition)", which gives the global and regional rates above, including 1h cache writes. Model ids were verified with list_inference_profiles in us-east-1 and us-west-2.
  • OpenRouter: https://openrouter.ai/api/v1/models (anthropic/claude-opus-5.5 and ~anthropic/claude-opus-latest at $4/$20, cache read $0.20).
  • Vertex: Google lists Opus 5.5 as a partner model, but its pricing page renders client-side and I couldn't read the figures. The entry follows Anthropic's list price, as every other Claude entry in google.yml does, and its price_comments says so. Worth a glance from someone with a browser.