Skip to main content
Every template is reviewed by Meta before it can be sent. Most are decided in minutes; the rejections have specific, nameable causes, and almost all of them are formatting rather than judgement.

The process

1

You write it

Body text, a category, a language, and example values for every blank.
Meta requires an example value for every variable at creation time. A template submitted with {{1}} and no sample of what {{1}} looks like is rejected before a human sees it.
2

Meta reviews it automatically

A machine-learning review decides most templates within minutes.
3

Or a human does

Anything the automated pass cannot triage is routed to a person, which can take up to 24–48 hours.
Submit templates before you need them. A campaign planned for Friday and a template submitted Friday morning is a campaign that may not go out.
4

Approved, or rejected with a reason

Approved templates can be sent. Rejected ones cannot, and the reason code tells you what to change.

Why templates get rejected

INVALID_FORMAT — the most common, and always fixable

Nothing to do with your wording. Four causes:
A template may not begin or end with a variable. This one catches almost everybody, because it is not intuitive — the rule exists so a message cannot be made to look like it came from somebody else. Put a word before and after.

TAG_CONTENT_MISMATCH — the category does not match the content

You submitted a promotional message as utility, or the language you declared is not the language of the text. Fix by re-categorising honestly. See the categories below.

ABUSIVE_CONTENT — a policy violation

Content that breaches Meta’s Terms of Service, Commerce Policy or Business Policy. In practice this catches:
  • Threatening legal action, or threatening to publicly shame a customer
  • Anything in a prohibited category — Meta’s Commerce Policy bars a specific list including alcohol, tobacco, weapons, drugs and adult products
  • Requesting sensitive information (full card numbers, passwords) in the message body

Other frequent causes

bit.ly, tinyurl and similar are frequently rejected — a shortened link hides the destination, and Meta treats that as a phishing signal. Use your own domain.
Hi {{1}}, welcome to [Company Name] — the bracketed placeholder is not a variable and reads as an unfinished template.
Same content under a different name.
Rejected as low quality, particularly where it makes the sender look fraudulent.
A template declared en whose body is Hindi. Declare the language you actually wrote.

Choosing the right category

The test for utility is “did the customer do something that makes this message expected?” An order confirmation follows an order. A “we miss you” message follows nothing, and is marketing however you label it.

Authentication templates are special

Meta writes and localises the wording for one-time passwords itself. The editor copies Meta’s text exactly rather than letting you write your own — rewording it gets the template rejected. Authentication templates are also gated behind business verification.

Limits on templates themselves

Editing an approved template

Editing sends it back through review. The previous version keeps working until the new one is decided, so an edit does not take a working template offline — but a rejected edit means you are still on the old wording.
For anything you send often, treat an approved template as immutable and create ..._v2 instead. That way a rejected change never blocks a working message, and you can compare how the two perform.

After approval, it can still be taken away

Approval is not permanent. Meta keeps scoring how customers react, and a template that gets blocked or reported can be paused and eventually disabled. See Quality and limits.