Skip to main content
OpenClaw uses ElevenLabs for text-to-speech, Scribe v2 for batch speech-to-text, and Scribe v2 Realtime for streaming STT.
CapabilityOpenClaw surfaceDefault value
Text to speechmessages.tts / talkeleven_multilingual_v2
Batch speech to texttools.media.audioscribe_v2
Streaming speech to textVoice Call streaming or Google Meet realtime.transcriptionProviderscribe_v2_realtime

Authentication

Set ELEVENLABS_API_KEY in your environment. For compatibility with existing ElevenLabs tools, XI_API_KEY is also accepted.
export ELEVENLABS_API_KEY="..."

Text to Speech

{
  messages: {
    tts: {
      providers: {
        elevenlabs: {
          apiKey: "${ELEVENLABS_API_KEY}",
          speakerVoiceId: "pMsXgVXv3BLzUgSXRplE",
          modelId: "eleven_multilingual_v2",
        },
      },
    },
  },
}
Set modelId to eleven_v3 to use ElevenLabs v3 TTS. OpenClaw will keep eleven_multilingual_v2 as the default for existing installations. Discord voice channels use ElevenLabs’ streaming TTS endpoint when ElevenLabs is selected as the voice.tts/messages.tts provider. Playback starts from the returned audio stream instead of waiting for OpenClaw to download and write the full audio file first. latencyTier maps to the optimize_streaming_latency query parameter used by ElevenLabs for models that accept it; OpenClaw omits that parameter for eleven_v3 because it rejects it.

Speech to Text

Use Scribe v2 for incoming audio attachments and short recorded voice clips:
{
  tools: {
    media: {
      audio: {
        enabled: true,
        models: [{ provider: "elevenlabs", model: "scribe_v2" }],
      },
    },
  },
}
OpenClaw sends multipart audio to ElevenLabs /v1/speech-to-text and uses model_id: "scribe_v2". Language hints are mapped to language_code when present.

Streaming STT

The bundled elevenlabs plugin registers Scribe v2 Realtime streaming transcription for Voice Call and Google Meet agent modes.
SettingConfig pathDefault value
API keyplugins.entries.voice-call.config.streaming.providers.elevenlabs.apiKeyFalls back to ELEVENLABS_API_KEY / XI_API_KEY
Model...elevenlabs.modelIdscribe_v2_realtime
Audio format...elevenlabs.audioFormatulaw_8000
Sample rate...elevenlabs.sampleRate8000
Commit strategy...elevenlabs.commitStrategyvad
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",
              },
            },
          },
        },
      },
    },
  },
}
Voice Call receives media from Twilio in 8 kHz G.711 μ-law format. The ElevenLabs realtime provider defaults to ulaw_8000, so phone frames can be forwarded directly without transcoding.
For Google Meet agent mode, set plugins.entries.google-meet.config.realtime.transcriptionProvider to "elevenlabs" and configure the same provider block under plugins.entries.google-meet.config.realtime.providers.elevenlabs.