What This Page Covers
Error codes for the WhatsApp Business Calling API plus media-path issues (audio clipping, RTP timeouts) that don't surface as clean error codes. SIP-specific errors are also collected here for one-stop reference.
Standard Error Shape
Most errors return:
{
"error": {
"message": "<Error Message>",
"type": "<Exception Type>",
"code": <Exception Code>,
"fbtrace_id": "<Trace ID>"
}
}
Some errors include error_data.details with extra context. Always log code, message, and fbtrace_id — Meta support needs the trace ID for incident investigation. For terminate webhooks on failed calls, the errors[] array on the calls object carries the same shape.
Call Logs in WhatsApp Manager
The Call Logs tab in WhatsApp Manager (Account tools → Phone numbers → select number → Call Logs) shows a per-call event timeline. Useful for self-service troubleshooting and reproducing the exact event sequence.
| Field | Description |
|---|---|
| Timestamp | When the call occurred |
| Call Direction | Outbound (BIC) or Inbound (UIC) |
| Signaling | SIP or GRAPH_API |
| Call ID | WhatsApp call identifier (wacid.) — provide this when contacting Meta support |
| Request ID | Identifier for the request that initiated the call |
| Call Details | Event log for the call lifecycle |
Calling Error Codes
| Code | HTTP | Meaning | Fix |
|---|---|---|---|
100 | 400 | Invalid parameter (or SDP validation error — details in error_data) | Fix payload; check SDP RFC 8866 compliance |
613 | 429 | Permission state API rate limit hit | Reduce frequency of /call_permissions polls |
131009 | 400 | Interactive type voice_call not supported (only button, list) | Sender must be in supported country |
131030 | 400 | Recipient phone not in allowed list (PTN test only) | Add recipient to allowed list |
131044 | 400 | No valid payment method | Attach payment method to WABA |
131055 | 400 | Method not allowed — Graph API call attempted on SIP-enabled number | Use SIP signaling instead |
138000 | 401 | Calling not enabled | Configure call settings |
138001 | 400 | Receiver uncallable (not on WhatsApp / hasn't accepted ToS / unsupported client) | Confirm with recipient; check supported clients |
138002 | 429 | Concurrent calls limit (1,000) reached | Throttle inbound capacity |
138003 | 400 | Duplicate call — one is already ongoing with this user | Wait for current call to end |
138004 | 500 | Connection error during call setup | Investigate connection params; retry |
138005 | 429 | Call rate limit exceeded | Reduce sending rate |
138006 | 401 | No approved call permission found | Get permission first (Call Permissions) |
138007 | 500 | Connect timeout — business didn't apply offer/answer SDP in time | Speed up connect-API response |
138009 | 400 | Permission request limit hit | Wait for limit reset (or for a connected call to reset it) |
138012 | 400 | BIC daily limit hit (100 connected calls / 24h per pair) | error_data has timestamp for next allowed call |
138013 | 400 | BIC not available for this business phone number country | See availability |
138014 | 400 | Calling temporarily disabled (low quality) | Improve outreach quality, wait for restriction to expire |
138015 | 400 | Calling cannot be enabled | Check messaging limit ≥ 2,000 |
138017 | 400 | Permission request can't be sent — permanent permission already exists | Just place the call directly |
138018 | 400 | Calling can't be enabled — technical prerequisites not met | Configure SIP or ensure an app is subscribed to both WABA and calls field |
138019 | 400 | Call setup failed (in terminate webhook) | Retry; check media path |
138020 | 400 | Relay connection failed (in terminate webhook) | Retry; check network |
138021 | 400 | Media receive timeout — no media for ~20–30s (in terminate webhook) | Verify your media server is sending RTP |
138022 | 400 | Media transmit timeout (in terminate webhook) | Investigate outbound media path |
138023 | 400 | Call accepted but terminated with no media signals | Investigate WebRTC setup — Cloud API couldn't determine if call was connected |
SIP-Specific Errors
Status codes returned over SIP signaling, in addition to the 131055 Graph-API-attempted error above:
| SIP Status | Meaning | Fix |
|---|---|---|
400 Asset not found | From header phone number isn't a registered business number | Check the number; resend with correct From |
403 SIP server X from INVITE does not match... | From header domain ≠ configured SIP server hostname | Update SIP config or From header (sub-domains are valid) |
403 No Approved Call Permission Found | No permission from recipient (or recipient not on WhatsApp) | Get permission (Call Permissions) |
403 The app [APP_ID] configured for SIP server X is not authorized for phone number id [ID] | App used to configure SIP lacks whatsapp_business_messaging on the number | Reconfigure with the right app |
403 Business Initiated Connected Call Per Day Limit Hit | 5 connected BICs in 24h reached | Adjust call rate; check pricing tier |
403 Duplicate call / Invalid digest auth response / Business eligibility payment issue / SDP Validation Error | Various — read the error message | Check earlier sections |
404 Not found / SIP INVITEs using IP in request URI are not allowed | Don't use IP literal in request URI | Use the configured SIP request URI |
407 Proxy Authentication Required | Standard digest auth challenge from Meta | Resend with Authorization header |
408 RTP Timeout | No media received for too long | See Media-Related Issues |
480 Temporarily Unavailable | User unreachable / didn't answer | Try later; unanswered calls degrade permission |
486 Busy Here | User declined the call | Try later; rejections degrade permission |
487 Request Terminated | You sent SIP CANCEL before Meta responded to your INVITE | Expected — your CANCEL worked |
503 Service Unavailable | Generic internal error | Retry later; contact Meta support if persistent |
Media-Related Issues
| Symptom | Cause | Fix |
|---|---|---|
| Call disconnects ~20 seconds after ringing starts | No media flowing from business to user for 20s after call setup | Check media server is initiating media session and sending RTP. Check firewall for packet drops. Capture pcap for support. |
| Call disconnects ~30 seconds after connection | After call connect, no media from business to user for 30s | Send at least RTCP packets even during silence (e.g. waiting for IVR input). Check why media server stops sending. |
If you're hitting these, capture network traffic with tcpdump or pcap and attach it when contacting Meta support.
Audio Clipping
A common symptom when bridging WhatsApp's WebRTC media leg to a SIP leg: the WhatsApp consumer misses ~1 second of business audio at the start of the call. If your IVR plays "1-2-3", the user hears "2-3" or just "3".
Root cause: the SIP user-agent starts transmitting media before the WebRTC leg between you and Meta is fully ready. Meta drops the early packets.
Mitigations (any of these works; pick what fits):
| Approach | Trade-off |
|---|---|
| Switch to SDES for SRTP key exchange (instead of DTLS) | Eliminates the ~3-second DTLS handshake delay. See SIP Configuration → SDES vs DTLS |
| Pre-accept before sending SIP INVITE | "Optimistic accept" — establishes WebRTC connection ahead of SIP. RFC-recommended approach |
| Delayed audio playback | Configure SIP UA to wait for ACK from your WebRTC endpoint before playing audio |
| Connection state-based delay | Wait until WebRTC connection state is connected before playing audio |
| Buffer SIP media packets | Hold packets until WebRTC is up |
| Insert silence at start of IVR audio | Simple; gives WebRTC time to establish during silence |
For full sequence-diagram detail, see Meta's "Audio clipping issue and solution" section. Most teams use SDES + pre-accept and call it done.
"No Fingerprint Found in SDP"
You're using DTLS for SRTP key exchange but your SDP is missing the a=fingerprint line.
Fix: add the fingerprint line to your SDP. Or, if you can't, switch to SDES which doesn't need it. See SIP Configuration → Configure SRTP Key Exchange.
Common Symptoms — Quick Triage
| Symptom | First thing to check |
|---|---|
| BIC fails immediately with no errors | Permission status (/call_permissions) — likely no approved permission |
| BIC works in test, fails in production | BIC country availability (US/CA/EG/VN/NG excluded); messaging limit ≥ 2,000 |
| UIC webhook never arrives | calls field subscription on the right app; SIP not accidentally enabled (check /settings) |
| SIP INVITE never received from Meta | TLS cert validation (openssl s_client test); app permissions; firewall reachability |
| Call setup hangs ~3 seconds | DTLS handshake delay — switch to SDES |
| User hears no audio for first second | Audio clipping — see above |
| Call drops after 20–30s | Media flow stopped or never started — check media server logs |
403 SIP errors generally | Almost always digest auth (resend with Authorization) or From domain mismatch |
131055 on Graph API | SIP is enabled — use SIP signaling, or disable SIP if you want Graph API back |