How to track send failures (in the conversation and in the campaign)

See where send failures show up in Nuvia: the failure card in the conversation, with the cause in plain language, and causes grouped by step in the campaign.

Available on
all plans.
Who can do it
any user with access to the conversation or campaign where the send happened.

On this page6 sections

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:

  1. 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.”

  2. 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.

  3. 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:

SituationWhat 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:

SituationWhat the card saysHow 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:

MomentWhat happenedHow 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_SUPPRESSED and 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.


Frequently asked questions

What's the difference between a permanent and a transient failure?

A transient failure is temporary; Nuvia retries the send automatically (e.g. send limit reached for a moment, channel instability). A permanent failure means this attempt was refused, and it usually calls for action on your part: reconnect a WhatsApp number, adjust a permission or review the recipient's data.

The label doesn't decide the campaign resend. The per-user marketing limit (131049) shows as permanent and is still resent in 24 hours, because it recovers. The expired 24-hour window (131047), on the other hand, shows as permanent and isn't resent. The list of what's resent and what's ended is in the section “What the campaign resends and what it ends right away”.

A contact failed with 131049. Does the campaign try again?

Yes. 131049 is the per-user marketing message limit Meta applies — a recipient window that clears on its own. The campaign makes one extra attempt about 24 hours later, and that attempt delivers in around 41% of the cases measured in production.

You don't need to do anything: no manual resend, no removing the contact from the campaign. If the second attempt also fails, then the contact is ended in that campaign.

My campaign shows as completed and no contact was resent. Why?

The 24-hour resend only happens in an active campaign. If the campaign had already ended when Meta's failure notice arrived, the contact stays ended and the second attempt isn't scheduled. This is more common in manual or scheduled send campaigns, which end on their own as soon as the last contact finishes.

To recover these contacts, you can enroll them again in an active campaign.

What is the code on the card for?

It's the code the channel itself returned (Meta or LinkedIn). It's always visible because it's what support and engineering use to investigate: when you open a ticket, include this code along with the send time. Codes created by Nuvia itself, which Meta wouldn't recognize, aren't shown on this line.

The card says “the reason wasn't recorded”. What does that mean?

It means the message failed before Nuvia started recording the cause of each failure, and there's no way to recover that reason afterwards. Old failures aren't reprocessed. For new sends, there's always a cause, code or record number.

Why doesn't the Try again button show up for this failure?

Because the resend would fail the same way. The button only shows on text messages, in open conversations, within the 24-hour window and with an active account. If the 24-hour window expired, send an approved template; if the conversation was closed, reopen it before sending; if the trial period expired, talk to the sales team.

The card says the contact hasn't replied yet. How do I start the conversation?

With an approved template. Until the contact writes to you, there's no 24-hour window and free-form messages don't go out. Keep in mind: sending the template does not open the window — it opens when the contact replies.

A contact suddenly stopped receiving my campaigns. Why?

They probably asked not to receive marketing messages anymore — in WhatsApp itself or through a Meta delivery refusal (code 131050). The first time, the card shows WhatsApp (Meta) as the source with code 131050; from the following sends on, it shows Nuvia as the source, because the platform no longer calls WhatsApp. This block has no end date: it only clears when the contact changes their mind. If the text mentions a temporary WhatsApp limit (131049), that's something else: it clears on its own in 24 hours and the campaign resends.

Does the marketing block stop all my sends to that contact?

No. It only applies to templates in the Marketing category on that channel. Utility and Authentication templates keep going out, and the conversation continues normally if the contact writes to you. Other channels (email, LinkedIn) aren't affected either.

A message failed because of an “empty field for this lead”. What do I do?

It means the template had a variable mapped to a field that's empty for that contact (e.g. Company name). Fill in the field on the contact and use Try again, or segment the audience to include only contacts with the field filled in before launching the campaign.

Was this article helpful?