WhatsApp Cloud API Error Codes: What Each One Actually Means
Back to blog
automation·September 3, 2026·9 min read·By Yehonatan Saadia

WhatsApp Cloud API Error Codes: What Each One Actually Means

A working reference for the WhatsApp Cloud API errors you actually hit in production - what code 100, 131047, 131048, 132001 and 190 mean, where Meta hides the real reason, and what to do about each.

Key takeaways

  • Code 100 "Invalid parameter" is almost never the real message. The specific reason lives in error_user_title, error_user_msg and error_data.details - if you only log error.message you will debug blind.
  • 131047 is not a failure - it is the 24-hour service window closing. Free text is rejected until the customer writes again; only an approved template gets through.
  • 131048, 131056, 80007 and 368 mean slow down or stop. Retrying them in a loop is how a WhatsApp Business account gets restricted.
  • Store the whole error object per message, not a boolean. Without code, subcode, details and fbtrace_id you cannot tell a bad phone number from a paused template from an expired token.

The WhatsApp Cloud API returns errors in the standard Graph API envelope, but the field most developers log - error.message - is usually the least useful one in the response. The real reason sits in other fields of the same payload. This is the working reference: what each code means, which codes require you to stop rather than retry, and what to persist so failures are debuggable after the fact.

The error envelope, and where Meta hides the reason

Every failure arrives as JSON under an error key:

  • code - the numeric code. This is what you branch on.
  • error_subcode - a sub-code, not always present.
  • message - generic text. For code 100 this is just "Invalid parameter".
  • error_user_title and error_user_msg - the actual reason lives here, especially for template validation failures.
  • error_data.details - further detail, often the most precise field of all.
  • fbtrace_id - attach this to any support request to Meta.

The practical consequence: if your system stores only message, every template failure looks identical - "Invalid parameter" - and you cannot tell a wrong variable count from over-long text from a paused template. Persist all of it, and concatenate error_user_title, error_user_msg and error_data.details into one operator-facing string.

Auth and permissions

CodeMeaning and fix
190Access token expired or invalid. The fix is a System User token from Business Manager, not a short-lived token from the Graph API Explorer.
131005The token lacks whatsapp_business_messaging, or the System User is not assigned to the WABA and phone number assets.
131042Billing problem at the WABA level. Without an active payment method in Business Manager you cannot send paid templates.

Phone number registration

CodeMeaning and fix
131045Number not correctly registered on the Cloud API. Complete registration, including the two-step PIN.
133010Number not registered on the Cloud API at all. Finish API Setup before attempting any send.

The 24-hour window

CodeMeaning and fix
131047The 24-hour service window has closed. Free-form text is rejected - only an approved template goes through - until the customer messages you again. This is a platform rule, not a bug, and it is better enforced server-side before sending than discovered from the error.
131050The recipient opted out of marketing messages from this number. Mark them opted-out and stop.
131049Meta chose not to deliver due to per-recipient marketing limits. Nothing to fix in code.

Rate and spam - the codes that mean stop

These four are different in kind. They are not a malformed request; they are a signal that the account is at risk. A correct sender pauses the campaign automatically when one of them comes back, rather than retrying in a loop.

CodeMeaning and fix
131048Send blocked on spam suspicion and low quality rating. Slow down substantially and improve the content.
131056Too many messages to the same recipient in a short period. Wait before sending again to that number.
80007WhatsApp Business account rate limit exceeded.
368Account temporarily blocked for a policy violation. Check WhatsApp Manager - this is no longer a pacing problem.

Templates

CodeMeaning and fix
132000Parameter count does not match the number of variables in the template. Three variables require exactly three values.
132001Template does not exist or is not approved in the selected language. Approval in he is not approval in en_US.
132005Text too long after parameter substitution. Shorten the values or the template body.
132007Template content violates WhatsApp policy.
132012Parameter value format does not match the template definition.
132015Template paused due to low quality rating. It cannot be used until released.
132016Template permanently disabled. Create a new one.

Delivery, media and general errors

CodeMeaning and fix
131026Undeliverable. The recipient has no WhatsApp, blocked you, or has not accepted the current terms. This is the most common error on uncleaned number lists.
131021Recipient equals sender. You cannot message yourself.
131009Invalid parameter value. Check the phone number ID and the recipient number format.
131008Required parameter missing.
131051Unsupported message type.
131052Failed to download media from the supplied link.
131053Media upload failed. Check format and size.
131000Generic Meta error. Retry later.
131016Meta service temporarily unavailable.
131031WhatsApp Business account locked. Check WhatsApp Manager.
130472Recipient is in a Meta experiment and cannot receive marketing messages.

What to persist

For every outbound message, store a row keyed by a unique wamid alongside the full error object. The wamid doubles as the deduplication key: Meta delivers status updates by webhook and occasionally delivers the same update twice. A sparse unique index on wamid handles that without extra code.

Persisting the complete error lets you show the operator, inside the chat thread itself, exactly why a message failed - instead of a red exclamation mark that says nothing.

#WhatsApp Cloud API#WhatsApp Business API#Meta Graph API#error codes#integrations

Frequently asked questions

What does WhatsApp Cloud API error 131047 mean?

It means the 24-hour customer service window has closed. Once 24 hours pass since the customer's last inbound message, free-form text is rejected and only an approved message template can be delivered. It is a platform rule, not a bug. The window reopens the moment the customer sends you another message.

Why does the WhatsApp API keep returning code 100 "Invalid parameter"?

Code 100 is Meta's generic validation error and its message field is deliberately vague. The specific cause is in error_user_title, error_user_msg and error_data.details in the same response. Log those three fields and the real reason - usually a template name, language or parameter structure problem - becomes visible immediately.

Which WhatsApp API errors should stop a bulk send instead of retrying?

131048 (spam suspicion), 131056 (too many messages to one recipient), 80007 (account rate limit) and 368 (temporary policy block). These indicate the account itself is at risk. Retrying them in a loop is a common way to get a WhatsApp Business account restricted, so a sender should auto-pause the campaign when any of them appears.

What causes error 132001 when the template clearly exists?

Almost always a language mismatch. Templates are approved per language code, so a template approved as "he" will return 132001 if you send it as "en_US". The second common cause is that the template is approved in a different WhatsApp Business Account than the one your phone number ID belongs to.

Is error 131026 something I can fix in code?

No. 131026 means the message is undeliverable to that specific person - they have no WhatsApp account, they blocked your number, or they have not accepted WhatsApp's current terms. The correct handling is to mark the number as undeliverable and stop retrying it, not to change the request.

What is fbtrace_id and do I need it?

It is a per-request identifier Meta returns on errors. You cannot use it yourself, but Meta support will ask for it, and without it a support ticket about an intermittent failure usually goes nowhere. Store it with every logged error.

Keep reading

Related service

WhatsApp Cloud API

Templates, a two-way inbox and reminders on the official Meta API.

Learn more

About the author

Yehonatan Saadia

Freelance automation, web & MVP engineer

I'm Yehonatan Saadia, a senior engineer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.

Work with me

Have a project like this?

Tell me what you're trying to automate or build and I'll tell you the fastest reliable way to ship it.