Blog

OpenAI's October 23 Model Shutdowns: What Stops Working, What Replaces It, and What to Do This Week

OpenAI shuts down a batch of older model snapshots and their aliases on October 23, 2026. Here is the official replacement table, who is affected, and the migration order for this week.

OpenAI's October 23 Model Shutdowns: What Stops Working, What Replaces It, and What to Do This Week

Seven days from now, OpenAI shuts down a batch of older models. That is the operational version of this story: on October 23, 2026, access to a published list of legacy GPT snapshots, o-series reasoning models, and fine-tuned variants ends, and the official deprecations page gives each one a replacement from the current generation. If any model string in your stack appears on that list, this week is not the time to watch the story; it is the time to migrate and verify. What follows is the shutdown list exactly as published, who is affected, and the order of operations that gets the change done without an outage, with the official documentation as the source of truth throughout.

What OpenAI announced

The announcement sits under the heading "2026-04-22: Legacy GPT model snapshots." The introduction, quoted as published:

To improve reliability and make it easier for developers to choose the right models, we are deprecating a set of older OpenAI models. Access to these models will be shut down on the dates below.

For this batch, that date is October 23, 2026. In short: this is the OpenAI model shutdown of October 2026, and everything on it leaves the API on the same date, with replacements published upfront. Every row in the table carries the same shutdown date, and every row maps a model snapshot (and its aliases, where they exist) to a substitute model. Treat the page as the authority: it is a living document, so confirm details against the official page as the date approaches.

The shutdown list, exactly as published

Snapshots and substitutes, preserving the official table and its order. Aliases are shown on the same row as the snapshot they point to:

| Shutdown date | Model snapshot | Substitute model |
| --- | --- | --- |
| October 23, 2026 | gpt-3.5-turbo-0125 | gpt-3.5-turbo, gpt-3.5-turbo-completions | gpt-5.6-terra |
| October 23, 2026 | gpt-4-0613 | gpt-4, gpt-4-0613-completions, gpt-4-completions | gpt-5.6-sol |
| October 23, 2026 | gpt-4-1106-preview | gpt-5.6-sol |
| October 23, 2026 | gpt-4-turbo | gpt-4-turbo-2024-04-09, gpt-4-turbo-completions | gpt-5.6-sol |
| October 23, 2026 | gpt-4.1-nano | gpt-4.1-nano-2025-04-14 | gpt-5.6-luna |
| October 23, 2026 | gpt-4o-2024-05-13 | gpt-5.6-sol |
| October 23, 2026 | gpt-image-1 | gpt-image-2.5-sunburst or gpt-image-2.5-flare |
| October 23, 2026 | o1-2024-12-17 | o1 | gpt-5.6-sol |
| October 23, 2026 | o1-pro-2025-03-19 | o1-pro | gpt-5.6-sol (reasoning.mode: pro) |
| October 23, 2026 | o3-mini-2025-01-31 | o3-mini | gpt-5.6-sol |
| October 23, 2026 | ft-o4-mini-2025-04-16 | gpt-5.6-terra |
| October 23, 2026 | o4-mini-2025-04-16 | o4-mini | gpt-5.6-terra |

The page adds a second table: "We are also removing fine-tuned versions as below," with a recommended replacement base model for each:

| Shutdown date | Model snapshot | Recommended replacement base model |
| --- | --- | --- |
| October 23, 2026 | ft-gpt-3.5-turbo | gpt-5.6-terra |
| October 23, 2026 | ft-gpt-4 | gpt-5.6-sol |
| October 23, 2026 | ft-gpt-4.1-nano-2025-04-14 | gpt-5.6-luna |
| October 23, 2026 | ft-babbage-002 | gpt-5.6-terra |
| October 23, 2026 | ft-davinci-002 | gpt-5.6-terra |

One note on the image entry: gpt-image-1 shuts down in this batch, and the deprecations page separately lists another GPT Image batch for December 1, 2026. If you generate images, check both sections before declaring the migration finished.

Who is affected

