WhatsApp API Error Codes: Troubleshooting & Solutions
When a WhatsApp API request fails, check these in order: authentication (is your token valid?), permissions (does your account have the required capability?), the recipient (is the number valid and reachable?), the template (is it approved and does your payload match it?), the payload itself (are all fields present and correctly formatted?), rate limits, and account configuration. Most failures trace back to one of these seven categories.
This page is a practical troubleshooting reference - error categories, verified error codes from Meta's official documentation, a decision flow, and best practices for handling failures in production. It isn't a general introduction to WhatsApp Business API; for that, see WhatsApp Business API.
Quick Troubleshooting Checklist
Authentication
Is your access token valid, unexpired and sent correctly?
Permissions
Does your app/account have the permission this action requires?
Phone Number
Is the sending number verified and correctly configured?
Recipient
Is the recipient number valid, active on WhatsApp, and opted in if needed?
Template
Is the template approved, and does your payload match it exactly?
Payload
Are all required fields present and correctly formatted?
Webhook
Is your endpoint reachable and correctly subscribed to events?
Rate Limits
Are you sending within your account's current throughput limit?
Account Configuration
Is the account restricted, in maintenance, or missing a setup step?
Delivery Status
What does the actual status event say happened to the message?
What Are WhatsApp API Errors?
A WhatsApp API error is a structured response the platform returns when a request can't be completed as sent - it includes an HTTP status code and, in the response body, a WhatsApp-specific error code and message describing exactly what went wrong.
HTTP status vs API error: the HTTP status (200, 400, 401, and so on) tells you whether the request itself was reachable and well-formed. The API error code inside the response body tells you what actually went wrong with the messaging operation - a request can return HTTP 200 and still fail later at delivery, which is why the two need to be checked separately, not treated as the same signal.
Troubleshooting Decision Flow
API request failed
Check HTTP response
Check authentication
Check permissions
Check request payload
Check recipient
Check template
Check account configuration
Check delivery/webhook status
Retry or correct configuration
WhatsApp API Error Categories
The codes below are documented in Meta's official WhatsApp Cloud API error reference. This is a curated, representative selection covering the categories developers hit most often - not the complete list, and codes/meanings can be added or changed by Meta over time, so treat this as a starting reference rather than an exhaustive one.
Authentication Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 190 | Access token has expired | A long-lived token wasn't refreshed in time | Your token's expiry/rotation schedule | Generate a fresh token and redeploy it |
| 0 | Unable to authenticate the app user | Token expired, invalidated or revoked | Whether the token was manually revoked or app permissions changed | Generate a new token from your dashboard |
| 200 | No access token was provided | The Authorization header is missing from the request | Whether every request includes the header | Add Authorization: Bearer <token> to the request |
Permission Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 10 | Permission not granted or has been removed | A required permission wasn't approved, or was revoked | Your app/account's current permission scope | Re-request or verify the permission in account settings |
| 3 | Capability or permissions issue | The action needs a permission your account doesn't currently have | Which capability the failing call actually requires | Confirm that capability is enabled for your account |
Template Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 132001 | Template does not exist or isn't approved | Wrong template name/ID, or approval is still pending | The template name and its approval status | Wait for approval, or correct the template reference |
| 132000 | Parameter count mismatch | Number of variables sent doesn't match the approved template | Placeholder count in the template vs your params array | Match the params array exactly to the approved template |
| 132007 | Template violates WhatsApp policy | Content was changed after approval, or violates policy | Whether sent content matches what was approved, verbatim | Resubmit a compliant template rather than editing on the fly |
| 132015 | Template paused due to low quality | Negative recipient feedback (blocks/reports) affected its quality rating | The template's quality rating in your dashboard | Improve targeting/relevance or revise the template content |
Recipient / Phone Number Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 131026 | Recipient not reachable on WhatsApp | The number isn't an active WhatsApp user, or is on an outdated app version | Number format and whether it's WhatsApp-active | Verify the number before sending |
| 131047 | Re-engagement message required | More than 24 hours since the customer's last message | Whether this should be a session message or a template | Send an approved template to re-open the conversation |
| 131050 | Recipient has opted out | The customer previously opted out of marketing messages | Opt-in/opt-out status for that recipient | Respect the opt-out; don't resend marketing content |
| 131021 | Sender and recipient number are the same | A test or misconfigured request targeted your own number | The value in the 'to' field | Correct the recipient number |
Payload / Parameter Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 100 | Unsupported or misspelled parameter | A typo or invalid field in the request body | Field names against the current API reference | Fix the field name/value and resend |
| 131009 | One or more parameter values are invalid | A field has a badly formatted value (e.g. a date or number) | The format of each parameter against the template spec | Correct the value's format |
| 131008 | Missing required parameter | A required field was left out of the request | Whether every required field is present | Add the missing field and resend |
Media Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 131053 | Media upload failed | The file exceeds a size limit or uses an unsupported format | File type and size against platform limits | Re-encode or resize the file and retry |
| 131052 | Unable to download recipient media | A temporary issue on the platform side | Whether the failure is one-off or persistent | Retry; escalate if the pattern continues |
Rate-Limit Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 130429 | Message throughput limit reached | Sending faster than your current plan/tier allows | Your current messages-per-second limit | Slow down sending, or request a higher limit |
| 131048 | Too many blocked/spam reports | A recent messaging pattern triggered spam protection | Recent recipient block/report rate | Review targeting and content quality |
| 80007 | Account-level rate limit reached | Overall account throughput was exceeded | Account-wide sending volume | Space out sends, or contact support for a limit increase |
Account Configuration Errors
| Code | Meaning | Common Cause | What to Check | Recommended Action |
|---|---|---|---|---|
| 368 | Account restricted for policy violations | A policy violation was detected on the account | Recent policy notices in your business account | Review and resolve the flagged violation |
| 130497 | Restricted from messaging certain countries | A country-level restriction applies to the account | The destination country against account restrictions | Contact support if this affects a legitimate market |
| 131057 | Business account in maintenance mode | A temporary platform-side maintenance state | Account status in your business manager | Wait and retry - this isn't caused by your code |
Webhook-Related Errors & Message Delivery Failures
An error returned at send time is different from a delivery failure reported after the fact. A request can be accepted (no error at send) and still end up with a failed status delivered later through your webhook - with its own reason attached, drawing on the same categories above (invalid recipient, unapproved template, media issue, and so on).
Endpoint-side webhook problems - unreachable URLs, verification failures, malformed responses, timeouts, duplicate events - are a distinct troubleshooting area with its own checklist on WhatsApp API Webhooks.
Stuck On A Specific Error?
Share the error you're seeing and our team will help you pin down the cause.
Error Handling Best Practices
Retry Strategy
Retry transient failures only - a rejected template or invalid recipient will fail again identically.
Idempotency
Use a unique reference per send so a network retry can’t duplicate a message.
Logging
Log the full error response and message ID, not just the HTTP status code.
Monitoring
Track error rates by category so a rising trend surfaces before it becomes a bigger problem.
Production Debugging
Reproduce the exact failing payload in a test environment rather than guessing from partial logs.
Common Mistakes Developers Make
Assuming a 200 HTTP status means the message was delivered, rather than just accepted for processing
Retrying a rejected template or invalid-recipient error as if it were a transient failure
Editing approved template wording without resubmitting it for approval
Hardcoding a token instead of handling expiry and rotation
Ignoring the specific error reason and treating every failure the same way
Not logging the full error response, making later debugging much harder
WhatsApp API Error Codes FAQs
What should I check first when a WhatsApp API request fails?
Start with the HTTP status code, then the specific error in the response body. Work through authentication, permissions, recipient validity, template approval, payload format, rate limits and account status in that order - see the Quick Troubleshooting Checklist above.
What does WhatsApp error code 131047 mean?
It means the 24-hour customer-service window has closed since the recipient last messaged you, so a free-form session message can't be sent - you need to send an approved template instead to re-open the conversation.
What does error 132000 mean?
It's a parameter count mismatch - the number of variables your request sends doesn't match the number of placeholders in the approved template. Check your params array against the template exactly.
Why is my WhatsApp template message being rejected?
Most commonly because the template isn't approved yet, or the content sent doesn't exactly match what Meta approved. See the Template Errors table on this page.
Why does my WhatsApp API request return a 401 or authentication error?
Your access token is likely missing, expired or revoked. Confirm the Authorization header is present on every request and that the token hasn't expired - see the Authentication Errors table.
Why is my message not reaching the recipient even though the API accepted it?
An accepted request (HTTP 200) only means the API received your request - actual delivery is reported separately through status webhooks. Check the delivery status event for the real outcome, not just the initial response.
What does a rate-limit error mean?
It means you're sending faster than your account's current throughput allows, or have triggered spam-protection thresholds from recipient blocks/reports. See the Rate-Limit Errors table for the specific conditions.
Should I automatically retry every failed WhatsApp message?
No. Retry transient failures, but retrying a rejected template, an invalid recipient, or a permission error will just fail again - branch on the specific error reason instead of retrying blindly.
What is the difference between an HTTP status code and a WhatsApp API error code?
The HTTP status (like 200, 400 or 401) reflects whether the API request itself was well-formed and authenticated. The WhatsApp-specific error code in the response body explains what actually went wrong with the messaging operation - both matter for diagnosis.
Why does my webhook show a message as failed?
The failed status event includes a reason - commonly an unapproved template, an unreachable number, or media issues. See the Message Delivery Failures section, and Webhook Errors on WhatsApp API Webhooks for endpoint-side issues specifically.
What is a media upload error in the WhatsApp API?
It typically means the file you're sending exceeds a size limit or is in an unsupported format for that media type - re-encode or resize the file and retry.
Why is my WhatsApp Business account restricted?
Account restrictions usually follow a detected policy violation, a country-level messaging restriction, or a temporary platform maintenance state - check recent notices in your business account for the specific reason.
What is idempotency, and why does it matter for WhatsApp API error handling?
Idempotency means safely handling a retried request without sending a duplicate message - important because network retries after a timeout can otherwise result in the same message going out twice.
How do I debug WhatsApp API errors in production?
Log the full error response (not just the HTTP status), correlate it with the message ID, monitor error-rate trends by category, and reproduce the specific failing payload in a test environment rather than guessing from partial logs.
Can I see the exact list of WhatsApp API error codes?
Meta publishes and maintains the official WhatsApp Cloud API error code reference. This page covers the categories and codes developers hit most often; check Meta's current documentation for the complete, up-to-date list, since codes and meanings can change.
Is a WhatsApp API error the same as a webhook error?
No. An API error is returned when your send request itself fails (bad auth, bad payload, etc.). A webhook error is about your endpoint not correctly receiving or processing delivery events - see WhatsApp API Webhooks for that troubleshooting checklist.
What does 'invalid recipient' actually mean?
It usually means the number isn't reachable on WhatsApp, is formatted incorrectly, or the recipient has opted out of receiving your messages - see the Recipient Errors table for the specific conditions.

Ready to unify your business communication?
Most businesses are live on their own branded panel within days, not months - talk to our team today and see how fast you can start sending.
