Files
openclaw/docs/providers/deepgram.md
dwc1997 f07ea10869 fix(deepgram): validate realtime base URL overrides, preserving ws(s):// endpoints (#105334)
* fix(deepgram): reject malformed and non-http(s) realtime base URL overrides

* fix(deepgram): accept direct ws(s):// realtime base URL overrides

Preserve released behavior: v2026.6.11 passes wss:// (and ws://) base URL
overrides straight through to the WebSocket URL builder. The prior validator
rejected every non-http(s) scheme, breaking custom Deepgram realtime proxies
that use a direct wss:// endpoint. Accept ws:/wss: alongside http(s):, keep
rejecting malformed and unrelated schemes, and preserve a direct ws(s):
override's protocol/path/port through toDeepgramRealtimeWsUrl.

* fix(deepgram): keep secure ws:// -> wss:// upgrade for realtime base URL

A prior change preserved direct ws:/wss: overrides unchanged, which also
stopped upgrading a plaintext ws:// override to wss://. That regressed the
released behavior where every accepted non-http: scheme maps to wss:, so an
existing ws:// endpoint would begin sending Deepgram realtime audio and
provider auth over an unencrypted socket. Restore the release mapping
(http: -> ws:, all others -> wss:), which still preserves a direct wss://
override and keeps the ws:// -> wss:// secure upgrade.

* fix(deepgram): preserve custom websocket transport

Co-authored-by: dwc1997 <du.wenchi@xydigit.com>

* test(deepgram): use placeholder credential fixture

* test(deepgram): clarify loopback callbacks

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 11:33:53 -07:00

6.8 KiB

summary, read_when, title
summary read_when title
Deepgram transcription for inbound voice notes
You want Deepgram speech-to-text for audio attachments
You want Deepgram streaming transcription for Voice Call
You need a quick Deepgram config example
Deepgram

Deepgram is a speech-to-text API. OpenClaw uses it for inbound audio/voice-note transcription through tools.media.audio and for Voice Call streaming STT through plugins.entries.voice-call.config.streaming.

Batch transcription uploads the complete audio file to Deepgram and injects the transcript into the reply pipeline ({{Transcript}} + [Audio] block). Voice Call streaming forwards live G.711 u-law frames over Deepgram's WebSocket listen endpoint and emits partial/final transcripts as Deepgram returns them.

Detail Value
Website deepgram.com
Docs developers.deepgram.com
Auth DEEPGRAM_API_KEY
Default model nova-3

Getting started

```bash DEEPGRAM_API_KEY=dg_... ``` ```json5 { tools: { media: { audio: { enabled: true, models: [{ provider: "deepgram", model: "nova-3" }], }, }, }, } ``` Send an audio message through any connected channel. OpenClaw transcribes it via Deepgram and injects the transcript into the reply pipeline.

Configuration options

Option Path Description
model tools.media.audio.models[].model Deepgram model id (default: nova-3)
language tools.media.audio.models[].language Language hint (optional)

providerOptions.deepgram merges extra query params directly into the Deepgram /listen request, so any Deepgram-supported param name works (for example detect_language, punctuate, smart_format):

```json5 { tools: { media: { audio: { enabled: true, models: [{ provider: "deepgram", model: "nova-3", language: "en" }], }, }, }, } ``` ```json5 { tools: { media: { audio: { enabled: true, providerOptions: { deepgram: { detect_language: true, punctuate: true, smart_format: true, }, }, models: [{ provider: "deepgram", model: "nova-3" }], }, }, }, } ```

Voice Call streaming STT

The bundled deepgram plugin also registers a realtime transcription provider for the Voice Call plugin.

Setting Config path Default
API key plugins.entries.voice-call.config.streaming.providers.deepgram.apiKey Falls back to DEEPGRAM_API_KEY
Base URL ...deepgram.baseUrl DEEPGRAM_BASE_URL or Deepgram's public API
Model ...deepgram.model nova-3
Language ...deepgram.language (unset)
Encoding ...deepgram.encoding mulaw
Sample rate ...deepgram.sampleRate 8000
Endpointing ...deepgram.endpointingMs 800
Interim results ...deepgram.interimResults true
{
  plugins: {
    entries: {
      "voice-call": {
        config: {
          streaming: {
            enabled: true,
            provider: "deepgram",
            providers: {
              deepgram: {
                apiKey: "${DEEPGRAM_API_KEY}",
                model: "nova-3",
                endpointingMs: 800,
                language: "en-US",
              },
            },
          },
        },
      },
    },
  },
}

For a Deepgram custom endpoint, set baseUrl to the endpoint root, including any base path but not /listen. Realtime endpoints accept http://, https://, ws://, and wss://. HTTP maps to WS, HTTPS maps to WSS, and explicit WebSocket schemes stay unchanged. Malformed URLs and other schemes fail during session setup.

Voice Call receives telephony audio as 8 kHz G.711 u-law. The Deepgram streaming provider defaults to `encoding: "mulaw"` and `sampleRate: 8000`, so Twilio media frames can be forwarded directly.

Notes

Authentication follows the standard provider auth order. `DEEPGRAM_API_KEY` is the simplest path. Override endpoints or headers with `tools.media.audio.baseUrl` and `tools.media.audio.headers` when using a proxy. Output follows the same audio rules as other providers (size caps, timeouts, transcript injection). Audio, image, and video processing pipeline overview. Full config reference including media tool settings. Common issues and debugging steps. Frequently asked questions about OpenClaw setup.