Why your WhatsApp message template was rejected
In short
Most WhatsApp template rejections are one of four things: the template was submitted in the wrong category, it contains a variable at the very start or very end of the body, its variable placeholders are not numbered in order from one, or it reads as promotional while claiming to be a utility message. Meta reviews most templates within minutes and does not explain the rejection in useful detail, so the fix is nearly always to reread the template against those four rules rather than to appeal.
Checked
Outside the 24-hour customer service window you cannot type a message to a customer — only send a template Meta has already approved. So a rejected template is not a delay. It is the feature not working.
Meta’s rejection reason is usually one word. Here is what it means.
The four things that are nearly always wrong
The category is wrong. Every template is Marketing, Utility or Authentication, and Meta re-reads your choice rather than trusting it. Utility means a message about a transaction the customer already has with you: an order, a booking, a delivery, a payment. The moment it mentions a discount or invites them to browse, it is Marketing. “Your order has shipped — and get 20% off your next one” submitted as Utility gets rejected or silently recategorised, which costs more, because Marketing is the expensive category.
A variable is at the start or the end. Meta rejects a body that begins or ends with a {{1}}. There must be text on both sides of every placeholder. Not negotiable, and it accounts for a startling share of rejections.
Variables are not numbered from one, in order. They must be {{1}}, {{2}}, {{3}} — sequential, starting at one, no gaps. Deleting the middle variable leaves {{1}} and {{3}}, which fails.
It reads like an advertisement in a utility costume. The judgement call, and the one people argue with. Meta is protecting an inbox people keep on their home screen because it is where their family is. A message that would be unwelcome there is refused whatever category it claims.
The other rejections
Too many variables for the length. Twelve words with four placeholders looks like a template designed to be filled with anything, which is what spam looks like. Write more fixed text.
Placeholder examples missing or unrealistic. Meta asks for a sample value per variable and reviews the template as if filled in. {{1}} = “test” gets rejected on grounds you will then not understand. Put a real-looking name in.
Duplicate content. The same body submitted twice under different names is refused, as is one differing only by punctuation.
A URL that does not match your business. A button linking to a domain unconnected to the verified business is refused, and resubmitting attracts attention you do not want.
The rule that matters more than any of them
An unresolvable variable should skip the person, not go out empty.
This is not one of Meta’s rules. It is one you have to enforce yourself, and most tools do not. Half of a real imported list has no first name, so Hi {{1}}, your order is on the way produces “Hi , your order is on the way”.
Meta usually rejects that at send time — but even when it does not, you have told the customer plainly that they are on a list. Give the variable a fallback (“there” is fine, “Customer” is not) or leave the people without a name out of the send.
Getting it approved the first time
- Write the fixed text first, completely, as though there were no variables. Then replace the parts that vary.
- Read it back and ask whether the customer asked for it. If the honest answer is no, it is Marketing.
- Give every variable a sample that looks like real data.
- Keep marketing and utility in separate templates. Splitting them is also cheaper: utility rates are a fraction of marketing rates.
- Submit one and wait. Approval usually takes minutes, and a systematic mistake is much cheaper to find after one than after twelve.
Meta remains the source of truth for a template’s status. If your software shows a template as approved and Meta does not, Meta is right — which is why templates should be read from Meta rather than tracked separately.
If you would rather start from something that already passes, the template library has templates for festivals, birthdays, appointments and orders, each checked against these rules.