Skip to main content

WhatsApp Business Calling — overview

Receive and make WhatsApp voice calls through the public API. Two directions:
  • UIC (user-initiated call) — the customer calls your WhatsApp number. Free.
  • BIC (business-initiated call) — your system calls the customer. Requires a prior call permission granted by the user.
Meta Cloud API numbers only. On unofficial (QR-paired) numbers every calls endpoint returns 400 with code: "FEATURE_NOT_SUPPORTED". All calls endpoints require a number-scoped API key (x-api-key: ps_...).

Signaling-only architecture

Pilot Status is signaling-only: the API relays SDPs (RFC 8866); audio flows directly between your browser/WebRTC client and WhatsApp — it never passes through Pilot Status servers. Your side of the integration:
  1. Your WebRTC client produces an SDP offer (BIC) or SDP answer (UIC).
  2. You exchange those SDPs through the Calls API (POST /v1/calls, accept, pre-accept, …).
  3. Once connected, audio streams peer-to-peer between the client and WhatsApp.

Dashboard softphone — no WebRTC code needed

In the dashboard (/chat) you can answer and place calls straight from the browser with no WebRTC implementation of your own. Use the API only if you want calling inside your own product.

Billing

  • BIC calls are billed by Meta directly on the WABA — per minute, in 6-second pulses, and only when the call is answered.
  • UIC calls are free.
  • Pilot Status does not charge anything for calls.

Webhook events

Subscribe your webhook to call.ringing, call.connected, call.ended, call.missed, call.permission_updated — or "*". The normalized call.* payloads are flat (no data wrapper); Meta’s native calls envelope (raw entry[].changes[].value with the SDPs) is also available for custom WebRTC signaling. See the event reference.

Next steps