WhatsApp Cloud API Error Codes Explained
1 November 2026 · 5 min read · Türkçe oku
When a WhatsApp message fails, Meta returns a numeric error code. The code tells you whether to fix your request, fix your account, wait, or give up on that recipient. Retrying everything the same way wastes your messaging limit and can hurt your quality rating, so it pays to know which group a failure falls into.
This guide covers the codes you're most likely to see when sending. Every meaning here comes from Meta's official error code reference as of November 2026. Meta adds and rewords codes over time, so check that page when you hit something not listed here.
Where errors show up
Meta says Cloud API errors can arrive in three ways:
- Synchronously, in the Graph API response to your send request. This is typical for bad parameters or token problems.
- Asynchronously, through the
messageswebhook, after the request was accepted. Delivery failures usually arrive this way. - Both.
So a 200 response to your send call doesn't mean the message was delivered. Log the error code and details from both places against the message ID, or you'll end up with campaigns that look "sent" but never arrived.
Authorization and account errors
| Code | Meaning | What to do |
|---|---|---|
| 0 | Couldn't authenticate the app user. The token may be expired or invalidated | Generate a new token |
| 3 | Capability or permissions issue | Check the token's permissions in the Access Token Debugger |
| 10 | Permission not granted or removed | Same as above. Also check the API's eligibility requirements |
| 190 | Access token expired | Get a new token. For servers, use a system user token |
| 131005 | Permission not granted or removed | Verify the token has whatsapp_business_messaging and whatsapp_business_management |
| 368 | Account restricted or disabled for a policy violation | Read Meta's policy enforcement documentation. Retrying won't help |
| 131031 | Account restricted, either for a policy violation or because submitted data didn't match the account (for example a wrong two-step PIN) | Check the account in WhatsApp Manager and consider the Health Status API |
Request and parameter errors
These mean your request is wrong. Fix the payload; resending the same request will fail the same way.
| Code | Meaning |
|---|---|
| 100 | Unsupported or misspelled parameter, or a value over a length limit |
| 131008 | Required parameter missing |
| 131009 | One or more parameter values are invalid |
| 131021 | Sender and recipient are the same number |
| 131051 | Unsupported message type |
| 131053 | Media upload failed, often because the MIME type isn't supported |
| 135000 | Generic error with the request parameters. Check the syntax |
Recipient and delivery errors
These are about the person you're messaging, not your code.
| Code | Meaning | What to do |
|---|---|---|
| 131026 | Message undeliverable. Causes include a number that isn't on WhatsApp, a recipient who hasn't accepted the latest terms, or an outdated WhatsApp version | Confirm the number. Don't retry in a loop |
| 131047 | More than 24 hours have passed since the recipient last replied | Send an approved template instead of free-form text |
| 131049 | Not delivered "to maintain healthy ecosystem engagement" | Meta advises waiting at least 24 hours before resending the template. Don't hammer the same person |
| 131050 | Recipient has stopped receiving marketing messages | Don't retry. Meta suggests subscribing to the user_preferences webhook to keep your list in sync |
| 131052 | Couldn't download media the user sent you | Check error.error_data.details and ask the user to resend |
| 130472 | Not sent as part of a Meta marketing message experiment | See Meta's marketing message experiment docs |
131047 is the one most teams hit first. It isn't a bug: it's WhatsApp's 24-hour customer service window rule. Our guide to the 24-hour window and pricing explains it.
Throttling and rate limits
| Code | Meaning | What to do |
|---|---|---|
| 4 | The app hit its API call rate limit | Slow down and retry with backoff |
| 80007 | The WhatsApp Business Account hit its rate limit | Same |
| 130429 | Cloud API message throughput reached | Retry later or send at a lower rate |
| 131056 | Too many messages from one sender to the same recipient in a short time | Wait before messaging that person again. Other recipients aren't affected |
| 133016 | Too many register/deregister attempts on one number | Wait. Meta allows 10 per 72 hours |
These are the codes where retrying makes sense, but with exponential backoff and a cap, not instantly.
Template errors (132000 series)
| Code | Meaning | What to do |
|---|---|---|
| 132000 | Number of parameter values doesn't match the template | Send exactly one value per {{n}} |
| 132001 | Template doesn't exist in that language, isn't approved, or the name/locale is wrong | Check the name and language code match an approved template |
| 132005 | Translated text too long | Check the translation in WhatsApp Manager |
| 132007 | Template content violates a WhatsApp policy | Review the template review rules |
| 132012 | Parameter values formatted incorrectly | Match the format the template defines for each parameter |
| 132015 | Template paused for low quality | Edit it and send again once it's approved |
| 132016 | Template paused too many times; permanently disabled | Create a new template with different content |
If templates are being rejected before you even get to send them, see why WhatsApp templates get rejected.
Account and number state errors
| Code | Meaning |
|---|---|
| 131000 | Unknown error. Retry; if it persists, open a Direct Support ticket |
| 131016 | A service is temporarily unavailable. Check the WhatsApp status page |
| 131037 | The 555 business number has no approved display name |
| 131042 | Payment method problem: check billing setup, credit line, time zone and currency |
| 131045 | Phone number registration error. Register it first |
| 131048 | Sending restricted because many messages were blocked or flagged as spam. Check quality in WhatsApp Manager |
| 131057 | Account in maintenance mode, for example during a throughput upgrade |
| 133010 | Phone number not registered |
131042 is worth watching. Meta now charges for service messages too (see the pricing article), so a missing payment method affects more of your traffic than it used to.
A simple retry policy
Sort failures into three buckets:
Retry with backoff: 4, 80007, 130429, 131016, 131000 (limited attempts)
Wait before resending: 131049 (24 h), 131056 (same recipient)
Do not retry, fix: 0, 3, 10, 100, 131005, 131008, 131009, 131051,
132000, 132001, 132005, 132007, 132012, 133010
Do not retry, drop: 131026 (verify number), 131050 (opted out)
Escalate: 368, 131031, 131042, 131048, 132015, 132016
The rest is bookkeeping: store the raw code and message with each failed recipient so whoever reads the report can act on it.
Seeing these codes in campaign reports
A "12 failed" count with no detail isn't something anyone can act on. In Mesvilo, campaign reports show sent, delivered, read and failed counts, and every failure keeps Meta's original error code and response, exportable as CSV. That makes it easy to separate 131050 opt-outs from 131026 bad numbers before the next send.
You can open a sample campaign report in the live demo or see the full feature list on the product page.
Sources
Run your own WhatsApp platform
Mesvilo is a self-hosted WhatsApp Cloud API SaaS with a shared inbox, templates, campaigns and subscription billing.