Skip to content

Architecture and migrationGuide

GPT-5.1, GPT-5.4 nano, GPT-5.3-Codex end Apr 1: what to move

OpenAI removes gpt-5.1, gpt-5.4-nano and gpt-5.3-codex from its API on 1 April 2027. This guide gives a shortlist per model, a way to find every call site, and a dated cutover schedule that fits the five months left.

By INFRO Editorial

Published

9 min read

One application request entering a central AI gateway and branching to many model routes

In short

OpenAI's own page lists gpt-6-sol as the replacement for gpt-5.1 and gpt-5.3-codex and gpt-6-luna for gpt-5.4-nano, all shutting down 1 April 2027 1. Inventory callers from traffic now, qualify the replacements on your own prompts in December and January, and canary from February so March is a buffer.

Key takeaways

  • OpenAI lists gpt-6-sol for gpt-5.1 and gpt-5.3-codex and gpt-6-luna for gpt-5.4-nano; all three stop answering on 1 April 2027.
  • Both dated snapshots and aliases go: gpt-5.4-nano-2026-03-17 and gpt-5.1-2025-11-13 are named alongside the short ids.
  • Build the inventory from traffic first, then code, config and stored data; monthly jobs and per-customer settings are the callers that fail on the date.
  • Put each workload behind a name you control, then move it with weighted traffic from February; do not wait for the shutdown refusal to tell you what you missed.
  • Keep March as a buffer: GPT-4o and GPT-4.1 snapshots (14 January) and whisper-1 (26 February) compete for the same engineers.

What is ending, and what OpenAI says to use instead

On 1 October 2026 OpenAI deprecated three model entries that stop answering on 1 April 2027. Its page calls it six months' notice and names a replacement for each1.

ShutdownModel ids namedOpenAI's recommended replacement
1 Apr 2027gpt-5.1, gpt-5.1-2025-11-13gpt-6-sol
1 Apr 2027gpt-5.3-codexgpt-6-sol
1 Apr 2027gpt-5.4-nano, gpt-5.4-nano-2026-03-17gpt-6-luna
The 1 April 2027 shutdowns, from OpenAI's deprecations page read 2026-11-03.

Two details matter for inventory. The dated snapshots are listed next to the short ids, so a caller that pinned gpt-5.1-2025-11-13 is hit the same day as one that sends gpt-5.1. And the page defines the end state plainly: at shutdown "the model or endpoint will no longer be accessible"1. It describes no grace period and no automatic upgrade on OpenAI's own API.

The calendar post already places these three ids on the date line2. This guide is what to do with the five months. If you reach OpenAI models through another platform, the date can differ: INFRO's docs note that Azure OpenAI, Amazon Bedrock and Vertex AI run their own schedules3, and the Azure entries for these three ids were not read here. Perplexity has already removed gpt-5.1, gpt-5.4 nano and other older OpenAI ids from its Agent and Orchestrator APIs on 24 October4, so a caller on that path is past its date.

Shortlist per model

OpenAI's named replacement is the first candidate, not the only one. The point of a shortlist is to test two or three options on your own prompts and keep the loser's results for the fallback decision.

CurrentFirst candidateAlso testWhy it earns a slot
gpt-5.1gpt-6-solgpt-5.6-terraThe named path; a lower tier is worth one run if gpt-5.1 was used for modest tasks
gpt-5.3-codexgpt-6-solgpt-5.6-solThe named path for code work; the 5.6 tier is a same-family reference point
gpt-5.4-nanogpt-6-lunagpt-5.6-lunaThe named path for the smallest tier; the 5.6 Luna is the nearest neighbour in the catalog
Candidates to evaluate. Only the first-candidate column is OpenAI's recommendation; the "also test" column is a suggestion for your test plan, not a vendor statement.

List rates move the budget, so write them down before testing. The INFRO catalog records OpenAI's published list rates for the nano family and its neighbours (checked 2026-10-05)5:

