Updated on October 29, 2026
WhatsApp error 131026 means “Unable to deliver message”: Meta accepted your request but could not deliver the message to the recipient. The official documentation lists three possible causes: the number is not on WhatsApp, the user has not accepted the latest Terms of Service and Privacy Policy, or the user is running an old version of the app. Resending the same message will not fix it; the fix is to confirm the contact through another channel and clean up your list.
This article covers 131026 only. For the full table of other codes, see WhatsApp API error codes.
What Meta says about error 131026
In the official error codes table, 131026 is described as “Unable to deliver message”, with three reasons:
| Cause listed by Meta | What it means in practice |
|---|---|
| The recipient phone number is not a WhatsApp phone number | The number doesn’t exist, was mistyped, or never had a WhatsApp account |
| The recipient has not accepted the new Terms of Service and Privacy Policy | The account exists but is waiting for the user to accept the terms in the app |
| The recipient is using an old WhatsApp version | The app is below the minimum required version |
The minimum versions listed in the documentation are:
| Platform | Minimum version |
|---|---|
| Android and WhatsApp Business app for Android | 2.21.15.15 |
| iOS and WhatsApp Business app for iOS | 2.21.170.4 |
| KaiOS | 2.2130.10 |
| WhatsApp Web | 2.2132.6 |
Meta’s recommended solution happens entirely outside WhatsApp. Using a non-WhatsApp channel, ask the user to:
- confirm they can actually send a message to your WhatsApp Business phone number;
- accept the latest terms, which the app prompts under Settings > Help or Settings > Application information;
- update to the latest WhatsApp version.
One key point: the API does not tell you which of the three causes applied. The code is the same for all of them.
What about blocking?
Many lists online say 131026 means “the user blocked your business”. The error codes table does not say that. Blocking shows up on a different page, the Cloud API support page, in the section on messages that show as sent but are never delivered. There, Meta lists:
- the user did not come online during the 30-day window in which Meta holds messages for offline users;
- the customer blocked the business phone number, or another phone number owned by the same business;
- the customer is in a restricted or sanctioned country.
The same page warns that in many of these cases Meta will not disclose the underlying cause. So treat blocking as a possible reason for “sent but not delivered”, not as a meaning of 131026. The page also mentions cases where the API does return an error code, such as unaccepted terms and an outdated app, which are exactly two of the 131026 causes.
Want to try it while you read? Create a Vectalk account and send your first message through the official API. Create free account →
Where 131026 shows up
Error 131026 arrives asynchronously, in the messages webhook, as a failed status with an errors array. Your send request may have succeeded and returned a wamid; the failure comes later. A sample event:
{
"statuses": [
{
"id": "wamid.HBgLNTU4NDk5OTk5OTk5...",
"status": "failed",
"timestamp": "1761750000",
"recipient_id": "5584999999999",
"errors": [
{
"code": 131026,
"title": "Unable to deliver message.",
"message": "Unable to deliver message.",
"error_data": {
"details": "Unable to deliver message."
}
}
]
}
]
}
The title and details strings can vary. Build your logic on code. The full status lifecycle (sent, delivered, read, failed) is covered in WhatsApp API message status webhooks, and troubleshooting messages stuck at sent is covered in message sent but not delivered.
How to tell the causes apart
The API won’t, but your own history can help. A few practical signals. These are inferences from your data, not a Meta rule:
| What your system knows | Most likely cause | What to do |
|---|---|---|
| The contact never messaged you and the number came from a typed web form | Not a WhatsApp number, or a typo | Confirm the number by email or SMS; fix the record |
| The contact has chatted with you on WhatsApp before | Pending terms or outdated app | Ask them through another channel to update the app and accept the terms |
| Other messages to the same contact were delivered yesterday | Temporary situation on the user’s side | Pause sends to that contact and try once more later |
| The number looks malformed (missing country code, extra digits) | Data entry error | Normalize to international format, digits only, with country code |
If a contact has already chatted with your business, the number was on WhatsApp at some point. That makes the first cause less likely and points to terms or app version.
When not to retry
The general rule: don’t retry in a loop. 131026 is not a transient infrastructure error like 131000 or 130429. It depends on something only the user can fix (having WhatsApp, accepting terms, updating the app).
- Don’t put 131026 into your exponential backoff retry queue.
- Don’t send the same template again the same day.
- Don’t switch templates thinking the content is the problem. This code isn’t about content.
- Do try once more later (days later) if there’s a sign the user fixed it, for example after they confirmed by email that they updated the app.
- Do resume normal sends when the contact messages you, since that proves their WhatsApp works.
Cost: are you charged for 131026?
No. Meta’s pricing page says businesses are only charged when a message is delivered. A message that ends as failed with 131026 was not delivered.
The real cost is elsewhere: team time, campaigns that reach fewer people than planned, and a list that keeps getting dirtier. In Brazil, for example, a marketing message costs R$ 0.3217 (Brazilian reais) per delivered message since October 1, 2026. Failed numbers don’t add to the bill, but they skew your forecast if you estimate cost from list size.
Fallback: SMS and email
Since Meta itself tells you to resolve this outside WhatsApp, it pays to have an automatic fallback for important messages:
- Transactional (orders, payments, codes): if the status is
failedwith 131026, send the same notice by SMS or email. For verification codes, an SMS fallback keeps users from getting stuck at login. We compare both channels in WhatsApp or SMS. - Marketing: don’t push another channel just because WhatsApp failed. Use email only if the person also opted in to it.
- Reactivation message: a short email asking the person to confirm their number, update WhatsApp, accept the terms and send a “hi” to your number covers all three of Meta’s instructions at once. If the “hi” arrives, it also opens the customer service window.
List cleanup
131026 is a good gauge of list quality. A simple routine:
- Log every 131026 with contact, date and template.
- After repeated failures on different dates, flag the contact as
whatsapp_unavailableand remove it from campaigns. - Ask for an updated number by email or at the next interaction on your site or app.
- Reactivate the contact automatically if they message you.
- Track the 131026 rate by lead source (web form, import, in-store signup). A source with a high rate points to a capture problem.
Our article on building a WhatsApp opt-in list shows how to capture numbers with confirmation, which reduces the first type of failure.
Code example: classify and flag the contact
The snippet below handles the webhook status, isolates 131026 and decides between fallback and flagging the contact. The failure threshold is your choice, not Meta’s.
const FAILURE_LIMIT = 3; // 131026 failures on different days before suspending
async function onStatus(status, db, fallback) {
if (status.status !== 'failed') return;
const err = (status.errors || []).find(e => e.code === 131026);
if (!err) return;
const contact = await db.contacts.findByWaId(status.recipient_id);
const msg = await db.messages.findByWamid(status.id);
await db.failures.insert({
wa_id: status.recipient_id,
wamid: status.id,
code: err.code,
details: err.error_data?.details,
day: new Date(Number(status.timestamp) * 1000).toISOString().slice(0, 10)
});
// Transactional message: notify through another channel
if (msg?.kind === 'transactional' && contact?.email) {
await fallback.email(contact.email, msg.summary);
}
// No previous inbound message and repeated failures: suspend the contact
const days = await db.failures.distinctDays(status.recipient_id, 131026);
if (!contact?.last_inbound_at && days.length >= FAILURE_LIMIT) {
await db.contacts.update(status.recipient_id, { whatsapp_unavailable: true });
}
}
When an inbound message from that contact arrives (messages in the webhook), clear the flag: their WhatsApp is working again.
How to do this with Vectalk
Vectalk is a proxy for Meta’s official Cloud API, so 131026 arrives exactly the same way: a failed status in the webhook, with the same errors array as in Meta’s docs. The code above works unchanged. To review failures over a period, call GET https://apis.vectalk.com.br/api/messages?status=failed&from=2026-10-01, documented in List Messages.
With Vectalk, each delivered message is deducted from your prepaid balance, and Vectalk pays Meta. A message that fails with 131026 was not delivered. Create your account at apps.vectalk.com.br/register and see the big picture in our official WhatsApp API guide.
Frequently asked questions
Does WhatsApp error 131026 mean the number isn’t on WhatsApp?
It can, but not only that. Meta lists three causes: a number not on WhatsApp, unaccepted terms and privacy policy, and an old app version. The code is the same for all three.
Does error 131026 mean the customer blocked me?
The error codes table does not list blocking as a cause of 131026. Blocking appears on Meta’s support page among the reasons a message can show as sent without being delivered, and Meta warns it often won’t disclose the cause.
Am I charged for messages with error 131026?
No. Meta only charges for delivered messages, and a message with failed status was not delivered.
How many times should I retry?
Not right away. Ask the contact, through another channel, to confirm the number, update the app and accept the terms. Resume sending when they confirm or message you.
Can I prevent 131026 before sending?
You can reduce it. Capture numbers with confirmation, normalize to international format and prioritize contacts who have chatted with you before. For people who never contacted your business, there’s no way to guarantee delivery before you send.
Official sources consulted on October 29, 2026: WhatsApp Cloud API error codes, WhatsApp Cloud API support, Status webhook reference, WhatsApp Business Platform pricing, List Messages in the Vectalk docs.
Try the official WhatsApp API today
Create your account, generate a token and send your first message with the quick-start guide. Same payloads and webhooks as Meta's Cloud API.
