Switch your Pipecat STT or TTS provider to Soniox
Step-by-step guide to migrate from Deepgram, ElevenLabs, AssemblyAI, Cartesia, or OpenAI to Soniox STT and TTS in Pipecat, with config mapping and code examples.
Overview
Each provider section below shows how to swap an STT or TTS service for Soniox, plus how the source settings map across. The rest of your Pipecat pipeline (transport, LLM, aggregators) stays the same.
For configuration depth, see the STT and TTS reference pages. For an end-to-end walkthrough of a Soniox-only voice agent, see Build a voice agent.
Test Soniox before you migrate
The fastest way to evaluate is on our live comparison pages: record a sample on the STT comparison page or enter text on the TTS comparison page, and see the result side-by-side with your current provider.
Cases to evaluate when building a reliable voice agent across multiple languages:
- Mid-utterance language switching. Start a sentence in English and finish in Spanish, or drop a French name into an English question. Soniox detects and transcribes both.
- Non-English, end-to-end. Run a full conversation in your target language. Both STT and TTS cover 60+ languages.
- Tricky inputs. Order numbers, postal codes, emails, phone numbers, brand names, and product codes with non-English spellings. Soniox preserves them on the STT side and pronounces them correctly on the TTS side.
- Low latency. Soniox leads the Pipecat STT benchmark on time-to-final-transcript.
Before you migrate
Install the Soniox extras for Pipecat:
Create an API key in the Soniox Console. The same key works for STT and TTS.
From Deepgram
STT
Before:
After:
| Deepgram setting | Soniox equivalent | Notes |
|---|---|---|
language | language_hints (list) | a hint, not a filter. Soniox still transcribes other languages |
interim_results | always on | Soniox streams non-final and final tokens by default |
punctuate | automatic in Soniox | |
smart_format, numerals | automatic in Soniox | |
keywords / keyterm | context.terms | wrap with SonioxContextObject(terms=[...]) |
diarize | enable_speaker_diarization | |
endpointing (ms),utterance_end_ms | vad_force_turn_endpoint=False | uses Soniox endpointing |
redact, profanity_filter | no equivalent | handle in your application if needed |
From ElevenLabs
TTS
Before:
After:
| ElevenLabs TTS setting | Soniox equivalent | Notes |
|---|---|---|
voice | voice (Settings) | see Soniox voices |
stability, similarity_boost, style, use_speaker_boost | no equivalent | |
speed | no equivalent | |
apply_text_normalization | no equivalent |
STT
Before:
After:
| ElevenLabs Realtime STT setting | Soniox equivalent | Notes |
|---|---|---|
commit_strategy,vad_silence_threshold_secs, vad_threshold,min_speech_duration_ms, min_silence_duration_ms | vad_force_turn_endpoint=False | uses Soniox endpointing |
include_language_detection | enable_language_identification |
From AssemblyAI
STT
Before:
After:
| AssemblyAI setting | Soniox equivalent | Notes |
|---|---|---|
language_detection | enable_language_identification | |
keyterms_prompt | context.terms | wrap with SonioxContextObject(terms=[...]) |
prompt | context.text | wrap with SonioxContextObject(text="...") |
speaker_labels | enable_speaker_diarization | |
format_turns, formatted_finals | automatic in Soniox | |
min_turn_silence, max_turn_silence,end_of_turn_confidence_threshold,vad_threshold | vad_force_turn_endpoint=False | uses Soniox endpointing |
domain | context.general | wrap with SonioxContextObject(general=[SonioxContextGeneralItem(...)]) |
From Cartesia
TTS
Before:
After:
| Cartesia TTS setting | Soniox equivalent | Notes |
|---|---|---|
voice | voice (Settings) | see Soniox voices |
generation_config.speed | no equivalent | |
generation_config.volume | no equivalent | |
generation_config.emotion | no equivalent | |
pronunciation_dict_id | no equivalent |
Cartesia supports inline <spell> tags in input text. Strip them before passing text to Soniox, otherwise the bot will read the tags aloud literally.
STT
Before:
After:
| Cartesia STT setting | Soniox equivalent | Notes |
|---|---|---|
language | language_hints (list) | a hint, not a filter. Soniox still transcribes other languages |
From OpenAI
OpenAI provides both STT and TTS services in Pipecat.
STT
Before:
After:
| OpenAI Realtime STT setting | Soniox equivalent | Notes |
|---|---|---|
language | language_hints (list) | a hint, not a filter. Soniox still transcribes other languages |
prompt | context.text | wrap with SonioxContextObject(text="...") |
noise_reduction | no equivalent |
TTS
Before:
After:
| OpenAI TTS setting | Soniox equivalent | Notes |
|---|---|---|
voice | voice (Settings) | see Soniox voices |
instructions | no equivalent | |
speed | no equivalent |
OpenAI TTS is locked to 24 kHz output, so transports or recording stages
downstream of it may be configured for that rate. Pass sample_rate=24000 on
SonioxTTSService to keep them aligned. See the TTS
reference for supported rates.