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.

CapabilityOpenClaw surfaceDefault
Text-to-speechtts / talkeleven_multilingual_v2
Batch speech-to-texttools.media.audioscribe_v2
Streaming speech-to-textVoice Call streaming or Google Meet realtime.transcriptionProviderscribe_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.

SettingConfig pathDefault
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",
              },
            },
          },
        },
      },
    },
  },
}

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.

460 words · updated Aug 12, 2026