Developers — API
Webhooks
Webhooks push call results to your server in real time. Configure endpoints on the Webhooks page.
Events
| Event | Fires when |
|---|---|
call.started | A call connects and the agent begins the conversation. |
call.completed | A call finishes successfully. |
call.failed | A 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.