If you want to message a customer on WhatsApp who has not written to you in the last 24 hours, you cannot just type something and send it. Meta requires a template - a message you submit in advance and that a reviewer approves before you can use it.
Most people discover this the day their first campaign fails. Then they discover the second problem: templates get rejected, and the rejection reason is usually a single vague line.
This post gives you 18 templates you can copy for the common cases, grouped by the category Meta expects, plus the specific reasons approvals fail.
The three categories, and why they decide your bill
Every template is submitted under one of three categories. Choosing wrongly is the single most common cause of rejection, and it also changes what you pay.
| Category | Use it for | Relative cost |
|---|---|---|
| Marketing | Offers, launches, re-engagement, anything promotional | Highest |
| Utility | Order, delivery, booking, payment and account updates for something the customer already did | Low |
| Authentication | One-time passcodes only | Low |
The rule of thumb that survives contact with reviewers: utility templates describe something the customer already initiated. Marketing templates try to start something new. An order confirmation is utility. "Your order shipped - here is 10% off your next one" is marketing, because of the second half.
From 1 October 2026 Meta also began charging for utility and service messages sent inside the 24-hour customer service window, after the first 1,000 service messages per business number per month. Category choice now affects your bill in more places than it used to.
Utility templates
These are the workhorses. They get approved quickly because the purpose is obvious.
1. Order confirmation
Hi {{1}}, thanks for your order. Order {{2}} is confirmed and we will let you know as soon as it ships. Total: {{3}}.
2. Order shipped
Hi {{1}}, your order {{2}} has been shipped. You can track it here: {{3}}. Expected delivery: {{4}}.
3. Out for delivery
Hi {{1}}, your order {{2}} is out for delivery today and should arrive by {{3}}. Our delivery partner may call you on this number.
4. Delivery completed
Hi {{1}}, your order {{2}} was delivered on {{3}}. If anything is wrong with it, reply to this message and we will sort it out.
5. Appointment confirmation
Hi {{1}}, your appointment with {{2}} is confirmed for {{3}} at {{4}}. Please arrive 10 minutes early.
6. Appointment reminder
Hi {{1}}, this is a reminder of your appointment tomorrow, {{2}} at {{3}}. Reply RESCHEDULE if you need a different time.
7. Payment reminder
Hi {{1}}, your payment of {{2}} for {{3}} is due on {{4}}. You can pay here: {{5}}.
8. Payment received
Hi {{1}}, we have received your payment of {{2}}. Receipt number {{3}}. Thank you.
9. Booking cancelled
Hi {{1}}, your booking {{2}} for {{3}} has been cancelled as requested. Any refund due will reach you within {{4}} working days.
10. Service request update
Hi {{1}}, your request {{2}} has been updated to {{3}}. Our team will contact you within {{4}} hours.
Authentication templates
Keep these plain. Meta is strict here and rejects anything that reads like marketing.
11. One-time passcode
{{1}} is your verification code.
12. OTP with expiry
{{1}} is your verification code. It expires in {{2}} minutes. Do not share it with anyone.
Two constraints that catch people out: authentication templates must be submitted under the authentication category, and Meta generally expects a copy-code button rather than asking the customer to select the digits by hand. No greeting, no company tagline, no emoji.
Marketing templates
These are the ones that get rejected most, so the wording matters.
13. New product launch
Hi {{1}}, we have just launched {{2}}. Have a look here: {{3}}. Reply STOP to opt out.
14. Limited-time offer
Hi {{1}}, {{2}} is available at {{3}} until {{4}}. Shop here: {{5}}. Reply STOP to opt out.
15. Abandoned cart
Hi {{1}}, you left {{2}} in your cart. It is still available: {{3}}. Reply STOP to opt out.
16. Re-engagement
Hi {{1}}, it has been a while. Here is what is new at {{2}}: {{3}}. Reply STOP to opt out.
17. Event invitation
Hi {{1}}, you are invited to {{2}} on {{3}} at {{4}}. Register here: {{5}}. Reply STOP to opt out.
18. Feedback request
Hi {{1}}, how was your experience with {{2}}? Tap a rating below - it takes a second.
Add quick-reply buttons to that last one and you have a working feedback loop with no typing required from the customer.
Quick-reply templates
A quick-reply template is an ordinary template with up to three buttons attached. When someone taps a button, your system receives the button payload instead of free text, which is what lets a bot branch reliably.
Hi {{1}}, your appointment is on {{2}} at {{3}}. Does that still work?
[Yes, confirm][Reschedule][Talk to an agent]
The trick is to keep the labels short and mutually exclusive. Buttons longer than about 20 characters get truncated on smaller phones, and near-identical options ("Change time" and "Reschedule") produce ambiguous data on your side.
Why templates get rejected
In rough order of how often they occur:
Promotional wording in a utility template. The single biggest cause. Any discount, offer or invitation to browse makes the template marketing, whatever else it contains.
Variables at the very start or end. A template that opens with {{1}} and nothing else gives the reviewer no context. Put a word before it: Hi {{1}} rather than {{1}}.
Placeholder sample values. Meta asks for an example value for each variable. Submitting {{1}} as its own sample, or leaving it blank, is a fast rejection.
Content the reviewer cannot map to a real use case. Vague templates such as "Hi {{1}}, please check {{2}}" get refused because nothing indicates what the message is for.
Missing opt-out on marketing. Not always mandatory, but including "Reply STOP to opt out" on marketing templates measurably improves approval odds and protects your quality rating.
Language mismatch. The declared language has to match the actual text. An English template submitted as hi (Hindi) is rejected even when the wording is perfect.
After approval: what actually breaks
Approval is not the finish line. Three things go wrong afterwards, and none of them are template problems:
Sending to people who opted out. If someone replies STOP and your system keeps them in the next campaign, your quality rating falls and Meta eventually restricts the number. Opt-out has to be enforced at send time, not merely recorded.
Sending free-form messages outside the 24-hour window. Once that window closes you can only send a template. A free-form message is simply rejected, usually with an error that does not explain why.
Not watching quality rating. It drops before a restriction, not after. By the time messages stop delivering, the warning has been visible for days.
Build and export your own
You can copy any of the above and adapt it. If you would rather see the phone preview while you write - including how buttons and variables render - the WhatsApp message template builder does that in the browser and exports the JSON for submission. It is free and needs no signup.
Two related tools worth knowing about:
- WhatsApp message preview - check formatting and line breaks before you submit
- WhatsApp chat widget generator - the floating chat button that starts these conversations in the first place
The short version
Pick the category honestly, write for a reviewer who knows nothing about your business, give realistic sample values, and put a word in front of your first variable. That clears most rejections.
Then make sure the systems around the template - opt-out, the 24-hour window, quality rating - actually work. A perfectly approved template still fails if the send path ignores an opt-out.