Speech-to-text transcript

postWebhookstt.text

Payload

type'leg.ringing' | 'leg.early_media' | 'leg.connected' | 'leg.disconnected' | 'leg.joined_room' | 'leg.left_room' | 'leg.muted' | 'leg.unmuted' | 'leg.deaf' | 'leg.undeaf' | 'leg.hold' | 'leg.unhold' | 'leg.command_failed' | 'leg.ice_interrupted' | 'leg.ice_restored' | 'leg.stream_added' | 'leg.stream_removed' | 'leg.stream_rejected' | 'leg.stream_failed' | 'leg.stream_room_changed' | 'leg.stream_role_changed' | 'siprec.session_started' | 'siprec.session_ended' | 'siprec.metadata_updated' | 'siprec.participant_joined' | 'siprec.participant_left' | 'dtmf.received' | 'rtt.received' | 'speaking.started' | 'speaking.stopped' | 'playback.started' | 'playback.finished' | 'playback.error' | 'tts.started' | 'tts.finished' | 'tts.error' | 'tts.staged' | 'tts.discarded' | 'recording.started' | 'recording.finished' | 'recording.paused' | 'recording.resumed' | 'leg.transfer_initiated' | 'leg.transfer_requested' | 'leg.transfer_progress' | 'leg.transfer_completed' | 'leg.transfer_failed' | 'room.created' | 'room.deleted' | 'room.bridged' | 'room.bridge_updated' | 'room.unbridged' | 'room.routing_changed' | 'leg.role_changed' | 'stt.text' | 'stt.turn' | 'agent.connected' | 'agent.disconnected' | 'agent.user_transcript' | 'agent.agent_response' | 'amd.result' | 'amd.beep' | 'sip.registration_attempt' | 'sip.registration_active' | 'sip.registration_expired' | 'sip.outbound_registration_active' | 'sip.outbound_registration_failed' | 'sip.outbound_registration_expired' | 'sip.trunk_up' | 'sip.trunk_down' required
timestampstring date-time required
event_idstring uuid

Stable per-event idempotency key; identical across delivery retries and across all subscribers of the event.

instance_idstring

Instance identifier

custom_dataunknown
leg_idstring

Leg identifier

room_idstring

Room identifier

app_idstring
stream_idstring

Which of the leg's audio streams this came from. Empty when the leg's audio is the call itself; set for a recording session, where each stream is a different party. Resolve it through GET /v1/legs/{id}/siprec

textstring

Transcribed text

is_finalboolean

Whether this is a final or partial transcript

speech_finalboolean

Whether the speaker stopped talking, as opposed to is_final's 'this segment will not change again'. Deepgram only; always false for providers that do not report it

audio_start_msinteger

Where in the stream this was said, in milliseconds from the first audio the transcriber was given. Absent when the provider reports no timing. Not the same as the event's arrival time, which is when the provider finished rather than when the words were spoken

audio_end_msinteger

End of the span audio_start_ms opens

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.