WhatsApp calls
Place a call inside WhatsApp, without the customer having to dial a number.
Permission first
You cannot call a customer who has not allowed it. That is a Meta requirement, and the first obstacle of any call integration.
GET /whatsapp/calls/permissions/{phone}
POST /whatsapp/calls/permissions
Check the state before each attempt: a permission has a validity period, it is not granted once and for all. The request goes out as a message, which the customer answers yes or no.
The call button
POST /whatsapp/calls/button
Sends a message carrying a call button: the customer initiates, which sidesteps the permission question. Often the simplest path for support.
POST /whatsapp/calls/deeplink
Returns a link to drop into an email, an invoice or a web page, which opens WhatsApp on a call to your number.
Placing a call
POST /whatsapp/calls/connect
POST /whatsapp/calls/{id}/pre-accept
POST /whatsapp/calls/{id}/accept
POST /whatsapp/calls/{id}/reject
POST /whatsapp/calls/{id}/terminate
GET /whatsapp/calls/{id}/media
These routes exchange SDP offers and answers: they only serve an integration that carries the WebRTC media layer itself. If you simply want to receive calls, the button is enough.
pre-accept before accept shortens the silence on pickup: media negotiation happens while it is still ringing.
Monitoring
GET /whatsapp/calls/settings
PATCH /whatsapp/calls/settings
GET /whatsapp/calls/health
GET /whatsapp/calls/analytics
health reports the state of the call channel on Meta's side. Check it first when calls fail without a clear reason.