A linocut of stepping stones crossing a bright blue channel: cracked ochre stones sink on the left, and smooth white stones curve away to a sunlit bank crowded with sunflowers
All posts

GPT-4o and GPT-4.1 deprecation date (January 14, 2027): how to migrate to gpt-6-luna

OpenAI retires GPT-4o, GPT-4o mini, GPT-4.1 and GPT-4.1 mini on January 14, 2027. Move to gpt-6-luna at effort none, then re-test tool calls, sampling and cost per task.

OpenAI removes gpt-4o, gpt-4o-mini, gpt-4.1 and gpt-4.1-mini from its API on 14 January 2027, according to its deprecations page, and lists gpt-6-luna as the replacement for all four. Fine-tuned versions of the four go the same day.

Luna reasons by default, and OpenAI's migration guide says to remove temperature, top_p and top_logprobs whenever the reasoning effort is not none. Function tools on Chat Completions work only with effort none, and reasoning tokens count against the output cap. Start with reasoning_effort: "none" and no sampling parameters, then measure quality and cost per completed task before you accept a higher effort.

Four models leave the OpenAI API on 14 January 2027

OpenAI notified developers using these models on 14 October 2026. Its page lists dated snapshots, and the model pages for gpt-4o, gpt-4o-mini, gpt-4.1 and gpt-4.1-mini name the same snapshots as the defaults of the undated IDs and mark each one as deprecated. Plan as if the undated names retire too.

Models removed from the OpenAI API on 14 January 2027, with the replacement OpenAI lists
ModelSnapshots on the deprecations pageInput / output, USD per 1M tokensContext window / max output
gpt-4ogpt-4o-2024-08-06, gpt-4o-2024-11-202.50 / 10128,000 / 16,384
gpt-4o-minigpt-4o-mini-2024-07-180.15 / 0.60128,000 / 16,384
gpt-4.1gpt-4.1-2025-04-142 / 81,047,576 / 32,768
gpt-4.1-minigpt-4.1-mini-2025-04-140.40 / 1.601,047,576 / 32,768
gpt-6-luna (the listed replacement for all four)gpt-6-luna0.10 / 0.501,050,000 / 128,000

OpenAI gave 92 days of notice. Its policy on the same page promises at least six months for generally available models unless safety or compliance concerns require a faster timeline, and The New Stack pointed out that this announcement gave about three months. The page also says some developers may be able to provision dedicated capacity for continued access after a shutdown date, and it sends them to OpenAI's sales team. It gives no terms or price, and we would not plan around it.

ChatGPT is a separate matter. GPT-4o, GPT-4.1, GPT-4.1 mini and o4-mini left ChatGPT on 13 February 2026, and OpenAI's announcement said the API had no changes at that time.

Fine-tuned models follow their base model, so inference on a fine-tuned gpt-4o, gpt-4o-mini, gpt-4.1 or gpt-4.1-mini ends on 14 January too. OpenAI's page adds that active fine-tuning customers can create new jobs only until 6 January 2027, and Luna's model page lists fine-tuning as not supported, so a fine-tuned GPT-4o has no like-for-like retraining target there.

Audio, Azure and the October wave run on other calendars

OpenAI's deprecations page gives audio its own dates. tts-1, tts-1-hd and gpt-4o-mini-tts go on 6 January 2027, with gpt-realtime-2.1-mini as OpenAI's replacement. The legacy audio and realtime families (gpt-realtime, gpt-audio and their -mini variants, plus gpt-4o-audio, gpt-4o-realtime, gpt-4o-mini-audio and gpt-4o-mini-realtime) and the gpt-4o-mini-transcribe-2025-03-20 snapshot go on 20 January 2027. whisper-1, gpt-4o-transcribe, the current gpt-4o-mini-transcribe, gpt-4o-transcribe-diarize and the /v1/audio/translations endpoint go on 26 February 2027. If your voice client runs on the realtime family, the post on Realtime API interruptions covers the truncate bookkeeping to retest after the switch.

Azure OpenAI follows its own schedule. Microsoft's retirement table lists gpt-4o (2024-08-06 and 2024-11-20), gpt-4o-mini (2024-07-18), gpt-4.1 and gpt-4.1-mini (both 2025-04-14) as retiring on 14 April 2027, three months after OpenAI's date. The one exception is the 2024-05-13 snapshot of gpt-4o, listed for 9 December 2026, 36 days before OpenAI's date, with gpt-5.6-sol as the replacement. The AIVAX catalog lists an OpenAI route for all four models and marks them as deprecating, and which provider answers a request is a routing decision, so plan for 14 January, or for 9 December if your traffic reaches that Azure snapshot. The catalog's Azure route for gpt-4o does not name a snapshot.

gpt-4o-2024-05-13 and gpt-4.1-nano are already gone. OpenAI shut them down on 23 October with the older GPT-4, o1, o3-mini and o4-mini models. Our guide to that wave lists them, and the GPT-5 and o3 guide covers the next one, on 11 December.

