Streams
Webhook events emitted through a media stream's lifecycle. Payload shape depends on the webhook version pinned on the owning Voice App or SIP Trunk.
stream.initiated
Triggered when a new media stream has been initiated.
- 2026-06-01
- 2025-08-01
{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "stream.initiated",
"api_version": "2026-06-01",
"occurred_at": "2026-06-01T11:30:50.100Z",
"account_id": "acc_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"voice_app_id": "va_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"sip_trunk_id": null,
"call_id": "cs_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"leg_id": "cl_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"data": {
"call_id": "cs_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"stream_id": "ms_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"start_time": "2026-06-01T11:30:50.100Z"
},
"previous_attributes": null
}
{
"event": "stream.initiated",
"account_id": "<uuid>",
"call_app_id": "<uuid>",
"data": {
"call_id": "<uuid>",
"stream_id": "<uuid>",
"time": "2026-04-27T11:30:50Z"
}
}
stream.completed
Triggered when a media stream has been torn down.
- 2026-06-01
- 2025-08-01
{
"id": "evt_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"type": "stream.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": "cl_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"data": {
"call_id": "cs_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"stream_id": "ms_01H8ZXK9M2P7Q3R4S5T6V7W8XY",
"end_time": "2026-06-01T11:32:18.501Z"
},
"previous_attributes": null
}
{
"event": "stream.completed",
"account_id": "<uuid>",
"call_app_id": "<uuid>",
"data": {
"call_id": "<uuid>",
"stream_id": "<uuid>",
"time": "2026-04-27T11:32:18Z"
}
}
info
stream.completed does not imply call.completed. A stream can end while the underlying call is still active. Track both events to model the full lifecycle.