OpenAI just split transcription the way builders already think about it: live vs done. On July 28–29, 2026, @OpenAIDevs introduced gpt-live-transcribe (low-latency live) and gpt-transcribe (async files / batch) — recommended defaults over older Whisper/4o-transcribe paths for most new work (docs, changelog).
Pitch: better real-world audio — accents, languages, short phrases, numbers, jargon, loud background noise — plus structured context inputs.
TL;DR — which model?
| Workflow | Use when | Model |
|---|---|---|
| File transcription | Recording finished / bounded clip | gpt-transcribe |
| Realtime transcription | Mic, call, live stream | gpt-live-transcribe |
| Speaker labels | Diarization needed | gpt-4o-transcribe-diarize (files) |
| Word timestamps / SRT / VTT | Subtitles | whisper-1 (files) |
| Translate recording → English | Translations endpoint | whisper-1 |
Streaming a completed file ≠ opening a Realtime session. Don’t pay Realtime complexity for a podcast upload.
File path: gpt-transcribe on /v1/audio/transcriptions
OpenAI’s file transcription guide makes gpt-transcribe the recommended model for completed recordings. Files can be up to 25 MB. Supported formats include mp3, mp4, mpeg, mpga, m4a, wav, and webm.
Minimal Node example from the docs pattern:
import fs from "fs";
import OpenAI from "openai";
const openai = new OpenAI();
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream("fixtures/audio.wav"),
model: "gpt-transcribe",
});
console.log(transcription.text);
// Response also includes detected languages, e.g. [{ code: "fr" }]
When the model cannot make a reliable language prediction, languages comes back as [].
Longer than 25 MB
Split with something like PyDub at sentence boundaries — mid-sentence cuts destroy context. Compress first when quality allows. Chunked pipelines should pass carry-forward prompts (last 1–2 sentences + domain glossary) so names stay consistent across boundaries.
Context knobs (new muscle)
Both new models take:
| Field | Purpose |
|---|---|
prompt | Free-form scene/topic context |
keywords | Literal terms that may appear (hints, not forced) |
languages | Expected input languages (replaces singular language) |
Docs rules that bite in production:
- Don’t restate the transcription task in
prompt— give scene context. - Keywords are hints, not forced vocabulary; evaluate hallucination of unspoken terms.
- For
gpt-transcribe,languagesreplaces singularlanguage— don’t send both. - Keep each keyword on one line; avoid
<,>, CR, LF — the API rejects the whole request. prompthas a model length limit; oversize prompts fail the request.
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream("call.wav"),
model: "gpt-transcribe",
prompt: "Customer support call about invoice INV-2026-00412",
// keywords / languages may need extra_body depending on SDK version
keywords: ["INV-2026-00412", "ACH", "Net-30"],
languages: ["en", "hi"],
});
Supported language-code formats for languages include ISO 639-1 (en, es), selected ISO 639-3 (eng, yue, cmn), and regional zh locales (zh-cn, zh-tw, zh-hk). Unsupported codes are rejected.
In Realtime sessions, gpt-transcribe can also use earlier transcribed turns as context automatically when used for committed-turn transcription.
Live path: gpt-live-transcribe via Realtime
Use Realtime transcription when audio is still arriving from a mic, call, or media stream — not when you already have a WAV on disk. Per the Realtime transcription guide:
- Create a session with
type: "transcription"and modelgpt-live-transcribe. - Connect with WebSocket (server pipelines) or WebRTC (browser audio).
- Consume transcript deltas as speech arrives; finalize when your app commits each audio turn.
Use gpt-transcribe inside Realtime only when you specifically need transcription to begin after a committed turn or need detected-language output on that specialized path. gpt-live-transcribe does not return detected-language predictions the same way.
Critical product gaps for live:
- No word-level timestamps
- No speaker labels
- No transcription confidence scores
If you need those, use a compatible file model (or post-process) — diarization isn’t supported in Realtime transcription sessions.
Streaming a finished file ≠ live audio
Set stream=true with gpt-transcribe on the Transcriptions API to get transcript.text.delta events while the model processes a completed recording, then transcript.text.done with full text (and detected languages). That is still file transcription — you do not need a Realtime session for podcast uploads.
When to keep Whisper / 4o-transcribe / diarize
| Need | Model / endpoint |
|---|---|
| Ordinary new file jobs | gpt-transcribe |
| Live mic/call | gpt-live-transcribe |
| Speaker labels | gpt-4o-transcribe-diarize + diarized_json |
| Word/segment timestamps, SRT/VTT | whisper-1 + verbose_json / subtitle formats |
| Translate recording → English | /v1/audio/translations + whisper-1 |
Diarization extras: for audio longer than ~30 seconds set chunking_strategy to "auto" (or a VAD config). You can supply up to four short (2–10s) known-speaker references via known_speaker_names[] / known_speaker_references[].
Existing gpt-4o-transcribe / gpt-4o-mini-transcribe / older realtime Whisper paths keep working where supported — they are just not the recommended start for new builds (July 28, 2026 changelog).
Benchmark crumbs from the launch
From the OpenAI Developers thread:
- Context Aware ASR: GPT-Transcribe semantic accuracy 41.6% → 45.2% with free-form context
- Common Voice (22 languages): GPT-Transcribe 19.27% error vs 40.37% for the compared baseline
Always re-bench on your telephony SNR and domain lexicon — WER alone misses order-ID disasters.
Production evaluation checklist
- Accent + code-switching — bilingual support calls, not studio English.
- Short utterances — “uh-huh,” account numbers, yes/no.
- Noise — call-center babble, keyboard, HVAC.
- Domain lexicon — SKUs, drug names, invoice IDs via
keywords+prompt. - Latency budget — live deltas vs final committed turn.
- Subtitle pipeline — if you need SRT, keep Whisper in that branch.
- Cost — Realtime session minutes vs batch file jobs; don’t pay Realtime for overnight batch.
Pair ASR with TTS economics on explainx.ai: Fish Audio S2.1 Pro. For editing pipelines, see video-use + Scribe.
Migration notes
- Existing
gpt-4o-transcribe/gpt-4o-mini-transcribe/gpt-realtime-whisperkeep working where supported — not the recommended start for new builds. gpt-live-transcribedoes not return word timestamps, speaker labels, or confidence scores — add app-level fallbacks if you need them.- Test accents, code-switching, noise, and short utterances before cutting over production.
Pair with voice generation economics: Fish Audio S2.1 Pro on the TTS side, video-use + Scribe for editing pipelines.
Architecture sketch for a support product
Browser mic ──WebRTC──► Realtime session (gpt-live-transcribe)
│
├─ live captions / agent assist
└─ on hangup: optional gpt-transcribe
re-pass on recorded file + keywords
Use live for in-call UX; use file gpt-transcribe for durable CRM notes with richer context knobs. Don’t force one model to do both jobs.
Cost and ops notes
- Realtime minutes ≠ transcription-file pennies — meter them separately in finance dashboards.
- Cache keyword lists per customer (SKU dictionaries) so every call doesn’t reinvent
keywords. - Log detected
languages[]empty rates — a spike means your language prior is wrong. - For subtitles / compliance archives that need SRT, keep a Whisper branch even after migrating general ASR.
- Red-team short numeric phrases (OTP, amounts) — semantic ASR wins on meaning can still scramble digits.
When not to migrate yet
Stay on your current stack if you depend on word timestamps in the same response, need diarization inside Realtime, or your legal team has not approved the new model IDs. The July 28 changelog is a recommendation, not a forced deprecation day — but new greenfield work should start on gpt-transcribe / gpt-live-transcribe unless a specialty exception applies.
Sample eval set (copy this)
Build 30 clips: 10 clean studio, 10 noisy café, 10 telephony. Include two languages you care about, five SKUs, five numeric strings, and five code-switches. Score WER and entity accuracy (IDs, amounts). Run with and without prompt+keywords. Promote gpt-transcribe only if entity accuracy rises on your set — vendor Common Voice numbers are a starting rumor, not a contract.
FAQ
Does gpt-transcribe replace diarize? No — use gpt-4o-transcribe-diarize for speakers.
Can I get SRT from gpt-transcribe? Prefer Whisper for subtitle formats.
Is streaming file transcription Realtime? No — stream=true on files is still file mode.
Why languages[] empty? Model not confident — fix priors or audio quality.
Should I delete whisper-1? Keep it for timestamps/translation specialty paths.
Ship a dual-path architecture and you will not regret the July 28 split into live vs done.
Closing note for explainx.ai readers
Prefer primary sources linked in each section over secondary recaps when you cite numbers in a decision memo.
This launch moves fast; verify primary docs before you standardize tooling or brief a client. Re-check availability, pricing, and model IDs on the official pages linked above, then tell us what broke in production so we can update the guide. Follow @explainx_ai for follow-ups when the vendors ship the next patch — and prefer measured evals on your own traffic over screenshot economics. If you only needed a headline, you already have it; if you are implementing, the checklists above are the part that saves a weekend.
Related on explainx.ai
- Fish Audio $52M + S2.1 Pro
- Video-use + ElevenLabs Scribe
- Saperly phone AI agents
- Aleph Neuro silent speech
- What is generative AI? (audio)
Official
Model IDs, specialty exceptions, and benchmark figures reflect OpenAI docs and launch posts as of July 29, 2026.
For more builder guides, browse the explainx.ai blog index and cross-link related posts before you standardize a vendor. Measure twice on your own traffic.
