Skip to main content

Recordings

Webhook events emitted after a call recording is processed. Payload shape depends on the webhook version pinned on the owning Voice App or SIP Trunk.

recording.completed

Triggered when a recording is fully processed and available.

{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "recording.completed",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:32:22.010Z",
"account_id": "acc_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"voice_app_id": "va_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"sip_trunk_id": null,
"call_id": "cs_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"leg_id": null,
"data": {
"call_id": "cs_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"recording_id": "rec_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"recording_url": "https://recordings.frejun.ai/..."
},
"previous_attributes": null
}
caution

Treat recording_url as time-limited. Fetch it promptly, or request a fresh URL via the API when accessing the file later. URLs are typically valid for 24 hours.

recording.failed

Triggered when recording was attempted but could not be produced.

{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "recording.failed",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:32:22.010Z",
"account_id": "acc_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"voice_app_id": "va_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"sip_trunk_id": null,
"call_id": "cs_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"leg_id": null,
"data": {
"call_id": "cs_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"recording_id": "rec_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"reason": "codec_error"
},
"previous_attributes": null
}