WhatsApp Cloud API reference

WhatsApp Cloud API error codes, explained one by one

55documented codes
9categories
2026-08-20last verified

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

CodeTitleHTTPType
0AuthException
We were unable to authenticate the app user.
401Configuration
3API Method
Capability or permissions issue.
500Configuration
10Permission Denied
Permission is either not granted or has been removed.
403Configuration
190Access token has expired
Your access token has expired.
401Configuration
200-299API Permission
Permission is either not granted or has been removed.
403Configuration
131005Access denied
Permission is either not granted or has been removed.
403Configuration

Throttling & rate limits

CodeTitleHTTPType
4API Too Many Calls
The app has reached its API call rate limit.
400Retryable
80007Rate limit issues
The WhatsApp Business Account has reached its rate limit.
400Retryable
130429Rate limit hit
Cloud API message throughput has been reached.
400Retryable
131048Spam rate limit hit
Message failed to send because there are restrictions on how many messages can be sent from this phone number. This m…
400Policy / account
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.
400Retryable

Account integrity & policy

CodeTitleHTTPType
368Temporarily blocked for policies violations
The WhatsApp Business Account associated with the app has been restricted or disabled for violating a platform policy.
403Policy / account
130497Business account is restricted from messaging users in this country
The WhatsApp Business Account is restricted from messaging to users in certain countries.
403Policy / account
131031Account has been locked
The WhatsApp Business Account associated with the app has been restricted or disabled for violating a platform policy…
403Policy / account
131042Business eligibility payment issue
There was an error related to your payment method.
400Configuration

Messaging window & re-engagement

CodeTitleHTTPType
131047Re-engagement message
More than 24 hours have passed since the recipient last replied to the sender number.
400Permanent - do not retry

Recipient & delivery

CodeTitleHTTPType
130403Business has blocked the user
Unable to deliver the message. This business has blocked the end user on WhatsApp
Permanent - do not retry
130472User's number is part of an experiment
Message was not sent as part of an experiment.
400Permanent - do not retry
131021Recipient cannot be sender
Sender and recipient phone number is the same.
400Permanent - do not retry
131026Message Undeliverable
Unable to deliver message. Reasons can include: The recipient phone number is not a WhatsApp phone number. Recipient …
400Permanent - do not retry
131049Meta chose not to deliver.
This message was not delivered to maintain healthy ecosystem engagement.
400Policy / account
131050User 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…
400Permanent - do not retry

Templates & Flows

CodeTitleHTTPType
132000Template Param Count Mismatch
The number of variable parameter values included in the request did not match the number of variable parameters defin…
400Configuration
132001Template does not exist
The template does not exist in the specified language or the template has not been approved.
404Configuration
132005Template Hydrated Text Too Long
Translated text is too long.
400Configuration
132007Template Format Character Policy Violated
Template content violates a WhatsApp policy.
400Policy / account
132012Template Parameter Format Mismatch
Variable parameter values formatted incorrectly.
400Configuration
132015Template is Paused
Template is paused due to low quality so it cannot be sent in a template message.
400Policy / account
132016Template is Disabled
Template has been paused too many times due to low quality and is now permanently disabled.
400Permanent - do not retry
132068Flow is blocked
Flow is in blocked state.
400Configuration
132069Flow is throttled
Flow is in throttled state and 10 messages using this flow were already sent in the last hour.
400Retryable

Phone number registration

CodeTitleHTTPType
131037WhatsApp 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.
400Configuration
131045Incorrect certificate
Message failed to send due to a phone number registration error.
500Configuration
131057Account in maintenance mode
Business Account is in maintenance mode
500Retryable
133000Incomplete Deregistration
A previous deregistration attempt failed.
500Configuration
133004Server Temporarily Unavailable
Server is temporarily unavailable.
503Retryable
133005Two step verification PIN Mismatch
Two-step verification PIN incorrect.
400Configuration
133006Phone number re-verification needed
Phone number needs to be verified before registering.
400Configuration
133008Too Many two step verification PIN Guesses
Too many two-step verification PIN guesses for this phone number.
400Retryable
133009Two step verification PIN Guessed Too Fast
Two-step verification PIN was entered too quickly.
400Retryable
133010Phone number Not Registered
Phone number not registered on the WhatsApp Business Platform.
400Configuration
133015Please 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.
400Retryable
133016Account register deregister rate limit exceeded
Registration or Deregistration failed because there were too many attempts for this phone number in a short period of…
400Retryable

Media

CodeTitleHTTPType
131051Unsupported message type
Unsupported message type.
400Configuration
131052Media download error
Unable to download the media sent by the user.
400Retryable
131053Media upload error
Unable to upload the media used in the message.
400Configuration

Generic & request errors

CodeTitleHTTPType
1API Unknown
Invalid request or possible server error.
400Retryable
2API Service
Temporary due to downtime or due to being overloaded.
503Retryable
33Parameter value is not valid
The business phone number has been deleted.
400Configuration
100Invalid parameter
The request included one or more unsupported or misspelled parameters.
400Configuration
131000Something went wrong
Message failed to send due to an unknown error.
500Retryable
131008Required parameter is missing
The request is missing a required parameter.
400Configuration
131009Parameter value is not valid
One or more parameter values are invalid.
400Configuration
131016Service unavailable
A service is temporarily unavailable.
500Retryable
135000Generic user error
Message failed to send because of an unknown error with your request parameters.
400Configuration

WhatsApp guides and tools

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.