Skip to main content
WSS
Real-time PII/PHI redaction over WebSocket. Streams audio to the server and receives, per utterance, a redacted transcript and a redacted MP3 clip with the PII/PHI ranges silenced.

Endpoint

Authentication

Pass your API key as a query parameter when opening the connection.
Unlike the batch endpoints, the streaming API does not use an X-API-Key header. The key must be in the query string at connection time.
See Authentication and rate limits for how to obtain and manage API keys.

Supported audio formats

Self-describing formats (auto-detected from file headers — no extra parameters needed): AAC, AIFF, FLAC, MP3, OGG, WAV, WebM
OGG / Opus: OGG is a container that may carry Opus-encoded audio. Pass audio_format=ogg, not audio_format=opus.
Raw / headerless formats (require 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

  1. Connect to the WebSocket endpoint with api_key and any optional parameters.
  2. Stream audio data as binary WebSocket frames. Frames can be any size.
  3. Receive frame pairs per utterance: a JSON text frame, optionally followed by a binary MP3 frame.
  4. Send an empty text frame ("") to signal end of audio.
  5. Receive a done JSON frame, optionally followed by a final binary MP3 frame for any trailing audio.
  6. 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. The redacted_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:
When 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.
When 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 model.
  • Connections that exceed limits are rejected during the WebSocket handshake with close code 4030.
See Authentication and rate limits for retry guidance.

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

WebSocket APIs cannot be tested with cURL. For command-line testing, use websocat.
query
type:object
Utterance Result
type:object

A completed utterance with redacted text. When redacted_audio is not null, the next frame from the server is a binary MP3 frame containing the redacted audio clip. When redacted_audio is null (out-of-order utterance whose audio was already emitted), no binary frame follows.

Redacted Audio Clip
type:string

Binary MP3 data for the redacted audio window. Sent immediately after an utterance JSON frame that has a non-null redacted_audio field.

Error
type:object

An error occurred during redaction. No binary frame follows.

Redaction Complete
type:object

Redaction completed successfully. When trailing_redacted_audio is not null, the next frame is a binary MP3 frame containing the remaining audio after the last utterance. When null, no binary frame follows.

Trailing Audio Clip
type:string

Binary MP3 data for the trailing audio after the last utterance. Sent immediately after a done JSON frame that has a non-null trailing_redacted_audio field.

Audio Data Chunk
type:string

Audio data chunk for real-time redaction

End of Audio Stream
type:string

Empty text frame signaling end of audio stream