Set it up
On the agent's Knowledge tab, under CRM / Webhook URL, press Add Webhook and enter one or more URLs. Save with Update Agent.

The request
When a call ends, each URL receives a POST with a JSON body and these headers: Content-Type: application/json, X-Webhook-Source and X-Call-Id.
{
"callId": "a93f3f85-74e0-4c55-9d3e-1c2b7d0e8f41",
"batchRef": "batch-676ddb6c-95f1",
"agentId": "b67fe5d2-1c3a-4e8b-9f0d-2a4c6e8b0d13",
"agentName": "Renewal outreach",
"transcript": "Agent: Hi Priya, is now a good time?\nUser: Sure…",
"summary": "Priya wants to keep her plan and asked for a callback on Thursday.",
"duration_seconds": 214,
"total_cost": 0.42,
"sentiment": "positive",
"disposition_status": "successful_connected",
"disposition": "interested",
"qa_score": null,
"structured_data": {
"callback_day": "Thursday"
},
"caller_number": "+61412345678",
"recording_url": "https://…",
"started_at": "2026-09-16T03:05:19.000Z",
"ended_at": "2026-09-16T03:08:53.000Z",
"status": "completed",
"direction": "outbound",
"end_reason": "customer-ended-call",
"timestamp": "2026-09-16T03:08:54.000Z"
}Delivery is one attempt per URL with no retries and no signature. Respond with a 2xx quickly and treat callId as the idempotency key. To fill gaps, read calls back with List calls.