The call.completed event
This is the payload iCallAgent sends to you, so it has no operation in the API reference — subscribe with Subscribe to call.completed and receive this at the URL you registered.
Payload
POSTed to every subscribed URL whenever a call reaches a terminal state (completed, or a final non-retryable failed). A campaign call about to retry does not fire this event, only its eventual final outcome does. Delivery fires exactly once per call, regardless of which code path closed it.
json
{
"event": "call.completed",
"call_id": "abc123",
"status": "completed",
"direction": "outbound",
"agent": { "id": 7, "name": "Support Agent" },
"contact": { "id": 501, "name": "Jane Doe", "phone": "+15551234567" },
"campaign": { "id": 12, "name": "Q3 Renewals" },
"answered_at": "2026-07-30T10:15:00Z",
"ended_at": "2026-07-30T10:17:42Z",
"duration_seconds": 162,
"hangup_cause": "NORMAL_CLEARING"
}campaignisnullfor calls not placed by a campaign (ad hoc, browser, inbound).agentisnullif the call session has no linked agent.contactis nevernull. When the call has no stored contact — a browser call, or an ad hoc number — it falls back to{ "name": "<call target label>", "phone": "" }. Check for an emptyphonerather than a missing object.statusis only ever"completed"or"failed". Every other call state maps to one of the two.
TIP
Your endpoint should respond quickly and return a 2xx status. Treat this as at-least-once delivery and dedupe on call_id if you need strict idempotency.