WhatsApp Cloud API Error Codes: Meanings and How to Fix Them
The most common WhatsApp Cloud API error codes, from 131047 and 131026 to 132001 and 130429: what each means, how to fix it, and when not to retry.
By OmniChannels.ai Editorial Team · Reviewed by BroadNet Messaging Solutions Team
Short answer
WhatsApp Cloud API errors fall into a few families: authorization (0, 190, 10), integrity (368, 131031), throttling (4, 80007, 130429, 131048, 131049, 131056), template problems (132000 to 132016), recipient problems (131026, 131047, 131050) and request problems (131008, 131009). Read the code and the error_data details, then decide: fix and retry, wait and retry, switch to a template or another channel, or never retry.
On this page
Key takeaways
- Error 131047 means the 24-hour customer service window has closed; send an approved template instead of a free-form message.
- Error 131050 means the user has stopped marketing messages; Meta says do not retry.
- Error 131049 is a per-user marketing limit; Meta advises waiting at least 24 hours before resending.
- Errors 132000 and 132012 are almost always variable count or formatting mismatches against the approved template.
- Some errors return synchronously in the API response; others arrive later in status webhooks with status failed, so you must log both.
This guide is for developers and messaging operations teams who see failed WhatsApp messages and need to know, quickly, whether to fix the request, wait, change the message type or stop. Every code below was checked against Meta's Cloud API error code reference; codes and wording change, so confirm against that page before hard-coding logic.
Where do WhatsApp Cloud API errors appear?
Errors appear in two places, and you need to capture both. Request errors come back immediately in the API response; delivery errors arrive later in a status webhook.
- Synchronous errors. The send request is rejected and the response contains an
errorobject withcode,message,typeand oftenerror_data.details. Typical examples are expired tokens, missing parameters and template mismatches. - Asynchronous errors. The send request succeeds and returns a message ID, but a later webhook reports
status: failedwith anerrorsarray. Typical examples are closed service windows, undeliverable recipients and marketing limits.
A common mistake is logging only the HTTP response. Teams then believe a campaign succeeded because every request returned a message ID, while hundreds of messages failed in webhooks. For how statuses relate to each other, see sent, delivered, read and failed explained.
What are the most common WhatsApp error codes?
The table lists the codes most teams encounter, grouped by what you should do next. Descriptions paraphrase Meta's reference.
| Code | Meaning | Fix | Retry? |
|---|---|---|---|
| 0 | Could not authenticate the app user; token expired or revoked | Generate a new access token | After fix |
| 190 | Access token has expired | Use a non-expiring system user token, refresh | After fix |
| 3, 10, 200–299 | Permission or capability missing | Check token permissions in the access token debugger | After fix |
| 368 | WABA restricted or disabled for a policy violation | Review policy enforcement in WhatsApp Manager; appeal if wrong | No |
| 131031 | Account locked, for example policy or data verification failure | Check account health status; resolve with Meta | No |
| 4 | App reached its API call rate limit | Reduce request volume; check App Dashboard | Yes, later |
| 80007 | WABA reached its rate limit | Reduce request volume; retry later | Yes, later |
| 130429 | Cloud API throughput reached for the number | Queue and slow down sending | Yes, with backoff |
| 131048 | Spam rate limit: restrictions on messages from this number | Check quality in WhatsApp Manager; improve content and targeting | Not immediately |
| 131049 | Not delivered "to maintain healthy ecosystem engagement" | Wait at least 24 hours before resending | Not within 24 h |
| 131056 | Too many messages to the same recipient in a short time | Space out messages to that user | Yes, later |
| 131000 | Unknown error | Retry; open a support ticket if it persists | Yes, limited |
| 131016 | Service temporarily unavailable | Check Meta status page; retry | Yes, with backoff |
| 131008 | Required parameter missing | Compare payload with the endpoint reference | After fix |
| 131009 | Parameter value invalid | Check values, for example phone number format or IDs | After fix |
| 131021 | Sender and recipient are the same number | Send to a different number | No |
| 131026 | Unable to deliver message | Verify number, ask user to update WhatsApp, or use another channel | Not as is |
| 131042 | Payment method problem | Fix billing: payment account, credit line, currency | After fix |
| 131045 / 133010 | Number not registered on the platform | Register the business phone number | After fix |
| 131047 | More than 24 hours since the user last replied | Send an approved template | As template |
| 131050 | User stopped marketing messages | Do not retry; respect the preference | Never |
| 131051 | Unsupported message type | Use a supported type | After fix |
| 131052 | Could not download media sent by the user | Ask the user to resend | n/a |
| 131053 | Could not upload media in your message | Check MIME type, size and URL | After fix |
| 131057 | Account in maintenance mode | Wait; may happen during a throughput upgrade | Yes, later |
| 132000 | Variable count does not match the template | Send exactly the number of parameters defined | After fix |
| 132001 | Template missing in that language or not approved | Check name, language code and status | After fix |
| 132005 | Translated text too long | Shorten the template translation | After fix |
| 132007 | Template content violates policy | Edit per template review rules | After fix |
| 132012 | Variable values formatted incorrectly | Match the expected format | After fix |
| 132015 | Template paused for low quality | Edit content to improve quality | After edit |
| 132016 | Template permanently disabled after repeated pauses | Create a new template with different content | No |
| 135000 | Unknown error with request parameters | Check request syntax; contact support | After fix |
How do you fix the errors that cause most failed campaigns?
In practice, a handful of codes cause most failures. Each has a clear decision rule.
131047: the service window is closed
The customer last messaged more than 24 hours ago. Free-form text, media and interactive messages are allowed only inside the 24-hour customer service window; outside it you must use an approved template; see the 24-hour customer service window. Agents often hit this when replying to an old chat. Show agents the window status and offer a template picker when it has expired.
131026: message undeliverable
Start with number hygiene: international format, correct country code, no leading zero after the code. Then accept that some numbers are simply not on WhatsApp, or are on an old app version. For time-critical messages such as OTPs, fall back to SMS. See WhatsApp vs SMS vs RCS.
131049 and 131050: marketing limits and opt-outs
Both affect marketing messages. 131050 is the user's explicit choice to stop marketing; suppress them for marketing and subscribe to Meta's user preferences webhook. 131049 means Meta chose not to deliver to protect user engagement; Meta advises waiting at least 24 hours, and sooner retries are likely to fail again. Reduce frequency and improve relevance rather than resending.
130429, 131048 and 131056: sending too fast or too much
130429 is throughput: queue messages and apply backoff. 131056 is pair-level: you are messaging one person too often. 131048 is a quality signal on the sender number and needs a content and targeting fix, not a retry. See messaging limits and quality rating.
132000, 132001 and 132012: template mismatches
These are almost always integration bugs. The template name, language code (for example ar versus en_US) and number of variables must match exactly what was approved. Build a test that sends each template with sample values whenever you edit it.
A retry policy you can implement
Use this checklist to classify each failure automatically.
- Log the code, title,
error_data.details, message ID, recipient and template name. - Never retry 131050, 131021, 132016, 368 and 131031. Flag 368 and 131031 to an administrator immediately.
- Fix then retry authorization (0, 190, 10), parameter (131008, 131009, 135000), template (132000 to 132015) and billing (131042) errors. Alert the owning team.
- Back off and retry 130429, 4, 80007, 131016 and 131057 using exponential backoff with a cap.
- Change channel or message type for 131047 (template) and 131026 (SMS or email).
- Wait 24 hours or more for 131049 and review campaign frequency.
- Report failures by code in campaign reports, not as a single "failed" total.
Worked example: a Riyadh retailer's failed promotion
A synthetic example. "Najd Home" sends a marketing template to 20,000 opted-in customers. The API accepts every request, but the status webhooks show around 1,400 failures.
Grouped by code, the picture is clear. The largest group is 131049, so the team removes those users from the next two sends and lowers weekly frequency. A smaller group is 131026; analysis shows many numbers stored with a local leading zero, which a normalization fix resolves. Several 131050 users are suppressed for marketing permanently. A few 130429 errors came from the opening burst, so sending is now paced through a queue.
Common mistakes and honest limits
- Treating every failure as retryable. It wastes spend and can lower quality.
- Hard-coding Meta's text. Meta updates titles and descriptions; key logic on the numeric code and keep a lookup table you can update.
- Ignoring
error_data.details. It often names the exact faulty parameter. - Not every failure has a fix. Some recipients cannot be reached on WhatsApp, and Meta does not explain every 131049 decision. Plan an alternative channel.
How OmniChannels.ai helps
OmniChannels.ai, powered by BroadNet Technologies, gives teams delivery reports in summary and advanced views, with filters and CSV export, so failed messages can be analysed by campaign. Channel fallback can resend through RCS or SMS when WhatsApp fails, and templates are previewed on a phone mock-up and tracked through approval, reducing mismatch errors. Webhooks report FAILED and REJECTED statuses in one normalised format, and the public developer docs include an errors and limits reference.
Frequently asked questions
What does WhatsApp error 131047 mean?
Error 131047 means more than 24 hours have passed since the recipient last messaged your number, so the customer service window is closed. Free-form text, media and interactive messages are no longer allowed. Send an approved template message instead, ideally a utility template inviting the customer to reply, which reopens the window when they respond.
Why do I get error 131026 when the number is on WhatsApp?
Meta describes 131026 as unable to deliver. Causes include a number that is not on WhatsApp, a recipient who has not accepted the latest terms, or an outdated WhatsApp version. A wrong country code or local format is also a frequent culprit. Validate the number in international format, ask the customer to update the app, or use SMS or email.
What is the difference between 130429 and 131056?
130429 means your number has hit its Cloud API throughput limit, so you are sending too fast overall; slow down and queue. 131056 means you sent too many messages to the same recipient in a short time; other recipients are unaffected. Fix 130429 with rate control, and fix 131056 by spacing messages to that one user.
Should I automatically retry failed WhatsApp messages?
Only for transient errors such as 131000 (unknown), 131016 (service unavailable), 130429 (throughput) and 4 or 80007 (rate limits), with exponential backoff. Never auto-retry 131050 (marketing opt-out), 131026 without changing something, template errors or 368 policy restrictions. Blind retries waste money, irritate users and can hurt quality.
Where can I see the full error details?
Synchronous errors come back in the API response with code, message and error_data. Asynchronous failures arrive in the messages webhook as a status of failed, with an errors array carrying the code, title and details. Log the full object, not just the code, because the details field often names the exact parameter or media problem.
Sources
Keep reading
More guidesWhatsApp
How to Migrate a WhatsApp Business Number to a New Provider
Move a WhatsApp Business API number to a new provider: what transfers (display name, quality, templates), the steps, downtime risks and a cutover checklist.
8 min read
WhatsApp
WhatsApp Click-to-Chat Links and QR Codes: A Practical Guide
How to build wa.me links with prefilled messages, create WhatsApp QR codes for print, packaging and stores, and track which placement started each chat.
8 min read
Integration
SMS API vs SMPP: Which Connection Should You Use?
SMS API vs SMPP compared: sessions and binds, windowing, throughput, delivery receipts, encoding, TLS security, operational effort and how to migrate.
12 min read
