Skip to main content
BenchLM
Data

GPT-4o, o1, and o3-mini on OpenAI's October 23 shutdown list

OpenAI shuts down gpt-4o-2024-05-13, o1, and o3-mini on October 23. Azure's dates are December 9 and November 19. Inventory, test, and switch with records.

Three hand-inked rows on used rust ledger paper, each a short stroke at the same October column joined by a thin line to a second stroke, the top row reaching farthest to a cobalt stroke and stain
In this article4 sections

OpenAI's deprecations page lists October 23, 2026 as the API shutdown date for gpt-4o-2024-05-13, o1 (including o1-2024-12-17), and o3-mini (including o3-mini-2025-01-31).

On Azure, Microsoft's schedule dates the same models differently: December 9 for GPT-4o version 2024-05-13, and November 19 for o1 and o3-mini.

OpenAI names gpt-5.6-sol as the replacement for all three. Microsoft names gpt-5.6-sol for GPT-4o and o1, and gpt-5.6-terra for o3-mini.

Your first decision is which of those dates applies to your code. We re-read both sources on October 13.

Your deadline is set by the platform and the exact ID

Table 1
Evidence: OpenAI's deprecations page, the "Legacy GPT model snapshots" section announced April 22, 2026, and Microsoft's retirement schedule, both read October 13, 2026. The rows below come from our lifecycle feed, captured 2026-10-13.
Exact model ID Serving route Published date Named replacement
gpt-4o-2024-05-13 OpenAI API 2026-10-23 gpt-5.6-sol
gpt-4o@2024-05-13 Azure AI Foundry 2026-12-09 gpt-5.6-sol
o1 OpenAI API 2026-10-23 gpt-5.6-sol
o1-2024-12-17 OpenAI API 2026-10-23 gpt-5.6-sol
o1@2024-12-17 Azure AI Foundry 2026-11-19 gpt-5.6-sol
o3-mini OpenAI API 2026-10-23 gpt-5.6-sol
o3-mini-2025-01-31 OpenAI API 2026-10-23 gpt-5.6-sol
o3-mini@2025-01-31 Azure AI Foundry 2026-11-19 gpt-5.6-terra

Published dates for three model lookups, shown separately for the OpenAI API and Azure. These are provider dates, not observed outages.

Published dates for three model lookups, shown separately for the OpenAI API and Azure. These are provider dates, not observed outages.

Read the table by the string your code sends. gpt-4o-2024-05-13 on the OpenAI API is October 23. Our feed labels the Azure version of the same snapshot gpt-4o@2024-05-13, and it runs to December 9. Each of o1 and o3-mini has an alias and a dated snapshot on OpenAI's side, all dated October 23, and one Azure version dated November 19. Our per-model pages keep the receipts: gpt-4o-2024-05-13, o1, and o3-mini.

Other GPT-4o IDs aren't on this date. OpenAI's table lists no October 23 row for gpt-4o, gpt-4o-2024-08-06, gpt-4o-2024-11-20, or gpt-4o-mini, and Azure lists April 14, 2027 for the two later GPT-4o versions. Audio, realtime, and transcribe IDs carry January 20 and February 26, 2027 dates. Missing dates aren't a promise to keep a model. They mean the table gives none as of October 13.

OpenAI dates more than these three on October 23. Our feed counts 29 first-party rows with that date, and 24 of them are outside this article, including gpt-4-turbo, gpt-4-0613, o1-pro, o4-mini, gpt-4.1-nano, gpt-3.5-turbo, gpt-image-1, and six fine-tuned model IDs. If any of those show up in your inventory, the OpenAI deprecation calendar lists their replacements, and Azure's own dates are on a separate page.

Model IDs are set in more places than the chat setting

Dashboards rarely show the only model in use. Search these places: environment variables and config files, default arguments in a shared SDK wrapper, scheduled jobs and queue workers that deploy separately, gateways with fallback chains, evaluation notebooks, and vendor tools configured with your key. Saved batch input files need their own pass, because each request line names its model. Last month's file still names whatever you chose last month.

From a repository root, this finds the strings, and it also catches gpt-4o-mini and the later GPT-4o snapshots, which you then classify instead of assuming:

rg -n -e 'gpt-4o' -e '\bo1\b' -e 'o3-mini' --glob '!node_modules' .

On Azure, list each resource's deployments and read the model name and version for every one, not the deployment name. Deployments called prod-chat could sit on gpt-4o version 2024-11-20, which is on the April 2027 row, not the December 9 one. Microsoft documents that Standard deployments are upgraded automatically at retirement, that Provisioned deployments are not, and that a deployment set to NoAutoUpgrade stops working at retirement. Set versionUpgradeOption on purpose, because a default left alone may move to gpt-5.6-sol on December 9 without your test.

Copy this into a spreadsheet, one row per model ID per job. Both rows are invented examples.

model_id,platform,deployment_name,job_and_owner,tools_or_schema,daily_volume,replacement,deadline,test_status
gpt-4o-2024-05-13,openai-api,,invoice-extractor / billing-eng,json_schema:invoice_v3,12000,gpt-5.6-sol,2026-10-23,not_started
gpt-4o@2024-05-13,azure-foundry,prod-chat,support-triage / cx-platform,tools:lookup_order;create_ticket,3000,gpt-5.6-sol,2026-12-09,fixture_built

Sort by deadline, then by volume. Anything with an empty test_status is the work list.

You need pass/fail checks written before you run the replacement

