In this article9
- The first decision: the category, not the text
- Why the category is a financial decision, not just a classification
- What passes in each category
- The reasons for rejection, in order of how often they happen
- The limits that get templates rejected before anybody reads them
- Variables and samples: what the reviewer actually sees
- What happens between submission and result
- From template quality to your sending limit
- A checklist before you submit for review
If you have arrived here after a rejection just now: open the rejection notice and read the reason named in it before anything else. Meta returns a specific reason with every rejection, and the right edit depends on it alone. Resubmitting without reading the reason is the trap that wastes days.
The first decision: the category, not the text
Every template is submitted under one of three categories, and that choice is the most consequential decision in the whole template. The category determines what you are allowed to say, andwhat you pay per message. And the single most common reason for rejection is a marketing message submitted under the utility category — usually because somebody saw the price and saw that utility was cheaper.
Which category does your template belong to?
decisionUtility
- Order confirmation, an invoice, a shipment update, an appointment reminder
- The text refers to the transaction itself, by its number or its date
- No offer, no discount, no invitation to buy something more
Marketing
- Offers, launches, abandoned-basket recovery, subscription renewals
- Any message whose purpose is to persuade rather than to inform
- Needs the customer’s prior consent to marketing contact
Why the category is a financial decision, not just a classification
The prices below are Meta’s official prices for the Saudi market, effective from 2026-04-01. They are paid to Meta directly and are separate from any platform’s subscription, and they are why the category is not an administrative detail.
| Category | Cost per message | Over 10,000 messages |
|---|---|---|
| Marketing | 0.19 SAR | 1,877.00 SAR |
| Utility | 0.04 SAR | 401.00 SAR |
| Authentication (verification codes) | 0.04 SAR | 401.00 SAR |
The gap between marketing and utility in the Saudi market is roughly 4.7 times per message. Over 10,000 messages a month that becomes a difference of 1,476.00 SAR in a single month. To work it out on your own numbers, use the pricing calculator, and for the full model see the guide to Meta’s pricing.
And approval is not the end of the story. Meta reclassifies templates after approval when it becomes clear the content does not match the category, so a utility template moves into marketing and you start being charged its price. The text does not change; the bill does.
What passes in each category
The table below is the content boundary in practice. Note the last row: verification codes are not an option inside either category — they have a third category of their own, and sending them outside it is a policy breach, not merely a misclassification.
A template’s content against its category
reference| Utility | Marketing | |
|---|---|---|
| Confirming an order, an invoice or a shipment updateIt passes in both categories — but you pay the marketing price for nothing | Yes | Yes |
| A reminder of an existing appointment or booking | Yes | Yes |
| A discount code or a seasonal offer | No | Yes |
| An invitation to browse new products | No | Yes |
| Abandoned-basket recoveryThe customer did not complete something, so the message persuades rather than informs | No | Yes |
| A promotional phrase inside utility text“Special offer” inside an order confirmation reclassifies the whole template | No | Yes |
| An OTP verification codeIt has a third category of its own: authentication | No | No |
The reasons for rejection, in order of how often they happen
This is the list we see recur. Ordered from most common to least, and each cause has one specific edit that fixes it — not a rewrite of the template from scratch.
| The reason | How it shows up | The edit that fixes it |
|---|---|---|
| The category does not match the text | A promotional message sent under the utility category — the classic case | Resubmit the same template under marketing, or remove the promotional element and keep it utility |
| A variable at the start or end of the text | The text begins with {{1}} or ends with {{2}} with no words around it | Add at least one word before the first variable and after the last: “Hello {{1}}” rather than “{{1}}” |
| Two variables side by side | {{1}} {{2}} with no text between them | Separate them with a word or meaningful punctuation, or merge them into one variable |
| A missing or unrealistic sample | The sample field is empty, or contains “text”, “123” or “test” | Write something that looks real: a customer’s name, an order number in your actual format, a date as it will appear |
| Promotional wording inside a utility template | “Don’t miss out”, “offer ends today”, “buy now” inside an order confirmation | Delete the phrase — or move the template to marketing if that is the heart of the message |
| An invalid button URL | A URL with no https, or a variable in the middle of the URL, or a shortened link hiding the destination | Write the URL in full with its protocol, and put the variable at its end only |
| The display name is not approved yet | Templates are rejected one after another while the customer-facing display name is still under review | Wait for the display name to be approved first, then resubmit the templates together |
| An unverifiable claim | Financial guarantees, promises of profit, wording that resembles scam messages | Rewrite it to what you can prove, and remove any promise of a return |
The limits that get templates rejected before anybody reads them
Part of rejections has nothing to do with content at all: the template exceeds a formal limit. Those limits are fixed and known, and we check them in the platform before submitting to Meta, so the objection reaches you from a screen you understand rather than a terse API error.
| Element | Limit |
|---|---|
| Message body | 1,024 characters — and only 600 in limited-time offer templates |
| Text header | 60 characters, and one variable at most |
| Footer | 60 characters |
| Button text | 25 characters |
| Button URL | 2,000 characters |
| Number of buttons | 10 in total: two URL buttons at most, one call button, one copy-code button |
| Button order | Quick-reply buttons are grouped together and never interleaved with the others |
| Carousel cards | From two cards to 10, with 160 characters of card text |
| Carousel consistency | Every card carries the same media type and the same buttons in the same order — only the values differ |
Variables and samples: what the reviewer actually sees
A variable is not space for free writing; it is a slot for one value of a known shape: a name, an order number, a date, an amount. And the review does not see your database — it sees the text with the samples in place of the variables. So the sample is the template as the review will read it, and as the customer will read it.
- A realistic-looking sample. “Mohammed”, “SA-10428” and “14 September” read as a real message. “text”, “xxx” and “test” make the sentence meaningless, and read as an unfinished template.
- A sample matching the type of value. Do not put a name in the order-number slot because it is “only an example” — the reviewer infers from the sample what you will actually send.
- Sequential variables. Start at {{1}} and carry on with no gaps. Jumping from {{1}} to {{3}} is a formal error refused before the meaning is read.
- One variable in a URL, at its end. The accepted form is a fixed URL ending in one variable, not a variable tucked into the middle of the path.
- No variable in the footer. The footer is fixed text — any attempt to personalise it is rejected.
What happens between submission and result
The review is not a black box. An automatic check first, of shape, category and wording, then a human review of whatever the automatic check escalates — and that is what takes time. Knowing that order is what stops you resubmitting two minutes later.
A template’s cycle: submit → review → rejection → fix → resubmit
sequence- 1You submit the template for reviewThe template enters “under review” and cannot be sent with. Your other approved templates carry on as normal.
- 2An automatic check of the shape and the categoryIt checks the formal limits, where the variables sit, and whether the content matches the chosen category. Most templates are settled here within minutes.
- 3A human review where neededTemplates carrying a financial claim, suspicious wording or a questionable category are escalated to it. This is where the hours of waiting appear, and they are normal.
- 4The result: approval, or rejection with a named reasonA rejection always comes with one specific reason. Read it literally and match it against the list above before you touch the text.
- 5Fix that reason alone, then resubmitOne targeted edit, one submission. If the same reason comes back, the problem is the category or the substance of the message, not the wording.
From template quality to your sending limit
Templates do not live apart from the number. Every message you send with an approved template feeds the number’s quality rating, which is built on what recipients do: block, report, ignore. And the rating in turn governs your daily messaging limit.
WhatsApp Manager — the number’s quality rating
reference- A promotional template in disguise costs you twice. It sometimes passes review, then collects blocks and reports because the customer did not expect it — and the rating falls.
- A low rating cuts your sending limit. And a low limit means a campaign that never finishes, not just dearer messages.
- An approved template can be disabled. A rise in reports on one specific template stops it, even if it has been approved for months.
- The fix is not in the text. If the rating falls, the right route is cleaning up your send lists and reducing frequency, not rewriting the template.
The tiers and how to raise the limit step by step are in the messaging-limits guide.
A checklist before you submit for review
- The category matches the substance of the message — apply the “delete the promotional part and read what is left” test.
- The text neither begins nor ends with a variable, and no two variables sit side by side.
- Variables run in sequence from {{1}} with no gaps, and each has a realistic-looking sample.
- URLs are complete with their protocol, and the variable — if there is one — is at the end of the URL.
- The text is inside the limits: the body, the header, the footer, and the button labels.
- The customer-facing display name is approved, not under review.
- You read the template aloud with the samples filled in and it sounded like a proper sentence.
How long does template review usually take?
Most templates are settled within minutes, because the first check is automatic. What takes longer are the templates the automatic check escalates to a human review — usually those carrying a financial claim, wording that resembles a scam, or a category that does not match the text. Do not judge your template before twenty-four hours have passed, and do not resubmit it in the meantime, because that puts you back at the end of the queue.
I sent a promotional message inside a utility template and it was approved. Did I get away with it?
No. Approval is not the end. Meta reclassifies templates after approval when it becomes clear the content does not match the category, so the template moves into marketing and you are charged marketing prices from that moment — without a word of the template changing. The difference shows up in the bill, not on the templates screen.
What is the difference between a template being rejected and being disabled?
Rejection happens before approval and means the template never entered service. Disabling happens to an approved, working template when the block or report rate on its messages climbs. You fix the first by editing the text; the second is not fixed by text alone, because its cause is recipient behaviour — you have to deal with your send lists and your frequency before anything else.
Can I edit an approved template instead of creating a new one?
Yes, approved templates can be edited, but any edit to the text or the buttons sends the template back to review. So never edit a working template hours before a campaign: create a new version under a different name, wait for it to be approved, then use it. The old template stays usable the whole time.
The template was rejected for “INVALID_FORMAT” and the text is perfectly fine. Where is the problem?
That reason is not about the meaning of the text but its shape. The three practical causes: a variable at the very start or end of the text, two variables side by side with no words between them, or non-sequential variable numbering. Add to those the buttons: a URL missing its protocol, or a variable in the middle of a URL rather than at its end. Usually putting one word before the first variable or after the last is enough to get the template through.
Does a rejected template affect my number’s quality rating?
A rejection in itself does not affect the quality rating — the rating is built on how recipients react to messages that actually reached them: blocks, reports and being ignored. But the behaviour that causes a rejection is the same behaviour that lowers the rating later if it does get through. The template review rejected for being too promotional is the same template customers would have blocked.



