2026-10-30 18:25 UTC
DANGMUAAI & Developer Tools, Decoded
BackAI Models

GPT-4o Leaves the API January 14: Your Migration Plan

GPT-4o shuts off on the OpenAI API on 14 January 2027, with only three months' notice. Every date, the Azure auto-upgrade trap, and what to check first.

DangMua EditorialOct 30, 20265 min read
GPT-4o Leaves the API January 14: Your Migration Plan

GPT-4o leaves the OpenAI API on 14 January 2027, and the notice ran three months, not the six OpenAI's own policy promises. If your migration plan assumed a half-year runway, it has already lost half of it.

A migration guide published this week lays out the dates and the order of checks. The dates below are as listed on OpenAI's deprecations page and Microsoft's retirement schedule on 22 October 2026.

The dates that apply to you

Where the model is calledShutdown dateListed replacement
OpenAI API14 January 2027 for 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, and fine-tunes on themgpt-6-luna
OpenAI API, earlier batch23 October 2026 for gpt-4o-2024-05-13 and gpt-4.1-nano, including its fine-tunegpt-5.6-sol for the GPT-4o snapshot, gpt-5.6-luna for nano
Azure OpenAI9 December 2026 for gpt-4o 2024-05-13; 14 April 2027 for gpt-4o 2024-08-06 and 2024-11-20, gpt-4o-mini, and all three GPT-4.1 sizesgpt-5.6-sol for 2024-05-13, gpt-5.1 for the later GPT-4o versions; none listed for GPT-4.1 or gpt-4o-mini
Azure, fine-tuned deployments1 October 2027 for GPT-4o and GPT-4o mini fine-tunes; 14 October 2027 for GPT-4.1 fine-tunesTraining ends earlier, no earlier than April 2027 for existing customers
ChatGPTRetired 13 February 2026Not an API change

Plan against the earliest date that touches any id you call. Each platform runs its own schedule, and a team that reads one page and assumes it covers the others plans for the wrong day.

Note the second row: one batch has already shut down. Anything still pinned to gpt-4o-2024-05-13 or gpt-4.1-nano should already be on its replacement and scored on live traffic.

Azure will upgrade your deployment for you

This is the quiet risk for Azure customers. Standard, Data Zone Standard and Global Standard deployments are upgraded automatically at retirement — a gpt-4o 2024-05-13 deployment becomes gpt-5.6-sol on 9 December 2026 with no code change on your side. Setting NoAutoUpgrade makes the deployment stop working at retirement instead. Provisioned deployments, which reserve fixed capacity, are never upgraded and have to be moved by hand.

The practical implication is worth stating plainly: an automatic upgrade is still a model change, and it deserves the same scoring as one you chose. A deployment that silently swaps models over a weekend produces exactly the regression nobody is watching for.

Luna is not a drop-in

Changing the model string takes a minute. Proving the product still behaves takes the rest of the migration, because the replacement handles tool calls, reasoning and sampling differently from the model your evals were scored on.

Two differences matter most. First, reasoning effort on Luna runs from none through low, medium, high, xhigh and max, and the default is medium. A request that sends no setting therefore starts reasoning, which the GPT-4o call never did — and reasoning tokens bill as output. A straight model-string swap can raise your bill without anyone changing a prompt.

Second, tool calls move endpoint once reasoning is on. The guide reports that Luna accepts function calling on v1/chat/completions only at reasoning effort none, and that reasoning combined with tools goes through the Responses API. GPT-6 Astra and GPT-6.1 Sol need Responses for any tool call. For that reason the guide recommends starting the migration at effort none on the endpoint you already use, then testing higher settings against quality, latency and cost.

Move your eval set off OpenAI's platform first

There is a deadline inside the deadline. Existing evals on the Evals dashboard become read-only on 31 October 2026, and the Evals API, reusable prompt objects and the v1/prompts API shut down on 30 November 2026. If your migration test cases live there, they stop being editable before the migration they exist to support.

Keep prompts and cases in your own repository, where the next migration can rerun them.

How much can actually go wrong

The guide cites a VentureBeat survey from September 2026 of 109 opt-in respondents, in which 59 percent of companies that replaced a model in a production app saw performance drop and either reworked the app or went back to the original. The guide is careful about that figure, calling it a reason to score your own cases rather than a rate to plan around — an opt-in survey of 109 responses is a signal, not a base rate.

The failure modes it names are specific, and they are the ones a prose-only eval misses: a tool schema can stay valid while the arguments change shape, and a structured-output schema can still parse while one field now means something else. Score each case more than once, the guide advises, because a hosted model does not return the same answer twice even at temperature 0.

What to do this week

  • Inventory every model id in code, config and stored jobs — including dated snapshots, fine-tune ids and Azure deployment names. A forgotten snapshot stops answering on the shutdown date while your tests stay green.
  • Check your Azure versionUpgradeOption on every deployment, deliberately, before 9 December.
  • Export your evals before 31 October, when the dashboard goes read-only.
  • Pin the replacement id in the eval report beside the id it replaces; an alias that moves later is a second change nobody scored.
  • Run contracts separately from prose — tool names, arguments and output schemas checked on their own.
  • Keep the old id callable until canary scores hold. Deleting it the day the evals pass leaves no way back if the next day's traffic mix differs from the one you scored.

Watch for one thing in particular: whether Microsoft's retirement schedule gains listed replacements for the Azure GPT-4.1 sizes and gpt-4o-mini, which currently have none.

More from DangMua