WhatsApp template approval and rejections
A WhatsApp message template is a pre-approved message you can send outside the 24-hour customer service window, and Meta must review it before you can use it. Meta says a decision can take up to 24 hours. Most rejections come from a handful of mistakes: a wrong category, badly formed variables, or wording that reads as promotional, threatening or scammy.
What is a WhatsApp message template?
A template is a message with fixed text and numbered variables, such as Hi {{1}}, your plan renews on {{2}}.. You create it on a WhatsApp Business Account (WABA), Meta reviews it, and once it is approved you send it by name and language with values for each variable.
You need templates to start a conversation, because free-form messages only work while a customer service window is open. According to Meta's send messages page, when that window closes you can only send pre-approved template messages. The window rules are in the 24-hour window post.
Which categories can a template have?
Meta groups templates into marketing, utility and authentication. Per Meta's template categorization page:
- Marketing templates cover a wide range of goals, from generating awareness to driving sales and retargeting customers.
- Utility templates follow up on user actions or requests, since these messages are typically triggered by user actions.
- Authentication templates verify a user's identity. Meta says only authentication templates can be used to send a one-time passcode.
Meta also states that marketing includes templates with mixed content (an order update with a promo, for example) and templates where the content is unclear, such as a body that is only {{1}}.
For utility, Meta sets two tests: the message must be non-promotional, and it must also be specific to or requested by the user, or essential to them. Authentication is, in Meta's words, the most restrictive category.
Why does the category matter?
The category sets what Meta charges for each delivered message. According to Meta's India rate card effective 1 Oct 2026, a marketing message costs ₹0.8631, a utility message ₹0.115 and an authentication message ₹0.115, per message. A utility template that quietly becomes marketing costs about seven and a half times as much per message.
Meta can change a category after approval. Its categorization page says that if you have been warned for template categorization misuse, there is no 24 hour notice before a template moves from UTILITY to MARKETING, and the change is instant. WhaBuzz passes the change on as a template.category event, so watch for it. The rate cards are explained in the pricing post.
How long does Meta take to approve a template?
Meta's template review page puts an upper bound on it:
It can take up to 24 hours for an approval decision to be made.
The same page says the content goes through a combination of automated systems and manual review. Plan for it: do not create a template the hour before a campaign. Submit it a day ahead, and treat anything faster as a bonus.
The result reaches you in three places per Meta: WhatsApp Manager, an email to Meta Business Suite admins, and a template status webhook. If approved, the status is APPROVED in the API and you can start sending. If rejected, you can edit and resubmit.
What are the common reasons for rejection?
Meta's template review page lists mistakes to avoid. The parameter ones are the most common, and all are quick to fix:
- Variables with missing or mismatched curly braces. The format is
{{1}}. - Special characters inside a variable, such as
#,$or%. - Variables that are not sequential, for example
{{1}},{{2}},{{5}},{{4}}. - Too many variables for the length of the message.
- A body that starts or ends with a variable. Meta: "The message template cannot start or end with a parameter (dangling parameters are not allowed)."
- A duplicate. A template with the same body and footer wording as an existing one is rejected.
The content ones are policy issues: wording that breaks WhatsApp's Commerce Policy, requests for sensitive identifiers such as full card or national ID numbers, and potentially abusive or threatening content, which Meta illustrates with threatening a customer with legal action or public shaming.
How do the rejection reasons read in the API?
The status webhook carries a reason. WhaBuzz keeps a short plain-language note for each one beside Meta's own text in the console. These are WhaBuzz's notes, not Meta's, and the console never blocks a submission on them:
| Meta reason | What it usually means |
|---|---|
INCORRECT_CATEGORY, TAG_CONTENT_MISMATCH | Content does not fit the chosen category, often a utility template with an offer or upsell line. Remove the line or submit as marketing. |
INVALID_FORMAT | Variable problems: one at the start or end, out of sequence, special characters, or no example value. |
ABUSIVE_CONTENT | Pressure or threat wording, or a request for sensitive identifiers. |
PROMOTIONAL | Promotional content in a category that does not allow it, or an offer that breaks the Commerce Policy. |
SCAM | Prize or urgent-payment wording, or links that hide the destination, such as shorteners. |
NONE | Not a rejection. Meta uses it when a template is paused, usually after low recipient feedback. |
How do you create a template and track the review with WhaBuzz?
WhaBuzz passes Meta's template bodies through unchanged. Create one with POST /v1/templates, passing the waba_id (this example is from the templates guide):
curl -X POST https://api.whabuzz.com/v1/templates \
-H "Authorization: Bearer $WHABUZZ_KEY" -H "Content-Type: application/json" \
-d '{
"waba_id": "26059971920328384",
"name": "renewal_reminder",
"language": "en",
"category": "UTILITY",
"components": [
{ "type": "BODY", "text": "Hi {{1}}, your plan renews on {{2}}.",
"example": { "body_text": [["Kerry", "31 Oct"]] } }
]
}'bashMeta answers with the template id, a status that is usually PENDING, and the category. The review result arrives as a template.status event: APPROVED, REJECTED with Meta's reason, PAUSED or DISABLED. Rejection reasons are also kept in status_reason when you list or sync. Call POST /v1/templates/sync once after connecting an existing WABA to import what is already there.
Note the example value: a missing example is a common cause of INVALID_FORMAT. If a send later fails because the template is unapproved or paused, Meta's error comes back unchanged, and the error codes post covers 132001, 132015 and 132016.
Frequently asked questions
How long does WhatsApp template approval take?
Meta says it can take up to 24 hours for a decision. Automated systems and manual review are both involved.
What are the WhatsApp template categories?
Marketing, utility and authentication.
Why was my utility template rejected or made marketing?
Usually because it contains promotional or persuasive content, or is not specific to something the user did or asked for. Meta treats mixed content and unclear content as marketing.
Can I edit a rejected template?
Yes. Meta's review page says a rejected template can be edited and resubmitted.
Does WhaBuzz review or block templates?
No. Meta decides, and WhaBuzz reports the outcome. The console shows a note next to Meta's rejection reason but never blocks a submission.