WhatsApp API & Developers

WhatsApp API Message Not Delivered? A Fix Checklist

A customer says they never got the message. Your code says the send succeeded. Somewhere between those two facts is the reason, and WhatsApp won't always tell you what it is.

When a WhatsApp API message is not delivered, the fastest route to the cause is to work in order: first find out how far the message got, then check your request, then the recipient, then your account. Each step rules out a family of causes, and most problems surface by step three.

This checklist covers Meta's Cloud API, with the error codes and limits checked against Meta's docs as of October 2026, plus a short section on what "not delivered" means on Tenashi. For the platform basics, see our complete guide to the WhatsApp API.

Step 1: find out how far the message got

Before guessing, establish the last thing you know for certain. Every Cloud API message passes through the same stages, and where it stopped narrows the search:

What you haveWhat it meansLook next at
An HTTP error from the send callMeta never accepted the messageThe code in the error body
HTTP 200 and a wamid, but no status webhooks at allProbably your webhook pipeline, not deliveryWhether messages is subscribed and your endpoint is receiving
A failed statusMeta tried and gave upstatuses[].errors[].code
sent, then nothingIt left Meta but hasn't reached a deviceStep 3 (recipient)
delivered or readIt arrivedThe customer's phone, not your code

The second row matters more than people expect. If you see no statuses for any message, the fault is upstream of delivery: an unsubscribed field, an app not subscribed to the account, or an endpoint returning errors. Fix the webhook first; our webhook troubleshooting guide covers it.

For the failed row, the error codes reference explains each code. The rest of this checklist is about the codes and silent cases you'll meet most.

Step 2: check the request itself

Rule out your own mistakes before blaming WhatsApp. These four are behind many "it says sent but they never got it" reports:

  1. The phone number format. Without a leading +, Meta prepends your business number's country code. Meta's own example: an Indian business sending to (631) 555-1234 sends to +91 631 555 1234. That message either fails or, worse, reaches a stranger. Always send E.164 with the plus sign. For Brazil and Mexico numbers, Meta may adjust the extra prefix itself; that's documented behaviour, not a bug.
  2. The sending number. Confirm the PHONE_NUMBER_ID in the URL is the production number, not the test number from setup.
  3. The window. A free-form message more than 24 hours after the customer's last message fails with 131047. Use a template.
  4. The template. 132001 means the name or language code doesn't match an approved template (en is not en_US). 132000 means the parameter count is wrong. 132015 means the template is paused for low quality.

Also look at message_status in the send response for templates. held_for_quality_assessment means Meta's template pacing is holding the message while it collects feedback. Held messages are released if the template's quality turns out fine, or dropped with a failed status and code 132015 if it doesn't.

Step 3: check the recipient

If the request is right, the cause is usually on the customer's side. Some of these come with an error code; some don't.

