AI DevelopmentAPI Migration

OpenAI Deprecations: What Dies on 2026-10-23

October 14, 2026
8 min read
Rows of server indicator lights going dark in a quiet data center
Share:

On 2026-10-23, OpenAI shuts down gpt-3.5-turbo, the GPT-4 and GPT-4 Turbo snapshots, gpt-4.1-nano, gpt-4o-2024-05-13, o1, o1-pro, o3-mini, o4-mini and gpt-image-1 in the API, along with the fine-tunes built on them. That is nine days from today, and any call that still names one of those ids stops working.

The Assistants API, Sora 2 and gpt-3.5-turbo-instruct are already gone, and OpenAI published a new GPT-4o and GPT-4.1 batch today. Here is the table, the traps, and a checklist you can finish this week.

1. Context: The Calendar as OpenAI Publishes It

Everything below comes from OpenAI’s deprecations page, which I re-read on 2026-10-14. The Oct 23 batch was announced on 2026-04-22, so the notice was about six months. The page gives dates, not a time of day or a timezone, so I treat the 22nd as the real deadline.

Already shut down (as of 2026-10-14)

2026-07-23

14 legacy snapshots, among them computer-use-preview, gpt-4o-search-preview, gpt-5-codex, gpt-5.1-codex and o3-deep-research

Replacement: gpt-5.6-terra or gpt-5.6-sol (gpt-audio-1.5 and gpt-realtime-2.1-mini for the audio rows), per row

2026-08-10

gpt-5.2-chat-latest, gpt-5.3-chat-latest

Replacement: gpt-5.6-sol

2026-08-26

Assistants API

Replacement: Responses API and Conversations API

2026-09-24

Videos API, sora-2, sora-2-pro and their dated snapshots

Replacement: no replacement listed

2026-09-28

gpt-3.5-turbo-instruct, gpt-3.5-turbo-1106, babbage-002, davinci-002

Replacement: gpt-5.6-terra

2026-10-01

gpt-5.4-cyber

Replacement: “the most capable cyber model available to you” (no model id named)

The 2026-10-23 table (still upcoming)

2026-10-23

gpt-3.5-turbo-0125, gpt-3.5-turbo, gpt-3.5-turbo-completions

Replacement: gpt-5.6-terra

2026-10-23

gpt-4-0613, gpt-4, gpt-4-0613-completions, gpt-4-completions

Replacement: gpt-5.6-sol

2026-10-23

gpt-4-1106-preview

Replacement: gpt-5.6-sol

2026-10-23

gpt-4-turbo, gpt-4-turbo-2024-04-09, gpt-4-turbo-completions

Replacement: gpt-5.6-sol

2026-10-23

gpt-4.1-nano, gpt-4.1-nano-2025-04-14

Replacement: gpt-5.6-luna

2026-10-23

gpt-4o-2024-05-13

Replacement: gpt-5.6-sol

2026-10-23

gpt-image-1

Replacement: gpt-image-2.5-sunburst or gpt-image-2.5-flare

2026-10-23

o1, o1-2024-12-17

Replacement: gpt-5.6-sol

2026-10-23

o1-pro, o1-pro-2025-03-19

Replacement: gpt-5.6-sol (reasoning.mode: pro)

2026-10-23

o3-mini, o3-mini-2025-01-31

Replacement: gpt-5.6-sol

2026-10-23

o4-mini, o4-mini-2025-04-16

Replacement: gpt-5.6-terra

2026-10-23

Fine-tunes: ft-gpt-3.5-turbo, ft-babbage-002, ft-davinci-002, ft-o4-mini-2025-04-16

Replacement: gpt-5.6-terra

2026-10-23

Fine-tune: ft-gpt-4

Replacement: gpt-5.6-sol

2026-10-23

Fine-tune: ft-gpt-4.1-nano-2025-04-14

Replacement: gpt-5.6-luna

What is not in the Oct 23 batch

From the GPT-4o line, only gpt-4o-2024-05-13 is in this table. The later GPT-4o and GPT-4.1 snapshots sit on a separate notice published today with a 2027-01-14 shutdown (see section 4). Do not confuse the two, and do not assume a bare alias is safe: ask the API what it resolves to.

The practical consequence: if your stack still sends gpt-4, gpt-4-turbo, o1, o3-mini or o4-mini after the 23rd, those calls fail. Read the replacement column twice, because it is a different model generation, not a renamed snapshot.

