Template Approval Guide

How to get your messages approved by Meta

WhatsApp Business templates need Meta's approval before they can be sent. This guide walks you through the rules, common pitfalls, and a checklist โ€” so your templates pass on the first try.

๐Ÿ“Š Following this guide raises approval rate from ~60% โ†’ 95%+

1. Why Meta approval matters

WhatsApp is designed to prevent spam. If your business wants to initiate a conversation โ€” to send a reminder, OTP, notification, or promotion โ€” Meta needs to pre-approve the message content as a template.

Once a template is approved, you can send it as often as you like (within Meta's pricing). If it's rejected, you'll need to fix the issue and resubmit โ€” usually a 24-hour delay each time. The goal is to get it right on the first try.

๐Ÿ’ก Replies within 24 hours of a user message are free and don't need template approval. Templates are only required for messages you start.

2. Pick the right category

The single most common rejection reason is wrong category. Meta uses category to decide pricing and review strictness. Pick the most accurate one.

Utility

โ‚น0.24 / conv

Transactional, tied to a user action or account. Updates, confirmations, reminders.

e.g. order confirmation, payment receipt, appointment reminder, shipping update, admission status

Authentication

โ‚น0.17 / conv

Strictly OTP / 2FA codes for login or verification. Cannot include marketing or other content.

e.g. login OTP, password reset code, two-factor verification code

Marketing

โ‚น0.70 / conv

Promotional. Offers, sales, announcements, newsletters. Anything not tied to a specific user action.

e.g. festive sale, new course launch, early-bird discount, event invitation
โš  Mixing categories will get you rejected. Don't put "Hi Rahul, your OTP is 1234. Also check our new offer!" in any one category โ€” that's two distinct messages.

3. Format rules โ€” what fits where

ComponentRequired?Max lengthNotes
Template nameYes80 charslowercase, snake_case only. Unique per language.
LanguageYesโ€”Use the ISO code (e.g. en, en_US, hi). Same template can have multiple language versions.
CategoryYesโ€”One of UTILITY / AUTHENTICATION / MARKETING. See ยง2.
Header textOptional60 charsShort title. Can contain at most one variable. No emojis at the very start.
Body textYes1024 charsThe main message. Where most variables go.
Footer textOptional60 charsUsually your business name. No variables here.
Quick-reply buttonsOptional20 chars eachUp to 3. End-user taps them to reply with the button text.

4. Using variables (the {{1}} placeholders)

Variables let you personalize each message at send time. Use them like {{1}}, {{2}}, {{3}} โ€” in numbered order, no gaps.

Rules Meta enforces

  • Numbered, no gaps: if you use {{1}} and {{3}} but skip {{2}}, Meta will reject.
  • Not at the start or end of body: {{1}}, your order is ready is fine. {{1}} alone, or ending with โ€ฆ ready {{1}}, will be rejected.
  • Variables can't be next to each other: {{1}} {{2}} without text between them looks suspicious and gets rejected.
  • Surround with text: add words around each variable so the message reads naturally.
โœ“ Good
Hi {{1}}, your appointment with Dr. {{2}} is confirmed for {{3}}.
Why it passes: variables are surrounded by clear context. Reader knows what each one is.
โœ— Bad
{{1}} {{2}} {{3}} Confirmed
Why it fails: variables at the very start, with no context between them. Looks like spam.

5. Sample values โ€” what to type for each variable

Meta requires realistic example values for every variable so reviewers can read the template like a real message. Bad samples get the template rejected.

Variableโœ“ Realistic sampleโœ— Lazy sample
{{1}} nameRahul SharmaTest User
{{2}} order IDORD-2026-04823123
{{3}} amountโ‚น2,499X
{{4}} dateMarch 28, 2026date
{{5}} OTP code739204OTP
๐Ÿ’ก Use values that look like real customer data in the relevant region โ€” names, dates in your audience's locale, currency symbols.

6. Good vs bad examples

Utility โ€” admission confirmation

โœ“ Approves first try
Admission Update
Hi {{1}}, your MSCS application (Ref: {{2}}) has been received. We'll communicate the final decision by {{3}}.
MSCS Admissions Office
Why: Variables in middle of body, surrounded by context. Clear purpose. Business identity in footer. Realistic samples (Rahul Sharma / MSCS-2026-0042 / Sep 15).
โœ— Rejected
{{1}} application {{2}} {{3}}
Why: Variable at start. No context. Reads like a fragment. Reviewer can't tell what this message is for.

Authentication โ€” OTP

โœ“ Approves
Your verification code is {{1}}. Do not share this code with anyone. It expires in 10 minutes.
Why: Strict authentication content only. No promotional language. Clear security advice. Time-bounded.
โœ— Rejected
Your code {{1}}. Login at our portal and check out new courses!
Why: Mixes authentication with marketing ("check out new courses"). Pick one category โ€” split into two templates.

Marketing โ€” promotion

โœ“ Approves
MSCS Spring Intake
Hi {{1}}, our Spring MSCS programme opens on {{2}}. Scholarships up to โ‚น50,000 for early applicants. {{3}} seats available.
Terms apply ยท MSCS Office
Why: Specific, scoped offer. Realistic numbers. Variables provide useful info. Disclaimer in footer.
โœ— Rejected
BEST OFFER!! GET {{1}} OFF NOW!!! HURRY!!! CLICK LINK
Why: ALL CAPS, multiple exclamation marks, urgency manipulation, vague "click link". Classic spam patterns Meta filters automatically.

7. Common rejection codes Meta sends back

When Meta rejects a template, they include a code in the rejection message. Here's what each one means and how to fix it.

INVALID_FORMAT
Variable placement issue, missing example values, or wrong character counts. Fix: ensure variables aren't at start/end of body, all variables have samples, and lengths are within limits.
PROMOTIONAL
Marketing content in a UTILITY or AUTHENTICATION template. Fix: change category to MARKETING, or remove the promotional content.
INCORRECT_CATEGORY
The category doesn't match what the message actually does. Fix: re-pick category per ยง2 above.
ABUSIVE_CONTENT
Threatening, harassing, or hateful language. Fix: rewrite tone. Be polite and helpful.
SCAM
Looks like phishing or fraud โ€” urgency manipulation, suspicious links, asking for sensitive info. Fix: remove urgency tactics, use clear business identity, don't ask for passwords.
TAG_CONTENT_MISMATCH
Variable count or sample values don't match the body. Fix: recount {{n}} placeholders and provide one sample value per variable.
UNKNOWN_LANGUAGE
Language code typo. Fix: use the exact ISO code (e.g. en, en_US, hi, hi_IN).

8. Pre-submission checklist

Tick each item before clicking submit. If you can't tick something, fix it first.

9. What happens after a rejection

If Meta rejects your template, the admin will see the rejection reason and you'll get a notification at the top of your Setup Portal explaining what to fix.

  1. Open the Setup Portal using your setup link.
  2. Read the notification โ€” it shows Meta's exact reason.
  3. Click the rejected template to see the full content.
  4. Edit the body / category / samples to fix the issue.
  5. Click "Reset to Awaiting Review", then resubmit.
โš  Each rejected template counts against your account. Excessive rejections can flag your business with Meta and slow down future reviews. Use this checklist to avoid them.

Ready to submit?

Use this guide as a reference whenever you're composing a new template.

โ† Home