Picture the support line at a mid-sized insurer. Roughly 4,000 calls a week. It takes the policy number, checks claim status, and hands anything awkward to a human. It was built two years ago, it works, and nobody has touched it in eight months. That's usually a compliment.
On a Wednesday in January 2027, it stops answering.
Nothing was deployed. No certificate expired. The model behind the voice, gpt-realtime, hit a retirement date OpenAI published six months earlier, on a documentation page the team that built the thing never had a reason to open again.
That's the failure worth planning around. It also has a cheap fix, and we went looking for it.
What OpenAI actually announced
On 2026-07-20, OpenAI put nine model IDs on its deprecations page under one shutdown date: 2027-01-20. Every one of them is a voice or transcription model. If your product listens or talks, odds are good that at least one of these strings is sitting in your config right now.
| Retiring on 2027-01-20 | What OpenAI says to move to |
|---|---|
gpt-realtime |
gpt-realtime-2.1 |
gpt-audio |
gpt-audio-1.5 |
gpt-4o-audio |
gpt-audio-1.5 |
gpt-4o-realtime |
gpt-realtime-2.1 |
gpt-realtime-mini |
gpt-realtime-2.1-mini |
gpt-audio-mini |
gpt-audio-1.5 |
gpt-4o-mini-realtime |
gpt-realtime-2.1-mini |
gpt-4o-mini-audio |
gpt-audio-1.5 |
gpt-4o-mini-transcribe-2025-03-20 |
gpt-4o-mini-transcribe-2025-12-15 |
Get the year right before you put it in a calendar. The shutdown is January 2027, not January 2026. Our own topic backlog carried it as 2026 until this run corrected it, which is a small illustration of the larger point: a date that lives only in prose gets copied wrong. From today you have about five months of comfortable runway, then a wall.
Reading the docs page is not a control
A control is something that fires whether or not anyone remembers it exists. A webpage is not that.
So the question worth money isn't "what did OpenAI announce." It's this: if nobody on your team ever opens that page again, does anything in your system find out in time?
Effloow Lab ran an OpenAI API check on 2026-08-19 to answer it. We called the live API from an ordinary account and looked at what a normal response actually hands back. No audio was recorded or sent. The only text we ever submitted was the phrase "Reply with exactly one word: ready." Every command and every raw response sits in the public lab note.
What we found
The API does tell you. It just doesn't shout.
First we checked the obvious place. Web APIs have standard HTTP headers for announcing that something is going away, so we scanned every response for six of them. Twenty requests. Zero hits. Nothing in the headers, anywhere.
The model record itself is a different story. Ask the API to describe gpt-realtime and you get back five fields, one of which is the entire answer:
{"id": "gpt-realtime", "object": "model", "created": 1756271701,
"owned_by": "system", "shutdown_date": "2027-01-20"}
The replacement returns the same shape with that field empty:
{"id": "gpt-realtime-2.1", "object": "model", "created": 1782254687,
"owned_by": "system", "shutdown_date": null}
shutdown_date is documented. OpenAI's model-object reference defines it as "the date when the model will shut down, or null if not announced." No secret, and nothing new. It's just a field almost nobody thinks to read, because the instinct is to look for a warning in the response to the call you're already making. It isn't there.
Four in ten models in the catalogue have a death date
We pulled the full list and counted. Our account sees 126 models. 52 of them (41%) carry a shutdown date. So this isn't a voice-stack problem. It's the shape of the whole catalogue.
| Shutdown date | Models affected | Notable IDs |
|---|---|---|
| 2026-07-23 | 13 |
gpt-5-codex, gpt-5.1-codex-max, gpt-5.1-chat-latest
|
| 2026-08-10 | 2 |
gpt-5.2-chat-latest, gpt-5.3-chat-latest
|
| 2026-09-24 | 2 |
sora-2, sora-2-pro
|
| 2026-09-28 | 4 |
davinci-002, gpt-3.5-turbo-instruct
|
| 2026-10-23 | 18 |
gpt-4, gpt-4-turbo, o1-pro, o4-mini, gpt-image-1
|
| 2026-12-01 | 3 |
gpt-image-1.5, gpt-image-1-mini
|
| 2026-12-11 | 5 |
gpt-5-2025-08-07, o3-2025-04-16
|
| 2027-01-20 | 5 |
gpt-realtime, gpt-audio, gpt-realtime-mini
|
Look at the top two rows again. Those dates have already passed. We ran this on 2026-08-19 and found fifteen models with expired shutdown dates still sitting in the list, looking perfectly healthy.
A model can be listed and dead at the same time
This is the part that will quietly break a monitoring dashboard.
We took two of the expired models and called them for real. Both are in the list. Both are gone:
{"error": {"message": "The model `gpt-5.1-chat-latest` has been deprecated,
learn more here: https://platform.openai.com/docs/deprecations",
"type": "invalid_request_error", "code": "model_not_found"}}
gpt-5.2-chat-latest had a listed shutdown date of 2026-08-10. Nine days later it answers with a 404. The dates get enforced, and enforced on schedule.
Which means a health check that confirms your model ID appears in OpenAI's catalogue is worse than useless. It stays green right up to the moment your product breaks, and it stays green afterwards. Presence proves nothing. A shutdown_date compared against today proves quite a lot.
The realtime session accepts a doomed model without blinking
Voice agents rarely call the model directly. They open a realtime session first, so that's where a warning would do the most good. We created sessions with both the retiring gpt-realtime and its replacement gpt-realtime-2.1, sending an identical request body.
Both returned HTTP 200. Both handed back a full session object with audio format, turn detection, and the rest of the voice config. Neither one hinted that half the pair has five months to live.
The replacement wants the same request shape
We sent the same minimal request to gpt-audio and gpt-audio-1.5. Both refused it, with the same error code and the same wording: this model requires that either input content or output modality contain audio.
An identical rejection is a small piece of good news. The new model enforces the same precondition as the one it replaces, which points toward a config change rather than a rewrite. That's a claim about request shape and nothing else. It says nothing about whether the new model sounds better, handles an interruption more gracefully, or gets an accented policy number right. We measured none of that.
A substring grep will lie to you
The deprecated ID is gpt-realtime. The healthy current model is gpt-realtime-2. One character apart, opposite fates.
Our account's catalogue carries ten IDs that start with those twelve characters. Two are retiring. Eight are fine:
ID in the gpt-realtime* family |
shutdown_date |
|---|---|
gpt-realtime |
2027-01-20 |
gpt-realtime-mini |
2027-01-20 |
gpt-realtime-1.5 |
null |
gpt-realtime-2 |
null |
gpt-realtime-2.1 |
null |
gpt-realtime-2.1-mini |
null |
gpt-realtime-2025-08-28 |
null |
gpt-realtime-mini-2025-12-15 |
null |
gpt-realtime-translate |
null |
gpt-realtime-whisper |
null |
So a plain grep -r gpt-realtime matches all ten, and eight of those are models with no announced retirement at all. Run it once, see a wall of hits, and you have learned nothing about your exposure. Match on whole IDs, not prefixes. Better still, don't make the grep your source of truth. Ask the API, which knows which is which.
Can this survive your workflow?
The check we ran is one HTTP request and comes back in under a second. Here's where it pays for itself.
A voice IVR or phone agent. The direct hit. Nine IDs are retiring and the failure isn't degradation, it's a stop: the call doesn't get worse, it ends. If your product answers a phone, you have a scheduled outage that you've already been warned about.
A support desk running voice notes or call transcription. gpt-4o-mini-transcribe-2025-03-20 is on the list. Transcription failures are quieter and, in some ways, worse. Tickets keep arriving. They just lose their contents on the way in.
Anything that calls OpenAI at all. Set voice aside for a second. Four in ten models in the catalogue (52 of 126) carry a date, and the list includes gpt-4, gpt-4-turbo, o4-mini, and gpt-image-1. Run any of those in production and you're holding a dated liability you can now enumerate in a single call instead of re-reading a webpage every quarter.
Vendors building on top of these models. When your customers' workloads route through a model you didn't pick, the retirement becomes your incident, not the vendor's. Knowing the date before your customers do is most of the job.
The cost side is unusually clean. A retirement check burns no tokens, because listing models isn't inference. The check was never the expensive part. Finding out in January is.
Want this wired into your deployment pipeline as a build-time gate that fails the build? That's the kind of work Effloow does under Proof Studio, and you can start a conversation here.
What we could not establish
These limits are what make the rest of it worth trusting.
One account, one day. Model visibility depends on account tier and verification status. Your list may not be our 126.
We sent no audio. Nothing here compares old and new on voice quality, latency, interruption handling, or transcription accuracy. That needs an audio test harness we don't have. Any comparison you read that isn't backed by recorded audio is a guess.
Reported regressions on the new model, unverified by us. On OpenAI's own developer forum, one developer reported on 2026-07-09 that gpt-realtime-2.1-mini stopped triggering function tools in a SIP realtime flow that worked with identical prompts and settings on the previous model. A second developer described instruction-leakage and commentary-channel behaviour changes on 2026-08-03. We didn't reproduce either. Treat them as a reason to test your own tool calls before you swap, not as a measured finding.
Four of the nine names don't resolve. gpt-4o-audio, gpt-4o-realtime, gpt-4o-mini-audio, and gpt-4o-mini-realtime come back as "does not exist" from our account. They look like family labels rather than callable IDs. If those exact strings live in your code a scan will flag them, but the API never served them to us under those names.
One finding needs real care. The undated alias gpt-audio is flagged for 2027-01-20 while its dated snapshot gpt-audio-2025-08-28 shows an empty shutdown date. Meanwhile gpt-audio-mini-2025-10-06, also a dated snapshot, carries 2026-07-23, a date that has already passed. So the snapshots point in both directions at once, which inverts the usual advice to pin a dated snapshot for stability. We don't know whether those null snapshots genuinely outlive their alias or whether the flag simply gets applied at the alias level, and OpenAI's deprecations page lists alias names only. Never read an empty field on a snapshot as a promise. We covered the mirror image of this problem for text models in the gpt-5 alias audit.
When to use this, and when to skip it
Use it if you call OpenAI models from production code, especially voice or transcription. Or if your model IDs live in config and environment variables that nobody reviews. Or if you sell a product whose uptime rests on a model you don't control.
Skip it if every model already goes through a gateway that resolves and validates IDs centrally and that gateway checks retirement dates. You're covered, and a second check is just noise.
Don't rely on it alone if your exposure includes fine-tuned models or Azure OpenAI deployments. Both run on separate lifecycle rules that this field doesn't describe.
What to do this week
- Search every repository, config file, and environment variable for the nine retiring IDs, matching whole strings rather than prefixes.
gpt-realtime-2is fine;gpt-realtimeis not. Include infrastructure-as-code and your secret store. - Pull the live model list and flag every ID your code uses that has a non-null
shutdown_date. This is the step that catches the models you forgot you were running. - Sort by date. Anything landing before 2027-01-20 is more urgent than the voice work.
- Put the check in CI as a failing test, not a report. Reports get skimmed.
- Before you swap any realtime model, run your existing tool-calling suite against
gpt-realtime-2.1in a staging session. The request shape matches. The behaviour is yours to verify.
What Effloow added
OpenAI's deprecations page gives you nine model IDs and a date. Four things here aren't on that page:
- A tested answer on whether the API signals retirement in HTTP headers. It doesn't, across twenty requests and six header names.
- The
shutdown_datefield presented as the machine-readable alternative, with real request and response bodies shown for both a retiring model and its replacement. - A complete shutdown calendar derived from the live catalogue rather than from documentation: 52 of 126 models, grouped by date, including fifteen whose dates have already passed.
- A demonstration that presence in the model list is not a liveness signal, using two models that are listed and return 404.
- The
gpt-realtime*family table showing that eight of the ten IDs sharing that prefix are healthy, which turns the obvious "just grep for it" migration step into a source of false positives.
We also caught ourselves in the trap this article warns about, which is worth admitting because you will hit the same one.
Preparing this piece, we counted 29 mentions of "gpt-realtime" in our own voice agents guide from May 2026 and drafted a note saying the guide recommended a doomed model. It doesn't. Every one of those 29 hits was a suffixed variant, and the guide never mentions bare gpt-realtime even once. We were about to publish a correction that was itself wrong.
For your engineers
Everything below is method. Model IDs, commands, raw responses, and reproduction steps live in the public lab note.
Environment. One standard OpenAI API account, not organization-verified for restricted models. Run date 2026-08-19. Script: scripts/audio-model-deprecation-probe.py. Token budget guarded by scripts/proof_budget.py. Total billed tokens: 0, because every inference-path call returned 4xx before the model ran.
The one call that matters.
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
That returns every model your account can see with an announced retirement, sorted by date. Feed the ID list from your own config into a select() and you have a CI gate.
What we probed, and what came back.
| Check | Endpoint | Result |
|---|---|---|
| Catalogue scan | GET /v1/models |
126 models, 52 with non-null shutdown_date
|
| Per-model retrieve | GET /v1/models/{id} |
5 of 9 deprecated IDs return 200 with shutdown_date: "2027-01-20"; 4 return 404 model_not_found
|
| Realtime session | POST /v1/realtime/client_secrets |
200 for gpt-realtime, gpt-realtime-mini, gpt-realtime-2.1, gpt-realtime-2.1-mini; no deprecation field in the session object |
| Request-shape parity | POST /v1/chat/completions |
gpt-audio and gpt-audio-1.5 both 400 with identical invalid_value audio-modality error |
| Past-date liveness | POST /v1/chat/completions |
gpt-5.1-chat-latest and gpt-5.2-chat-latest both 404 model_not_found despite appearing in the list |
| Header scan | all of the above | 0 of 20 responses carried Deprecation, Sunset, Warning, Link, X-Deprecation, or X-Sunset
|
Replacement model specifics. gpt-realtime-2.1 was announced on 2026-07-06 in an OpenAI staff post on the developer forum, alongside gpt-realtime-2.1-mini. Its model page lists a 128,000-token context window, 32,000 max output tokens, and support for the v1/realtime endpoint only. Published pricing is $4 per million text input tokens, $32 per million audio input tokens, and $64 per million audio output tokens. The staff post claims improved alphanumeric recognition, better silence and noise handling, and revised interruption behaviour, plus at least a 25% p95 latency reduction across realtime voice models. All of those figures are vendor-stated. We measured none of them.
Reproduce it. The probe script is dependency-free standard-library Python. Set OPENAI_API_KEY and run it. It writes a JSON artifact holding every status code, body, and header set, with ephemeral realtime secrets stripped at the serialization boundary.
Sources
- OpenAI API deprecations. The nine IDs, their replacements, and the 2027-01-20 date.
-
OpenAI API reference, Model object. Defines the
shutdown_datefield. - gpt-realtime-2.1 model page. Context window, supported endpoints, pricing.
- OpenAI staff announcement on the developer forum. Release date, stated improvements, and the developer replies reporting regressions.
- OpenAI API changelog
- Live OpenAI API responses recorded on 2026-08-19, in the public lab note
Related Effloow evidence runs: the gpt-5 alias audit, prompt tooling sunset scanner, and the Assistants API port.
Top comments (0)