2. Four Implications for Your Codebase

These are the four things I would check first, ordered by how often they hide in a repo.

🔎

Aliases and fine-tunes hide the exposure

Detection · every row

The table mixes bare aliases (gpt-4, gpt-4-turbo, o1, o3-mini, o4-mini, gpt-3.5-turbo) with dated snapshots, and the fine-tunes (ft-*) get their own rows with the same date. Search for one spelling and you miss the other in an env var, a YAML file or a database row.

🔁

The replacement is a model change

gpt-5.6-sol · terra · luna

o1, o3-mini and the GPT-4 snapshots map to gpt-5.6-sol; o4-mini and gpt-3.5-turbo to gpt-5.6-terra; gpt-4.1-nano to gpt-5.6-luna; o1-pro to sol with reasoning.mode: pro. Prompts tuned on older snapshots can behave differently, so replay your evals first. GPT-6 Sol and Luna have been out since 2026-09-22, so it is worth testing those tiers in the same pass.

🖼️

Images: one migration, two dates

gpt-image-1 · Oct 23 → Dec 1

gpt-image-1 goes on 2026-10-23, and gpt-image-1-mini, gpt-image-1.5 and chatgpt-image-latest follow on 2026-12-01, all pointing to gpt-image-2.5-sunburst or gpt-image-2.5-flare. The page names two targets without saying which suits which job, so test both on your own prompts and migrate once.

🕳️

Some rows have no replacement

Sora · Evals · Agent Builder · prompts

The Videos API and Sora 2 left on 2026-09-24 with no replacement listed, and Evals, Agent Builder and reusable prompts have none listed for 2026-11-30. That is a product decision, not a find-and-replace. If your Assistants migration stored instructions as dashboard prompts, keep the text in your repo too.

Find deprecated ids before OpenAI does

Illustrative: I composed these from the ids in the table above and have not run them against your codebase, so adjust paths and extensions. The first scans files (it also catches ft: fine-tune ids and dated snapshots); the second asks the API which models already carry a shutdown_date.

1. Scan the repo with ripgrep

rg --hidden --no-ignore -n -g '!.git' -g '!node_modules' -g '!.next' \
  '(?:^|[^\w.-])(gpt-3\.5-turbo(?:-instruct|-1106|-0125|-completions)?|gpt-4(?:-0613(?:-completions)?|-1106-preview|-turbo(?:-completions)?|-completions)?|gpt-4\.1-nano|gpt-4o-2024-05-13|gpt-image-1|o1(?:-pro)?|o3-mini|o4-mini|babbage-002|davinci-002|sora-2(?:-pro)?)(?:-\d{4}-\d{2}-\d{2})?(?:$|[^\w.-])'

2. Ask the models endpoint (needs curl and jq)

curl -s https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  | jq -r '.data[] | select(.shutdown_date != null) | [.shutdown_date, .id] | @tsv' \
  | sort

Do not trust a secondary list, including mine

While researching, some search summaries listed gpt-image-2 as the gpt-image-1 replacement. OpenAI’s live table says gpt-image-2.5-sunburst or gpt-image-2.5-flare, and secondary lists drift from it. Treat the official page and the models endpoint as the source of truth and re-check both before you ship.

3. What to Do This Week

You have nine days and a Friday deadline, so aim to be done by 2026-10-20 and keep two days of margin. This is the sequence I would run with any team:

☀️ Days 1–2: Find every call site

  1. 1. Run the scan above in every repo, then cover what grep cannot see: env vars, CI variables, infra values, no-code tools, notebooks and database rows that store a model name.
  2. 2. Call GET /v1/models with each project key and record every id that returns a shutdown_date.
  3. 3. Check your request logs for the model field over the last 30 days: anything still being called is in scope, even if no code mentions it.

📅 Days 3–4: Migrate with evidence

  1. Map: one row per id with owner, replacement from the table and what to evaluate. o1-pro rows need reasoning.mode: pro.
  2. Evals: replay a golden set on the replacement before flipping, and compare quality, latency and cost per call, not just pass rate.
  3. Rollout: move the model id into config, canary 5–10% of traffic, and keep the old id as a fallback only until 2026-10-22.

