
Live transcription over a socket, returning interim results while the speaker is still talking and a settled transcript once each phrase ends.
Live transcription over a socket, returning interim results while the speaker is still talking and a settled transcript once each phrase ends.
Audio goes up as raw binary frames of 16 kHz mono 16-bit PCM. Interim and settled transcripts come back as Results events.
Also known as Deepgram-Nova-3-Stream
deepgram-nova-3-stream/v1/realtimenova-3-streamdeepgram/deepgram-nova-3-streamLive pay-as-you-go rates from the EmpirioLabs catalog. You are billed only for what you use, with no monthly minimum.
Deepgram Nova-3 Stream transcribes a live audio stream over a WebSocket at wss://api.empiriolabs.ai/v1/realtime?model=deepgram-nova-3-stream, not over the HTTP endpoints. Connect with the model id deepgram-nova-3-stream and send your EmpirioLabs API key as an Authorization: Bearer header on the handshake. Append base64 16-bit PCM audio and read transcript events back while the speaker is still talking. A browser cannot set headers on a WebSocket, so open this connection from your server and relay audio to the browser over your own socket. Get an API key from the EmpirioLabs dashboard.
import asyncio, json, os, websockets
async def main():
async with websockets.connect(
"wss://api.empiriolabs.ai/v1/realtime?model=deepgram-nova-3-stream",
additional_headers=[
("Authorization", f"Bearer {os.environ['EMPIRIOLABS_API_KEY']}"),
],
max_size=None,
) as ws:
print(json.loads(await ws.recv())["type"]) # session.created
import base64
# 16-bit PCM microphone audio, base64 encoded, in small chunks.
for chunk in read_microphone_chunks():
await ws.send(json.dumps({
"type": "input_audio_buffer.append",
"audio": base64.b64encode(chunk).decode(),
}))
await ws.send(json.dumps({"type": "input_audio_buffer.commit"}))
async for raw in ws:
event = json.loads(raw)
if event["type"].endswith("input_audio_transcription.delta"):
# "text" is settled transcript; "stash" is still in progress.
if event.get("text"):
print(event["text"], end="", flush=True)
asyncio.run(main())Request parameters supported by the Deepgram Nova-3 Stream API on EmpirioLabs. Defaults apply when a field is omitted.
| Parameter | Type | Default | Range / values | Description |
|---|---|---|---|---|
| input_audio_format | enum | linear16 | linear16 | Encoding of the audio you send up: 16 kHz mono 16-bit PCM, as raw binary frames rather than base64. |
| language | string | - | - | Optional language hint. Omit to let the model detect it. |
Live transcription over a WebSocket at wss://api.empiriolabs.ai/v1/realtime?model=deepgram-nova-3-stream, authenticated with the ordinary Authorization Bearer header. Send 16 kHz mono 16-bit PCM as binary frames and read transcript events back; interim results arrive while the speaker is still talking, and each phrase settles with is_final. Add language= to the connection URL to transcribe a specific language. Billing is per minute of the audio you send up.
On EmpirioLabs, Deepgram Nova-3 Stream is billed pay as you go: Transcription $0.025 per minute of audio. The live rate card on this page always matches what the API charges.
Deepgram Nova-3 Stream is served through WEBSOCKET /v1/realtime on api.empiriolabs.ai with standard bearer-token authentication.
Deepgram Nova-3 Stream runs over a WebSocket rather than a request and response, so start from the realtime voice quickstart. Connect from your server with your EmpirioLabs API key and the model id deepgram-nova-3-stream, then stream audio in both directions.
Create an EmpirioLabs account, then generate a key under API Keys in the dashboard. Billing is pay-as-you-go credits, so you only pay for the requests you make.
Check out our pricing or reach out if you want your own model deployed on our stack.