ElevenLabs Speech, Scribe STT, and Realtime Transcription with OpenClaw
Learn how OpenClaw integrates ElevenLabs for text-to-speech, batch speech-to-text via Scribe v2, and streaming transcription. This page is for developers configuring ElevenLabs in OpenClaw.
Read this when
- You want ElevenLabs text-to-speech in OpenClaw
- You want ElevenLabs Scribe speech-to-text for audio attachments
- You want ElevenLabs realtime transcription for Voice Call or Google Meet
OpenClaw relies on ElevenLabs for three speech capabilities: text-to-speech, batch speech-to-text via Scribe v2, and streaming speech-to-text through Scribe v2 Realtime. The plugin ships with OpenClaw and activates automatically, so there is no plugins install step required.
| Capability | OpenClaw surface | Default |
|---|---|---|
| Text-to-speech | tts / talk | eleven_multilingual_v2 |
| Batch speech-to-text | tools.media.audio | scribe_v2 |
| Streaming speech-to-text | Voice Call streaming or Google Meet realtime.transcriptionProvider | scribe_v2_realtime |
Authentication
The environment must contain ELEVENLABS_API_KEY. For compatibility with current ElevenLabs tools, XI_API_KEY is accepted as an alternative.
export ELEVENLABS_API_KEY="..."
Text-to-speech
{
tts: {
providers: {
elevenlabs: {
apiKey: "${ELEVENLABS_API_KEY}",
voiceId: "pMsXgVXv3BLzUgSXRplE",
modelId: "eleven_multilingual_v2",
},
},
},
}
To activate ElevenLabs v3 TTS, assign eleven_v3 to modelId. For existing installations, OpenClaw retains eleven_multilingual_v2 as the default setting.
When ElevenLabs serves as the chosen voice.tts/tts provider, Discord voice channels tap into ElevenLabs' streaming TTS endpoint: audio playback begins directly from the stream that comes back, rather than OpenClaw fetching the full audio file first. For models that support it, latencyTier corresponds to the optimize_streaming_latency query parameter in ElevenLabs; OpenClaw leaves that parameter out for eleven_v3, which does not accept it.
Speech-to-text
For inbound audio attachments and brief recorded voice clips, Scribe v2 is the way to go:
{
tools: {
media: {
models: [{ provider: "elevenlabs", model: "scribe_v2", capabilities: ["audio"] }],
audio: {
enabled: true,
},
},
},
}
OpenClaw transmits multipart audio to ElevenLabs /v1/speech-to-text using model_id: "scribe_v2". When language hints are provided, they are translated to language_code.
Streaming STT
The included elevenlabs plugin sets up Scribe v2 Realtime for streaming transcription in Voice Call and Google Meet agent mode.
| Setting | Config path | Default |
|---|---|---|
| API key | plugins.entries.voice-call.config.streaming.providers.elevenlabs.apiKey | Falls back to ELEVENLABS_API_KEY / XI_API_KEY |
| Model | ...elevenlabs.modelId | scribe_v2_realtime |
| Audio format | ...elevenlabs.audioFormat | ulaw_8000 |
| Sample rate | ...elevenlabs.sampleRate | 8000 |
| Commit strategy | ...elevenlabs.commitStrategy | vad |
| Language | ...elevenlabs.languageCode | (unset) |
{
plugins: {
entries: {
"voice-call": {
config: {
streaming: {
enabled: true,
provider: "elevenlabs",
providers: {
elevenlabs: {
apiKey: "${ELEVENLABS_API_KEY}",
audioFormat: "ulaw_8000",
commitStrategy: "vad",
languageCode: "en",
},
},
},
},
},
},
},
}
Note
Twilio delivers media to Voice Call as 8 kHz G.711 u-law. Since the ElevenLabs realtime provider defaults to
ulaw_8000, telephony frames can pass through with no transcoding needed.
For Google Meet agent mode, "elevenlabs" should be assigned to plugins.entries.google-meet.config.realtime.transcriptionProvider, and the same provider block must be set up under plugins.entries.google-meet.config.realtime.providers.elevenlabs.