📆 Day 5: Close gaps and queue the next cut

  1. No-replacement rows: decide build, buy or drop for Evals, Agent Builder and reusable prompts before 2026-11-30 turns them into an incident.
  2. Calendar: add 2026-10-31, 2026-11-30, 2026-12-01, 2026-12-11 and 2027-01-14 with one owner each.
  3. Guardrail: add a CI step that fails when a model id in config has a shutdown_date inside the next 60 days.

4. What Is Already Queued After the 23rd

The 23rd is not the last cut. These rows are on the same page with dates, so you can plan the next migration while you are already in the code.

Scheduled shutdowns after 2026-10-23

2026-10-31

Evals platform: existing evals become read-only

Replacement: no replacement listed

2026-11-30

Evals platform (dashboard and API), Agent Builder, reusable prompts (v1/prompts)

Replacement: no replacement listed

2026-12-01

gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest

Replacement: gpt-image-2.5-sunburst or gpt-image-2.5-flare

2026-12-11

gpt-5-2025-08-07, gpt-5-mini-2025-08-07, gpt-5-nano-2025-08-07, gpt-5-pro-2025-10-06, o3-2025-04-16, o3-pro-2025-06-10

Replacement: gpt-5.6-sol (gpt-5, o3), gpt-5.6-terra (gpt-5-mini), gpt-5.6-luna (gpt-5-nano), gpt-5.6-sol with reasoning.mode: pro (gpt-5-pro, o3-pro)

2027-01-06

tts-1, tts-1-hd, gpt-4o-mini-tts-2025-03-20, gpt-4o-mini-tts-2025-12-15

Replacement: gpt-realtime-2.1-mini

2027-01-06

Self-serve fine-tuning: active customers can no longer create new jobs

Replacement: no replacement listed

2027-01-14

gpt-4o-2024-08-06, gpt-4o-2024-11-20, gpt-4o-mini-2024-07-18, gpt-4.1-2025-04-14, gpt-4.1-mini-2025-04-14

Replacement: gpt-6-luna

2027-01-20

gpt-realtime, gpt-4o-realtime, gpt-realtime-mini, gpt-4o-mini-realtime, gpt-audio, gpt-4o-audio, gpt-audio-mini, gpt-4o-mini-audio, gpt-4o-mini-transcribe-2025-03-20

Replacement: gpt-realtime-2.1, gpt-realtime-2.1-mini, gpt-audio-1.5 or gpt-4o-mini-transcribe-2025-12-15, per row

2027-02-26

whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe, gpt-4o-transcribe-diarize

Replacement: gpt-live-transcribe or gpt-transcribe

2027-04-01

gpt-5.3-codex, gpt-5.1, gpt-5.4-nano

Replacement: gpt-6-sol (gpt-5.3-codex, gpt-5.1), gpt-6-luna (gpt-5.4-nano)

Announced today: GPT-4o and GPT-4.1 snapshots

OpenAI notified developers on 2026-10-14 that gpt-4o-2024-08-06, gpt-4o-2024-11-20, gpt-4o-mini-2024-07-18, gpt-4.1-2025-04-14 and gpt-4.1-mini-2025-04-14 shut down on 2027-01-14, with gpt-6-luna as the listed replacement. If you are leaving GPT-4-class models this week, do not park the traffic on another snapshot that already has a date: you would only buy three months.

Golden rule for 2026

Pin the model id in config, read shutdown_date from the API, and treat any id without a listed replacement as a product decision with a deadline.

Conclusion

October 23 is a normal, announced, six-month-old deadline, and that is exactly why it hurts: nobody owns it until it breaks. The work is small if you do it deliberately: find every id, map it to the listed replacement, replay your evals and ship behind a canary.

Do the one-week sprint above and you also come out with a config-driven model id, a CI guard on shutdown_date and a calendar of the next five cuts. The next retirement notice will be a ten-minute job.

This week in one screen

Find

  • • ripgrep scan of every repo
  • • /v1/models shutdown_date
  • • Request logs, last 30 days

Migrate

  • • Map id → listed replacement
  • • Replay evals first
  • • Canary, then cut over

Decide

  • • No-replacement rows
  • • Next dates on the calendar
  • • CI guard on shutdown_date

Sources

Diego Rodriguez

Diego Rodriguez

Senior Full-Stack & AI Engineer

Diego has 10+ years of experience building production-grade AI-powered applications, from LLM orchestration and RAG pipelines to ML-driven risk detection and algorithmic trading systems.

Learn more about Diego →