Template rejection is the most common source of avoidable delay in a WhatsApp rollout. Teams submit fifteen templates two days before launch, get eleven rejected, and lose a week to a resubmission loop that was entirely preventable.
The rules are not arbitrary. Once you understand what Meta is actually checking, first-time approval becomes routine.
Key takeaways
- Category is the leading cause of rejection: promotional wording under a utility category.
- Variables need surrounding context. A template that is mostly placeholders gets rejected.
- Write for the specific action that triggered the message, not as a generic broadcast.
- Submit early. Templates can be drafted while verification is still pending.
Pick the category before you write
Meta reviews the template against its declared category. Choosing the category after writing is backwards and is where most rejections originate.
| Category | Use for | Must not contain |
|---|---|---|
| Utility | Order updates, receipts, reminders tied to a specific action | Offers, discounts, upsells |
| Marketing | Promotions, launches, re-engagement, anything persuasive | Nothing, but it costs more |
| Authentication | One-time codes only | Any other content |
The trap is the utility template with a sentence of marketing bolted on. "Your order has shipped. Use SAVE10 for 10% off your next purchase!" is a marketing template regardless of how it is filed, and submitting it as utility gets it rejected.
The test that predicts the outcome. Remove every variable and read what is left. If it still reads like a promotion, it is marketing. If it only makes sense in response to something the customer did, it is utility.
Give variables context
Variables are placeholders filled at send time. Meta rejects templates where they carry too much of the meaning, because such a template could be used to send effectively anything.
Rejected: "{{1}}, {{2}}" or "Hi {{1}}, {{2}} is now {{3}}." There is no way to review what will actually be sent.
Approved: "Hi {{1}}, your order {{2}} shipped today and should arrive by {{3}}. Track it here: {{4}}". The fixed text carries the meaning and the variables only fill in specifics.
A reviewer must be able to read your template and know exactly what a customer receives. If they cannot, it is rejected.
Formatting rules that trigger rejection
- No variable at the very start or end of the body. Anchor it with fixed text on both sides.
- No consecutive variables.
{{1}} {{2}}is rejected; separate them with real words. - Number sequentially from 1 with no gaps.
- No URL shorteners in link buttons. Use your real domain.
- Match the language you declare. A template declared as English containing Spanish is rejected.
- Keep the body under about 1,024 characters. Longer is truncated or refused.
If you get rejected
The rejection reason is generic, so diagnose in this order:
- Check the category first. This is the cause the large majority of the time. Any persuasive language means marketing.
- Check variable context. Strip the variables and confirm the remaining text still communicates the message.
- Check the formatting rules above. Leading or trailing variables are a frequent oversight.
- Check the display name and business status. Repeated rejections across unrelated templates often mean an account-level problem, not a content one.
Edit and resubmit rather than creating a new template. Repeatedly submitting near-identical templates after rejections counts against account quality.
Frequently asked questions
How long does approval take?
Usually minutes to a few hours. Anything beyond 24 hours usually indicates manual review, often triggered by category ambiguity.
Can I edit an approved template?
Yes, within limits, and edits trigger re-review. Substantial changes are better handled as a new template.
How many templates can I have?
Limits scale with your tier, and most businesses start with a few hundred. Volume is rarely the constraint; quality ratings are.
Do rejections hurt my account?
A few do not. A pattern of resubmitting rejected content does affect account quality, which can affect messaging limits.