Skip to main content
This guide covers migrating from ElevenLabs Realtime Speech to Text when used with commit_strategy=vad.

All migration guides

This guide contains both bare API descriptions and SDK code. To install the SDK:
If you’re already using the Cartesia SDK, upgrade to version >=3.2.0
Ink 2 only supports English right now.
We expect to add more languages in the coming months.

Connection

Replace the ElevenLabs WebSocket URL and auth header with Cartesia’s /stt/turns/websocket.
In browsers, WebSockets do not support request headers. Instead, pass the API version as the cartesia_version query param and use a short-lived access token using the access_token query param instead of an API key. Connect to the auto-finalization WebSocket with the Cartesia SDK:

Query parameters

ElevenLabs bundles the sample format and rate into a single audio_format token. Cartesia splits them into encoding and sample_rate.Cartesia also accepts pcm_s32le, pcm_f16le, pcm_f32le, and pcm_alaw.
All Cartesia encodings support all sample rates.

Sending audio

ElevenLabs wraps each audio chunk in a JSON formatted text frame and base64-encodes the audio bytes.
Cartesia accepts audio chunks as binary frames: send the raw audio bytes directly:
  • No need to supply previous text
  • Sample rate is determined upon connection by the sample_rate query parameter
If you currently commit audio mid-session with ElevenLabs, consider using Cartesia with manual finalization instead.Take a look at the migration guides page for details.
To commit all audio and close the session, send a JSON formatted text frame:
Cartesia will transcribe all buffered audio, then close the socket for you.

Sending audio with the SDK

Decoding base64 encoded audio before sending

Committing and closing

Event mapping

Scribe emits a partial_transcript, then a committed_transcript when its VAD commits a segment. Cartesia folds the same information into a turn lifecycle: turn.start, turn.update, turn.eager_end, turn.resume, and turn.end. See Turn Detection for the full state machine.

Partial transcripts

An ElevenLabs partial_transcript:
Becomes a Cartesia turn.update:

Committed transcripts

An ElevenLabs committed_transcript:
Becomes a Cartesia turn.end:

Example Server Messages

Scribe’s transcripts are joined with spaces. Ink’s are not.

References

API Reference

Cartesia Realtime STT (Auto)

Full Code Example

Using the Cartesia SDK