Error 131049 · HTTP 400

Per-user marketing cap reached

The most common failure on this deployment, and the one most often retried into the ground.

Retry it?No
Suppress the contact?No
Switch to a template?No
Account-level alert?No
Is it a cap?No

Cause. Meta declined to deliver "to maintain healthy ecosystem engagement". The recipient is over their own per-user limit for marketing messages, which is a property of that person's inbox rather than of your account or your template.

Fix. Stop sending marketing to that contact for now. Meta's guidance is to stop rather than retry, and retrying inside the window is a guaranteed failure that spends nothing but your number's quality rating. Do not suppress the contact either: the cap lifts on its own, and utility and service messages are unaffected. Marketing Messages Lite can sometimes still reach a capped contact where the normal path cannot.

What Meta is actually saying

The message text is "not delivered to maintain healthy ecosystem engagement", which sounds like a policy judgement about your content. It is not. It means the person you are messaging has received as many marketing messages as WhatsApp is willing to deliver to them in the current window, from everyone, not just from you.

It is a property of their inbox rather than of your account, your template or your copy. Two businesses messaging the same person on the same day can get different answers, and the same template can succeed for one contact and fail for the next.

Why retrying is the expensive mistake

Meta's guidance is to stop rather than retry, and the reason is asymmetric. A retry inside the window cannot succeed, so it buys nothing, while every attempt is another signal against the number's quality rating. You spend reputation to receive a guaranteed failure.

This is the most frequent error on our own deployment by a wide margin, which is what makes the retry behaviour worth getting right rather than merely correct on paper.

Do not suppress the contact either

The cap lifts on its own. Utility and service messages are unaffected while it is in force, so a contact returning 131049 is still perfectly reachable for an order update or a reply inside the service window.

Suppressing them removes a reachable customer from every future send for a condition that expires. If your platform treats "marketing declined" and "unreachable" as the same state, this code is where that conflation costs you.

What to do instead

Exclude the contact from marketing sends for a cooling-off period and let the next campaign pick them up. Meta's Marketing Messages Lite path can sometimes reach a capped contact where the ordinary path cannot, which is worth trying before writing the audience down.

The whole table, free

Every code we document, with the handling decision each one implies, as an open dataset. The flags are generated by running the same classifier our production send path uses, so it cannot describe behaviour the software does not have. CC-BY, CORS open.

JSON · GitHub · npm i whatsapp-cloud-api-error-corpus