Anthropic's Sonnet 4.5 replacement returns 400s on non-default temperature and on prefill
Anthropic stops serving claude-sonnet-4-5-20250929 on November 30, 2026, 61 days after announcing it. Its replacement rejects non-default temperature and prefill with 400s, a dev.to migration write-up says.
The Engineer · Build desk

The model's retirement comes 61 days after its announcement, one day over the stated minimum of 60 days' notice for publicly released models. Anthropic's deprecation table lists nine retirement announcements between January 2025 and September 2026.
| Figure | Value | Note | Claim |
|---|---|---|---|
| Notice from announcement to retirement | 61 days | reports vary: 60–61 | 19 |
| Stated minimum notice | 60 days | 16 | |
| Retirements announced in Anthropic's table | 9 announcements | January 2025 to September 2026 | 8 |
What happened
- Responses from the replacement can open with thinking blocks, so any code that reads content[0] as the answer breaks.
- The same text comes back as about 30% more tokens on the replacement, according to the post's reading of the migration guide.
- Anthropic's deprecation table lists nine retirement announcements between January 2025 and September 2026.
- The official Anthropic PHP SDK is in beta at major version 0, so the client library under the model can change too.
- The post proposes four pieces: a TextClassifier interface on the domain side, an adapter for Anthropic, a fake that always gives the same answers, and a single contract test that both adapters must pass.
Why it matters
- cost Output caps and token budgets sized on Sonnet 4.5 need re-measuring, because nothing errors to say the same text now costs more tokens.
- constraint Per-call temperature settings and JSON-forcing prefills are now request errors, so every call site that carries them has to change before the cutoff.
- decision Teams with scattered messages->create calls choose between patching each site by November 30 and moving the calls behind one port first.
- precedent Retirements arrive often enough that a model-string edit is a recurring maintenance task with a deadline, and one adapter keeps each round to a single edit.
Moving to claude-sonnet-5-5, the recommended replacement [3], breaks code in three different places. The 400s fail at the API, immediately and loudly [4][5]. The thinking-block change fails inside your own parser, wherever code takes content[0] as the answer [6]. The token growth fails nowhere. It shows up only as a bigger count on the same text [7].
The post's hypothetical Laravel or Symfony app shows why that matters. A controller, two queued jobs, a console command and a service class each set their own temperature: 0 and their own { prefill to force JSON [20]. That is five migrations before the deadline, and the post adds that you do them all again for the next model [20].
The deadline is 61 days after the announcement [18]. Anthropic's deprecation table, according to the post, states a minimum of 60 days' notice for publicly released models [16]. This notice ran one day over that floor [19].
The post's fix keeps all of this out of the domain. The ticket-routing use case depends on a TextClassifier interface that takes a string and returns a Category enum, and on nothing from vendor/ [17]. The port holds no model name, no prompt and no temperature [13]. The new rules land in the Anthropic adapter: no sampling parameters, no prefill, thinking off up front, structured outputs through output_config.format, and the text block found by type [14]. We read the last two as direct replacements for the old habits. Structured outputs do the job the JSON prefill did, and the type lookup replaces content[0] [20][14][6].
The domain side is well made. The routing match covers every Category case, so adding a case makes PHPStan report the unhandled arm, and at runtime PHP throws UnhandledMatchError instead of quietly misrouting the ticket [15].
The layer underneath moves as well. The PHP SDK's docs say plainly that "APIs might change at any time" [9], and version 0.57.0 shipped on October 9, 2026 [10]. Laravel's first-party AI SDK reached 1.0 with breaking changes, renaming promptTokens and completionTokens to inputTokens and outputTokens [11]. In our view the adapter is the right place to absorb both kinds of change, because it is the one class that already names a vendor.
Two limits on the evidence. Every Sonnet 5.5 behavior above comes from one dev.to post describing the migration guide, so check the guide itself before changing production code. And the post does not say what workload produced the 30% figure. It transfers to your token counts only if your outputs resemble that workload's. Replay a sample of your own traffic to find out.
What to watch
- Whether Anthropic's own Sonnet 5.5 migration guide matches the post's list of 400s and thinking-block behavior; a narrower rule would shrink the migration.
- Token counts on a replay of your own traffic against claude-sonnet-5-5, which will show whether the 30% figure holds for your outputs.
- The Anthropic PHP SDK moving past version 0, since a 1.0 release would likely bring renames the adapter has to absorb.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence40
- Adoption
- Insufficient
- Hype gap+10
- Incentives45
- Confidence50
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
claude-sonnet-4-5-20250929 stops answering on November 30, 2026, and after the cutoff every request to it fails.
- [2]
Anthropic announced the retirement of claude-sonnet-4-5-20250929 on September 30.
- [3]
The recommended replacement for claude-sonnet-4-5-20250929 is claude-sonnet-5-5.
- [4]
Per the Sonnet 5.5 migration guide as described in the post, a non-default temperature now returns a 400.
- [5]
Per the same guide as described in the post, an assistant prefill now returns a 400.
- [6]
Responses from the replacement can start with thinking blocks, so code that reads content[0] breaks.
- [7]
The same text produces about 30% more tokens on the replacement.
- [8]
Anthropic's deprecation table lists nine retirement announcements between January 2025 and September 2026.
- [9]
The official Anthropic PHP SDK is in beta and on major version 0, and its docs say plainly that "APIs might change at any time."
- [10]
Version 0.57.0 of the Anthropic PHP SDK shipped on October 9, 2026.
- [11]
Laravel's first-party AI SDK hit 1.0 with breaking changes, including promptTokens and completionTokens renamed to inputTokens and outputTokens.
- [12]
The post proposes a TextClassifier port in the domain, an Anthropic adapter, a deterministic fake, and one contract test both adapters have to pass.
- [13]
The port contains no model name, no prompt and no temperature; those are adapter details.
- [14]
The adapter written against Sonnet 5.5's rules uses no sampling parameters, no prefill, up-front thinking off, structured outputs via output_config.format, and finds the text block by type.
- [15]
The routing match covers every Category enum case; adding a case makes PHPStan report the unhandled arm, and at runtime PHP throws UnhandledMatchError instead of quietly misrouting the ticket.
- [16]
The deprecation table states a minimum of 60 days' notice for publicly released models.
- [17]
The RouteTicket use case depends on the TextClassifier interface, which takes a string and returns a Category enum, and on nothing from vendor/.
- [18]
The retirement date is 61 days after the announcement.
- [19]
The 61-day notice is one day over the stated 60-day minimum.
- [20]
In the post's hypothetical Laravel or Symfony app, a controller, two queued jobs, a console command and a service class each have their own temperature: 0 and their own { prefill to force JSON, which makes five migrations before the deadline; the post says you then do it again for the next model.
Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.toClaude Sonnet 4.5 Retires Nov 30: Put Your PHP App's LLM Behind a Port
1 article · October 14, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.