Skip to content
Getting started 4 min read

Why WhatsApp message templates get rejected — and how to write ones that pass

Rejections follow a short list of predictable causes. What Meta's reviewers check, what gets re-categorised, and how to fix a rejected template.

Template rules are Meta's and are enforced by Meta's review. Accurate as of September 2026. Check Meta's current documentation.

Getting started

You cannot message a customer outside the 24-hour service window without an approved message template. That makes templates the gate between you and every reminder, confirmation and campaign you intend to send — and the first place a WhatsApp rollout stalls.

The good news: rejections are not arbitrary. Almost all of them come from a short list of causes, and most are avoidable in the draft.

What a template actually is

A template is a pre-approved message with fixed text and numbered placeholders:

Hi {{1}}, your order {{2}} has shipped and should arrive by {{3}}.
Track it here: {{4}}

You submit the skeleton once. Meta reviews it. After approval you send it as many times as you like, filling the placeholders per recipient. Review is usually fast — often within minutes, sometimes up to 24 hours — and the time varies with your account standing and what the template says.

Pick the category honestly

Every template is filed under marketing, utility or authentication, and this is where most trouble starts.

  • Utility is for something the customer already did or already has: an order update, a booking confirmation, an appointment reminder, a payment receipt, a delivery alert.
  • Marketing is for anything you want them to do next: offers, launches, re-engagement, cross-sells, “we miss you”.
  • Authentication is one-time passcodes, and nothing else.

Utility is roughly 7.5x cheaper than marketing in India, which creates an obvious temptation. Resist it, because Meta re-categorises templates it judges to be filed wrongly — and you will find out through your invoice or a sudden rejection, not through a warning.

The test is simple: remove the promotional sentence. Does the message still need to exist? If yes, it is utility. If the message only exists to carry the offer, it is marketing, whatever the subject line says.

The classic failure is the reminder with a discount bolted on. “Your appointment is tomorrow at 4pm” is utility. “Your appointment is tomorrow at 4pm — and get 20% off any add-on service!” is marketing, and will be treated as such.

The nine causes of nearly every rejection

1. A variable at the very start or the very end. {{1}}, your order shipped and Your order shipped: {{2}} are both routinely rejected. A reviewer cannot tell what will land there, so a template that is mostly placeholder reads as an open pipe. Wrap variables in fixed text.

2. Two variables touching. {{1}} {{2}} with nothing between them fails for the same reason. Put a word, a comma, anything, between them.

3. Placeholders numbered wrong. They must run {{1}}, {{2}}, {{3}} with no gaps and no repeats-out-of-order. {{1}} then {{3}} is a hard fail.

4. No sample values. Meta asks for an example of what goes in each placeholder. Samples that are obviously junk — {{1}} = "test", {{2}} = "abc" — get rejected, because the reviewer is assessing the filled message, not the skeleton. Give realistic samples.

5. Category mismatch. Covered above. The single most common rejection.

6. Content that breaks the Commerce or Business policy. Alcohol, tobacco, supplements with medical claims, gambling, adult content, some financial products, real money gaming — these are restricted or prohibited regardless of how the template is written. Check the policy before you write, not after.

7. Asking for sensitive data. Templates that request full card numbers, passwords, or government ID numbers in the chat get refused.

8. Sloppy formatting. Broken or unbalanced markdown, stray asterisks, a URL built entirely from a variable, or a template that is one unbroken 800-character paragraph. Reviewers read these.

9. A duplicate of an existing template. Same content, new name, is not a new template.

Call-to-action buttons (visit website, call phone number) and quick-reply buttons are reviewed as part of the template. Two things to watch:

  • A URL button whose entire domain is a variable will be rejected. Make the domain fixed and let the variable carry only the path or an ID: example.com/track/{{1}}.
  • URL shorteners are treated with suspicion, because they hide the destination. Use your own domain.

When it is rejected anyway

You get a reason, and it is usually terse. Do this:

  1. Read the category first. If it was re-categorised rather than rejected, nothing is wrong with the text — the price changed.
  2. Edit, do not resubmit. An approved template can be edited a limited number of times per period; a rejected one should be fixed and resubmitted rather than re-created under a new name, which looks like evasion.
  3. Rewrite the sentence, not the whole message. Most rejections trace to one clause.
  4. Appeal only when you are actually right. Appeals cost you standing when they are wrong.

The part that is not about templates

Template approval is one of two gates. The other is the 24-hour service window — because a template you never need to send is cheaper and more reliable than one you fought to approve. If you can answer someone inside the window, do; free-form replies need no approval at all.

In Watx you create, submit, edit and track templates from inside the app, with the approval status and category visible on each one, so a rejection surfaces where you work rather than in an email nobody reads. See how templates work.

Run all of this on one number.

Shared inbox, template tracking, opt-outs enforced at send time and AI agents — on the official Meta WhatsApp Business Cloud API.

Start free trial