Skip to content

Command → webhook map

Every API command and the webhook events it produces. Use this page to know exactly what callbacks to expect after each API call.

When you send a command, it follows this path from your application to webhook delivery:

Your App ──HTTP POST──▶ Voice Platform API ──async──▶ Webhook (your endpoint)

Your application issues an HTTP request; the platform validates and dispatches it; resulting events are delivered to your registered webhook URL with retry and ordering guarantees.

Timing types:

  • Immediate — the command returns command.result right away.
  • Deferred — the command waits for completion confirmation (with a timeout fallback).
  • Event — the webhook fires from a system event, not from an API call.

These webhooks fire automatically from system events, not from API commands.

TriggerWebhooks firedTimingNotes
Incoming callcall.newEventFires when a new inbound call arrives. Published before any commands are sent.
Channel answeredcall.answeredEventAutomatic channel-level answer event. May also fire from the answer command.
Call endedcall.hangupEventFires on call termination. Also synthesized for orphaned sessions after ~120 s idle.
DTMF key pressdtmfEventFires on each DTMF digit. Active during playback and recording.
CommandWebhooks firedTimingNotes
answercommand.result, call.answeredDeferredWaits for execution confirmation. Timeout fallback at 2 s publishes command.result with success: false.
hangupcommand.result, call.hangupImmediatecommand.result fires immediately. call.hangup arrives later from the event stream.
disconnectcommand.resultImmediateReturns control to the dialplan. Usually followed by a call.hangup lifecycle event.
CommandWebhooks firedTimingNotes
playback/startcommand.result, playback.started, playback.stopped, playback.file_not_foundDeferredTwo-phase: file fetch then playback. playback.started after fetch; playback.stopped when done; file_not_found on failure.
playback/stopcommand.result, playback.stoppedImmediatecommand.result fires immediately. Interrupting active playback triggers its playback.stopped.
playback/pausecommand.resultImmediateNo playback-specific webhook. Only command.result.
playback/resumecommand.resultImmediateNo playback-specific webhook. Only command.result.
playback/seekcommand.resultImmediateRequires position_ms in payload.
playback/restartcommand.resultImmediateRestarts playback from the beginning.
playback/silencecommand.result, playback.stoppedDeferredStops current playback (triggers its playback.stopped) and starts infinite silence. Silence only completes on hangup.
play_and_get_digitscommand.result, digits.collected, playback.file_not_foundDeferredMulti-phase fetch then DTMF collection. Individual dtmf events also fire during collection.
CommandWebhooks firedTimingNotes
record/startcommand.resultImmediateStarts audio streaming to the recording service. command.result is immediate.
record/stopcommand.result, recording.completedImmediaterecording.completed includes URL and duration. Uses the original record/start command_uid.

Per-session commands that control a call’s participation in a conference room.

CommandWebhooks firedTimingNotes
conference/joinconference.member.joinedDeferredAll members join muted. Webhook fires when the system confirms the join.
conference/leaveconference.member.leftDeferredKicks member from conference. Webhook fires on removal confirmation.
conference/muteconference.member.mutedDeferredWebhook fires on mute confirmation.
conference/unmuteconference.member.unmutedDeferredWebhook fires on unmute confirmation.

Room-level endpoints for creating, destroying, and controlling conference playback.

EndpointWebhooks firedTimingNotes
POST /conferencesconference.createdImmediateReturns 201 with room_id. Webhook published synchronously.
DELETE /conferences/{room_id}conference.destroyedImmediateStops recording, kicks all members, publishes webhook synchronously.
POST /conferences/{room_id}/playconference.play.started, conference.play.finishedImmediateplay.started fires immediately. play.finished fires when playback reaches the end naturally.
POST /conferences/{room_id}/pauseconference.play.pausedImmediateToggle pause/resume of conference playback.
POST /conferences/{room_id}/stopconference.play.stoppedImmediateStops all conference playback.
POST /conferences/{room_id}/volumeconference.play.volume_changedImmediateSets playback volume (range -50 to 7).