Deepgram Not Working?
API 401 (Token not Bearer), WebSocket not connecting, empty transcripts, Aura TTS silent, or credit balance 402? Check live status and fix it fast.
Deepgram — live status
Updated every 5 minutes. Full history at prismix.dev/service/deepgram.
What's wrong? Diagnose fast
API 401 — "Token" not "Bearer"
Deepgram auth: Authorization: Token YOUR_API_KEY (capital T, "Token" not "Bearer"). This is different from OpenAI/Anthropic. Python SDK: DeepgramClient("YOUR_KEY"). Generate keys at console.deepgram.com/project/keys. Check you are in the right project.
WebSocket not connecting
Realtime WebSocket URL: wss://api.deepgram.com/v1/listen. In browsers, pass auth as URL query param: ?token=YOUR_KEY (browsers block custom WS headers). From server: use Authorization: Token header. Required audio: raw 16-bit PCM, 16kHz, or add ?encoding=linear16&sample_rate=16000.
Empty or wrong transcripts
Debug checklist: (1) use nova-3 model for best accuracy (nova-3-medical / nova-3-meeting for specialized audio); (2) add smart_format=true for punctuation; (3) set correct language=en-US; (4) check response.results.channels[0].alternatives[0].transcript; (5) for realtime, check is_final:true events.
Credit balance 402
Deepgram pay-as-you-go: runs out when credit balance hits $0. Add credits at console.deepgram.com/project/billing. Free tier: $200 credit on signup (expires 12 months). Nova-3 costs $0.0043/min. For production: set up auto-reload in billing settings to avoid outages.
Aura TTS silent or wrong audio
Aura TTS: POST to /v1/speak?model=aura-asteria-en with JSON body {"text": "hello"}. Response is raw MP3 bytes. Common issues: (1) forgot Content-Type: application/json; (2) text >2,000 chars — chunk it; (3) wrong model name — valid: aura-asteria-en, aura-orpheus-en, aura-helios-en, aura-zeus-en (full list at deepgram.com/docs/tts).
Callback/webhook not firing
For async transcription (batch), add callback=https://your-url.com to the request URL. The callback URL must be public HTTPS. Deepgram sends a POST with the transcript JSON when done. For realtime, use the WebSocket's onmessage event instead — no separate webhook needed.
Deepgram API quick reference
Pre-recorded transcription (REST API)
# "Token" not "Bearer" — this is the #1 auth mistake
curl -X POST "https://api.deepgram.com/v1/listen?model=nova-3&smart_format=true&language=en-US" \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-public-url.com/audio.mp3"}'
# Upload a local file instead:
curl -X POST "https://api.deepgram.com/v1/listen?model=nova-3&smart_format=true" \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: audio/mp3" \
--data-binary @/path/to/audio.mp3 Real-time streaming (WebSocket, Node.js SDK)
import { createClient } from "@deepgram/sdk";
const deepgram = createClient("YOUR_API_KEY");
const connection = deepgram.listen.live({
model: "nova-3", // nova-3 for best English accuracy
language: "en-US",
smart_format: true, // punctuation + paragraphs
interim_results: true, // get partial results
});
connection.on("open", () => {
// Start sending audio chunks (Buffer / ArrayBuffer)
connection.send(audioChunk);
});
connection.on("transcript", (data) => {
const transcript = data.channel.alternatives[0].transcript;
if (data.is_final) console.log("Final:", transcript);
}); Aura TTS (text-to-speech)
import { createClient } from "@deepgram/sdk";
import { createWriteStream } from "fs";
const deepgram = createClient("YOUR_API_KEY");
const response = await deepgram.speak.request(
{ text: "Hello, this is Deepgram Aura TTS." },
{ model: "aura-asteria-en" } // or aura-orpheus-en, aura-helios-en
);
const stream = await response.getStream();
const fileWriter = createWriteStream("output.mp3");
for await (const chunk of stream) {
fileWriter.write(chunk);
}
fileWriter.end(); Deepgram models quick reference
| Model ID | Type | Best for | Price |
|---|---|---|---|
| nova-3 | STT | General English (best accuracy) | $0.0043/min |
| nova-3-medical | STT | Medical vocabulary + clinical terms | $0.0059/min |
| nova-2-meeting | STT | Multi-speaker meeting audio | $0.0049/min |
| nova-2-phonecall | STT | Telephony / phone audio (8kHz) | $0.0045/min |
| enhanced | STT | Legacy fallback, fast | $0.0145/min |
| whisper-medium | STT | Multilingual (non-English) | $0.0048/min |
| aura-asteria-en | TTS | Female voice (most used) | $0.015/1k chars |
| aura-orpheus-en | TTS | Male conversational voice | $0.015/1k chars |
| aura-helios-en | TTS | Male BBC-style narration | $0.015/1k chars |
Step-by-step fix
- 1
Check live Deepgram status
Visit prismix.dev/service/deepgram. Also status.deepgram.com. Check REST API and Realtime Streaming independently.
- 2
Fix API 401 — use "Token" not "Bearer"
Auth header:
Authorization: Token YOUR_API_KEY(capital T, not "Bearer"). Python SDK:DeepgramClient("YOUR_KEY"). Generate keys at console.deepgram.com/project/keys. - 3
Fix WebSocket connection
Endpoint:
wss://api.deepgram.com/v1/listen. Browser auth: add?token=YOUR_KEYto URL. Server: use Authorization: Token header. Setencoding=linear16&sample_rate=16000unless sending MP3/WebM directly. - 4
Fix empty transcripts
Use model
nova-3for English. Addsmart_format=truefor readable output. Checkresponse.results.channels[0].alternatives[0].transcript. For realtime, handleis_final: trueevents. - 5
Fix credit balance 402
Add credits at console.deepgram.com/project/billing. Nova-3 costs $0.0043/min. Enable auto-reload to prevent production outages. Free tier = $200 credit on signup (expires 12 months).
Get alerted when Deepgram goes down
Star Deepgram on Prismix and get emailed the moment status changes. Free, no credit card.
Frequently asked questions
Why is Deepgram not working?
Deepgram issues: (1) 401 — header is "Authorization: Token YOUR_KEY" (capital T, not Bearer); (2) WebSocket not connecting — use wss://api.deepgram.com/v1/listen, pass token in URL query param from browser; (3) empty transcript — use nova-3 model, set smart_format=true, check correct response path; (4) 402 — add credits at console.deepgram.com; (5) outage — prismix.dev/service/deepgram.
Is Deepgram down right now?
Check prismix.dev/service/deepgram for live status. Also status.deepgram.com tracks REST API and Realtime Streaming independently.
Deepgram API 401 — how to fix?
Auth header: Authorization: Token YOUR_API_KEY (capital T, not Bearer). This is unique to Deepgram — most AI APIs use "Bearer". Generate keys at console.deepgram.com/project/keys. SDK: DeepgramClient("YOUR_KEY"). No prefix character on the key itself.
Deepgram WebSocket not connecting — how to fix?
URL: wss://api.deepgram.com/v1/listen?model=nova-3&language=en-US. Pass auth as URL query param: &token=YOUR_KEY (required in browsers, which block custom WebSocket headers). Audio format: raw 16-bit PCM, 16kHz, or add &encoding=linear16&sample_rate=16000 to the URL params. Use the Deepgram SDK to handle reconnection automatically.
Deepgram transcript is empty — how to fix?
Empty transcript checklist: (1) test with a known-good audio file (Deepgram provides public examples); (2) use model=nova-3; (3) add smart_format=true for readable output with punctuation; (4) check the correct path: response.results.channels[0].alternatives[0].transcript; (5) for realtime, only emit transcript when is_final is true; (6) verify audio is not silence — Deepgram returns empty string for silent audio.