Pull 50 to 100 real inputs per job, with secrets removed. Add the awkward ones: malformed input, a very long one, and a case where the correct answer is "no value found". Freeze the prompt, tools, and output schema, and set reasoning effort explicitly. OpenAI's model page lists none, low, medium (the default), high, xhigh, and max for gpt-5.6-sol, so a comparison that inherits defaults can change two things at once.

For extraction jobs, three checks decide pass or fail: the output parses, it validates against the schema, and each required field matches the labeled answer. For tool-using jobs, check that the right tool was called, the arguments validate against its JSON schema, the number of calls matches what you expect, and the side effect in a sandbox matches. Include a case where no tool should be called. Set the pass line before the run. For example: parse and schema validity at 100 percent, field accuracy no more than 2 points below the current model on the same fixture. Those numbers are an example, not a recommendation. Our structured-output guide shows a worked checking pattern.

Log one record per attempt. This is a template with blanks, not a result:

{"run_id": "", "date": "", "platform": "", "model_or_deployment": "", "reasoning_effort": "", "job": "", "input_id": "", "attempt": 1, "latency_ms": null, "usage": {}, "finish_reason": "", "http_status": null, "retries": 0, "parse_ok": null, "schema_ok": null, "checks_passed": [], "checks_failed": [], "accepted": null, "reviewer": "", "notes": ""}

Store the usage object exactly as the API returns it. Chat Completions and Responses name the token fields differently, and our Chat Completions to Responses guide covers the endpoint change.

Price the run from those records at the rates in force that day. These are the current list rates in our registry, in dollars per million input and output tokens, and the ratios are the replacement's rate divided by the retiring model's.

Table 2
Retiring ID Rate now Named replacement Rate now Ratio
o1 $15/$60 gpt-5.6-sol $4/$20 0.27x / 0.33x
o3-mini $1.1/$4.4 gpt-5.6-sol $4/$20 3.64x / 4.55x
o3-mini on Azure $1.1/$4.4 gpt-5.6-terra $2/$12 1.82x / 2.73x

We left gpt-4o-2024-05-13 out of the table on purpose. OpenAI's GPT-4o model page lists one family rate and no separate row for this deprecated snapshot, so take its rate from your invoice, not from a model-family row. The ratios compare rate cards only. Your bill also depends on how many tokens each model uses for your prompts, including reasoning tokens, and the same model page says Sol's current rate is promotional, available at least through November 21, 2026. Re-run the arithmetic after that date.

Traffic should move in stages, with a fallback you've tested

Count back from the deadline. Aim for full traffic two days before it, a canary five days before, and shadow runs before that. Each stage needs an exit rule written down first.

Table 3
Stage Traffic Move on when Roll back when
Shadow None. Replay recorded requests and discard the output Every fixture check passes Any check fails
Canary 1 to 5 percent, chosen by job, not by user A full day with errors and latency inside your set limits Parse or schema failures, or tool-call mismatches, exceed the limit
Ramp 25, then 50 percent Each step holds for a full day Same triggers, plus cost per accepted task above budget
Full 100 percent Old route disabled behind a flag Fall back to the tested alternative

Define the fallback trigger as numbers, such as three consecutive failures or p95 latency over your limit, and cap retries at two, so a bad hour can't triple your spend. Rolling back to the retired ID only works until the deadline. After it, the fallback has to be a second configuration you've already run through the fixture, like the other named replacement or another provider's model.

Microsoft's model-retirements page says retirement dates aren't extendable and that a retired deployment returns 410 Gone. OpenAI's page says access to these models "will be shut down" on the listed dates but doesn't describe the error, and we haven't tested one. Azure's GPT-4o row has also moved once: our August retirement post printed October 1 for it, and the schedule now reads December 9. Re-read both sources before each stage.

Three dates to watch: October 23 for OpenAI's API, November 19 for Azure's o1 and o3-mini versions, and December 9 for Azure's GPT-4o version. Follow model changes if you'd rather get a notice when one of those rows moves.

Sources: OpenAI's deprecations page and the gpt-5.6-sol model page; Microsoft's Azure OpenAI retirement schedule and model retirements page; all read October 13, 2026. Rates come from the OpenAI API pricing page and our registry.

Frequently asked questions

01Does October 23 apply to every GPT-4o model?

No. OpenAI's table dates only gpt-4o-2024-05-13 on October 23. The audio, realtime, and transcribe GPT-4o IDs carry January and February 2027 dates, and the other chat snapshots have no date in the table as of October 13. A missing date isn't a promise to keep the model.

02Which date applies if I call these models through Azure?

Azure follows Microsoft's schedule, not OpenAI's. Version 2024-05-13 of gpt-4o retires December 9, 2026, and the o1 and o3-mini versions retire November 19. Match the model name and version behind your deployment, because a deployment name alone may not show which snapshot it serves.

03What replaces o3-mini?

OpenAI names gpt-5.6-sol for o3-mini on its API. Microsoft names gpt-5.6-terra for the Azure version. Both are provider-named destinations, so run your own fixture on whichever route you use, and price the result from billed usage rather than assuming the two names behave alike.

04Is gpt-5.6-sol equivalent to the retired models?

No source we read claims equivalence. A named replacement tells you where the provider expects traffic to go. It doesn't establish that outputs, tool calls, latency, or cost match your current results. Compare accepted outputs on your own inputs before moving production traffic.

Reader questions

External sources linked in this article

4
  1. 01OpenAI's deprecations page
  2. 02Microsoft's schedule
  3. 03OpenAI's model page
  4. 04Microsoft's model-retirements page
4 external sources

Share or save

Share on XShare on LinkedIn

Keep readingAll research

Choose the right model before an expensive mistake. One weekly recommendation: what to choose, what costs less, and what is not worth switching to.

Join 5,600+ readers.