Luna reasons by default, which changes sampling, tools and output limits

Luna accepts the efforts none, low, medium, high, xhigh and max, and medium is the default, according to its model page. A client that never set an effort on GPT-4o therefore starts reasoning on Luna, and reasoning tokens bill as output. reasoning_effort: "none" is the least-change path because function tools on Chat Completions work on Luna only with that effort. For reasoning with tools OpenAI points to Responses, and the post on the tools 400 has the error and both fixes. Our post on how providers expose reasoning controls covers the other values.

The guide's rule for sampling is to remove temperature, top_p and top_logprobs when the effort is not none, and logprobs as well on Chat Completions. Its wording implies that these parameters are accepted with none, and anything you tuned with a low temperature needs a fresh evaluation on Luna either way.

A limit sized for GPT-4o can stop a Luna response before any visible text, because reasoning tokens count against the output cap. OpenAI's reasoning guide suggests reserving at least 25,000 tokens for reasoning and output when you start experimenting; raise your output limit together with the effort.

Integrations built on the Assistants API have a separate problem: Luna's model page lists that API as not supported, and OpenAI's deprecations page files that API under past deprecations with a shutdown date of 26 August 2026; the Assistants migration post covers the move.

One public report shows what a silent failure looks like. jobops-copilot #410 recounts an earlier switch from gpt-5.4-nano to gpt-6-luna that changed one model string and took every live AI call down for six days while the app's health endpoint stayed green. Luna rejected temperature and top_p, and with reasoning on it rejected function tools on Chat Completions. The canary the project added after that outage made only a structured-output call, which the issue says would stay green while every tool call failed, so for the second attempt at the switch it added a forced tool call. Make your health check send the tools and parameters production sends.

Per-request cost depends on how many reasoning tokens Luna generates

At OpenAI's list prices, Luna's $0.10 input and $0.50 output per million tokens undercut all four retiring models. Reasoning tokens bill as output (see how reasoning tokens are billed), so the cost of a request follows how much Luna generates. The table shows how many output tokens, reasoning included, Luna can generate before one request costs what it cost on the old model, at OpenAI's list price for Luna and at the representative price in the AIVAX catalog.

Output tokens, reasoning included, that gpt-6-luna can generate before a request costs as much as on the retiring model
Retiring modelCost of the old request, USDLuna output tokens at equal cost, OpenAI list price (0.10 / 0.50)Luna output tokens at equal cost, AIVAX catalog price (0.11 / 0.55)
gpt-4o0.0055≈10,800≈9,800
gpt-4.10.0044≈8,600≈7,800
gpt-4.1-mini0.00088≈1,560≈1,400
gpt-4o-mini0.00033≈460≈400

The calculation assumes 1,000 input tokens and 300 visible output tokens per request, standard processing, no caching and a prompt under 272K tokens, at the old models' list prices; change the counts to match your traffic. The gpt-4o-mini row is the tightest. If Luna at an effort above none generates more than about 460 tokens at OpenAI's price (about 400 at the catalog price) on a request that produced 300 visible tokens, the migration raises that request's cost even though the per-token price is lower. Read the output-token count in the usage of real requests before you raise the effort.

The catalog's representative price for @openai/gpt-6-luna is $0.11 input and $0.55 output per million tokens, the most common price among the providers that are not special routes.

Each request pays the price of the provider that answers, which the response names in its provider field. OpenAI's own rate is $0.10 and $0.50, and the nine providers in the public catalog charged from $0.008 to $0.20 per million input tokens depending on the route when we read it on 27 October. The four retiring models are listed at OpenAI's rates. How to get the cost of each LLM API call shows how to price a call from that catalog, and the pricing page is the source for budgets.

The table leaves out Luna's cache-write rate, which is 1.25 times the input rate, and its long-prompt surcharge: a prompt above 272K input tokens costs 2 times the input rate and 1.5 times the output rate for the whole request. The GPT-4.1 model page lists no such surcharge, so a workload that sends very long prompts needs a new estimate, and why a prompt cache hit rate is low lists the prefix breakers to check.

The old names survive in code that rarely runs

Primary calls get migrated first. What survives is the code that runs rarely: retry and fallback lists, config defaults, eval and CI scripts, notebooks, scheduled jobs and fine-tuned model IDs stored in a database. This search matches the four names with their snapshot suffixes, provider prefixes such as openai/ and @openai/, and ft: fine-tune IDs:

rg -uu -nP '\bgpt-4o(?:-mini)?(?:-2024-\d\d-\d\d)?(?![\w.-])|\bgpt-4\.1(?:-mini)?(?:-2025-04-14)?(?![\w.-])' .

-uu includes ignored and hidden files, so the search also reads node_modules and build output; narrow the path if that is too noisy. The pattern also matches gpt-4o-2024-05-13, already shut down.