Walk the list against reality rather than memory:

  • Anyone with a hard-coded snapshot name. Old snapshots are the obvious population, but the table deliberately keeps aliases beside them: gpt-4 goes down with gpt-4-0613, and o4-mini goes down with o4-mini-2025-04-16. Using an alias is not safer than using a snapshot; it is the same row of the same table.
  • o-series reasoning users. Four reasoning-era entries are on the list (o1, o1-pro, o3-mini, o4-mini, plus one fine-tuned o4-mini row), and several map to gpt-5.6-sol, with o1-pro carrying the documented reasoning.mode: pro note.
  • Fine-tuning users. Both tables matter here: the ft-o4-mini-2025-04-16 row in the first table, and the second table's five fine-tuned variants with their recommended replacement base models.
  • Image pipelines. gpt-image-1 is in the October batch; the December batch covers other image models.

The common blind spot is the environment that only checks at runtime. Model strings live in more places than the one file you remember: application code, deployment configuration, CI environment variables, secret stores, client apps, and documentation that other people copy from. The inventory that matters is literal and environment-aware. gpt-4 and gpt-4o are different strings; gpt-4-turbo and gpt-4-turbo-2024-04-09 are separate strings on the same row; and a scheduled job deployed from a branch nobody watches is still production if it calls one of these names. Search each environment separately, because a string that was updated in the repository can still be frozen into a deployed image, a container definition, or a dashboard configuration that was never rebuilt.

The order of operations for this week

First, inventory. Search every system that can hold a model string for the snapshots and aliases above, and mark each hit. The output of this step is a list, not a fix: what needs to change, where, and what depends on it. Two columns of the tables above are easy to under-count, so sweep for both: the completion-suffixed aliases, and the fine-tuned rows in the second table even if you believe nobody uses them.

Second, validate on the replacement before you switch. Pull the same verification discipline this site applies to any model change: define success criteria, run the golden set against the substitute, and shadow a slice of real traffic before the arrow points at it in production. For the reasoning models moving to gpt-5.6-sol, treat output shape and usage as first-class regression surfaces, not just text quality. For image generation, two substitute candidates are published; decide which one you are validating rather than leaving the choice to deployment day. The process, including graders and shadow runs, is spelled out in the testing guide.

Third, update and deploy with a rollback you have actually confirmed. Change the strings, ship through your normal path, and keep the old configuration one step away, rehearsed rather than assumed, until the replacement has survived a full observation window. Schedule the cutover before the shutdown date rather than on it, so an unrelated failure on the day has room to be diagnosed. This is the same discipline the migration playbook applies to forced model departures; here you simply have the luxury of choosing the timing inside the week.

Fourth, observe. Watch error rates and usage after the switch with the same triage lens the rest of this site uses: status-code families, error types, and the fields that tell you a request failed and why, as laid out in the error code guide.

How to confirm which model actually served a request

Do not stop at "the config says the new name." Configurations drift, gateways override, and an environment variable set in one shell is not set in the next. The confirmation that counts is the response: check the model identifier attached to actual responses in your logs, alongside the request fields your observability stack already records. A quick post-cutover ritual beats a week of assumptions: send one known request per changed integration, read back the model identifier it reports, and compare against what you deployed. The field list for that check, including what to log and what never to, lives in the observability guide. A migration is not done when the file changes; it is done when the logs say the right model answered.

One piece of context, in one sentence

For contrast on how vendors handle this differently: Google's changelog notes that on October 8, 2026, gemini-3.7-flash was deprecated and replaced by gemini-3.8-flash, with API requests to the old name automatically routed to the new one, per the Gemini API changelog. The lesson for OpenAI's batch is narrower and harsher: these models are shut down on the date, so "it still works today" says nothing about next week.

The checklist

  1. List every model string in code, configuration, CI variables, secret stores, clients, and docs.
  2. Mark every hit against both tables in this article and against the live deprecations page.
  3. Run the golden set against each substitute model before switching anything.
  4. Shadow real traffic on the substitute and set the switch thresholds in advance.
  5. Update the strings and deploy through the normal path.
  6. Keep the rollback configured and confirm it works, not just that it exists.
  7. Observe error rates and usage through the cutover window.
  8. Verify from logs that the actual responses come from the intended model.

Seven days is enough time to do this properly and not quite enough time to do it casually. When your calls go through a compatible endpoint, the endpoint-level specifics live in the platform's own documentation.