Deepgram
Point Deepgram Voice Agent’s open_ai speak provider at the tts-shims OpenAI-compatible shim.
Overview
Deepgram Voice Agent supports bring-your-own TTS through the agent.speak block of its Settings message. Its supported third-party types are open_ai, eleven_labs, cartesia, and aws_polly — there is no “custom Deepgram-dialect endpoint” option.
Speechify fits the open_ai slot. Point Deepgram at the tts-shims openai binary, and Deepgram sends an OpenAI-shaped POST /v1/audio/speech. The shim translates that request to a Speechify call and returns audio in the format Deepgram expects. Your Speechify key lives only in the shim’s environment.
Use the openai shim binary, not the deepgram binary. cmd/deepgram is for the opposite direction — redirecting a tool that already calls Deepgram’s Aura Speak API to Speechify. For Deepgram Voice Agent’s third-party TTS, you want cmd/openai.
SpeechifyAI Agents — our own voice-agent platform
SpeechifyAI ships its own voice-agents platform powered by Simba 3.2, which ranks #1 on the Artificial Analysis TTS leaderboard as of July 2026. See SpeechifyAI Agents if you want an end-to-end voice-agent stack instead of using Deepgram Voice Agent.
Prerequisites
- Speechify API key
- Deepgram key with Voice Agent access
- Public HTTPS URL for the shim (Deepgram calls it from its cloud)
- Go toolchain locally (only to build the shim)
Build and run the shim
Start it with your Speechify key:
The openai binary mounts POST /v1/audio/speech (the OpenAI TTS endpoint shape). Confirm it’s up:
Verify without Deepgram
Send Deepgram’s exact request shape yourself:
A working shim returns:
Inspect the output:
The Authorization: Bearer value here is a placeholder — the shim ignores it and uses SPEECHIFY_API_KEY from its own environment for the upstream call.
Configure Deepgram Voice Agent
In the Deepgram Voice Agent Settings message:
The model and voice you set are forwarded verbatim to the shim, which passes them to Speechify. Set model: "simba-3.2" and pick any voice whose models list includes simba-3.2 (query GET /v1/voices to filter).
The audio.output block is required and must be linear16 at 24000 Hz. Deepgram’s open_ai speak provider rejects other formats with:
Send container: "wav" or a 16 kHz rate and the whole Settings message is rejected before the agent speaks.
Alias fallback (default voice)
If you leave the open_ai defaults (model: "tts-1", voice: "alloy"), the shim maps them to Speechify’s simba-english model and george voice. That works, but it’s not the current Simba 3.2 quality tier — set explicit model: "simba-3.2" and a Simba 3.2 voice for the best output.
Production deployment
- Deploy the shim behind HTTPS on a service that holds environment variables.
- Set
SPEECHIFY_API_KEY,SHIM_ADDR, and optionallySPEECHIFY_BASE_URL,SHIM_DEFAULT_MODEL,SHIM_REQUEST_TIMEOUT,SHIM_SHUTDOWN_TIMEOUT. - Keep the placeholder Bearer token in the Deepgram config — it’s not a secret. The real key never leaves the shim host.
- Docker:
docker build --build-arg PROVIDER=openai -t tts-shim-openai .(the repo’s Dockerfile takes the provider as a build arg; distroless runtime, static Go binary).
Resources
Runnable end-to-end demo with run.sh and a live-agent agent.js.
Open-source Go proxy — cmd/openai for Deepgram Voice Agent, plus other provider dialects.
Voice Agent Settings message reference, including agent.speak third-party providers.
Blog: full config, ngrok proof, and why the shim owns the key.