call.transcribed
Emitted when a voice call’s transcript has been processed and is ready to read. This is a thin event — it carries only the call id. Fetch the transcript (and the rest of the call record) from relatedObject.url (GET /api/v1/calls/{id}).
It is separate from call.ended because the transcript is produced by the voice provider after the call terminates. call.ended fires the moment the call reaches its terminal status; call.transcribed follows once the transcript lands — typically a few seconds later, sometimes more.
The fetched call carries the conversation twice. transcript is the flat text. transcriptTurns is the same conversation split into timed turns, each with a speaker (agent, user, or transfer_target for a human the call was handed off to), its text, and approximate startMs/endMs offsets in milliseconds into the call’s audio. Turn timing is what lets you measure pacing: the pause before any turn is its startMs minus the previous turn’s endMs, which the flat string gives you no way to recover.
Schema
Shares the common event envelope (id, object, type, version, createdAt, relatedObject). relatedObject is { id: <callId>, type: "call", url: "/api/v1/calls/<callId>" }. The data payload is intentionally minimal:
Example
When it fires
- Only for calls that produced a transcript. A cancelled, no-answer, or failed call emits
call.endedbut nevercall.transcribed. - Exactly once per call, when the transcript is first persisted. Late re-deliveries from the voice provider do not produce duplicate events.
- After
call.ended. Wait for it (or poll the call record) when you need the transcript rather than just the fact that the call ended.