Skip to main content

Overview

When a call created with include_post_transfer_transcript: true is cold-transferred to a human, Bland transcribes the bridged conversation live. Connect to this WebSocket to receive finalized transcript segments as the caller and the transferred-to representative speak. The stream is a real-time preview. The durable record is the post_transfer_transcript property on the citations webhook, which carries the same segment format built from the call recording after the call ends.
The post-transfer transcript stream is in limited rollout. If the Get Transcript Stream URL endpoint returns 403, it is not yet enabled for your organization.

Connecting

Request a connection URL from Get Transcript Stream URL and connect to it exactly as returned, within 5 minutes. The URL is opaque: it routes the connection to the server handling the call and carries the stream credential. Do not parse or reconstruct it. Connections without a valid credential for the call are closed with code 1008.

Connection Lifecycle

  • Connect any time after the call is answered. The connection URL becomes available once the call is answered; a listener that connects before the transfer starts is held and attached automatically when the transferred conversation begins.
  • Join-live semantics. A listener that connects mid-transfer receives segments from that moment forward. There is no history replay; use the post-call webhook for the complete transcript.
  • Multiple listeners are allowed. Each requests its own connection URL; all receive the same events.
  • End of stream. When the transferred conversation ends, the server sends a stream_end event and closes the socket with code 1000.

Events

All messages are JSON text frames.

transcript_segment

One finalized utterance. Segments are settled text — interim results are never sent — so they arrive at natural pause boundaries, not word by word.
segment.start
number
Seconds from the start of the transferred conversation.
segment.end
number
End of the utterance, in the same clock as start.
segment.speaker
number
1 for the caller, 2 for the transferred-to human.
segment.speaker_label
string
user for the caller, representative for the transferred-to human. Matches the labels in the webhook’s post_transfer_transcript.
segment.text
string
The finalized utterance text.
segment.confidence
number
Transcription confidence between 0 and 1.
Segments from the two speakers can arrive out of chronological order, since each speaker’s speech finalizes independently. Order by start when rendering.

stream_end

The transferred conversation has ended. No further segments will arrive, and the socket closes with code 1000.

Implementation Example


Docs for agents: llms.txt