Developers — API

Webhooks

Webhooks push call results to your server in real time. Configure endpoints on the Webhooks page.

Events

EventFires when
call.startedA call connects and the agent begins the conversation.
call.completedA call finishes successfully.
call.failedA call fails (no answer, busy, dial or mid-call error).

Payload

Every delivery is a JSON envelope: a unique id, the event name, a created_at timestamp, and the event fields under data. Use id to dedupe (deliveries are at-least-once).

call.completed
{
  "id": "d0c34c8e-72c2-45e5-ac5c-19cc36fb6a56",
  "event": "call.completed",
  "created_at": "2026-06-30T10:00:05Z",
  "data": {
    "call_id": "…",
    "phone_number": "+919812345678",
    "direction": "outbound",
    "status": "completed",
    "duration_seconds": 142,
    "summary": "Caller booked a demo for Tuesday 3 PM.",
    "sentiment_score": 8.2,
    "agent_id": "…",
    "contact_id": "…",
    "created_at": "2026-06-30T10:00:00Z"
  }
}

sentiment_score is a 0–10 quality/health score for the call (higher is better), not a 0–1 value.

Verifying signatures

Every request carries X-Vaaniq-Signature: sha256=… and X-Vaaniq-Timestamp. Compute an HMAC-SHA256 of {timestamp}.{raw_body} with your endpoint's signing secret and compare against the header.

Return a 2xx quickly; the platform retries failed deliveries (30s, then 5 min). Need the full transcript? Call the call-detail endpoint with the call_id.