ModelInput per 1M tokensOutput per 1M tokens
gpt-5.4-nano$0.20$1.25
gpt-6-luna$0.10$0.50
gpt-5.6-luna$0.20$1.20
gpt-6-sol$2.00$10
gpt-5.6-terra$2.00$12
OpenAI list rates as recorded in the INFRO catalog. These are what OpenAI bills at list; a negotiated rate on your own account replaces them. I did not read a rate for gpt-5.1 or gpt-5.3-codex, so they are not in the table.

Rates are only half of a replacement decision. Output length, reasoning token use and tool-call behaviour change the real cost per task, which is why the test plan below records cost per successful task rather than rate.

Inventory every call site

The October shutdown post makes the case that traffic is the only complete inventory of callers that ran, and that code search catches ids in config, databases, queued jobs and library defaults that traffic misses6. The same three-pass method applies here, with these ids.

  1. Traffic, 60 days. Thirty days misses monthly jobs; take sixty and group by the model id as sent, not a normalised family, so gpt-5.1 and gpt-5.1-2025-11-13 show up separately. Use your provider usage export, gateway request log or your own logging, grouped by key and service.
  2. Code and config. Search every repository, infrastructure repo and notebook for the literal ids.
  3. Data. Prompt and agent configs in a database, per-customer model settings, queued and scheduled jobs, and eval harness definitions.
find-retiring-ids.sh
#!/usr/bin/env bash
# Anchored so "gpt-5.1" does not match version strings like "gpt-5.10".
PATTERN='(^|[^A-Za-z0-9.-])(gpt-5\.1(-2025-11-13)?|gpt-5\.3-codex|gpt-5\.4-nano(-2026-03-17)?)([^A-Za-z0-9.]|$)'
git grep -nE "$PATTERN" -- . ':!*.lock' ':!node_modules' || true
# Also search outside git: env files, secrets-store exports, DB dumps, CI variables.

Then ask OpenAI's own API which models your key lists with a shutdown date. The deprecations page says GET /v1/models returns an optional shutdown_date field, a YYYY-MM-DD string or null when none is announced1:

shutdown_dates.py
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
for m in client.models.list():
    date = getattr(m, "shutdown_date", None)
    if date:
        print(m.id, date)

Record each finding in one row: id as sent, service, owner, environment, call volume, whether it uses tools or structured output, and the target model. A key nobody can name is a finding by itself.

Codex is often not an application call

gpt-5.3-codex is frequently set in a developer's tool config, not in a service. Check coding-agent settings, CI jobs that invoke an agent, and shared config files in repositories. If your agents run through a gateway, the model id will also appear in its request log. INFRO documents Codex and the OpenAI Agents SDK pointing at it by changing the base URL and key3, which makes those calls visible in the same traffic inventory.

Qualify the replacement before moving traffic

A model swap is a behaviour change. For each workload, build the test set from real traffic rather than synthetic prompts, and keep three things fixed: the prompt, the parameters you actually send, and the grader. I did not read the replacement models' pages for this article, so use each model's own page to check every parameter your code sends: reasoning settings, token limits, temperature, tool and structured-output options, and stop reasons.

Run these checks in order:

  • Schema and tool validity. Does the output still parse, and do tool calls still name your tools correctly?
  • Task success. Score against a rubric or labelled outcomes. If you use a model as grader, calibrate it first.
  • Length and truncation. Longer answers raise cost and can hit your max-token limit; shorter ones can drop required fields.
  • Latency. Time to first token and total time under your real prompt sizes, because timeouts are set from the old model's behaviour.
  • Cost per successful task. Output tokens times the rate you actually pay, divided by successes.

For gpt-5.4-nano workloads (classification, extraction, routing prompts) the interesting question is whether gpt-6-luna holds label agreement against the nano outputs. For gpt-5.3-codex, run your repository tasks, not generic coding benchmarks, and keep a human review on a sample of diffs. The existing playbook on fallback equivalence covers how to decide whether the loser of this test can serve as a fallback: Is your fallback model good enough?.

