Originally published at tts.deadlinkpatrol.com. Facts checked November 9, 2026.
From Swift Labs, makers of TTS Swap. Written with AI help and checked against OpenAI's docs, OpenAI's community forum and our own service on November 9, 2026. Not affiliated with or endorsed by OpenAI.
Short answer: OpenAI shuts down gpt-4o-mini-tts on January 6, 2027, along with tts-1 and tts-1-hd. The replacement OpenAI lists is gpt-realtime-2.1-mini, which runs on the Realtime API, not on /v1/audio/speech. If your code only needs text in and audio out, an OpenAI-compatible endpoint keeps your audio.speech.create call running. TTS Swap does that, but it does not apply the instructions parameter, so tone and style prompts have no effect there.
What OpenAI says
- OpenAI's deprecations page (entry "2026-10-01: Text-to-speech models") lists
gpt-4o-mini-ttswith a shutdown date of Jan 6, 2027 andgpt-realtime-2.1-minias the recommended replacement. - OpenAI's text-to-speech guide says this is a change of API workflow:
gpt-realtime-2.1-miniisn't a supported model for/v1/audio/speech. The guide'sgpt-4o-mini-ttsexamples pass aninstructionsstring such as "Speak in a cheerful and positive tone." - On OpenAI's community forum, OpenAI Support wrote on October 6 that migration means moving off
/v1/audio/speech, and that you can setsession.instructionsorresponse.instructionson the Realtime API. Support also wrote on October 8 that the retirement notice doesn't name a drop-in replacement for/v1/audio/speech. - The same thread has users reporting that the Realtime path turns a few lines of code into far more, and that they want plain text in, speech out. Support said
gpt-audio-1.5through chat completions generates a response to a prompt and isn't guaranteed to read text verbatim.
So you can't just change gpt-4o-mini-tts to gpt-realtime-2.1-mini in audio.speech.create. That call isn't supported.
Find where you use it
grep -rnE "gpt-4o-mini-tts|instructions=" --include="*.py" --include="*.js" --include="*.ts" --include="*.env*" .
Check config files and environment variables too. The model name is often stored outside the code, and instructions is easy to miss.
Your options
| Option | Keeps /v1/audio/speech code |
instructions (tone, style) |
Work involved |
|---|---|---|---|
OpenAI Realtime API (gpt-realtime-2.1-mini) |
No |
session.instructions / response.instructions; test that it reads your text exactly |
Rewrite to sessions and streamed events |
| Another speech provider with its own API | Usually no | Varies | New client code, new voices |
| An OpenAI-compatible speech server (hosted or self-hosted) | Yes | Varies by server; check | Change the base URL and API key |
| TTS Swap | Yes | Not applied | Change the base URL and API key |
If you rely on instructions to set tone, accent or pacing, TTS Swap is not a match. Compare the Realtime API and other providers against your current output.
If you pass instructions but could live without it (internal tools, prototypes, accessibility read-aloud, batch narration), an OpenAI-compatible endpoint is the least work.
Using TTS Swap with gpt-4o-mini-tts code
TTS Swap answers the same /v1/audio/speech request. Change the base URL and API key; your calls can keep model="gpt-4o-mini-tts".
from openai import OpenAI
client = OpenAI(base_url="https://tts.deadlinkpatrol.com/v1", api_key="sk-tts-…")
client.audio.speech.create(model="gpt-4o-mini-tts", voice="alloy", input="Hello", response_format="wav").write_to_file("hello.wav")
Be clear on what you get:
-
instructionsis not applied. Our service doesn't read that field. The request is not rejected:instructionsis accepted but ignored, so it won't steer tone or style. - The voice won't sound like OpenAI's. Audio comes from the open-source MeloTTS model, with one voice per language. Every voice name gets that same voice.
-
WAV comes back even when you ask for mp3 (the default).
pcmgives raw 24 kHz 16-bit mono. opus, aac and flac return a 400 error. -
speedis accepted but not applied yet. -
Languages: English by default; es, fr, zh, ja or ko via
extra_body={"language":"es"}. - Limits: up to 4,096 characters per request. Paid keys are $19/month for 1,000,000 characters a month, 20 requests per minute per key. A shared daily capacity cap applies to the whole service. Over a limit you get an OpenAI-style 429.
- Free key: 10,000 characters a month, 5 requests per minute, email only, no card. Free keys share a daily capacity limit, so on busy days they may get a 429 until 00:00 UTC.
Listen to the unedited samples on the home page before you decide.
FAQ
When does gpt-4o-mini-tts stop working?
January 6, 2027, according to OpenAI's deprecations page.
Can I just change gpt-4o-mini-tts to gpt-realtime-2.1-mini?
No. OpenAI's guide says gpt-realtime-2.1-mini isn't supported on /v1/audio/speech. It needs the Realtime API.
Does TTS Swap support the instructions parameter?
No. The field is ignored, so the output doesn't change with it.
Can I move back later?
Before January 6, 2027, yes: change the base URL and API key back to OpenAI's and keep using gpt-4o-mini-tts. After that date, gpt-4o-mini-tts is gone, so moving back means a supported OpenAI model and API workflow, or another compatible provider with that provider's matching key. Always change the URL and key together; a URL without its matching key fails with a 401.
Next steps
- Get a free key or a paid key ($19/month) on the home page.
- Copy-paste snippets: the gpt-4o-mini-tts migration guide.
- Keeping the rest of your setup safe: Using OPENAI_BASE_URL to move text-to-speech off tts-1.
Top comments (0)