API

Webhooks

Receive signed call lifecycle events with safe retry handling.

Events

EventWhen sent
call.startedA call has started.
call.endedA call reached a completed terminal state.
call.failedA call reached a failed terminal state.
transcript.readyThe finalized transcript is available.

Delivery handling

1

Verify

Validate X-AI-Voice-Signature using the endpoint secret and the unmodified request body before processing the payload.

2

Acknowledge

Return a successful 2xx status promptly and perform slower work asynchronously.

3

Deduplicate

Persist X-AI-Voice-Delivery or the payload event id and ignore a previously processed id.

4

Retry safely

Make downstream work idempotent because failed deliveries can be retried.

javascript
import { createHmac, timingSafeEqual } from "node:crypto";

function validVozonSignature(rawBody, signatureHeader, endpointSecret) {
  const expected = createHmac("sha256", endpointSecret)
    .update(rawBody)
    .digest("hex");
  const received = signatureHeader.replace(/^v1=/, "");
  return expected.length === received.length &&
    timingSafeEqual(Buffer.from(expected), Buffer.from(received));
}
json
{
  "id": "call.ended:call_id",
  "event": "call.ended",
  "createdAt": "2026-07-30T12:00:00.000Z",
  "data": {
    "id": "call_id",
    "call_status": "completed",
    "direction": "outbound",
    "duration": 92,
    "billing": { "chargedCredits": 0.0842 }
  }
}