Voice Webhooks
The voice server posts signed events to your endpoint for call lifecycle, session and supervisor
activity, and callback-task workflow.
Every outbound POST includes:
Verifying signatures
The signature is hex(HMAC_SHA256(secret, raw_request_body)).
Verify against the raw bytes of the body, before any JSON parsing, and use a
constant-time comparison. Re-serialising the parsed body will not reproduce the same bytes,
so the signature will not match.
Custom tool calls are signed the same way. An agentβs tools[] endpoints receive the same
X-Webhook-Signature header, the same secret, and the same scheme β so one verification helper
covers both webhooks and tool invocations.
Reference implementations for Node.js, Python, and Rust are in the repoβs webhook guide.
Event catalog
Call lifecycle
Sessions and supervision
Callback tasks
The follow-up workflow emits a fuller set, useful for building an SLA-aware queue:
callback_task.updated, .dispatch_initiated, .dispatch_status,
.dispatch_status_updated, .completed, .reopened, .snooze_expired,
.follow_up_notification_sent, .follow_up_escalated, .human_takeover_required,
.sla_breached, .external_reconciled.
callback_task.sla_breached and .human_takeover_required are the two worth alerting on β
they signal work that will not complete without a person.
Retry and durability
Deliveries are retried, and every POST carries a stable X-Idempotency-Key. Key your handler on
it so a retried delivery is a no-op rather than a duplicate.