Skip to content

Recording events

Recording events fire after a call has ended, once Teler has finished processing and storing the audio. Recording is opt-in: enable it on the SIP Trunk, on the Voice App call, or via the record option on the dial verb.

Wire shape depends on your webhook version. Each payload has a toggle.

Fires when a recording is fully processed and ready to download.

{
"id": "evt_...",
"type": "recording.completed",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:32:22.010Z",
"account_id": "acc_...",
"voice_app_id": "va_...",
"sip_trunk_id": null,
"call_id": "cs_...",
"leg_id": null,
"data": {
"call_id": "cs_...",
"recording_id": "rec_...",
"recording_url": "https://recordings.frejun.ai/..."
},
"previous_attributes": null
}

Fires when recording was attempted but could not be produced: the source file was unavailable, storage was unavailable, the upload timed out, or a network error occurred. Details are carried in a nested failure object.

{
"id": "evt_...",
"type": "recording.failed",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:32:22.010Z",
"account_id": "acc_...",
"voice_app_id": "va_...",
"sip_trunk_id": null,
"call_id": "cs_...",
"leg_id": null,
"data": {
"call_id": "cs_...",
"recording_id": "rec_...",
"failure": {
"reason": "storage_unavailable",
"description": "Recording storage backend was unreachable"
}
},
"previous_attributes": null
}

failure.reason values: file_unavailable, storage_unavailable, upload_timeout, network_error, unknown_error. An optional failure.details object carries additional diagnostic context when available.