Put a name you control in front of each workload

Hard-coded ids are why these migrations take five months of calendar. Before you cut over, make the model a deploy-time or gateway-level setting.

With INFRO, the name of a route is a valid model value3, so a service can send summarizer-prod and the route's targets decide whether openai/gpt-5.1 or openai/gpt-6-sol answers. Weighted targets give you the canary split without a code deploy, and routing rules can send a matching slice (a project, a key, a prompt size) to the replacement first. Without a gateway, the same result needs a config layer in your own code: one table of logical name to model id, read at startup, with a per-request override for tests.

Keep one rule: the replacement is named explicitly. INFRO never answers a request with a different model on your behalf; on the shutdown date it refuses a retired id and names the replacement in the error3. That is a safety net, not a migration plan, and it still means a failed request.

The cutover schedule

Five months, working backwards from 1 April 2027. The competing dates are real: OpenAI shuts the GPT-4o and GPT-4.1 snapshots on 14 January and whisper-1 and the GPT-4o transcription models on 26 February4, so the same team may be migrating three things.

WindowWorkExit criterion
3–30 NovInventory from traffic, code and data; assign owners; name the logical model per workloadEvery row has an owner and a target
1–19 DecBuild test sets, run the shortlist, record quality, latency and cost per taskOne winner per workload, one runner-up
20 Dec–15 JanHold changes over the holidays; finish the GPT-4o and GPT-4.1 move due 14 JanuaryNo open work on 14 Jan
18 Jan–12 FebShadow or canary: 5%, then 25% on the lowest-risk workloadsNo quality or error regression for a full week at each step
15 Feb–12 Mar50%, then 100% workload by workload; the whisper-1 move lands on 26 FebOld ids at zero traffic for 7 days
15–31 MarBuffer: stragglers, monthly jobs that have not run yet, rollback rehearsalNothing sent to a retiring id for 14 days
A staged schedule. Dates are a proposal, not OpenAI's; only 1 April 2027 and the other shutdown dates come from the vendor.

Monthly jobs are why March is a buffer. A job that runs on the 20th will first reveal its old id in the month you thought you were done. For those, run the job manually against the replacement in staging in February instead of waiting for the schedule.

Catching stragglers before the date

Three controls make a missed caller visible while it is still harmless.

  • Block the old ids early in lower environments. An allowlist that excludes the retiring ids turns a stray staging caller into a policy error you can read, long before production is affected. INFRO's allowlists are per project, and environments separate staging from production.
  • Alert on any request naming a retiring id. An organization that sent a retiring model in the last 30 days receives a model.retiring alert naming the keys and projects that called it, and the console marks the model with its shutdown date in its pickers3. A recorded retirement also appears in the retirement object on GET /v1/models3.
  • Review the request log weekly. Group by model id as sent. The goal is a line that falls to zero and stays there; a long tail of two or three requests a day is a forgotten job.

Outside a gateway, the equivalent is your provider usage export on a weekly schedule, and a CI check that fails when the git grep above finds a retiring id.

What to do if a workload is not ready by March

Decide by the end of January which workloads might not be, not on 25 March. For each, there are four honest options: ship the replacement with a known quality gap and a human check; keep a smaller scope on the replacement and queue the rest; swap in a model from another provider you have already qualified; or ask OpenAI about dedicated capacity, which its page says may be possible in some cases1. A fifth option, doing nothing, ends on 1 April with failed requests.

Record the decision with an owner and a date in the same inventory table, so that on 1 April the only remaining failures are ones someone chose.

Questions readers ask

Does OpenAI's API switch gpt-5.1 requests to the replacement on 1 April?
OpenAI's deprecations page says that at shutdown the model or endpoint "will no longer be accessible" and describes no automatic upgrade on its own API 1. Plan for failed requests, not a silent swap.
Can I keep a model after its shutdown date?
The page says that in some cases developers may be able to provision dedicated capacity for continued access after the shutdown date, and points to OpenAI's sales team 1. Treat that as a conversation to start early, not a plan.
Does Azure OpenAI retire these three ids on 1 April too?
Not necessarily. A vendor's retirement applies on its own API and on providers that relay it, while Azure OpenAI runs its own schedule and is covered only when its own date is recorded 3. The Azure pages for these three ids were not read for this article, so check Microsoft's retirement schedule before assuming a date.

