DEV Community

Khavel
Khavel

Posted on • Originally published at aimodelwatch.dev

Claude Opus 4.1 retires in a week — and its replacement is exactly 3x cheaper

If you have claude-opus-4-1-20250805 hard-coded anywhere, you have until August 5, 2026. That is seven days from the day this went up.

Anthropic deprecated it on June 5, 2026 and published a tentative retirement date of August 5. It is the only Claude model on Anthropic's status table currently marked Deprecated rather than Active or Retired — and the only Claude model with a retirement date still in the future.

The interesting part isn't the deadline. It's what the migration does to your bill.

The replacement is 3× cheaper on every single price dimension

Anthropic's deprecation table names claude-opus-4-8 as the recommended replacement. Here is what changes, straight from Anthropic's published pricing:

Price dimension (per MTok) Opus 4.1 (retiring) Opus 4.8 (replacement) Ratio
Input $15 $5 3.0×
Output $75 $25 3.0×
Cache write (5 min) $18.75 $6.25 3.0×
Cache write (1 hour) $30 $10 3.0×
Cache hits & refreshes $1.50 $0.50 3.0×
Batch input $7.50 $2.50 3.0×
Batch output $37.50 $12.50 3.0×

Not "roughly a third". Exactly a third, on all seven, with no rounding.

On a modest 10M input / 2M output month, that is $300 → $100. On a coding-agent-shaped workload — call it 90M in and 25M out per month — it's $3,225 → $1,075, a difference of $2,150 every month, for a migration you are being forced into anyway.

And the price cut isn't a downgrade in disguise:

Opus 4.1 Opus 4.8
Context window 200k tokens 1M tokens
Max output 32k tokens 128k tokens

Five times the context, four times the max output, one third the price. It is rare for a forced migration to be strictly better on every published axis, and this one is.

One wrinkle worth knowing: the two docs pages name different targets

Anthropic's model deprecations page lists the recommended replacement for claude-opus-4-1-20250805 as claude-opus-4-8, as a column in its migration table.

Anthropic's models overview says, in prose, to migrate to Claude Opus 5.

Both are first-party, and they are not really in conflict — Opus 5 is also $5 / $25 with a 1M context window, so the 3× arithmetic holds whichever you pick. But if you're automating a migration off a deprecation feed, this is the kind of thing that decides which string your script writes. Worth reading both pages rather than one.

The other thing: at Anthropic, "retired" is a per-cloud fact

Here's what I didn't expect to find while checking the above.

Anthropic's status table lists five retired Claude models. But its live pricing table still carries three of them, with full current rates and an inline qualifier naming the platforms where they're still served:

  • Claude Opus 4"retired, except on Google Cloud" — $15 in / $75 out
  • Claude Sonnet 4"retired, except on Bedrock and Google Cloud" — $3 / $15
  • Claude Haiku 3.5"retired, except on Bedrock and Google Cloud" — $0.80 / $4

The other two retired models (Claude 3.7 Sonnet, Claude 3 Haiku) are gone from the pricing table entirely.

So "retired" on Anthropic's own API does not necessarily mean unavailable to you. If you call Claude through Bedrock or Vertex, a model that is dead on the first-party API may still be serving your traffic, at the same published price it always had. That is genuinely useful if you're on a partner cloud — and genuinely misleading if you read "retired" as a single global fact and assume your Bedrock integration is about to break.

Note the exception is stated per model, not as a policy. Opus 4 is Google Cloud only; Sonnet 4 and Haiku 3.5 are Bedrock and Google Cloud. "Retired means it's still on Bedrock" is false as a general rule — you have to read the row.

Checking this from code instead of from a docs page

The reason I can put exact dates and per-cloud qualifiers in a table is that lifecycle status is a field I track, not prose I skimmed. It's a free JSON endpoint, no key, no signup, CORS open:

# every Anthropic model with a retirement date still ahead of us
curl -s https://aimodelwatch.dev/api/deprecations.json \
  | jq '.models[] | select(.provider=="Anthropic" and .retires_on > "2026-07-29")'
Enter fullscreen mode Exit fullscreen mode
{
  "id": "claude-opus-4-1",
  "name": "Claude Opus 4.1",
  "provider": "Anthropic",
  "status": "deprecated",
  "deprecated_on": "2026-06-05",
  "retires_on": "2026-08-05",
  "replacement": "claude-opus-4-8",
  "api_string": "claude-opus-4-1-20250805",
  "source_url": "https://platform.claude.com/docs/en/about-claude/model-deprecations"
}
Enter fullscreen mode Exit fullscreen mode

Every row carries the source_url it was read from, and fields the provider doesn't publish stay null rather than getting filled in with a guess. Seventy-seven models across all providers currently carry declared lifecycle data there.

The obvious use is a CI check: fail the build — or just warn — when a model ID in your config has a retires_on inside your next release window. Vendors do email you about deprecations, but they email the account owner, not the repo, and the email doesn't know which of your services still pins the old string.

All prices and dates above were read on 2026-07-29 from Anthropic's own docs (platform.claude.com/docs/en/about-claude/pricing and /model-deprecations) and re-derived to the cent. Retirement dates are Anthropic's stated "tentative retirement date".

Top comments (0)