Most model APIs give you two ways to name a model:
- a dated snapshot, like
claude-sonnet-4-5-20250929 - an alias, like
claude-sonnet-4-5, which points at whatever the vendor currently serves under that name
Claude Sonnet 4.5's dated snapshot shuts down on November 30, 2026, so if your code uses it, you're about to make this choice whether you plan to or not.
Dated snapshots: stable, with an end date
A snapshot is the same model on every call. That matters when:
- you've tuned prompts against its exact behaviour
- you run evaluations and want results you can compare
- you're in a regulated setting and need to say which model produced an output
The cost is a shutdown date. On that date every call fails, usually with a "model not found" style error.
Aliases: no shutdown day, but the model can change
An alias follows the vendor's current version, so it tends not to disappear the same way. The cost is the opposite one: the model behind it can change without a deploy on your side, and a prompt you tuned last month is now talking to something else. Output format drift, longer or shorter answers, different refusals, all without a code change to point at.
What works for most production code
Pin dated IDs, and treat shutdowns as scheduled work:
- One config file for every model ID, so you can find them all:
# models.py CHAT = "claude-sonnet-4-5-20250929" # shuts down 2026-11-30 SUMMARY = "gpt-5.6-sol" Shutdown dates on a calendar, not in a vendor blog post somebody read once. Versyka's model retirement calendar has every announced date as a feed you can subscribe to, or as JSON.
Before the date: swap to the vendor's replacement, rerun your evaluations, deploy. A week before, not the morning after.
Aliases are fine for prototypes, internal tools and anything where "the latest model" is the point.
Find them
grep -rnE "(gpt|claude|gemini|o[0-9])[-.a-z0-9]*-20[0-9]{2}" --include=*.{py,ts,js,json,yaml,yml} . That catches most dated IDs in code and config. Versyka runs the same search every day across your repositories and prepares the swap as a tested pull request before the date.
Every announced shutdown date is in one calendar you can subscribe to, so the next one lands on your calendar, not in your error logs.

