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.
recording.completed
Section titled “recording.completed”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}{ "event": "recording.completed", "account_id": "<uuid>", "data": { "call_id": "<uuid>", "recording_id": "<uuid>", "recording_url": "https://recordings.frejun.ai/..." }}recording.failed
Section titled “recording.failed”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}{ "event": "recording.failed", "account_id": "<uuid>", "data": { "call_id": "<uuid>", "recording_id": "<uuid>" }}failure.reason values: file_unavailable, storage_unavailable,
upload_timeout, network_error, unknown_error. An optional
failure.details object carries additional diagnostic context when
available.