Skip to content

call.ended ​

When: Terminated or failed — see terminationReason, terminatedBy, durations

Extra data: none — data.call only.

Example ​

Headers: X-Calloop-Event: call.ended, X-Calloop-Event-Id, X-Calloop-Signature (verifying).

json
{
  "event_id": "7c0b1e0c-8a45-4c1b-9d4c-0f3a6a2f9b11",
  "event_type": "call.ended",
  "api_version": "2026-09-25",
  "occurred_at": "2026-09-25T10:05:12.000Z",
  "tenant_ref": "biz-123",
  "data": {
    "call": {
      "callId": 42,
      "callUuid": "00000000-0000-0000-0000-000000000042",
      "tenantId": 1,
      "tenantRef": "biz-123",
      "channel": "WHATSAPP",
      "channelId": 1,
      "channelAddress": "+442079460000",
      "channelRef": "support-line",
      "queueId": 1,
      "direction": "INBOUND",
      "status": "TERMINATED",
      "state": null,
      "mediaTopology": "ROOM",
      "customer": {
        "address": "+447700900123",
        "addressType": "E164",
        "name": "Test Customer"
      },
      "agentId": 7,
      "agentRef": "user-7",
      "agentName": "Agent One",
      "externalRef": "crm-call-42",
      "providerCallId": "wacid.HBgL...",
      "ivrFlowId": null,
      "ringingAt": "2026-09-25T10:00:00.000Z",
      "answeredAt": "2026-09-25T10:00:06.000Z",
      "endedAt": "2026-09-25T10:05:12.000Z",
      "terminationReason": "COMPLETED",
      "terminatedBy": "CUSTOMER",
      "durations": {
        "ringing": 6,
        "call": 306,
        "queue": 4
      },
      "failureDetails": null,
      "consumerMetadata": {
        "crm_contact_id": 991
      },
      "createdAt": "2026-09-25T10:00:00.000Z"
    }
  }
}

data.call is the full call at that moment — the same view GET /v1/calls/{callId} returns. Apply events by "latest occurred_at wins": they can arrive out of order.

Calloop — the call engine behind your product.