From the team that builds it

Where this shows up in INFRO

INFRO is a control plane in front of the provider accounts you already hold. The capabilities below are the parts of it this article touches, each with the documentation that defines its behaviour.

  • Model retirements

    Available with a plan

    INFRO records each vendor's model deprecations and shutdown dates, warns organizations still sending a retiring model, and from the shutdown date refuses it before any provider call, naming the replacement.

  • Usage and cost per request

    Available with a plan

    Every request records its model, latency, token or unit counts, and estimated provider cost, queryable by project and key.

    Read the documentation for Usage and cost per request
  • Request traces and payload logs

    Available with a plan

    Per-request timing detail, with prompt and completion logging off by default and a retention window you choose.

    Read the documentation for Request traces and payload logs
  • Usage, request and FOCUS exports

    Available with a plan

    GET /v1/usage and GET /v1/requests on any gateway key, the request log and usage series as CSV, plus a FOCUS v1.4 Cost and Usage dataset as JSON or CSV, so AI spend lands in your FinOps platform beside the rest of your cloud cost.

    Read the documentation for Usage, request and FOCUS exports
  • Health-aware routing

    Available with a plan

    Named routes use priority or weighted targets over your own connections, with health checks, retries and failover.

    Read the documentation for Health-aware routing
  • Routing rules

    Available with a plan

    If-rules on a route send matching requests to their own targets, by metadata, feature, end user, key, project, prompt size, streaming, images, tools or time of day. Failure rules decide per failure kind whether to retry, move on or stop.

    Read the documentation for Routing rules
  • Model allowlists

    Available with a plan

    Approve which models a project may call; anything else returns a policy error instead of a line item.

    Read the documentation for Model allowlists
  • Deprecation and maintenance notices in the console

    Available with a plan

    Catalog model deprecations, maintenance windows and product changes appear under the bell in the console, with each deprecated model's retirement date, its successor and what in your organization still uses it, and are emailed to owners and admins.

INFRO accounts are self-serve. Provider usage is billed to you by your providers; INFRO charges a software subscription and takes 0% of model spend. See plans.

Sources

Numbered in order of first citation. Each was opened and checked against the claim on the date shown.

  1. 1.Deprecations | OpenAI API (opens in a new tab) — OpenAI. Accessed Nov 3, 2026.
  2. 2.AI model deprecation calendar 2026–2027: every shutdown date (opens in a new tab) — INFRO. Accessed Nov 3, 2026.
  3. 3.Models — Get started · INFRO Docs (opens in a new tab) — INFRO. Accessed Nov 3, 2026.
  4. 4.AI model updates: releases, price changes and shutdowns (opens in a new tab) — INFRO. Accessed Nov 3, 2026.
  5. 5.GPT-5.4 nano API pricing (opens in a new tab) — INFRO. Accessed Nov 3, 2026.
  6. 6.OpenAI's October 23 shutdowns: find every call before it fails (opens in a new tab) — INFRO. Accessed Nov 3, 2026.

About this article

Read on 2026-11-03: OpenAI's deprecations page (markdown version included), INFRO's models docs, the INFRO catalog entry for GPT-5.4 nano, INFRO's AI updates timeline and its calendar and October shutdown posts. OpenAI's api and pricing pages returned HTTP 403 and the pricing page was not read, so rates come from INFRO's catalog record of OpenAI list rates (checked 2026-10-05); replacement model pages and Azure's schedule for these ids were not read, so parameter differences and Azure dates are left out as unconfirmed.

Last checked against its sources on . The next review is due by . No separate named reviewer is recorded for this article.

How articles are written, sourced and corrected is set out in the editorial standards.