Skip to content

Calling webhooks

Updated: Mar 23, 2026

When a call is initiated or received, Meta sends webhook events on the calls field to notify you of call lifecycle changes. The webhook structure follows the same pattern as Messenger Platform webhooks.

Subscribe to the calls webhook field to receive these events. For business-initiated calls, also subscribe to the call_permission_reply field.

Connect

Applies to: consumer-initiated and business-initiated calls

This webhook notifies you in near real-time when a call is initiated. For consumer-initiated calls, respond by calling /{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]"  
        }  
      ]  
    }  
  ]  
}
PropertyDescription
id stringUnique ID for the call. Use this in your accept, reject, or terminate API calls.
to stringCallee of the call (Page ID)
from stringCaller of the call (PSID)
event stringconnect or terminate
timestamp Unix timestampStart time of the call from the caller's perspective
call_direction stringbusiness_initiated or user_initiated

Call status

Applies to: business-initiated calls only

This webhook notifies you when a business-initiated call begins ringing or is accepted by the consumer.

{  
  "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]"  
        }  
      ]  
    }  
  ]  
}
PropertyDescription
id stringUnique ID for the call
event stringcall_status
recipient_id stringPSID of the consumer
call_status string* ringing: The outgoing call is ringing the consumer's device * accepted: The consumer accepted the call

Media update

Applies to: business-initiated calls only

This webhook notifies you when a consumer-side media event occurs, providing new SDP information that you must apply to your local peer connection. Triggers include:

  • Consumer picks up the business-initiated call
  • Consumer mutes or unmutes

When you receive this webhook, generate an SDP answer from the offer and apply it to your local peer connection to establish or update the WebRTC connection.

{  
  "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>>"  
              }  
          }  
        }  
      ]  
    }  
  ]  
}
PropertyDescription
event stringmedia_update
session.version integerIncremented each time Meta provides new SDP. If you receive multiple media_update webhooks, apply the one with the highest version number.
session.sdp_renegotiation JSONContains the SDP offer from Meta. Generate an answer from this offer and apply it to your local peer connection. * sdp: SDP data compliant with RFC 4566⁠ * sdp_type: offer

Terminate

Applies to: consumer-initiated and business-initiated calls

This webhook notifies you when the call ends for any reason. This occurs when:

  • The consumer hangs up
  • Your app calls /{page-id}/calls with action=terminate
  • Your app calls /{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  
        }  
      ]  
    }  
  ]  
}
PropertyDescription
status stringFinal status of the call: * Completed: Call finished normally (includes calls rejected by the consumer or business) * Failed: Call failed mid-connection
start_time Unix timestampWhen the call started
end_time Unix timestampWhen the call ended
duration integerCall duration in seconds, counted from when the business connects. Empty if the business did not successfully connect.

Unofficial mirror for reference/search purposes. All content originates from developers.facebook.com — see the source link at the top of each page. Machine-readable indexes: llms.txt · llms-full.txt · About