ElevenLabs released Scribe v3 for recorded audio and Scribe v3 Live for real-time transcription on November 10, 2026. Both are available through ElevenAPI, while Scribe v3 Live is also available in ElevenAgents. The company describes migration from Scribe v2 as a one-line model-ID change. Its launch announcement, updated November 14, claims improvements in transcription accuracy, speaker labeling and turn detection.
The model switch is straightforward: use scribe_v3 for batch requests and scribe_v3_live for streaming connections. Scribe v2 and Scribe v2 Realtime remain available, according to the API changelog, giving developers a fallback during rollout.
The practical distinction is between upgrading recognition and changing application behavior. Switching models can improve the transcript without adopting new controls. Enabling turn prediction, multilingual mode or streaming speaker labels introduces additional behavior that deserves its own validation.
Choose Batch or Live by When You Need the Text
Scribe v3 processes finished recordings. Scribe v3 Live receives streaming audio and returns transcript updates while someone is still speaking.
| Detail | Scribe v3 | Scribe v3 Live |
|---|---|---|
| Model ID | scribe_v3 | scribe_v3_live |
| Previous model | scribe_v2 | scribe_v2_realtime |
| Interface | POST /v1/speech-to-text | WebSocket at /v1/speech-to-text/realtime |
| Typical use | Recorded meetings, interviews, archives | Live captions, dictation, voice-agent input |
| Main additions | Better diarization, number formatting, secondary-language controls | Streaming diarization, turn prediction, multilingual mode, keyterm library |
The model IDs and successors are documented in ElevenLabs’ changelog; the endpoint details appear in the HowMuchToRunAI implementation guide.
I’d choose based on the application’s deadline for receiving text. A completed interview usually has no reason to use a streaming connection. A voice agent cannot wait for a finished recording before deciding what to say next. “Live” describes a delivery requirement, not a universal upgrade over batch.
That distinction also shapes downstream processing. A batch application can work from a completed transcript. A live application must distinguish provisional text from committed segments and decide when it is safe to send those segments to an LLM, display captions or trigger another action.
The One-Line Migration and Its Boundaries
Existing batch integrations change their model field from scribe_v2 to scribe_v3. A minimal request can look like this:
curl --fail-with-body https://api.elevenlabs.io/v1/speech-to-text \
--header "xi-api-key: $ELEVENLABS_API_KEY" \
--form 'model_id=scribe_v3' \
--form 'file=@meeting.wav' \
--form 'timestamps_granularity=word' \
--form 'diarize=true'
This example uploads a local file, requests word-level timestamps and enables speaker labeling. It assumes an API key is already stored in ELEVENLABS_API_KEY; it is an illustrative request, not a reported test. The endpoint and fields are described in the implementation guide.
For an existing real-time connection, replace scribe_v2_realtime with scribe_v3_live in the model_id query parameter.
Developers should treat that replacement separately from feature adoption. The Freeanswers API guide reports that the default commit strategy remains manual. Changing the model ID therefore does not automatically enable context-aware turn prediction.
A controlled rollout would separate three changes:
- Recognition: Switch the model while preserving current application settings.
- Transcript output: Enable new formatting, language or speaker-label behavior.
- Conversation timing: Adopt turn prediction and check when the application acts on committed text.
This separation makes failures easier to diagnose. If an agent starts responding too early after several settings change together, the cause could be transcript quality, segment timing or application logic. Keeping v2 available also makes rollback more practical.
Turn Prediction Changes When an Agent Can Respond
Scribe v3 Live uses conversational context alongside audio to estimate when a speaker has finished. ElevenLabs says this is the same turn-detection capability already used by ElevenAgents, now exposed through ElevenAPI.
Silence-only endpointing creates a familiar tradeoff. A short silence threshold can split a sentence when someone pauses to remember an address or read a number. A longer threshold makes the agent wait after a complete answer. Context gives the system another signal for making that decision, according to the launch announcement.
The Freeanswers guide describes the implementation more precisely: Scribe v3 Live includes turn_probability in partial transcript messages. With commit_strategy=turn_prediction, the server commits a segment when that value reaches 0.9 or higher. Voice activity detection remains active, so the configured silence threshold can also cause a commit.
An illustrative connection URL is:
wss://api.elevenlabs.io/v1/speech-to-text/realtime?model_id=scribe_v3_live&audio_format=pcm_16000&commit_strategy=turn_prediction
This selects Scribe v3 Live, declares 16 kHz PCM input and enables turn prediction. It does not open a connection or send audio. A server-side client still needs authentication, correctly encoded audio chunks and handlers for transcript events, as described in the implementation guide.
The remaining silence fallback matters. Context-aware prediction is not a guarantee that pauses can never split a turn. I’d evaluate it with the exact sequences that make an agent awkward: dictated phone numbers, corrections, long addresses and answers containing deliberate pauses.
The Freeanswers guide also reports that Python and JavaScript SDK enums did not yet expose turn_prediction when its November 14 guide was published. Direct WebSocket configuration may therefore be necessary; SDK coverage is a version-sensitive detail worth checking before implementation.
Speaker Labels Need More Than Better Accuracy
Scribe v3 improves batch diarization, the process of assigning speech to speakers. ElevenLabs reports 12% fewer diarization errors overall than Scribe v2 and 17% fewer on recordings with three or more speakers.
Scribe v3 Live adds diarization to real-time transcription. On the English portion of ElevenLabs’ internal, 16-language real-world dataset, the company reports a diarization error rate of 3.1%, compared with 5.9% to 7.3% for the other real-time models it tested. These are vendor measurements, with the dataset and comparison conditions described in the announcement.
Streaming speaker labels also create a data-handling requirement. The HowMuchToRunAI guide reports that Live can revise speaker identities through speakers_merged events. Applications need to apply those merges to earlier words. It also reports that diarization cannot be combined with background-audio filtering.
The practical implication is that a live transcript should support updates. Saving each speaker label permanently as soon as it arrives could leave the stored transcript inconsistent with later identity merges. That matters for meeting summaries, speaker-based search and any workflow that attributes a statement to a participant.
Mixed Languages, Numbers and Specialized Vocabulary
Scribe v3 adds numbers_format, which can request digits or words, and secondary_language_codes for recordings containing multiple languages. ElevenLabs’ changelog identifies both as new batch controls.
The Freeanswers guide adds several implementation details:
- Set
numbers_formattodigitsorwords; omitting it leaves the choice to the model. - Use
language_codefor the main language and repeat thesecondary_language_codesmultipart field for additional languages. - Do not send the secondary languages as a JSON-array string.
- Check language codes carefully, because unrecognized codes are reportedly skipped without an error.
That guide also reports that these fields initially lacked typed SDK arguments. Its suggested paths are Python request options or a direct HTTP request, including in TypeScript.
Frequently Asked Questions
3 questions
1Which Model IDs Replace Scribe v2?
Use scribe_v3 instead of scribe_v2 for recorded audio, and scribe_v3_live instead of scribe_v2_realtime for streaming transcription.
