ElevenLabs is the default text-to-speech provider in TeleQuick Voice. When you build a cascaded agent (speech-to-text → language model → text-to-speech) and don’t override the voice stage, the runtime synthesizes replies with ElevenLabs. You can also use your ElevenLabs key for streaming speech-to-text and for a full Conversational AI agent — all three plug in through the same per-tenant credential. This page shows the config. It is shipped and in production.
New to the runtime? Start with BYO ASR / LLM / TTS for the full cascade config file — this page is the ElevenLabs-specific slice of it.

Use ElevenLabs for text-to-speech

This is the common case: keep your speech-to-text and language model, and let ElevenLabs speak the replies.
1

Set the TTS stage in agent-config.yml

Set tts_provider: elevenlabs and put your ElevenLabs voice_id in tts_voice. Because ElevenLabs is the default, you can even omit tts_provider — but naming it keeps the config explicit.
agent-config.yml
name: support-agent
pipeline_mode: cascaded

asr_provider: deepgram
asr_model: nova-2

llm_provider: openai
llm_model: gpt-4o-mini

# --- Text-to-speech: ElevenLabs (default) ---
tts_provider: elevenlabs
tts_voice: <elevenlabs-voice-id>   # your ElevenLabs voice_id

language: en
system_prompt: >
  You are a friendly support agent for Acme. Keep replies short and spoken-friendly.
2

Add your ElevenLabs key

Provider keys are per-tenant. Set ELEVENLABS_API_KEY in the TeleQuick console at agent.telequick.dev — it is sealed at rest and injected at call setup, never baked into the config file. See Credentials.
3

Save and place a test call

Config is hydrated from the control plane with no rebuild. Place a call and check the latency breakdown — the TTS row shows time-to-first-audio for the ElevenLabs stage.

How it streams

The ElevenLabs TTS session opens a streaming connection (/stream-input), so audio begins flowing as the language model’s text arrives rather than after the whole sentence is generated — that is what keeps first-audio low. The default model is a low-latency turbo model; the synthesizer requests linear PCM, which the runtime resamples into its 8 kHz PCM16 call bus for you.
If a streaming session can’t open — a missing voice or a bad key — the runtime falls back to a one-shot HTTP synthesis for that turn so the caller still hears a reply instead of silence. Confirm the voice id and key up front so you stay on the streaming path.
tts_voice is your ElevenLabs voice_id (the long id from your ElevenLabs voice library), not the display name. Leave it empty to fall back to the provider’s default voice.

Use ElevenLabs for speech-to-text

The same ElevenLabs key also powers a streaming speech-to-text stage. Set asr_provider: elevenlabs to transcribe with ElevenLabs instead of the default:
agent-config.yml
asr_provider: elevenlabs

tts_provider: elevenlabs
tts_voice: <elevenlabs-voice-id>
Deepgram is the recommended default transcriber for English telephony (see Deepgram). Reach for ElevenLabs ASR when you want a single vendor and key across both the listening and speaking stages.

Use ElevenLabs Conversational AI

ElevenLabs Conversational AI (ConvAI) is a full duplex agent — ElevenLabs owns transcription, the language model, and the voice on one bidirectional connection, and the runtime bridges the call audio to it. Configure it as a single REALTIME node, the same way as the other speech-to-speech providers:
agent-config.yml
entry_node: REALTIME
pipeline:
  REALTIME:
    node_type: REALTIME
    provider: elevenlabs
    model: <elevenlabs-agent-id>   # required: your ElevenLabs Conversational AI agent id
    voice: <voice-id>              # optional: override the agent's configured voice
    instructions: |               # optional: override the agent's system prompt
      You are a friendly support agent for Acme. Keep replies short.
model
string
required
Your ElevenLabs Conversational AI agent id. This is mandatory — ConvAI dials a specific pre-built ElevenLabs agent, not a bare model name.
voice
string
Overrides the voice configured on the ElevenLabs agent. Leave empty to use the agent’s own voice.
instructions
string
Overrides the agent’s system prompt for this call. Leave empty to use the prompt set in ElevenLabs.
Public vs. private agents. A public ElevenLabs agent connects without an API key. A private agent needs ELEVENLABS_API_KEY in the tenant’s credentials.
ConvAI’s in-call tool / function calling is more limited than OpenAI Realtime. If your agent needs to call HTTP or MCP tools mid-conversation, prefer a cascade (where the LLM stage runs tool calling) or OpenAI Realtime.

Credentials

One key covers all three surfaces (TTS, ASR, ConvAI). Set it in the TeleQuick console at agent.telequick.dev; it is resolved from the control plane at call setup and sealed at rest. For single-tenant or local development, the runtime also reads the key from the environment as a fallback:
export ELEVENLABS_API_KEY=...
An agent whose TTS (or ASR) stage has no usable ElevenLabs key is refused at session creation with a clean error rather than starting and failing mid-call. Confirm the key is present before you route live traffic.

Next steps

Full cascade config

Wire ElevenLabs TTS alongside your chosen ASR and LLM in one config file.

Speech-to-speech

Run ConvAI or another duplex model as a single REALTIME node.

Turn detection

Tune barge-in and backchannel handling around the ElevenLabs voice.

Latency breakdown

See TTS time-to-first-audio on a live call.