WhatsApp Call Public API
The WhatsApp Call Public API allows you to initiate, receive, accept, reject, and manage voice calls between your business and customers on WhatsApp.
This API works together with:
- Call lifecycle webhooks
- WebRTC SDP exchange
- Call APIs
Base URL:
https://public.doubletick.io/whatsapp/call
All endpoints require Public API authentication and are subject to path-based rate limiting.
🔁 How the call system works (High Level)
At a high level, every WhatsApp call follows this flow:
- Call is initiated (incoming or outgoing)
- Webhook events notify you of call state changes
- SDP offer/answer is exchanged to establish audio
- Call is accepted / rejected / missed
- Call ends, recording & duration become available
Important:
For both incoming and outgoing calls, all state changes are delivered via webhooks.
Always rely on webhooks to track call progress.
👉 Refer to the Call Webhooks documentation to understand how to consume these events.
🌐 Rate limits
| Path | Window | Max Requests |
|---|---|---|
/create | 60s | 60 |
/accept | 60s | 60 |
/decline | 60s | 60 |
/reconnect | 60s | 60 |
/ping | 60s | 15 |
/settings | 60s | 10 |
/call-permissions | 1s | 1 |
If org or user context is unavailable, rate limits fall back to IP-based limiting.
📡 Webhooks are mandatory
This API is event-driven.
You will receive webhook events for:
- Incoming calls
- Outgoing call creation
- Call accepted / rejected / missed
- Call ended
- Recording availability
You must subscribe to call webhooks to:
- Know when to generate SDP
- Know when a call is accepted
- Track call duration and outcome
👉 See: Call Webhooks → Voice Call Events
🔊 Understanding SDP (Offer & Answer)
WhatsApp calls use WebRTC under the hood.
To establish audio between the client and WhatsApp, an SDP exchange is required.
What is SDP?
SDP (Session description protocol) is a text payload that describes:
- Audio codecs (Opus, etc.)
- Transport details (ICE, DTLS)
- Media direction (send/receive)
SDP does not carry audio — it only negotiates how audio will flow.
SDP Offer
An SDP Offer is:
- Generated by the caller
- Describes “here’s how I can send/receive audio”
In this system:
- For outgoing calls, you generate the SDP offer
- For incoming calls, WhatsApp provides the SDP offer via webhook
SDP Answer
An SDP Answer is:
- Generated by the receiver
- Accepts or modifies the offer parameters
In this system:
- When accepting a call, you send an SDP answer back via API
- This completes media negotiation
🛠️ How to generate SDP
You generate SDP using WebRTC APIs in your client (browser, mobile, or desktop).
Example (Browser – WebRTC)
const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
stream.getTracks().forEach(track => pc.addTrack(track, stream));
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
// offer.sdp → send this as SDP Offer
For answering a call:
await pc.setRemoteDescription({ type: 'offer', sdp: incomingSdp });
const answer = await pc.createAnswer();
await pc.setLocalDescription(answer);
// answer.sdp → send this as SDP Answer
The API only expects the SDP string — media handling stays entirely on your side.
🔄 End-to-End call flow
📤 Outgoing call (Business → Customer)
- Create call using
/create - Generate SDP offer
- Send SDP offer in create request
- Receive webhook:
CALL_OUTGOING_INITIATED - Customer accepts → webhook
CALL_ACCEPTED - Call is connected
- Call ends → webhook
CALL_ENDED
👉 See: Outbound Call API
📥 Incoming call (Customer → Business)
-
Customer initiates call
-
Receive webhook:
CALL_INCOMING_INITIATED- Includes SDP offer
-
Generate SDP answer
-
Accept call using
/accept -
Call connects
-
Call ends → webhook
CALL_ENDED
👉 See: Incoming Call API
🔐 Call permissions
WhatsApp requires explicit customer consent before allowing outbound calls.
Use the Call Permissions API to:
- Request call permission
- Check permission status
- Handle permission expiry
Outbound calls will fail if permission is not granted.
👉 See: Call Permission API
📚 Documentation structure
- Overview (this page) – Concepts & flow
- Outbound Call API – Create & manage outbound calls
- Incoming Call API – Accept, reject incoming calls
- Call Permissions API – Customer consent management
- Call Webhooks – All call lifecycle events
Updated about 1 hour ago