With an error code:

  • 131026: undeliverable. Either there's no WhatsApp account on that number, the person still has to accept WhatsApp's updated terms, or they're running an outdated app. Meta's suggested fix is to contact them another way and ask them to send a message to your number, accept the latest terms (Meta provides the link https://wa.me/tos/20210210) and update the app.
  • 131049: withheld for "healthy ecosystem engagement". For marketing templates, this is usually the per-user marketing limit: WhatsApp caps how many marketing messages a person receives from all businesses, based on their recent engagement. Wait at least 24 hours before resending. Retrying sooner can block further attempts to that user for up to a day and inflates your failure numbers.
  • 131050: opted out of marketing. The user stopped marketing messages from your business. Don't retry; subscribe to the user_preferences webhook so your list updates itself.

Without an error code. Meta's support page says that for privacy and policy reasons it won't disclose why some messages stay at sent. The documented reasons include:

  • The user didn't come online during the 30 days Meta holds messages for offline users.
  • The user blocked your business number, or another number owned by your business.
  • The user is in a restricted or sanctioned country. Meta lists Cuba, Iran, North Korea, Syria and the Crimea, Donetsk and Luhansk regions of Ukraine.

Two more recipient rules to know. WhatsApp currently doesn't deliver marketing templates to users with US phone numbers (+1 with a US area code), so US marketing sends fail by design. And a user placed in a Meta marketing message experiment won't receive the message, with error 130472. Neither is something you can fix. For why marketing messages are the most limited category, see what a marketing message costs.

Step 4: check your account

If messages fail across many recipients at once, the problem is your account, number or template, not individual customers. Start with Meta's Health Status API, which summarises whether your app, business, account and number can send:

curl "https://graph.facebook.com/v23.0/PHONE_NUMBER_ID?fields=health_status" \
  -H "Authorization: Bearer $WHATSAPP_TOKEN"

Each entity comes back as AVAILABLE, LIMITED (with additional info) or BLOCKED (with an errors property explaining why). The overall can_send_message is BLOCKED if any node is blocked. The example uses Graph API v23.0; use the current version from Meta's changelog.

Then check the usual account-level causes:

  • Quality. 131048 means sending is restricted because too many earlier messages were blocked or flagged as spam. Review content and targeting before sending more; our quality rating guide covers recovery.
  • Messaging limit. Your business portfolio can reach only so many unique users outside the customer service window in a moving 24 hours (250 for new portfolios, rising through 2,000, 10,000, 100,000 and unlimited). A campaign bigger than your tier won't reach everyone that day. Check the tier in WhatsApp Manager.
  • Billing. 131042 is a payment problem: no payment method on the account, a credit line over its limit, or timezone or currency not set. Since October 1, 2026, an account with no payment method gets service messages delivered only until the number's 1,000 free ones for the month are used, so a sudden failure of ordinary replies is worth checking here.
  • Restrictions. 368 means the account is restricted or disabled for a policy violation; 130497 means it can't message certain countries.
  • Opt-in. Not an error code, but the root of most quality and block problems. Meta requires opt-in before business-initiated messages; see our opt-in policy guide.

Step 5: when everything looks right

A few documented behaviours explain the remaining oddities:

  • Delivered and failed for the same message. A user logged in on several devices can produce both. Meta says anything with delivered reached at least one device.
  • Read without delivered. If the user had the chat open, Meta sends only read.
  • Late failures. failed can arrive with a small delay, and Meta keeps retrying undelivered messages for 30 days (10 minutes for authentication templates), so a message can legitimately sit at sent for days.

If none of this fits, check Meta's API status page, then open a Direct Support ticket with the wamid, timestamps and the fbtrace_id from any error response.

Not delivered on Tenashi

Tenashi sends from a number linked to your workspace as a device, so the causes differ. A message that's still queued hasn't failed; it's waiting its turn, because each number sends one message every 4 to 12 seconds and a newly linked number warms up from 20 messages on day one, doubling daily to 1,000. Sends over the day's allowance wait in the queue.

Real failures come back as errors or a message.failed event: number_disconnected if the number went offline (keep the phone that owns it active, since WhatsApp logs out linked devices after a long time offline), new_chat_limit after 50 new chats per number per day through the API, and send_blocked when the same text went to 5 chats within 10 minutes. Ban protection reduces the risk of a ban; it can't remove it.

Where Tenashi fits

Much of this checklist exists because of the official platform's rules for business-initiated messages: templates, windows, per-user marketing caps, tiers. If most of your messages are replies, reminders and follow-ups to people already talking to your team, Tenashi runs them from the number you already use, with a shared inbox and CRM, no template approvals and no per-message fees, from $18/mo.

It's not the answer for OTPs, US marketing blasts or high-volume notifications. Those belong on the Cloud API, and this checklist still applies.

Read the API docs · See every feature

FAQ

Why is my WhatsApp API message stuck on sent?

Sent means the message left Meta's servers but hasn't reached a device. Common reasons are that the user is offline (Meta holds messages for 30 days), has blocked your business number, or is in a sanctioned country. Meta doesn't disclose which. Check the number format first, then wait for a delivered or failed status.

Does a user who blocked my number cause an error?

Not necessarily. Meta lists blocking your business number, or another number your business owns, among the reasons a message can stay at sent without being delivered, and it won't confirm the cause for privacy reasons. Error 130403 is different: it means your business blocked that user, and you must unblock them first.

How long does WhatsApp keep trying to deliver a message?

By default Meta retries delivery for 30 days, and for 10 minutes for authentication templates. Some templates support a custom time-to-live. If no delivered status arrives within that period, assume the message was dropped. Failed statuses can arrive slightly late, so allow a buffer before concluding.

Why aren't my marketing templates delivered to US numbers?

WhatsApp currently doesn't deliver marketing template messages to users with US phone numbers, meaning a +1 dialing code with a US area code. Attempts return an error. The rule covers marketing templates specifically. For US customers, rely on conversations they start, utility messages they've opted into, or another channel for promotions.

Can Meta tell me exactly why a message wasn't delivered?

Sometimes. When a cause is reportable, you get an error code in the API response or a failed status webhook, and the details field explains it. For other cases, such as blocks or users who never come online, Meta states it won't disclose the reason for privacy and policy reasons.


Most undelivered messages come down to a short list of causes, and working in order finds them fast. When the traffic is mostly people your team already talks to, see how Tenashi's API sends without templates or windows.