
ACCEPTED call status webhook will typically arrive after the call has been established. The Cloud API primarily sends it for call event auditing.callback_permission_status in call settingscallback_permission_status is enabled, the user automatically provides call permission to your business when they place a call to you.POST <PHONE_NUMBER_ID>/calls endpoint with the following request body to initiate a new call:POST <PHONE_NUMBER_ID>/calls
{
"messaging_product": "whatsapp",
"to":"12185552828", // The WhatsApp user's phone number (callee)
"action":"connect",
"session" : {
"sdp_type" : "offer",
"sdp" : "<<RFC 8866 SDP>>"
}
}
{
"messaging_product": "whatsapp",
"calls" : [
{ "id" : "wacid.HBgLMTIxODU1NTI4MjgVAgARGCAyODRQIAFRoA" } // The WhatsApp call ID
]
}
138006 indicates a lack of a call request permission for this business number from the WhatsApp user.SDP Answer from Cloud API. Your business will then apply the SDP Answer from this webhook to your WebRTC stack to initiate the media connection.{
"entry": [
{
"changes": [
{
"field": "calls",
"value": {
"calls": [
{
"biz_opaque_callback_data": "TRx334DUDFTI4Mj", // Arbitrary string passed by business for tracking purposes
"session": {
"sdp_type": "answer",
"sdp": "<RFC 8866 SDP>"
},
"from": "13175551399", // The business phone number placing the call (caller)
"connection": {
"webrtc": {
"sdp": "<RFC 8866 SDP>"
}
},
"id": "wacid.HBgLMTIxODU1NTI4MjgVAgARGCAyODRQIAFRoA", // The WhatsApp call ID
"to": "12185552828", // The WhatsApp user's phone number (callee)
"event": "connect",
"timestamp": "1749196895",
"direction": "BUSINESS_INITIATED"
}
],
"metadata": { // ID and display number for the business phone number placing the call (caller)
"phone_number_id": "436666719526789",
"display_phone_number": "13175551399"
},
"messaging_product": "whatsapp"
}
}
],
"id": "366634483210360" // WhatsApp Business Account ID associated with the business phone number
}
],
"object": "whatsapp_business_account"
},
RINGING, ACCEPTED, or REJECTED:{
"entry": [
{
"changes": [
{
"field": "calls",
"value": {
"statuses": [
{
"id": "wacid.HBgLMTIxODU1NTI4MjgVAgARGCAyODRQIAFRoA", // The WhatsApp call ID
"type": "call",
"status": "[RINGING|ACCEPTED|REJECTED]", // The current call status
"timestamp": "1749197000",
"recipient_id": "12185552828" // The WhatsApp user's phone number (callee)
}
],
"metadata": { // ID and display number for the business phone number placing the call (caller)
"phone_number_id": "436666719526789",
"display_phone_number": "13175551399"
},
"messaging_product": "whatsapp"
}
}
],
"id": "366634483210360" // WhatsApp Business Account ID associated with the business phone number
}
],
"object": "whatsapp_business_account"
}
POST <PHONE_NUMBER_ID>/calls endpoint with the following request body to terminate the call:POST <PHONE_NUMBER_ID>/calls { "messaging_product": "whatsapp", "call_id": "wacid.HBgLMTIxODU1NTI4MjgVAgARGCAyODRQIAFRoA", // The WhatsApp call ID "action" : "terminate" }
{
"success" : true
}
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "366634483210360", // WhatsApp Business Account ID associated with the business phone number
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": { // ID and display number for the business phone number placing the call (caller)
"phone_number_id": "436666719526789",
"display_phone_number": "13175551399",
},
"calls": [
{
"id": "wacid.HBgLMTIxODU1NTI4MjgVAgARGCAyODRQIAFRoA",
"to": "12185552828", // The WhatsApp user's phone number (callee)
"from": "13175551399", // The business phone number placing the call (caller)
"event": "terminate",
"direction": "BUSINESS_INITIATED",
"timestamp": "1749197480",
"status": ["Failed", "Completed"],
"start_time": "1671644824", // Call start UNIX timestamp
"end_time": "1671644944", // Call end UNIX timestamp
"duration": 480 // Call duration in seconds
}
]
},
"field": "calls"
}
]
}
]
}
POST <PHONE_NUMBER_ID>/calls
| Placeholder | Description | Sample Value |
|---|---|---|
<PHONE_NUMBER_ID>Integer | Required ID of the business phone number from which you are initiating the new call. | 106540352242922 |
{
"messaging_product": "whatsapp",
"to": "14085551234",
"action": "connect",
"session": {
"sdp_type": "offer",
"sdp": "<<RFC 8866 SDP>>"
},
"biz_opaque_callback_data": "0fS5cePMok"
}
| Parameter | Description | Sample Value |
|---|---|---|
toInteger | “17863476655” | |
actionString | Required The action being taken on the given call ID. Values can be connect | pre_accept | accept | reject | terminate | “connect” |
sessionJSON object | Optional Contains the session description protocol (SDP) type and description language. Requires two values: sdp_type — (String) Required“offer”, to indicate SDP offer sdp — (String) RequiredThe SDP info of the device on the other end of the call. The SDP must be compliant with RFC 8866. | |
biz_opaque_callback_dataString | Optional An arbitrary string you can pass in that is useful for tracking and logging purposes. Any app subscribed to the “calls” webhook field on your WhatsApp Business Account can receive this string, as it is included in the calls object within the subsequent Call Terminate Webhook payload.Cloud API does not process this field. Maximum 512 characters | “0fS5cePMok” |
{
"messaging_product": "whatsapp",
"calls" : [{
"id" : "wacid.ABGGFjFVU2AfAgo6V",
}]
}
phone-number-idRTCP BYE packet in the media path. Ending the call this way also ensures pricing is more accurate.POST <PHONE_NUMBER_ID>/calls
| Parameter | Description | Sample Value |
|---|---|---|
<PHONE_NUMBER_ID>Integer | Required The business phone number which you are terminating a call from. | 18274459827 |
{
"messaging_product": "whatsapp",
"call_id": "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh",
"action": "terminate"
}
| Parameter | Description | Sample Value |
|---|---|---|
call_idString | Required The ID of the phone call. For inbound calls, you receive a call ID from the Call Connect webhook when a WhatsApp user initiates the call. | “wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh” |
actionString | Required The action being taken on the given call ID. Values can be connect | pre_accept | accept | reject | terminate | “terminate” |
{
"messaging_product": "whatsapp",
"success" : true
}
call idphone-number-id”calls” object inside the ”value” object of the webhook response. The ”calls” object contains metadata about the call that is used to action on each call placed or received by your business.SDP Answer).SDP Answer received in the webhook to your WebRTC stack to initiate the media connection.{
"object": "whatsapp_business_account",
"entry": [
{
"id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "16315553601",
"phone_number_id": "<PHONE_NUMBER_ID>"
},
"contacts": [
{
"wa_id": "16315553602"
}
],
"calls": [
{
"id": "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh",
"to": "16315553601",
"from": "16315553602",
"event": "connect",
"timestamp": "1671644824",
"direction": "BUSINESS_INITIATED",
"session": {
"sdp_type": "answer",
"sdp": "<<RFC 8866 SDP>>"
}
}
]
},
"field": "calls"
}
]
}
]
}
"calls"| Placeholder | Description |
|---|---|
idString | A unique ID for the call |
toInteger | The number being called (callee) |
fromInteger | The number of the caller |
eventInteger | The calling event that this webhook is notifying the subscriber of |
timestampInteger | The UNIX timestamp of the webhook event |
directionString | The direction of the call being made. Can contain either: BUSINESS_INITIATED, for calls initiated by your business.USER_INITIATED, for calls initiated by a WhatsApp user. |
sessionJSON object | Optional Contains the session description protocol (SDP) type and description language. Requires two values: sdp_type — (String) Required“offer”, to indicate SDP offer sdp — (String) RequiredThe SDP info of the device on the other end of the call. The SDP must be compliant with RFC 8866. |
contactsJSON object | wa_id — The WhatsApp ID of the callee. |
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "16315553601",
"phone_number_id": "<PHONE_NUMBER_ID>",
},
"statuses": [{
"id": "wacid.ABGGFjFVU2AfAgo6V",
"timestamp": "1671644824",
"type": "call"
"status": "[RINGING|ACCEPTED|REJECTED]",
"recipient_id": "163155536021",
"biz_opaque_callback_data": "random_string",
}]
},
"field": "calls"
}
]
}
]
}
"statuses"| Placeholder | Description |
|---|---|
idString | A unique ID for the call |
timestampInteger | The UNIX timestamp of the webhook event |
recipient_idInteger | The phone number of the WhatsApp user receiving the call |
statusInteger | The current call status. Possible values: RINGING: Business initiated call is ringing the userACCEPTED: Business initiated call is accepted by the userREJECTED: Business initiated call is rejected by the user |
biz_opaque_callback_dataString | Arbitrary string your business passes into the call for tracking and logging purposes. Will only be returned if provided through Initiate New Call API requests |
POST /<PHONE_NUMBER_ID>/calls endpoint with an action of terminate or reject.{
"object": "whatsapp_business_account",
"entry": [
{
"id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "16505553602",
"phone_number_id": "<PHONE_NUMBER_ID>",
},
"calls": [
{
"id": "wacid.ABGGFjFVU2AfAgo6V-Hc5eCgK5Gh",
"to": "16315553601",
"from": "16315553602",
"event": "terminate"
"direction": "BUSINESS_INITIATED",
"biz_opaque_callback_data": "random_string",
"timestamp": "1671644824",
"status" : [FAILED | COMPLETED],
"start_time" : "1671644824",
"end_time" : "1671644944",
"duration" : 120
}
],
"errors": [
{
"code": INT_CODE,
"message": "ERROR_TITLE",
"href": "ERROR_HREF",
"error_data": {
"details": "ERROR_DETAILS"
}
}
]
},
"field": "calls"
}
]
}
]
}
"calls"| Placeholder | Description |
|---|---|
idString | A unique ID for the call |
toInteger | The number being called (callee) |
fromInteger | The number of the caller |
eventInteger | The calling event that this webhook is notifying the subscriber of |
timestampInteger | The UNIX timestamp of the webhook event |
directionString | The direction of the call being made. Can contain either: BUSINESS_INITIATED, for calls initiated by your business.USER_INITIATED, for calls initiated by a WhatsApp user. |
start_timeInteger | The UNIX timestamp of when the call started. Only present when the call was picked up by the other party. |
end_timeInteger | The UNIX timestamp of when the call ended. Only present when the call was picked up by the other party. |
durationInteger | Duration of the call in seconds. Only present when the call was picked up by the other party. |
biz_opaque_callback_dataString | Arbitrary string your business passes into the call for tracking and logging purposes. Will only be returned if provided through an Initiate Call API request or Accept Call request |
errors.codeInteger | The errors object is present only for failed calls when there is error information available. Code is one of the calling error codes |