WhatsApp Cloud API error codes, explained one by one
Last verified against Meta for Developers - Cloud API error codes
The WhatsApp Cloud API reports failures in two places. Synchronous errors come back in the HTTP response body of the call you just made, wrapped in an error object. Asynchronous errors arrive later, in a statuses webhook whose status is failed and whose errors array carries the same codes. Many of the most common codes, including 131026 and 131047, show up in both places depending on when the platform detects the problem, so a send that returned 200 is not necessarily delivered. If your webhook endpoint is down, unsubscribed, or rejecting payloads, those asynchronous failures vanish silently; verify webhook delivery before trusting any delivery metric.
Inside the error object, code is the integer you should branch on; Meta explicitly advises building error handling around codes rather than HTTP status or the deprecated error_subcode. message combines the code and a short title, for example (#130429) Rate limit hit, though Meta has said titles will eventually be deprecated. error_data.details is a plain-English description of the most likely cause and is often the most useful field on the page. fbtrace_id is a trace identifier; Meta support can only investigate if you include it, so log the whole object, not just the number. type is the Graph API error class, usually OAuthException even for non-auth problems.
The leading digits group codes by subsystem: short Graph API codes (0 to 299, 368) cover auth, permissions, and malformed requests; 130xxx are throttling and account-level restrictions; 131xxx are about this message to this recipient; 132xxx concern the template itself; 133xxx concern phone number registration. Each entry below stands alone, gives the official message string, and lists concrete fixes. The narrative guide at /blog/whatsapp-api-error-codes covers the same territory grouped by symptom, and every numeric ceiling these errors enforce - messaging tiers, throughput, pair limits, template lengths, media sizes - is tabulated in the WhatsApp limits reference.
How to read a WhatsApp error
Synchronous failures come back in the HTTP response body of the call you just made:
{
"error": {
"message": "(#131047) Re-engagement message",
"type": "OAuthException",
"code": 131047,
"error_data": {
"messaging_product": "whatsapp",
"details": "Message failed to send because more than 24 hours have passed since the customer last replied to this number."
},
"fbtrace_id": "A2tNqXmKeLsPbRv"
}
}Asynchronous failures arrive later, in a statuses webhook whose status is failed; the same codes appear in its errors array:
{
"statuses": [{
"id": "wamid.HBgLM...",
"status": "failed",
"timestamp": "1755580800",
"recipient_id": "15551234567",
"errors": [{
"code": 131026,
"title": "Message undeliverable",
"message": "Message undeliverable",
"error_data": { "details": "Message Undeliverable." },
"href": "https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/"
}]
}]
}All 55 codes
Jump to: Authorization & permissions (6) · Throttling & rate limits (5) · Account integrity & policy (4) · Messaging window & re-engagement (1) · Recipient & delivery (6) · Templates & Flows (9) · Phone number registration (12) · Media (3) · Generic & request errors (9)
Authorization & permissions
| Code | Title |
|---|---|
0 | AuthException We were unable to authenticate the app user. |
3 | API Method Capability or permissions issue. |
10 | Permission Denied Permission is either not granted or has been removed. |
190 | Access token has expired Your access token has expired. |
200-299 | API Permission Permission is either not granted or has been removed. |
131005 | Access denied Permission is either not granted or has been removed. |
Throttling & rate limits
| Code | Title |
|---|---|
4 | API Too Many Calls The app has reached its API call rate limit. |
80007 | Rate limit issues The WhatsApp Business Account has reached its rate limit. |
130429 | Rate limit hit Cloud API message throughput has been reached. |
131048 | Spam rate limit hit Message failed to send because there are restrictions on how many messages can be sent from this phone number. This m… |
131056 | (Business Account, Consumer Account) pair rate limit hit Too many messages sent from the sender phone number to the same recipient phone number in a short period of time. |
Account integrity & policy
| Code | Title |
|---|---|
368 | Temporarily blocked for policies violations The WhatsApp Business Account associated with the app has been restricted or disabled for violating a platform policy. |
130497 | Business account is restricted from messaging users in this country The WhatsApp Business Account is restricted from messaging to users in certain countries. |
131031 | Account has been locked The WhatsApp Business Account associated with the app has been restricted or disabled for violating a platform policy… |
131042 | Business eligibility payment issue There was an error related to your payment method. |
Messaging window & re-engagement
| Code | Title |
|---|---|
131047 | Re-engagement message More than 24 hours have passed since the recipient last replied to the sender number. |
Recipient & delivery
| Code | Title |
|---|---|
130403 | Business has blocked the user Unable to deliver the message. This business has blocked the end user on WhatsApp |
130472 | User's number is part of an experiment Message was not sent as part of an experiment. |
131021 | Recipient cannot be sender Sender and recipient phone number is the same. |
131026 | Message Undeliverable Unable to deliver message. Reasons can include: The recipient phone number is not a WhatsApp phone number. Recipient … |
131049 | Meta chose not to deliver. This message was not delivered to maintain healthy ecosystem engagement. |
131050 | User has stopped reciept of marketing messages. Unable to deliver the message. This recipient has chosen to stop receiving marketing messages on WhatsApp from your b… |
Templates & Flows
| Code | Title |
|---|---|
132000 | Template Param Count Mismatch The number of variable parameter values included in the request did not match the number of variable parameters defin… |
132001 | Template does not exist The template does not exist in the specified language or the template has not been approved. |
132005 | Template Hydrated Text Too Long Translated text is too long. |
132007 | Template Format Character Policy Violated Template content violates a WhatsApp policy. |
132012 | Template Parameter Format Mismatch Variable parameter values formatted incorrectly. |
132015 | Template is Paused Template is paused due to low quality so it cannot be sent in a template message. |
132016 | Template is Disabled Template has been paused too many times due to low quality and is now permanently disabled. |
132068 | Flow is blocked Flow is in blocked state. |
132069 | Flow is throttled Flow is in throttled state and 10 messages using this flow were already sent in the last hour. |
Phone number registration
| Code | Title |
|---|---|
131037 | WhatsApp provided number needs display name approval before message can be sent. The 555 business phone number used to send the request does not have an approved display name. |
131045 | Incorrect certificate Message failed to send due to a phone number registration error. |
131057 | Account in maintenance mode Business Account is in maintenance mode |
133000 | Incomplete Deregistration A previous deregistration attempt failed. |
133004 | Server Temporarily Unavailable Server is temporarily unavailable. |
133005 | Two step verification PIN Mismatch Two-step verification PIN incorrect. |
133006 | Phone number re-verification needed Phone number needs to be verified before registering. |
133008 | Too Many two step verification PIN Guesses Too many two-step verification PIN guesses for this phone number. |
133009 | Two step verification PIN Guessed Too Fast Two-step verification PIN was entered too quickly. |
133010 | Phone number Not Registered Phone number not registered on the WhatsApp Business Platform. |
133015 | Please wait a few minutes before attempting to register this phone number The phone number you are attempting to register was recently deleted, and deletion has not yet completed. |
133016 | Account register deregister rate limit exceeded Registration or Deregistration failed because there were too many attempts for this phone number in a short period of… |
Media
| Code | Title |
|---|---|
131051 | Unsupported message type Unsupported message type. |
131052 | Media download error Unable to download the media sent by the user. |
131053 | Media upload error Unable to upload the media used in the message. |
Generic & request errors
| Code | Title |
|---|---|
1 | API Unknown Invalid request or possible server error. |
2 | API Service Temporary due to downtime or due to being overloaded. |
33 | Parameter value is not valid The business phone number has been deleted. |
100 | Invalid parameter The request included one or more unsupported or misspelled parameters. |
131000 | Something went wrong Message failed to send due to an unknown error. |
131008 | Required parameter is missing The request is missing a required parameter. |
131009 | Parameter value is not valid One or more parameter values are invalid. |
131016 | Service unavailable A service is temporarily unavailable. |
135000 | Generic user error Message failed to send because of an unknown error with your request parameters. |
WhatsApp guides and tools
- WhatsApp API error codes, by scenario
- WhatsApp template rejected
- WhatsApp Business account restricted
- WhatsApp number registration failed
- Template checkerFree tool
- WhatsApp API cost calculatorFree tool
- WhatsApp chatbotConnect the channel through Conferbot
- WhatsApp limits & quotasRate limits, tiers, size caps
Other platforms
Frequently asked questions
Where do WhatsApp Cloud API error codes appear?
In two places. Synchronous errors are returned in the HTTP response body as an error object with code, message, error_data.details and fbtrace_id. Asynchronous errors, such as delivery failures detected after the send was accepted, arrive in the statuses webhook with status failed and an errors array. Handle both, because a 200 response does not guarantee delivery.
Should I branch on the HTTP status, the code, or the message?
On the integer code. Meta's documentation recommends building error handling around code and error_data.details rather than HTTP status codes or the deprecated error_subcode. The message field combines the code with a short title that Meta has said will eventually be deprecated, so do not parse it for logic.
What is the most common WhatsApp API error?
131047, Re-engagement message. It means more than 24 hours have passed since the customer last messaged you, so only an approved template may be sent. It is not a bug; it is the customer service window rule. Track the last inbound timestamp per contact and fall back to a template when the window is closed.
Which WhatsApp errors are safe to retry?
Transient platform errors (1, 2, 131000, 131016, 133004), the throughput limit 130429 and pair limit 131056 with backoff, and maintenance mode 131057 after a short wait. Do not retry 131026, 131047, 131049, 131050, 130403 or any 132xxx template error without changing something first; they will fail identically.
What is the difference between 130429, 131048 and 131056?
130429 is throughput: you sent faster than your number's messages-per-second allowance, so pace and retry. 131048 is a quality-based restriction caused by blocks and spam reports; retrying does nothing and you must fix audience and content. 131056 is the pair limit for one recipient, roughly one message every six seconds to the same user.
Why does my integration get error 190 the day after it worked?
The temporary access token shown in the App Dashboard expires after 24 hours. Generate a permanent token from a System User in Business Settings with whatsapp_business_messaging and whatsapp_business_management, store it in a secrets manager, and verify in the Access Token Debugger that it never expires.
Why does a template fail for every recipient?
Because 132xxx errors are about the template, not the recipient. 132000 means your parameter count per component does not match; 132001 means the name or language does not match an approved template on that WABA; 132012 means a value has the wrong format; 132015 and 132016 mean the template was paused or disabled for low quality.
What is fbtrace_id and why keep it?
It is the trace identifier for that specific API call. Meta Direct Support uses it to locate the request internally and cannot investigate without it. It is not recoverable after the fact, so log the entire error object, including fbtrace_id and error_data.details, rather than only the numeric code.
How do I read the 131xxx, 132xxx and 133xxx code families?
The prefix tells you which subsystem refused you. Short Graph API codes (0 to 368) are authentication, permissions, and malformed requests. 130xxx are throttling and account-level restrictions. 131xxx concern delivering this message to this recipient, from window failures (131047) to undeliverable numbers (131026). 132xxx are about the template itself, so they fail identically for every recipient. 133xxx are phone number registration, and 135000 is an unclassified parameter problem. Triage the family first, then the specific code.
Why do failed WhatsApp messages never appear in my logs?
Because many failures are asynchronous. The API returns 200 with a message ID, then delivery fails, and the only record is a statuses webhook with status failed. If your webhook endpoint is unsubscribed, rejecting payloads, or timing out, those failures vanish. Subscribe to the messages webhook field, log every statuses entry including its errors array, and work through /blog/webhook-not-firing-debugging-guide if events are not arriving at all.
Run your WhatsApp bot without babysitting error codes
Conferbot manages the connection, tokens, webhooks and retries, and shows failures as readable status.