When a message can't be sent, whether in a campaign, a follow-up, an agent reply or a manual send, Nuvia shows the failure right where the send happened, with the cause in plain language, the channel code and, when resending is possible, a button to try again. This article explains where these failures show up and how to read them.
In the conversation: the failure card
When a sent message fails, it shows up in the conversation with a red card. The card always has three pieces of information:
-
The cause, in plain language — on the first line, after the Not sent label. Example: “Not sent · The 24-hour window for this conversation has expired. Send an approved template to reopen contact.”
-
The identification line — right below, with the channel code, the source of the failure and the time: “Code 131047 · WhatsApp (Meta) · 10/08 14:32”. The source is WhatsApp (Meta), LinkedIn or Nuvia.
-
View technical details — a link that expands the provider's raw response, the HTTP status and the failure record number, when that information exists.
The cause is shown in your language (Portuguese, English or Spanish) whenever Nuvia recognizes the channel code, for example: number outside the 24-hour window, send limit reached, template paused by Meta, LinkedIn account disconnected or a pending billing issue with Meta.
The Try again button
The Try again button does exactly the same as the conversation's text field. That's why it only appears when resending can actually work:
-
the failed message is a text message (templates and media aren't resent with this button);
-
the conversation isn't closed;
-
the conversation is within WhatsApp's 24-hour window;
-
your account isn't in an expired trial period.
If any of these conditions isn't met, the button isn't shown; the send would fail again for the same reason.
24-hour window block: two different messages
When Nuvia blocks the send because there's no open window, the card explains which of two situations happened:
| Situation | What the card says |
|---|---|
| The contact has replied at some point, but the 24 hours have passed | “24-hour window expired. Send an approved template to reopen the conversation.” |
| The contact has never replied in this conversation | “The contact hasn't replied yet, so there's no open 24-hour window. Send an approved template to start the conversation.” |
This block is done by Nuvia, before the message goes out to WhatsApp. That's why it shows with Nuvia as the source in the identification line — and not WhatsApp (Meta), as before. The change separates our block from the real 131047 error, where Meta itself refuses the send.
Failure because of an empty template variable
A common failure in WhatsApp campaigns is a template that can't be sent because one of the mapped variables is empty for that lead. In this case, the message says exactly which field to fill in, for example:
The field name shows its friendly label (e.g. Company name), not the technical identifier. When more than one field is empty, all of them are listed. To learn how to map variables and avoid empty fields, see How to use variables in WhatsApp templates.
Contact who asked not to receive marketing
Before sending a Marketing template, Nuvia checks whether that contact can receive this type of message right now. If not, the send is blocked before it goes out to WhatsApp and the failure shows with Nuvia as the source and the MARKETING_SUPPRESSED code.
There are two different situations, with different text on the card:
| Situation | What the card says | How long it lasts |
|---|---|---|
| The contact asked to stop receiving marketing | “This contact asked not to receive marketing messages on this channel.” | No end date — it applies until the contact changes their mind |
| WhatsApp is limiting marketing for that contact | “WhatsApp is limiting marketing messages for this contact right now. Sending will be released automatically.” | 24 hours, and it releases on its own |
Where the stop request comes from: the contact turned off your company's marketing messages in the WhatsApp app itself, or Meta refused a send with code 131050 (the contact blocked marketing). In both cases Nuvia saves the preference on the contact and stops sending marketing to them on that channel.
Where the temporary limit comes from: Meta refused a send with code 131049 (per-user marketing message limit) or 130472. Nuvia keeps this block for 24 hours for that contact, on that channel, within your company — and resumes sending on its own when the time is up.
131049 has two different moments — and two different cards
It's worth understanding this difference, because it explains why the same problem shows up in two ways on screen:
| Moment | What happened | How it shows in the conversation |
|---|---|---|
| The first refusal | WhatsApp accepted the send, created the message and only then reported that it wasn't delivered | Source WhatsApp (Meta), code 131049, with the text “Not delivered: Meta limits marketing messages per user. Try again in 24 hours.” |
| The following sends, within the 24 hours | Nuvia already knows about the limit and doesn't even call WhatsApp | Source Nuvia, code MARKETING_SUPPRESSED, with the text “WhatsApp is limiting marketing messages for this contact right now. Sending will be released automatically.” |
In the campaign: causes per step and Action history
In the campaign details, each step's Failures indicator can be expanded to see the grouped causes, the plain-language message, the channel code and the count for each cause.
In the campaign's Action history, each failed run shows the same cause and the same identification line (code and source) you see on the conversation card. Both screens use the same translation: the same code never shows different text in different places.
In the campaign contact export
The campaign contact export has two columns with the reason, right after the Status column:
-
Error code — the same code shown on the card (e.g.
131049,131026) -
Error reason — the cause in plain language, same as on screen
Before, the export only said “Delivery error” in the Status column, without saying why. Now you can filter the spreadsheet by reason and separate, for example, “number doesn't use WhatsApp” from “marketing limit”.
In the outgoing webhook
If you use Nuvia webhooks to track sends in another system, there's the MESSAGE_FAILED event. It includes a failure_reason field with the code, the cause in text, the classification and the provider — the same text the operator reads in the conversation, not the channel's raw response.
See also How to interpret campaign metrics.
In the HubSpot integration: Sync history
When the failure comes from HubSpot, not from a message send, it shows in the integration's Sync history. In the details of the item with an error, Nuvia first shows the classified cause with the HubSpot code (for example INVALID_OPTION or INVALID_PHONE_NUMBER), naming the property that failed, and only below it the API's raw response, which can run over two thousand characters.
Older sync items, saved before this change, still show only the raw response.
Permanent and transient failures
Every send failure is classified internally into two types, which helps you understand whether you need to act:
-
Permanent — Meta (or Nuvia) refused this attempt. It's usually final and calls for action on your part: reconnect a WhatsApp number, adjust a permission, reconnect the LinkedIn account or fix the lead's data
-
Transient — a temporary failure, where the resend happens automatically (e.g. a momentary send limit, channel instability). In these cases the message itself says the resend is automatic and you don't need to do anything
What the campaign resends and what it ends right away
When a campaign step fails, Nuvia can try sending one more time, about 24 hours later. It's one extra attempt, not an endless loop: if the second one also fails, the contact is ended in that campaign.
This resend is only skipped when waiting won't change anything — or when insisting would be wrong.
The campaign resends in 24 hours:
-
131049 and 130472 — per-user marketing message limit. It's a recipient window and clears on its own
-
WhatsApp limits and momentary instability (130429, 131048, 131056, 131000, 132069 and similar)
-
Codes Nuvia doesn't recognize and internal platform errors
The campaign ends the contact right away, without resending:
-
131026 — the number doesn't use WhatsApp. It never recovers
-
131050 — the contact asked not to receive marketing. We don't insist, as a matter of policy, not effectiveness
-
Template errors (132000, 132001, 132015, 132016 and the other 132xxx) — the problem is in the template, not the timing
-
Number connection and setup (0, 190, 3, 10, 200, 131031, 131037, 131042, 131045, 133010) — it only clears after someone fixes it
-
Window and content (131047 expired window, 131051 content type, 131052 and 131053 attachment, 131008 and 131009 missing variable, 131021 the channel's own number)
-
Nuvia's own blocks —
MARKETING_SUPPRESSEDand inbox without a default agent
Attachment refused by Meta (code 131053)
Code 131053 is now treated as a permanent failure, with the text “Meta refused the attachment. Try sending it again.”
Before, it showed as transient and promised an automatic resend — but this error comes as a Meta notice after the send was already accepted, so no automatic platform resend reaches that message. The attachment simply got lost and no one was told. Now the card asks for action: send the attachment again.