Workspace/templates

Template Studio

WhatsApp template best practices

A practical guide to getting your templates approved on the first submission, and what to do if one gets rejected.

These rules come from Meta's WhatsApp Business Platform template policy. RannCX's template form already checks most of this automatically before you submit — but understanding why a rule exists makes it much faster to fix a rejection.

Top reasons templates get rejected

Category doesn't match the content

Meta's reviewers (and automated classifier) read the body text and compare it to the category you picked. A "UTILITY" template that mentions a sale, discount code, or "limited time" will almost always bounce back for reclassification.

Missing or placeholder-looking example values

Every {{1}}, {{2}}, ... variable needs a realistic example ("Priya", "#48213") — not "test", "xxx", or the variable name itself. Meta uses these examples to judge whether the template makes sense once filled in.

Generic, low-context body text

A body that's just "Hi {{1}}, {{2}}" with no other words gives Meta nothing to evaluate and is frequently rejected as too vague to review. Give the message real, complete sentences around the variables.

Sensitive or restricted content

Content related to gambling, adult products, alcohol (in restricted regions), unverified health claims, or financial guarantees is auto-flagged. Keep claims factual and avoid anything that needs age-gating.

Mismatched or broken buttons

A "Visit Website" button whose URL doesn't resolve, or whose domain doesn't match your verified business, is a common cause of manual rejection. The same applies to a Flow button pointing at an unpublished Flow.

Excessive formatting or emoji spam

ALL CAPS headers, more than a couple of emoji, or heavy use of *bold*/_italic_ markdown reads as spammy to both Meta's classifier and end users, and lowers approval odds even when the content itself is fine.

Pick the right category

Category is checked against your actual message content, not just taken at face value — mismatches are the single most common rejection reason.

CategoryUse it forAvoid
UtilityOrder updates, account alerts, appointment reminders, delivery notices — anything tied to a specific transaction the contact already started.Discounts, promotions, or any line that tries to sell something extra.
MarketingOffers, announcements, re-engagement, newsletters — anything promotional, even if it's wrapped in helpful-sounding language.Labeling a promotional message as Utility to dodge marketing-conversation pricing — this is the single most common rejection reason.
AuthenticationOne-time passcodes and login verification codes only. Meta supplies the body copy — you only configure the code-expiry and security-line options.Any custom body, header, or footer text — Authentication templates reject custom content automatically.

Do

  • Write complete, natural sentences — the message should make sense to someone who has never seen a variable placeholder.
  • Match the template's language setting to the actual language of the body text.
  • Keep the header and footer short and purely informational (business name, a one-line reminder, etc).
  • Use realistic example values for every variable before submitting.
  • Pick the narrowest accurate category — most transactional messages are Utility, not Marketing.

Don't

  • Don't write "UTILITY" content that quietly upsells or promotes something unrelated to the transaction.
  • Don't leave a variable's example blank or use a placeholder like "N/A".
  • Don't stack more than one call-to-action of the same type (e.g. two link buttons).
  • Don't submit near-duplicate templates with only the wording changed — Meta rate-limits and flags repeated near-identical submissions.
  • Don't use URL shorteners in button links — Meta requires the destination domain to be visible and verifiable.

Variables, formatting & buttons

Variables ({{1}}, {{2}}, ...) must appear in order with no gaps, and every one needs a realistic example value — Meta rejects submissions with missing or obviously fake examples.

Header text is capped at 60 characters and may contain at most one variable. Keep it a short label, not a sentence.

Footer text is capped at 60 characters and cannot contain variables — use it for a fixed line like "Reply STOP to opt out".

Buttons — a template can have up to 3 buttons, with at most one each of Visit Website, Call Phone, and Complete Flow (a WhatsApp Flow button must point at an already-published Flow, or Meta rejects it outright). Quick-reply buttons don't count toward that one-per-type cap, so you can mix several of those in.

If a template gets rejected

  1. 1. Open the template from the list — the rejection reason Meta returned is shown under its name.
  2. 2. Fix the specific issue named in the reason (category, wording, missing example, etc.) rather than resubmitting unchanged.
  3. 3. Submitting again under the same name re-queues it for review — there's no need to rename it.
  4. 4. If you believe the rejection was a mistake, Meta's WhatsApp Manager has an appeal option directly on the template.
This page summarizes Meta's published WhatsApp Business Platform policies for message templates; Meta is the final authority on approval decisions and may update its rules at any time.
Automated content review is never a substitute for Meta's own decision — RannCX's in-app checks catch the most common issues, not every possible one.