Files
openclaw/docs/providers/elevenlabs.md
Peter Steinberger edecdbd05e refactor(config): config-surface reduction tranche 3 — product consolidations (review request) (#111527)
* refactor(config): consolidate media model lists

* refactor(config): unify memory configuration

* refactor(config): consolidate TTS ownership

* refactor(config): move typing policy to agents

* refactor(config): retire product-level config surfaces

* refactor(config): share scoped tool policy type

* chore(config): refresh generated baselines

* fix(config): honor agent typing overrides

* fix(config): migrate sibling config consumers

* refactor(infra): keep base64url decoder private

* fix(config): strip invalid legacy TTS values

* chore(config): refresh rebased baseline hash

* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move

* refactor(config): polish final layout names

* refactor(config): freeze retired tuning defaults

* feat(config): add fast mode default symmetry

* refactor(config): key agent entries by id

* docs(config): update final layout reference

* test(config): cover final layout migrations

* chore(config): refresh final layout baselines

* fix(config): align final layout runtime readers

* fix(config): align remaining readers

* fix(config): stabilize final layout migrations

* fix(config): finalize config projection proof

* fix(config): address final layout review

* docs(release): preserve historical config names

* fix(config): complete keyed agent migration

* fix(config): close final migration gaps

* fix(config): finish full-branch review

* fix(config): complete runtime secret detection

* fix(config): close final review findings

* fix(config): finish canonical docs and heartbeat migration

* fix(config): integrate latest main after rebase

* refactor(env): isolate test-only controls

* refactor(env): isolate build and development controls

* refactor(env): collapse process identity indirection

* refactor(env): remove duplicate config and temp aliases

* docs(env): define the operator-facing allowlist

* ci(env): ratchet production variable count

* fix(env): remove stale provider helper import

* fix(env): make ratchet sorting explicit

* test(env): keep test seam in dead-code audit

* test(env): cover ratchet growth and boundary; document surface budgets

* docs(config): document tier-eval consolidations

* docs(config): clarify speech preference ownership

* test(memory): align retired tuning fixtures

* refactor(memory): freeze engine heuristics

* refactor(config): apply tier-eval tranche

* refactor(tts): move persona shaping to providers

* refactor(compaction): move prompt policy to providers

* test(config): align hookified prompt fixtures

* chore(deadcode): classify test-only exports

* chore(github): remove unused spawn helper

* chore(deadcode): classify queue diagnostics

* chore(deadcode): remove unused lane snapshot export

* chore(plugin-sdk): ratchet consolidated surface

* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00

4.8 KiB

summary, read_when, title
summary read_when title
Use ElevenLabs speech, Scribe STT, and realtime transcription with OpenClaw
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
ElevenLabs

OpenClaw uses ElevenLabs for text-to-speech, batch speech-to-text with Scribe v2, and streaming STT with Scribe v2 Realtime. The plugin is bundled and enabled by default; no plugins install step is needed.

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

Set ELEVENLABS_API_KEY in the environment. XI_API_KEY is also accepted for compatibility with existing ElevenLabs tooling.

export ELEVENLABS_API_KEY="..."

Text-to-speech

{
  tts: {
    providers: {
      elevenlabs: {
        apiKey: "${ELEVENLABS_API_KEY}",
        voiceId: "pMsXgVXv3BLzUgSXRplE",
        modelId: "eleven_multilingual_v2",
      },
    },
  },
}

Set modelId to eleven_v3 to use ElevenLabs v3 TTS. OpenClaw keeps eleven_multilingual_v2 as the default for existing installs.

Discord voice channels use ElevenLabs' streaming TTS endpoint when ElevenLabs is the selected voice.tts/tts provider: playback starts from the returned audio stream instead of waiting for OpenClaw to download the whole audio file first. latencyTier maps to ElevenLabs' optimize_streaming_latency query parameter for models that accept it; OpenClaw omits that parameter for eleven_v3, which rejects it.

Speech-to-text

Use Scribe v2 for inbound audio attachments and short recorded voice segments:

{
  tools: {
    media: {
      audio: {
        enabled: true,
        models: [{ provider: "elevenlabs", model: "scribe_v2" }],
      },
    },
  },
}

OpenClaw sends multipart audio to ElevenLabs /v1/speech-to-text with model_id: "scribe_v2". Language hints map to language_code when present.

Streaming STT

The bundled elevenlabs plugin registers Scribe v2 Realtime for Voice Call and Google Meet agent-mode streaming transcription.

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",
              },
            },
          },
        },
      },
    },
  },
}
Voice Call receives Twilio media as 8 kHz G.711 u-law. The ElevenLabs realtime provider defaults to `ulaw_8000`, so telephony frames can be forwarded 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.