Skip to content

recording.failed ​

When: The call won't have a recording: the tenant's storage quota was used up, it couldn't start, it started just before an upgrade of the media server and won't be delivered, or it never arrived from the media server (24 h after the call ended). A recording that arrives after that is still stored and sends recording.completed

Extra data: recording_id, reason (a sentence for people to read, not a code)

Example ​

Headers: X-Calloop-Event: recording.failed, X-Calloop-Event-Id, X-Calloop-Signature (verifying).

json
{
  "event_id": "7c0b1e0c-8a45-4c1b-9d4c-0f3a6a2f9b11",
  "event_type": "recording.failed",
  "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"
    },
    "recording_id": 52,
    "reason": "Recording skipped: storage quota exceeded"
  }
}

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.