Against a 20-line sample, it matched the 12 lines that name gpt-4o, gpt-4o-mini, gpt-4.1 or gpt-4.1-mini (dated, undated, prefixed and fine-tuned). It skipped gpt-4o-mini-tts, gpt-4o-audio-preview, gpt-4o-transcribe, gpt-4o-realtime-preview, gpt-4o-search-preview, gpt-4.1-nano, gpt-40 and the lookalike gpt-4.10. Those are other models with their own dates, so search for them separately. The speech and transcription names are in the section above and gpt-4.1-nano went on 23 October. Per OpenAI's deprecations page, the -audio-preview and -realtime-preview names went on 7 May 2026 and the -search-preview names on 23 July 2026.

OpenAI also exposes the date itself. Its deprecations page says GET /v1/models returns an optional shutdown_date field on each model, a YYYY-MM-DD string or null. This filter lists the models your key can see that have one:

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

On AIVAX, Luna drops temperature without an error and forwards top_p

In the AIVAX product code, @openai/gpt-6-luna is marked as not supporting temperature, and the four retiring models are marked as deprecating, which the public catalog shows as isDeprecating. Saving a gateway that uses the integrated Luna model and sets Temperature fails validation with "The specified model @openai/gpt-6-luna does not supports temperature. Please, remove that parameter." A request is different: the request builder drops temperature from the body without an error, whatever the effort, so tuning that relied on it stops having an effect and nothing tells you. A top_p passes validation and is forwarded. OpenAI's guide says to remove it unless the effort is none, so a request that carries both top_p and a higher effort is the one to test first. The post on the temperature 400 on GPT-6 lists which models accept sampling at none.

A request that carries no reasoning_effort goes upstream without the field, so the model's own default applies (medium on OpenAI's API); neither the gateway nor the public route fills in a value. To keep the old no-reasoning behavior, send none in the request or save it in the gateway. AIVAX's OpenAI-compatible inference runs on /v1/chat/completions, and its AI Gateway docs say /v1/responses is not supported, so on an integrated model effort none is the way to keep function tools. A gateway that uses your own provider credentials can translate to Responses upstream, as the tools post shows.

A first request body to try against an AIVAX model:

{
  "model": "@openai/gpt-6-luna",
  "reasoning_effort": "none",
  "max_completion_tokens": 400,
  "messages": [{ "role": "user", "content": "Summarize this ticket in two sentences." }]
}

AIVAX can email an account that used a deprecated-flagged model in the previous 30 days. The alert is enabled by default and sent at most once every seven days. In the code, the message names the models and gives a general warning without a shutdown date, so take the date from OpenAI's page. A gateway lets you change the model once for every client that calls it by name. We found no automatic substitution for a retired model in the code or the docs, so the replacement test stays yours.

Replay real requests on Luna at effort none and raise the effort only where it fails

Freeze a set of real requests with the outputs you accepted, including the longest prompts and the ones that call tools. Run it on Luna with effort none and the same tools, and compare parse failures, tool-call correctness, refusals, output length and latency. If a schema sits behind the call, where structured-output healing stops covers what a repair step can and cannot fix.

Raise the effort for the failing slice only, and record the output tokens that usage reports for each request so you can check them against the break-even table. We would check the gpt-4o-mini traffic first: its break-even sits near 460 output tokens at OpenAI's price (about 400 at the catalog price), the lowest in the table, so it is the first place the bill can rise. A single-turn comparison can miss a model that stops calling a tool several turns in, so test multi-turn behavior as well. Agentic Tests run a simulated user and a judge against a gateway, which lets you point one test at the old model and one at Luna; the Agentic Tests docs list the quotas.

OpenAI lists the same replacement for all four models, so qualify Luna against your own requests. The AIVAX catalog labels Luna "Medium" intelligence and gpt-4.1 "Highest"; treat those as catalog labels, since they come with no benchmark. If Luna still fails your hardest requests at high effort, qualify a larger model on those requests only. gpt-6.1-sol is the next tier, but OpenAI's guide says it supports neither none nor tool calling on Chat Completions, so a tool loop on it needs Responses, which an AIVAX gateway can reach only with your own provider credentials. The routing guide covers splitting traffic by complexity.

Read on 26 October 2026: OpenAI's deprecations page, GPT-6 and reasoning guides and model pages; Microsoft's Azure retirement table (updated 23 September 2026); the AIVAX docs, public catalog and product code. The ChatGPT date comes from search-result text of OpenAI's announcement, whose page did not load. We sent no requests to OpenAI or to AIVAX models: the regex and the jq filter ran on local fixtures, the example body was not sent, and the temperature, top_p and omitted-effort behavior comes from reading the code and an offline run of the request builder on 15 October. The HTTP route that lets a request override gateway values was not exercised. We did not compare Luna's outputs with GPT-4o's or test top_p with a higher effort.