Meta rejects thousands of WhatsApp templates daily. The rejection reasons are cryptic, the appeal process is non-existent, and most guides online are outdated. This is the complete, current guide — every rejection code explained, with before/after rewrites, a forbidden-word reference, and a pre-submission checklist.
Meta provides a rejection code with every rejected template in your Business Manager. Here are all eight codes — with explanations and rewrites based on actual submission patterns from Indian businesses.
This is the #1 rejection for Indian businesses. You submitted the template under Utility but the content is promotional — it promotes products, services, or offers rather than completing a transaction the customer initiated. Example: submitting an abandoned cart recovery message (which is marketing) as a utility template to save on conversation costs.
💡 If your message mentions discounts, offers, new products, or anything promotional, it is Marketing — even if it's triggered by a customer action. The category is determined by the primary purpose, not the trigger.
The template doesn't follow Meta's required format. Common causes: variables not in double curly braces ({{1}} not {1} or [1]), header/footer content longer than allowed limits, button text exceeding character limits, or duplicate template names.
💡 Always use double curly braces: {{variable_name}} or {{1}}. Single braces, square brackets, or asterisks are invalid. Button text limit: 25 characters. Footer limit: 60 characters. Header text: 60 characters.
The template is in the Utility category but contains promotional language — discount codes, percentage offers, sale announcements, product recommendations, or upsell language. Meta's reviewers flag any sales language in utility templates.
💡 Remove all upsell and cross-sell language from utility templates. A pure order shipped notification (tracking only) approves immediately. An order shipped + discount offer = Marketing template.
The number of variables in your template body doesn't match the variable examples you provided during submission. Or variables are numbered incorrectly ({{3}} appears before {{1}} and {{2}}). Meta requires sequential numbering starting at 1.
💡 Variables must be numbered sequentially: {{1}}, {{2}}, {{3}}. The examples you provide must match the variable count exactly. Named variables ({{customer_name}}) are also accepted and recommended for readability.
The template contains language commonly used in scam messages — requests for bank details, passwords, PINs, or language that impersonates official government/bank communications. Also triggered by fake urgency combined with financial requests.
💡 Never ask customers to 'share their OTP' — OTP templates should only say the code and that it shouldn't be shared. Never combine urgency language with requests for financial information.
You already have an approved (or pending) template with the same name. Meta does not allow two templates with identical names in the same WABA, even if the content is different.
💡 Use versioning in template names: order_confirm_v1, order_confirm_v2. Or use descriptive suffixes: order_confirm_cod, order_confirm_prepaid. Template names are lowercase_with_underscores, no spaces.
The template contains content that violates WhatsApp's Business Policy — alcohol advertising, tobacco, gambling, drugs, adult content, weapons, or politically sensitive content that Meta considers harmful.
💡 WhatsApp prohibits advertising alcohol, tobacco, gambling, prescription drugs, and adult content regardless of legality in your country. These categories cannot be submitted at all via Meta's standard BSP programme.
Meta requires sample values for every variable in your template. If you leave examples blank, or use placeholder examples like 'test', 'abc', or '123', Meta cannot evaluate the template and rejects it.
💡 Use real-looking example values that show Meta exactly what the final message will look like. Full names, real order numbers, realistic dates, actual product names. Never use 'test' or 'abc' as examples.
Meta does not publish an official banned-words list. However, based on real submission data from Indian businesses, these categories of language reliably trigger either rejection or slower review.
⚠️ These words don't automatically reject utility templates — they flag it for human review, which slows approval from 1–4 hours to 24–72 hours. For urgent template submissions, avoid all the above in utility templates.
Utility templates with factual, transactional language approve in 1–4 hours consistently:
Correct category selection is the single biggest variable in both approval speed and cost. Utility conversations cost ₹0.10–0.14. Marketing conversations cost ₹0.58–0.72 — 5× more. The difference matters at scale.
⚠️ The grey area: COD confirmation + prepaid upsell in the same message is Utility. Abandoned cart + discount code is Marketing. Order shipped + "here's 10% off your next order" is Marketing, not Utility. When in doubt, choose Marketing — it's better than a rejection that delays your automation going live.
Run this checklist before submitting any template to avoid the most common rejection reasons.
{"{"}1{"}"}, {"{"}customer_name{"}"}200+ templates already written to pass Meta review — copy and submit.
Browse all templates →Submit and manage templates programmatically via WA.Expert REST API.
API reference →Complete guide to template structure, buttons, headers, and best practices.
Read guide →WA.Expert reviews your template before submission and flags potential rejection reasons. Most templates submitted via WA.Expert approve on first attempt.