Speech-to-text turn boundary

postWebhookstt.turn

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 turn belongs to. Empty when the leg's audio is the call itself. See stt.text.stream_id

eventstring

Turn boundary: start_of_turn, update, eager_end_of_turn, turn_resumed or end_of_turn (Deepgram Flux), or utterance_end (Deepgram, when utterance_end_ms is set). New values may be added

turn_indexinteger

Index of the turn within the session, incrementing after each end_of_turn

textstring

Transcript of the turn so far. Empty on utterance_end

end_of_turn_confidencenumber

How confident the model is that the turn has ended

audio_window_start_msinteger

Start of the audio window this transcript covers

audio_window_end_msinteger

End of the audio window this transcript covers

last_word_end_msinteger

When the last word ended (utterance_end only)

languagesstring[]

Languages detected in the turn

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.