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)
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
gpt-5.2-chat-latest, gpt-5.3-chat-latest
Replacement: gpt-5.6-sol
Assistants API
Replacement: Responses API and Conversations API
Videos API, sora-2, sora-2-pro and their dated snapshots
Replacement: no replacement listed
gpt-3.5-turbo-instruct, gpt-3.5-turbo-1106, babbage-002, davinci-002
Replacement: gpt-5.6-terra
gpt-5.4-cyber
Replacement: “the most capable cyber model available to you” (no model id named)
The 2026-10-23 table (still upcoming)
gpt-3.5-turbo-0125, gpt-3.5-turbo, gpt-3.5-turbo-completions
Replacement: gpt-5.6-terra
gpt-4-0613, gpt-4, gpt-4-0613-completions, gpt-4-completions
Replacement: gpt-5.6-sol
gpt-4-1106-preview
Replacement: gpt-5.6-sol
gpt-4-turbo, gpt-4-turbo-2024-04-09, gpt-4-turbo-completions
Replacement: gpt-5.6-sol
gpt-4.1-nano, gpt-4.1-nano-2025-04-14
Replacement: gpt-5.6-luna
gpt-4o-2024-05-13
Replacement: gpt-5.6-sol
gpt-image-1
Replacement: gpt-image-2.5-sunburst or gpt-image-2.5-flare
o1, o1-2024-12-17
Replacement: gpt-5.6-sol
o1-pro, o1-pro-2025-03-19
Replacement: gpt-5.6-sol (reasoning.mode: pro)
o3-mini, o3-mini-2025-01-31
Replacement: gpt-5.6-sol
o4-mini, o4-mini-2025-04-16
Replacement: gpt-5.6-terra
Fine-tunes: ft-gpt-3.5-turbo, ft-babbage-002, ft-davinci-002, ft-o4-mini-2025-04-16
Replacement: gpt-5.6-terra
Fine-tune: ft-gpt-4
Replacement: gpt-5.6-sol
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. 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. Call GET /v1/models with each project key and record every id that returns a shutdown_date.
- 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
- Map: one row per id with owner, replacement from the table and what to evaluate. o1-pro rows need reasoning.mode: pro.
- Evals: replay a golden set on the replacement before flipping, and compare quality, latency and cost per call, not just pass rate.
- 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
- No-replacement rows: decide build, buy or drop for Evals, Agent Builder and reusable prompts before 2026-11-30 turns them into an incident.
- Calendar: add 2026-10-31, 2026-11-30, 2026-12-01, 2026-12-11 and 2027-01-14 with one owner each.
- 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
Evals platform: existing evals become read-only
Replacement: no replacement listed
Evals platform (dashboard and API), Agent Builder, reusable prompts (v1/prompts)
Replacement: no replacement listed
gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest
Replacement: gpt-image-2.5-sunburst or gpt-image-2.5-flare
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)
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
Self-serve fine-tuning: active customers can no longer create new jobs
Replacement: no replacement listed
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
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
whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe, gpt-4o-transcribe-diarize
Replacement: gpt-live-transcribe or gpt-transcribe
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
- OpenAI — API deprecations (the table every row above comes from)
- OpenAI — Assistants migration guide (Responses and Conversations)
- OpenAI — API changelog (GPT-6 and GPT Image 2.5 releases)
- OpenAI — API reference: list models (shutdown_date field)
- OpenAI Developer Community — original deprecation notice (2026-04-22)



