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.
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
Transactional, tied to a user action or account. Updates, confirmations, reminders.
Authentication
Strictly OTP / 2FA codes for login or verification. Cannot include marketing or other content.
Marketing
Promotional. Offers, sales, announcements, newsletters. Anything not tied to a specific user action.
3. Format rules โ what fits where
| Component | Required? | Max length | Notes |
|---|---|---|---|
| Template name | Yes | 80 chars | lowercase, snake_case only. Unique per language. |
| Language | Yes | โ | Use the ISO code (e.g. en, en_US, hi). Same template can have multiple language versions. |
| Category | Yes | โ | One of UTILITY / AUTHENTICATION / MARKETING. See ยง2. |
| Header text | Optional | 60 chars | Short title. Can contain at most one variable. No emojis at the very start. |
| Body text | Yes | 1024 chars | The main message. Where most variables go. |
| Footer text | Optional | 60 chars | Usually your business name. No variables here. |
| Quick-reply buttons | Optional | 20 chars each | Up 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 readyis 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.
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}} name | Rahul Sharma | Test User |
{{2}} order ID | ORD-2026-04823 | 123 |
{{3}} amount | โน2,499 | X |
{{4}} date | March 28, 2026 | date |
{{5}} OTP code | 739204 | OTP |
6. Good vs bad examples
Utility โ admission confirmation
Authentication โ OTP
Marketing โ promotion
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.
{{n}} placeholders and provide one sample value per variable.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.
- Open the Setup Portal using your setup link.
- Read the notification โ it shows Meta's exact reason.
- Click the rejected template to see the full content.
- Edit the body / category / samples to fix the issue.
- Click "Reset to Awaiting Review", then resubmit.