LLM Model Retirement Notice: 60 Days at Anthropic, Six Months at OpenAI. Plan for the Shorter Clock.
Fine-tunes, eval tooling and SDK parameters expire on their own schedules too.
LLM model retirement runs on two clocks
LLM model retirement now has a published schedule at every major provider, and the schedules differ by a factor of three. Anthropic commits to at least 60 days' notice before retiring a publicly released model. OpenAI commits to six months for generally available models, three months for specialised variants such as Codex, and as little as two weeks for anything with "preview" in its name.
If you ship features on more than one provider, the notice period that matters is the shortest one, because that is the migration you will be doing with a team that also has a roadmap.
| Provider and tier | Stated minimum | What to know |
|---|---|---|
| Anthropic API | 60 days | Email to active deployments; requests to retired models fail |
| OpenAI, generally available | 6 months | Safety or compliance cases can be faster |
| OpenAI, specialised variants | 3 months | Chat, Codex and deep research variants |
| Preview models | About 2 weeks | Applies to OpenAI previews; Google lists similar for its previews |
| Amazon Bedrock and Google Cloud | Set per model | Own schedule; may differ from the direct API |
Anthropic's notice has settled at the floor
Anthropic's deprecation history shows the pattern. Counting from announcement to retirement date, Claude 2 and 2.1 got 181 days in 2025, Claude Opus 3 got 189, Sonnet 3.5 got 76 and Sonnet 3.7 got 114. Since December 2025 the five notices have run 62 days (Haiku 3.5), 60 (Haiku 3), 62 (Sonnet 4 and Opus 4), 61 (Opus 4.1) and 61 (Sonnet 4.5). The numbers are from Anthropic's own deprecations page, and I computed the day counts myself.
The policy is a floor, and recent practice sits on it. Planning for 114 days because a 2025 model got 114 is how a team ends up with 20 days left and an unwritten eval set.
OpenAI's long notice shows up in the dates too. The 23 October 2026 batch of legacy snapshots, including o1, o3-mini and o4-mini, was announced on 22 April, which is 184 days earlier. The GPT-5 and o3 snapshots retiring on 11 December were announced on 11 June, 183 days ahead. Six months is also a trap in its own way: a shutdown that far away does not get scheduled until it is close.
What expires besides the model
A retirement notice usually names one model ID. The dependencies around it have their own dates.
- Fine-tunes. OpenAI says inference on a fine-tuned model continues until its base model is deprecated, and several fine-tuned models sit in the 23 October batch. Self-serve fine-tuning for active customers stops on 6 January 2027. A fine-tune is a retirement you scheduled when you trained it, and the retraining on a new base model is the real cost.
- Platform tooling. OpenAI's Evals platform becomes read-only on 31 October 2026 and shuts down on 30 November, the same day as the Prompts API and Agent Builder. If your eval harness or prompt store lives there, the migration tooling retires alongside the model you are migrating.
- SDK parameters. Anthropic documents that non-default temperature, top_p or top_k values return a 400 error on Claude 4.7 and later models, and that the Python SDK from v1.0 removes those parameters, so passing them raises a TypeError. Moving from an older model to a current one can break a call site before it changes a single output.
- Cloud platform dates. Anthropic notes that Bedrock and Google Cloud set their own schedules. One third-party tracker lists Bedrock end-of-life for Sonnet 4.5 on 8 April 2027, 129 days after the direct API date. Treat that figure as a lead, not a fact, and confirm it on the Bedrock model card before relying on it.
A model swap is a behaviour change, not a string change
Replacement models differ in output length, formatting habits, tool-call patterns and refusal thresholds. A prompt tuned against one generation can regress on the next without any error, which is why the swap needs an eval run and not just a deploy.
The table below is one way to spend a 61-day notice. It is a plan, not a benchmark, and it leaves about two weeks of slack that you will want when the shadow run finds something.
| Days | Work | Exit condition |
|---|---|---|
| 1 to 7 | Inventory every call site and owner | Each model ID maps to a feature and a person |
| 8 to 21 | Build or refresh an eval set from production traces | At least one set per feature, scored on the same metric as today |
| 22 to 35 | Shadow-run the replacement on live traffic | Quality, latency and cost compared with the incumbent |
| 36 to 49 | Canary at 5%, then 50% | No regression on the eval set or on support tickets |
| 50 to 61 | Full cutover with rollback available | Old model ID no longer called anywhere |
Make the model inventory machine-readable
Finding every pinned ID is the first task, and it is often the slowest. Anthropic's Console can export usage as a CSV by API key and model, which shows what was called but not which service or owner called it. A repository grep for model name prefixes catches hard-coded IDs. A small file in the repo catches the rest, because someone has to write down who owns each one.
models:
- id: claude-sonnet-4-5-20250929
provider: anthropic
used_by: [support-triage, contract-summary]
retires: 2026-11-30
replacement: claude-sonnet-5-5
- id: gpt-5-2025-08-07
provider: openai
used_by: [internal-search]
retires: 2026-12-11
replacement: gpt-5.6-sol
- id: claude-sonnet-5-5
provider: anthropic
used_by: [drafting]
retires: 2027-09-28 # "not sooner than" floor, not a promise
Then a check that fails CI when any entry is within 90 days of its retirement date:
import datetime as dt
import sys
import yaml # pip install pyyaml
WARN_DAYS = 90
def main(path="models.yaml"):
today = dt.date.today()
failed = False
with open(path) as f:
models = yaml.safe_load(f)["models"]
for m in models:
left = (m["retires"] - today).days
if left <= WARN_DAYS:
failed = True
print(f'{m["id"]}: {left} days left, used by {", ".join(m["used_by"])}, '
f'move to {m["replacement"]}')
sys.exit(1 if failed else 0)
if __name__ == "__main__":
main(*sys.argv[1:])
Ninety days is deliberately longer than the 60-day floor, so the build starts failing before the provider's notice email would arrive. Date the entry from the provider page, not from memory, and mark "not sooner than" dates as floors. Anthropic lists claude-sonnet-5-5 as not retiring sooner than 28 September 2027, which is a planning horizon of about a year and not a guarantee.
A policy that survives the next notice
- Pin dated snapshots in production. Floating aliases change the underlying model without a code change, so keep them to experiments.
- Route every call through one internal client, so the model ID is configuration with one owner instead of a string in forty files.
- Keep a standing eval set drawn from production traces and refresh it each quarter, so a migration starts with a test, not with writing one.
- Send provider deprecation emails to a shared mailbox. Notices go to account contacts, and the person who created the key may have left.
- Count the whole bill. A new model changes token usage and price, so rerun the cost model alongside the quality eval.
Notices will keep arriving at the pace of new releases. Teams that find 61 days comfortable will be the ones for whom a swap is a config change plus an eval run, and that is something to build before the next email lands.
Frequently asked questions
Related reading
AI Pull Requests Wait 5x Longer for Review. Queueing Math Explains Why, and It Gets Worse.
LinearB data on 8.1 million pull requests shows agent PRs wait 17.6 hours for a first review, but get reviewed faster once picked up. That is a queue, and queues behave nonlinearly.
A Registry Counted 487 AI Agent Incidents. The Ones With No Attacker Caused the Most Harm.
A new registry counted 487 disclosed AI agent incidents. The headline 24% harm rate is a composition artifact, not a risk rate, the authors say. The number that matters is buried three tables deeper.
Nscale's IPO Filing Lists $103 Billion in Contract Value. Only 2.5% of It Is Revenue.
Nscale's S-1 discloses $103.4 billion in contract value from Microsoft and Anthropic. Only $2.6 billion of it was active revenue as of August. Here's how to read the gap.