calls field to notify you of call lifecycle changes. The webhook structure follows the same pattern as Messenger Platform webhooks.calls webhook field to receive these events. For business-initiated calls, also subscribe to the call_permission_reply field./{page-id}/calls with action=accept to establish the WebRTC connection.{ "object": "page", "entry": [ { "id": "{page-id}", "time": 1671644824, "calls": [ { "id": "c_M5YPhGE5jm0L_PMQdScLlYJlR7tU_f0rgXiTQ", "to": "106378625516323", "from": "5275811702471834", "event": "connect", "timestamp": 1671644824, "call_direction": "[business_initiated|user_initiated]" } ] } ] }
| Property | Description |
|---|---|
id string | Unique ID for the call. Use this in your accept, reject, or terminate API calls. |
to string | Callee of the call (Page ID) |
from string | Caller of the call (PSID) |
event string | connect or terminate |
timestamp Unix timestamp | Start time of the call from the caller’s perspective |
call_direction string | business_initiated or user_initiated |
{ "object": "page", "entry": [ { "id": "{page-id}", "time": 1671644824, "calls": [ { "id": "c_M5YPhGE5jm0L_PMQdScLlYJlR7tU_f0rgXiTQ", "event": "call_status", "timestamp": 1671644824, "recipient_id": "{psid}", "call_status": "[ringing | accepted]" } ] } ] }
| Property | Description |
|---|---|
id string | Unique ID for the call |
event string | call_status |
recipient_id string | PSID of the consumer |
call_status string |
|
{ "object": "page", "entry": [ { "id": "{page-id}", "time": 1671644824, "calls": [ { "id": "c_M5YPhGE5jm0L_PMQdScLlYJlR7tU_f0rgXiTQ", "event": "media_update", "timestamp": 1671644824, "session": { "version": 1, "sdp_renegotiation": { "sdp_type": "offer", "sdp": "<<RFC 4566 SDP>>" } } } ] } ] }
| Property | Description |
|---|---|
event string | media_update |
session.version integer | Incremented each time Meta provides new SDP. If you receive multiple media_update webhooks, apply the one with the highest version number. |
session.sdp_renegotiation JSON | Contains the SDP offer from Meta. Generate an answer from this offer and apply it to your local peer connection.
|
/{page-id}/calls with action=terminate/{page-id}/calls with action=reject (consumer-initiated calls only){ "object": "page", "entry": [ { "id": "{page-id}", "time": 1671644824, "calls": [ { "id": "c_M5YPhGE5jm0L_PMQdScLlYJlR7tU_f0rgXiTQ", "event": "terminate", "timestamp": 1671644824, "status" : "[Failed | Completed]", "start_time" : 1671644824, "end_time" : 1671644944, "duration" : 120 } ] } ] }
| Property | Description |
|---|---|
status string | Final status of the call:
|
start_time Unix timestamp | When the call started |
end_time Unix timestamp | When the call ended |
duration integer | Call duration in seconds, counted from when the business connects. Empty if the business did not successfully connect. |