These webhook events are triggered when using the Ringing flow — where a caller initiates a call and the recipient receives an incoming call notification with accept/reject options. This is the standard calling experience for 1-on-1 and group calls initiated through the Chat SDK.
call_initiated
Triggered when a user initiates a call to another user or group.
Idempotency Key: webhook + trigger + data.call.id + data.call.sentAt
{
"trigger": "call_initiated",
"data": {
"call": {
"id": "52",
"conversationId": "cometchat-uid-1_user_cometchat-uid-5",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-5",
"category": "call",
"type": "audio",
"data": {
"action": "initiated",
"entities": {
"by": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"status": "available",
"role": "default",
"lastActiveAt": 1696933934
},
"entityType": "user"
},
"on": {
"entity": {
"sessionid": "<sessionId>",
"status": "initiated",
"type": "audio",
"initiatedAt": 1696934199
},
"entityType": "call"
}
}
},
"sentAt": 1696934199,
"updatedAt": 1696934199
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_started
Triggered when the call session begins (first participant joins after accepting).
Idempotency Key: webhook + trigger + data.sessionId + data.created_at
{
"trigger": "call_started",
"data": {
"created_at": 1696934572,
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_participant_joined
Triggered when a participant joins the active call.
Idempotency Key: webhook + trigger + data.sessionId + data.occupant.joined_at
{
"trigger": "call_participant_joined",
"data": {
"occupant": {
"joined_at": 1696934573,
"audio_call": "true",
"name": "Andrew Joseph"
},
"initial_config": {
"is_video_muted": "false",
"start_recording_on_call_start": "false",
"call_version": "2.3.0",
"is_audio_muted": "false",
"sdk": "react",
"mode": "DEFAULT",
"platform": "web",
"is_audio_only": "true"
},
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_participant_left
Triggered when a participant leaves the active call.
Idempotency Key: webhook + trigger + data.sessionId + data.occupant.left_at
{
"trigger": "call_participant_left",
"data": {
"occupant": {
"joined_at": 1696934501,
"audio_call": "true",
"left_at": 1696934553,
"name": "George Alan"
},
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_ended
Triggered when the call session ends (all participants have left).
Idempotency Key: webhook + trigger + data.sessionId + data.destroyed_at
{
"trigger": "call_ended",
"data": {
"all_occupants": [
{
"joined_at": 1696934501,
"audio_call": "true",
"left_at": 1696934553,
"name": "George Alan"
},
{
"joined_at": 1696934501,
"audio_call": "true",
"left_at": 1696934551,
"name": "Andrew Joseph"
}
],
"destroyed_at": 1696934553,
"created_at": 1696934501,
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_busy
Triggered when a 1-on-1 call cannot connect because the recipient is already on another call.
This event is exclusive to 1-on-1 calls. In group calls, all participants can join at any time, so a “busy” state does not apply.
Idempotency Key: webhook + trigger + data.call.id + data.call.sentAt
{
"trigger": "call_busy",
"data": {
"call": {
"id": "43414",
"conversationId": "superhero1_user_superhero3",
"sender": "superhero3",
"receiverType": "user",
"receiver": "superhero1",
"category": "call",
"type": "audio",
"data": {
"action": "busy"
},
"sentAt": 1744960250,
"updatedAt": 1744960250
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}
call_cancelled
Triggered when the caller cancels the call before it is answered.
Idempotency Key: webhook + trigger + data.call.id + data.call.sentAt
{
"trigger": "call_cancelled",
"data": {
"call": {
"id": "43408",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero4",
"receiverType": "user",
"receiver": "superhero3",
"category": "call",
"type": "audio",
"data": {
"action": "cancelled"
},
"sentAt": 1744960111,
"updatedAt": 1744960111
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}
call_rejected
Triggered when the recipient explicitly rejects a 1-on-1 call.
In group calls, this event is not triggered — the call remains active as long as at least one member joins.
Idempotency Key: webhook + trigger + data.call.id + data.call.sentAt
{
"trigger": "call_rejected",
"data": {
"call": {
"id": "43406",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero3",
"receiverType": "user",
"receiver": "superhero4",
"category": "call",
"type": "audio",
"data": {
"action": "rejected"
},
"sentAt": 1744960092,
"updatedAt": 1744960092
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}
call_unanswered
Triggered when a call goes unanswered. For group calls, this fires only if no members join at all.
Idempotency Key: webhook + trigger + data.call.id + data.call.sentAt
{
"trigger": "call_unanswered",
"data": {
"call": {
"id": "43410",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero4",
"receiverType": "user",
"receiver": "superhero3",
"category": "call",
"type": "audio",
"data": {
"action": "unanswered"
},
"sentAt": 1744960170,
"updatedAt": 1744960170
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}