Why your WhatsApp template was rejected, and the fix
INCORRECT_CATEGORY, silent re-categorisation from utility to marketing, a body that ends with a variable, missing samples. The rejection reasons we hit most often across a hundred-odd live templates, and what we changed each time.
We have submitted well over a hundred WhatsApp message templates for live client accounts — clinics, restaurants, developers, schools, a football venue, a charity. Most are approved inside ten minutes. The ones that are not fail for a short list of reasons, and the list is not the one in the documentation.
This is that list, in the order we hit it.
1. The category, which is most of them
INCORRECT_CATEGORY is the rejection you will see most. It means Meta read your template and decided it belongs in a different category than the one you submitted — almost always that your "utility" template is really marketing.
The rule of thumb that has held for us: a utility template is about a transaction that already exists. An order the customer placed. An appointment they booked. A claim they filed. If the message would make no sense to someone who has not transacted with you, it is utility. If it would still make sense to a stranger, it is marketing.
Things that look utility and are not:
- "Our new autumn menu is live — book a table." No existing transaction. Marketing.
- "Doors open today at 8pm." Even attached to an event, an announcement to a list is marketing.
- "We miss you — here is 10% off." Obviously marketing, but it gets submitted as utility constantly because it is sent to past customers.
Things that look marketing and are not:
- "Your appointment with Dr Hana is tomorrow at 4pm. Reply 1 to confirm." Utility.
- "Your order 4471 has shipped." Utility.
- "The doctor asked for a follow-up. Would you like the next available slot?" Utility, and approved for us as such — because it refers to a specific clinical instruction on a specific file.
The part that catches people
The category locks to the template name, across every language. Submit weekly_update in Arabic, get it approved as utility, then submit the English version of the same name with copy that reads more promotional, and Meta can re-categorise the name — quietly moving your already-approved Arabic version to marketing too. We have watched a utility template become a marketing template overnight without a single rejection email. Check the category of your live templates after you add a language; do not assume.
There is no appeal that works reliably. Rewriting and resubmitting under a new name is faster than arguing.
2. A body that starts or ends with a variable
A template body may not begin or end with a {{1}}. It reads as unbounded to the reviewer, and it is an automatic rejection.
The fix is one word of scaffolding:
- Rejected:
{{1}}, your booking is confirmed for {{2}} - Approved:
Hello {{1}}, your booking is confirmed for {{2}}. See you then.
The same applies to two variables next to each other with nothing between them.
3. Samples that do not look like the real thing
Every variable needs a sample value, and the samples are read. A template whose sample for {{1}} is test or xxx is more likely to be rejected than one whose sample is Mariam. Give the reviewer the message as a customer would actually receive it.
4. A button the text does not justify
A call-to-action button — "Book now", "Track order" — has to follow from the body. A body that says nothing about booking, with a "Book now" button under it, reads as an advertisement with a utility costume on. Either the body earns the button or the button goes.
Quick-reply buttons have their own trap: no emoji in button labels. We lost a submission to that one.
5. Copy that promises what the business has not said
A reviewer will reject a template that asserts something the business has not published anywhere — a delivery time, a guarantee, a refund window. This is also a good rule independently of Meta: if the template says 48 hours, the 48 hours should be on the website.
What we do now, as a matter of course
Write the template from the client's own words. A published FAQ, a terms page, a pinned comment. It is faster to get approved and it is true.
Submit utility first, and make it earn the category. Name the transaction in the first line — the order number, the appointment, the branch. The reviewer needs to see the existing relationship in the first sentence, not the third.
One name, one category, one meaning. Never reuse a template name for a different job, in any language.
Test on our own number before anyone else's. Every template, every time, including the ones we are sure about. The rendering of a variable, a button that does not fit, an Arabic line that breaks in the wrong place — all of it shows up on a real phone and none of it shows up in the submission form.
Keep an open window as the fallback. If a template is stuck in review and the customer wrote to you within 24 hours, you do not need the template at all. Plenty of "urgent" template submissions are solving a problem the customer service window already solves.
Helm writes, submits and runs the template layer as part of building a workflow — usually approved the same day, and never sent to a customer before it has been sent to us. If your templates keep bouncing, tell us what you are trying to send.
Helm builds the workflow that does this work in production, in your channels and your systems.
Start a workflow ↗All posts ↗