Writing an order confirmation template Meta will approve

The rules are not obvious and the rejection messages are terse. Here is what Meta actually checks, why most first submissions fail, and what the working version looks like.

The short version: register the message as a utility template, not marketing — the purchase is the consent, and utility is the category that survives. Number your variables {{1}}, {{2}} with no gaps, and give exactly one example value per distinct number, not per occurrence. Pick a language code from Meta's list; Darija is not on it, so Darija goes inside an Arabic template. If all you need is the order confirmation, you do not have to write one: CreaScale ships a ready-made template in French, Arabic and English with Confirm / Cancel buttons and submits it to Meta for you.

You may not need to write one

Before the rules, the shortcut. With your WhatsApp number connected, CreaScale submits a ready-made order confirmation to Meta on your behalf, under one template name, in French, Arabic and English. It follows every rule on this page — utility category, three variables numbered without gaps, one example per variable, valid language codes — and it carries two quick-reply buttons, Confirm and Cancel:

Hi {{1}}, we received your order {{2}}, total {{3}}. Tap a button below to confirm or cancel.  [ Confirm ] [ Cancel ]
{{1}} the customer's name · {{2}} the order number · {{3}} the total, in the order's currency. The French and Arabic variants say the same thing.

Meta's documentation says the review can take up to 24 hours. The three languages count as one template toward your plan's cap, because they share a name. Keep it, edit the wording, or write your own from scratch using the rules below — the ready-made one is a default, not a constraint.

Category first: utility, not marketing

Meta sorts templates into utility, marketing and authentication, and the choice decides what consent you need before you may send.

A utility message follows from something the customer did — they placed an order, so telling them about that order is expected. The purchase is the consent.

A marketing message needs its own, separately recorded permission. And here is the trap that costs numbers: the fact that a customer once messaged you is not marketing consent. Systems that treat any inbound message as blanket permission end up promoting to everyone who ever asked a question, which is the fastest known route to a blocked number.

So keep the confirmation strictly transactional. The moment you add a discount code to it, it is a marketing template, and it needs marketing consent.

Variables: the two rejections everybody hits

Placeholders are numbered {{1}}, {{2}}, {{3}}, and Meta substitutes them by position. Two rules follow, and breaking either gets the submission bounced:

CreaScale counts variables exactly the way Meta does, in the editor, before you submit — which is the difference between a template approved on the first try and three rejections in a row.

Language codes, and the Darija question

A template is registered against one language code, and Meta accepts about thirty. Your store may need several: one approved variant per language you sell in. The ready-made confirmation is submitted in fr, ar and en under one name, so a store that sells in all three starts covered.

Moroccan Darija is not one of the codes. This is the single most common blocker for Moroccan sellers, and the answer is not to give up on Darija — it is to write the Darija text inside a template registered as ar. The customer reads Darija; Meta sees a valid Arabic template. The same applies to other dialects without their own code.

Which variant a given buyer receives is then resolved per recipient: an Arabic-script name selects Arabic, then the locale the store recorded, then the destination country, then your store default.

What a working confirmation contains

Keep it factual, keep it short, and make every claim verifiable from the order:

What to leave out: discount codes, upsells, star ratings, urgency. Each one converts a utility template into a marketing template and changes the consent you need.

After approval: the checks that still apply

An approved template is permission to send, not an obligation. Before each message goes out, CreaScale verifies that the merchant switch is on, that the template is still in the approved state, that the category matches the consent on file, and that neither the daily nor the monthly cap has been reached. A contact that fails any of these is skipped rather than messaged.

Frequently asked questions

How long does Meta take to approve a template?

Meta's documentation says the review can take up to 24 hours; a clean utility template is often through sooner. Rejections are almost always structural — wrong category, a variable-numbering gap, or a mismatched example count — rather than editorial.

Can I put a discount code in the order confirmation?

You can, but it stops being a utility template. It becomes marketing, and marketing requires a separate recorded opt-in from that customer. Keeping the confirmation purely transactional is what keeps it sendable to every buyer.

Do I need a separate template per language?

Yes — one approved variant per language code you sell in. CreaScale submits the ready-made confirmation in French, Arabic and English for you, under one name, and picks the right variant per recipient rather than per store. Write your own only if you want different wording, and then one variant per language again.

Why was my template rejected for example values?

Almost certainly because a variable appears more than once in the body and you supplied one example per occurrence. Meta wants one example per distinct number.

How many templates do I get?

Unlimited template names on every plan (Pro and above) — the ready-made confirmation in three languages counts as one. upward. Above the cap the server declines the creation rather than silently ignoring it.

Can I change the ready-made confirmation?

Yes. Edit the wording in the editor and the new version is submitted to Meta. A variant Meta rejected or disabled is never resubmitted on its own: you correct it, then send it again.

Confirm your COD orders on WhatsApp, automatically

Connect your store once. Every new order triggers a ready-made WhatsApp confirmation with Confirm and Cancel buttons, in your customer’s own language — and the answer lands back in Shopify. You type nothing.

Get started — $49/mo