Skip to main content

Calls

Webhook events emitted through a call's lifecycle. The payload shape depends on the webhook version pinned on the owning Voice App or SIP Trunk. Every event below shows both versions.

call.initiated

Triggered when a new call has been initiated.

{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "call.initiated",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:30:45.100Z",
"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",
"from": "+91XXXXXXXXXX",
"to": "+91XXXXXXXXXX",
"direction": "outbound",
"start_time": "2026-06-01T11:30:45.100Z"
},
"previous_attributes": null
}

call.ringing

Triggered when the callee's phone starts ringing (outbound) or when Teler starts routing an inbound call.

Only emitted on 2026-06-01.

{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "call.ringing",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:30:46.220Z",
"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",
"direction": "outbound"
},
"previous_attributes": null
}

call.answered

Triggered when the called party picks up. Not delivered if the call fails before answer.

{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "call.answered",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:30:48.412Z",
"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",
"answered_at": "2026-06-01T11:30:48.412Z"
},
"previous_attributes": null
}

answered_at on 2026-06-01 replaces answer_time on 2025-08-01.

call.completed

Triggered when an answered call ends normally.

{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "call.completed",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:32:18.501Z",
"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",
"ended_at": "2026-06-01T11:32:18.501Z",
"duration_seconds": 90,
"reason": "callee_hangup",
"ended_by": "callee"
},
"previous_attributes": null
}

Field renames on 2026-06-01: hangup_timeended_at, durationduration_seconds, hangup_sourceended_by. New field: reason.

call.failed

Triggered when a call cannot be completed. Replaces call.completed for unsuccessful calls.

{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "call.failed",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:30:55.220Z",
"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",
"ended_at": "2026-06-01T11:30:55.220Z",
"reason": "no_answer",
"ended_by": "system"
},
"previous_attributes": null
}

Notes

info

Timestamp fields such as start_time, answered_at / answer_time, and ended_at / hangup_time are included based on call state. If a call fails before being answered, answered_at / answer_time are absent. Treat missing as unset, not falsy.

info

On 2026-06-01, ended_by values are caller, callee, or system. On 2025-08-01, the equivalent field is hangup_source with the same three values, except platform is used instead of system on some 2025-08-01 events.