Endpoint
Authentication
Pass your API key as a query parameter when opening the connection.Supported audio formats
Self-describing formats (auto-detected from file headers — no extra parameters needed): AAC, AIFF, FLAC, MP3, OGG, WAV, WebMOGG / Opus: OGG is a container that may carry Opus-encoded audio. Pass
audio_format=ogg, not audio_format=opus.audio_format, sample_rate, and num_channels):
s8, s16le, s16be, s24le, s24be, s32le, s32be, u8, u16le, u16be, u24le, u24be, u32le, u32be, f32le, f32be, f64le, f64be, mulaw, alaw
Valid sample rates: 8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000
Query parameters
Connection flow
- Connect to the WebSocket endpoint with
api_keyand any optional parameters. - Stream audio data as binary WebSocket frames. Frames can be any size.
- Receive frame pairs per utterance: a JSON text frame, optionally followed by a binary MP3 frame.
- Send an empty text frame (
"") to signal end of audio. - Receive a
doneJSON frame, optionally followed by a final binary MP3 frame for any trailing audio. - The connection closes automatically.
Server messages
The server sends frame pairs: a JSON text frame indicating the utterance, optionally followed by a binary MP3 frame. Theredacted_audio field in the JSON tells you whether a binary frame follows.
utterance (JSON + optional binary MP3)
Sent when a speech segment has been transcribed and redacted.
JSON frame:
redacted_audio is not null, a binary MP3 frame follows immediately. It covers the window from the last emitted audio point to the end of this utterance, with PII/PHI ranges silenced.
When redacted_audio is null, no binary frame follows. This occurs for out-of-order utterances whose audio window was already emitted in a previous clip — the redacted text is still delivered.
Utterance fields
Redacted audio info fields
done (JSON + optional binary MP3)
Sent after all audio has been processed, in response to the end-of-stream signal.
trailing_redacted_audio is not null, a binary MP3 frame follows containing any remaining audio after the last utterance, with any applicable PII/PHI ranges silenced.
When trailing_redacted_audio is null, no binary frame follows.
error
Sent if redaction fails during processing. The connection closes after this message. No binary frame follows.
WebSocket close codes
An
error JSON message is sent before the connection closes (except on 1000).
Rate limits
- Concurrent connection limits apply per organization.
- Monthly usage limits (in audio hours) apply per organization.
- Connections that exceed limits are rejected during the WebSocket handshake with close code
4029.
Redaction tags
Each detected PII/PHI span is replaced with an empty marker tag in the transcript text:<phi></phi> for health information and <pii:CATEGORY></pii:CATEGORY> for personal information, where CATEGORY identifies the detected entity type. The surrounding text is preserved. For more detail, see the PII/PHI Redaction (Batch) API reference.
Currently, all entity types the model can detect are redacted. Per-entity configurability is planned for a future release.
Examples
- Python (aiohttp)
- JavaScript (Node.js)
WebSocket APIs cannot be tested with cURL. For command-line testing, use
websocat.Related
- Which API should I use? — PII/PHI redaction vs PII/PHI tagging, batch vs streaming
- STT enrichment features — PII/PHI tagging option in the STT transcription APIs
- Authentication and rate limits