Skip to content

Webhooks overview

The gateway sends events to your registered webhook URL. Unlike the request/response endpoints, webhooks are how you observe everything that happens on a call asynchronously.

Every webhook shares a common envelope:

{
"event": "dtmf",
"session_uuid": "acW68-f47ac10b-58cc-4372-a567-0e02b2c3d479",
"sequence": 7,
"data": { }
}
FieldTypeDescription
eventstringEvent type, e.g. dtmf, call.hangup.
session_uuidstringSession the event belongs to.
sequenceintegerMonotonic per-session counter.
dataobjectEvent-specific payload.

Completion events for asynchronous commands include a command_uid in their data object. This lets you reliably match a webhook to the command that triggered it — essential when commands overlap (for example, starting a new playback before the previous one finishes).

  • Starts at 1 — the first event for a session has sequence = 1.
  • Monotonically increasing — each event increments the counter.

Use it to detect missing events (gaps) and to reorder out-of-order deliveries on the client.

Webhooks are delivered with retry and dead-letter handling via Redis Streams. A failed delivery is retried with backoff; exhausted deliveries land in a dead-letter queue rather than being dropped silently.