Skip to content

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"
}
  • campaign is null for calls not placed by a campaign (ad hoc, browser, inbound).
  • agent is null if the call session has no linked agent.
  • contact is never null. 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 empty phone rather than a missing object.
  • status is 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.