WhatsApp template examples: the short version
A WhatsApp message template is a pre-approved message, with a required body and optional header, footer and buttons, that a business can send outside the 24-hour customer service window. Meta sorts every template into one of three categories: utility (non-promotional and tied to the user's own order, account or request), marketing (anything promotional, plus anything mixed or unclear), and authentication (one-time passcodes only, using Meta's fixed wording).
Last verified: November 2026 against Meta's template categorization guidelines, template components reference and template review rules.
Below are 26 copy-ready templates grouped by use case. Each shows the name, category, every component, the sample values to submit, and why it lands in that category.
The examples use positional variables ({{1}}, {{2}}). Meta also supports named variables such as {{first_name}} if you set parameter_format to named; the content rules are the same. If a template has already been rejected, our rejection guide covers the causes and the appeal process.
The three categories, as Meta defines them
| Category | Meta's test | Typical messages |
|---|---|---|
| Utility | Must be non-promotional and either specific to or requested by the user (their order, account, service or transaction) or essential to them, such as a safety or fraud alert | Order and delivery updates, appointment reminders, billing notices, account alerts, specific feedback requests, opt-in confirmations |
| Marketing | Everything promotional, plus any template with mixed utility and marketing content, or whose content is unclear (such as just {{1}}) | Offers, launches, abandoned carts, back-in-stock, renewal offers, re-engagement, app installs, greetings |
| Authentication | One-time passcodes for identity verification, built from Meta's preset text with a copy-code or one-tap button; no URLs, media or emojis, parameters up to 15 characters | Login codes, sign-up verification, account recovery, transaction confirmation codes |
Four rules from Meta's guidelines decide most borderline cases:
- One promotional element makes the whole template marketing. An order update with a discount code attached is a marketing template.
- Retargeting is marketing even when the user asked for it. Meta lists abandoned carts, saved-search matches and renewal pushes as marketing "even if requested by users". That includes back-in-stock alerts.
- Feedback requests are utility only when tied to a specific order or interaction. A generic "tell us how we're doing" survey will not be approved as utility.
- Only authentication templates may carry a one-time passcode. Marketing and utility templates cannot be used to send OTPs.
Category also determines what you pay per message, and since April 9, 2025 a template submitted as utility that Meta judges to be marketing is approved as marketing rather than rejected. Approved templates are also re-checked later and can be moved to marketing automatically. Compare costs with the WhatsApp API cost calculator; how service-window billing changed in October 2026 is covered in our billing explainer.
Utility templates: orders and delivery
1. Order confirmation
Name: order_confirmed_v1
Category: UTILITY
Header: Order received (text)
Body: Thanks, {{1}}. We have received order {{2}} for {{3}} and are getting it ready. We will message you again when it ships.
Footer: Reply HELP to reach our team
Buttons: [URL] View order -> https://shop.example.com/orders/{{1}}
Samples: {{1}} = Priya, {{2}} = #48213, {{3}} = $64.90Why utility: it confirms a specific transaction the user just made and contains nothing promotional.
2. Shipping update with tracking
Name: order_shipped_tracking
Category: UTILITY
Body: Good news, {{1}}: order {{2}} left our warehouse today with {{3}}. Your tracking number is {{4}} and the estimated delivery date is {{5}}, give or take a day.
Buttons: [URL] Track package -> https://track.example.com/{{1}}
Samples: {{1}} = Daniel, {{2}} = #48213, {{3}} = UPS, {{4}} = 1Z999AA10123456784, {{5}} = Thursday 14 MayWhy utility: it updates the status of the user's own order with order-specific details.
3. Out for delivery (location header)
Name: out_for_delivery_map
Category: UTILITY
Header: LOCATION (address and coordinates supplied at send time)
Body: Your order {{1}} is out for delivery and should arrive between {{2}} and {{3}} today. The map above shows the delivery address on file.
Buttons: [QUICK_REPLY] Change delivery time
Samples: {{1}} = #48213, {{2}} = 2:00 PM, {{3}} = 4:00 PMWhy utility: location headers are allowed in utility and marketing templates, and this one marks the user's own delivery.
4. Item backordered
Name: order_item_backordered
Category: UTILITY
Body: Sorry, {{1}}. The {{2}} in order {{3}} is temporarily out of stock at our warehouse. We expect to ship it by {{4}}. If you would rather cancel that item for a full refund, tap below.
Buttons: [QUICK_REPLY] Keep my order
[QUICK_REPLY] Cancel this item
Samples: {{1}} = Aisha, {{2}} = blue rain jacket (M), {{3}} = #48213, {{4}} = 22 MayWhy utility: it reports a problem with a specific order and offers the user a choice about it, with no upsell.
5. Refund processed
Name: refund_processed
Category: UTILITY
Body: We have received your return for order {{1}}. A refund of {{2}} has been issued to your {{3}} and usually appears within 5-10 business days.
Samples: {{1}} = #48213, {{2}} = $64.90, {{3}} = Visa ending 4242Why utility: it closes out a specific transaction.
6. Delivery feedback for a specific order
Name: delivery_feedback_order
Category: UTILITY
Body: Your order {{1}} was delivered on {{2}}. Was everything as expected? Let us know with one tap so we can fix any problem with this delivery.
Buttons: [QUICK_REPLY] All good
[QUICK_REPLY] Something was wrong
Samples: {{1}} = #48213, {{2}} = 14 MayWhy utility: Meta allows feedback surveys as utility when they reference a specific order or interaction. Add a coupon or "shop again" link and it becomes marketing.
Utility templates: appointments and bookings
7. Appointment reminder
Name: appointment_reminder_24h
Category: UTILITY
Header: Appointment tomorrow
Body: Hi {{1}}, this is a reminder of your {{2}} appointment with {{3}} tomorrow, {{4}}, at {{5}}. Please arrive 10 minutes early.
Footer: Northside Dental Clinic
Buttons: [QUICK_REPLY] Confirm
[QUICK_REPLY] Reschedule
[PHONE_NUMBER] Call clinic -> +15550100200
Samples: {{1}} = Tom, {{2}} = dental cleaning, {{3}} = Dr. Alvarez, {{4}} = Tuesday 12 May, {{5}} = 9:30 AMWhy utility: it concerns a booking the user made, with the booking's details in the body.
8. Booking confirmation
Name: booking_confirmed
Category: UTILITY
Body: Your table for {{1}} at {{2}} is confirmed for {{3}} at {{4}}. If your plans change, you can manage the booking below.
Buttons: [URL] Manage booking -> https://book.example.com/r/{{1}}
Samples: {{1}} = 4 guests, {{2}} = Harbor Kitchen, {{3}} = Friday 15 May, {{4}} = 7:30 PMWhy utility: it confirms a reservation the user requested.
9. Rescheduled or cancelled by the business
Name: appointment_changed
Category: UTILITY
Body: We are sorry, {{1}}. Your {{2}} session on {{3}} has to move because the instructor is unavailable. Your new time is {{4}}. Reply below if that does not work for you.
Buttons: [QUICK_REPLY] That works
[QUICK_REPLY] Pick another time
Samples: {{1}} = Lena, {{2}} = Pilates, {{3}} = 12 May, {{4}} = 13 May at 6:00 PMWhy utility: it is a time-sensitive change to a service the user booked.
10. Service visit on the way
Name: technician_en_route
Category: UTILITY
Body: Your technician {{1}} is on the way for job {{2}} and should arrive in about {{3}} minutes. Please make sure someone is home to provide access.
Samples: {{1}} = Marco, {{2}} = #J-5521, {{3}} = 25Why utility: it updates a service appointment in progress.
Utility templates: payments, accounts and alerts
11. Payment reminder
Name: payment_due_reminder
Category: UTILITY
Body: Reminder: your {{1}} payment of {{2}} for account {{3}} will be charged on {{4}} to the card on file. No action is needed if your details are up to date.
Buttons: [URL] View invoice -> https://billing.example.com/inv/{{1}}
Samples: {{1}} = monthly, {{2}} = $29.00, {{3}} = ending 7731, {{4}} = 1 JuneWhy utility: Meta's own utility examples include billing reminders for a subscribed service. Add "upgrade and save" and it becomes marketing.
12. Payment failed
Name: payment_failed_action
Category: UTILITY
Body: We could not process the {{1}} payment for your {{2}} plan on {{3}}. Please update your payment method by {{4}} to avoid an interruption in service.
Buttons: [URL] Update payment -> https://billing.example.com/pay/{{1}}
Samples: {{1}} = $29.00, {{2}} = Team, {{3}} = 1 June, {{4}} = 8 JuneWhy utility: it is an account-specific, time-sensitive alert with no offer attached.
13. Payment received
Name: payment_receipt
Category: UTILITY
Body: Payment received. We have applied {{1}} to invoice {{2}} on {{3}}. Your remaining balance is {{4}}. Thank you.
Footer: Keep this message for your records
Samples: {{1}} = $450.00, {{2}} = INV-2093, {{3}} = 3 June, {{4}} = $0.00Why utility: it confirms a specific transaction.
14. Low balance or usage alert
Name: usage_threshold_alert
Category: UTILITY
Body: Heads up: you have used {{1}} of the {{2}} included in your plan this cycle. Usage resets on {{3}}.
Samples: {{1}} = 90%, {{2}} = 50 GB, {{3}} = 1 JulyWhy utility: it reports the state of the user's own account. Suggesting a bigger plan in the same message would make it marketing.
15. New sign-in security alert
Name: new_login_alert
Category: UTILITY
Body: We noticed a new sign-in to your account from {{1}} on {{2}} at {{3}}. If this was you, no action is needed. If not, secure your account now.
Buttons: [QUICK_REPLY] This was me
[URL] Secure account -> https://example.com/security
Samples: {{1}} = Chrome on Windows, {{2}} = 4 June, {{3}} = 10:42 PMWhy utility: account protection alerts are listed by Meta as essential to the user.
16. Support case update
Name: support_case_update
Category: UTILITY
Body: Hi {{1}}, there is an update on your support case {{2}}: {{3}}. Reply to this message if you have any questions.
Samples: {{1}} = Sam, {{2}} = #99102, {{3}} = a replacement unit has been approved and ships tomorrowWhy utility: it continues a support interaction the user started.
17. WhatsApp opt-in confirmation
Name: optin_confirmation
Category: UTILITY
Body: Thanks for signing up for WhatsApp updates from {{1}}. You will receive order and account notifications here. Reply STOP at any time to opt out.
Samples: {{1}} = Acme OutdoorWhy utility: Meta lists confirming an opt-in collected on another channel as a utility objective.
Authentication templates: OTP examples
With authentication templates you do not write the body. Meta supplies fixed, localized text; you choose the optional additions and the button. A copy-code template in English renders like this:
482913 is your verification code. For your security, do not share this code.
This code expires in 10 minutes.
[Copy code]The pieces you control when creating it:
| Element | What you set |
|---|---|
| Preset text | Fixed: <VERIFICATION_CODE> is your verification code. |
| Security disclaimer | Optional: For your security, do not share this code. (add_security_recommendation) |
| Expiration warning | Optional: code_expiration_minutes, 1-90 |
| Button | Copy code, one-tap autofill (Android), or none with zero-tap (Android) |
| Button label | Optional, up to 25 characters; defaults to a localized label such as Copy Code |
| The code itself | Sent at send time, up to 15 characters, passed twice in the payload (body and button) |
18. Copy-code login OTP
Name: login_code_copy
Category: AUTHENTICATION
Body: [preset] {{1}} is your verification code. + security disclaimer + expires in 10 minutes
Buttons: [OTP copy_code] Copy code
Samples: {{1}} = 482913Why authentication: it delivers a one-time passcode with an OTP button, which only authentication templates may do.
19. One-tap autofill for an Android app
Name: signup_code_autofill
Category: AUTHENTICATION
Body: [preset] {{1}} is your verification code. + expires in 5 minutes
Buttons: [OTP one_tap] Autofill
Samples: {{1}} = 730114Why authentication: same purpose; the one-tap button hands the code to your Android app, which requires app-side integration. On iOS 26 and later, copy-code templates also offer keyboard autofill suggestions.
Do not try to send a passcode inside a utility template with custom wording. Meta's guidelines reserve OTPs for authentication templates, and templates approved under another category that should be authentication are moved to REJECTED on the first day of the following month after notice. URLs, media and emojis are not allowed anywhere in authentication content or parameters.
Marketing templates: promotions, carts and re-engagement
Marketing templates are the most flexible category. Send them only to users who opted in to receive them; Meta also applies per-user limits on how many marketing templates a person receives from businesses. Give each one a clear way out, such as a quick-reply opt-out button.
20. Abandoned cart
Name: cart_reminder_24h
Category: MARKETING
Header: IMAGE (product photo)
Body: Hi {{1}}, you left {{2}} in your cart. We have saved it for you, and checkout takes less than a minute.
Buttons: [URL] Return to cart -> https://shop.example.com/cart/{{1}}
[QUICK_REPLY] Stop promotions
Samples: {{1}} = Jordan, {{2}} = the trail running shoesWhy marketing: Meta classes cart reminders as retargeting, which is marketing even though the cart belongs to the user.
21. Back in stock
Name: back_in_stock_alert
Category: MARKETING
Body: Good news, {{1}}: the {{2}} you asked about is back in stock in your size. Quantities are limited this time.
Buttons: [URL] Shop now -> https://shop.example.com/p/{{1}}
[QUICK_REPLY] Stop promotions
Samples: {{1}} = Chen, {{2}} = merino base layerWhy marketing: it recommends a product to prompt a purchase. A user-requested alert is still retargeting under Meta's guidelines.
22. Seasonal sale with coupon code
Name: spring_sale_code
Category: MARKETING
Header: Spring sale starts now
Body: Our spring sale starts today, {{1}}. Take {{2}} off everything in the outdoor range until {{3}}. Your code is ready to copy below.
Footer: Not interested? Tap Stop promotions
Buttons: [COPY_CODE] SPRING20
[URL] Shop the sale -> https://shop.example.com/sale
[QUICK_REPLY] Stop promotions
Samples: {{1}} = Alex, {{2}} = 20%, {{3}} = Sunday 17 MayWhy marketing: it is a sales promotion with a discount code. The copy-code button puts the code (up to 20 characters) on the clipboard in one tap.
23. Win-back after inactivity
Name: winback_60_days
Category: MARKETING
Body: It has been a while, {{1}}. Here is what is new since your last visit: {{2}}. Come and take a look when you have a minute.
Buttons: [URL] See what is new -> https://shop.example.com/new
[QUICK_REPLY] Stop promotions
Samples: {{1}} = Rosa, {{2}} = same-day pickup and a new kids rangeWhy marketing: re-engaging a lapsed customer is a relationship and sales goal, not a transaction.
24. Renewal offer
Name: renewal_offer_annual
Category: MARKETING
Body: Your {{1}} membership ends on {{2}}. Renew this week and get {{3}} months free on the annual plan.
Buttons: [URL] Renew now -> https://example.com/renew
Samples: {{1}} = Premium, {{2}} = 30 June, {{3}} = 2Why marketing: attempting to secure a renewal with an incentive is explicitly marketing. A plain "your plan renews on" billing notice would be utility.
25. Event invitation
Name: store_event_invite
Category: MARKETING
Header: IMAGE (event poster)
Body: You are invited, {{1}}. Join us at our {{2}} store on {{3}} for a gear-repair workshop and early access to new arrivals.
Buttons: [URL] Save my spot -> https://example.com/events/{{1}}
[QUICK_REPLY] Stop promotions
Samples: {{1}} = Kim, {{2}} = Downtown, {{3}} = Saturday 23 MayWhy marketing: awareness of an event is a marketing objective.
26. General feedback survey
Name: brand_survey_general
Category: MARKETING
Body: We are improving our service and would value your opinion, {{1}}. The survey takes about two minutes.
Buttons: [URL] Start survey -> https://example.com/survey
Samples: {{1}} = NoahWhy marketing: a generic survey not tied to a specific order or interaction does not meet the utility bar, so submit it as marketing (or rewrite it around one order, as in example 6).
The sentence that flips utility to marketing
Most miscategorized templates are valid utility messages plus one promotional line:
| Utility version | Add this and it becomes marketing |
|---|---|
| Your order {{1}} has shipped. Track it below. | ...and enjoy 10% off your next order with code THANKS10. |
| Your plan renews on {{1}} for {{2}}. | ...or switch to annual today and save two months. |
| Your appointment is on {{1}} at {{2}}. | ...while you are here, ask about our whitening offer. |
| How was delivery of order {{1}}? | ...rate us and get free shipping next time. |
| You have used 90% of your data for this cycle. | ...upgrade to Unlimited for just a little more. |
If the business needs both messages, send two templates: the utility one to everyone with a transaction, and the marketing one only to marketing opt-ins. The WhatsApp template checker flags promotional wording in a draft before you submit it.
Component limits, naming and variable rules
The limits below are from Meta's components reference and template overview. Treat them as hard caps on the final text, after variables are filled in.
| Component | Limit |
|---|---|
| Body | Required; one per template; up to 1,024 characters; multiple variables |
| Text header | Optional; one per template; up to 60 characters; one variable |
| Media header | Image, video or document (GIF only via the Marketing Messages API); sample uploaded with the Resumable Upload API |
| Location header | Utility and marketing only; location supplied at send time |
| Footer | Optional; one per template; up to 60 characters |
| Buttons in total | Up to 10; with more than 3, two show and the rest sit behind See all options |
| Quick reply | Up to 10; label up to 25 characters; must be grouped before or after the other button types, not interleaved |
| URL button | Up to 2; label up to 25 characters; URL up to 2,000 characters; one variable, appended at the end |
| Phone number button | Up to 1; label up to 25 characters; number up to 20 characters |
| Copy code button | Up to 1; code up to 20 characters |
| Template name | Up to 512 characters; lowercase letters, digits and underscores |
Templates with 4 or more buttons, or a quick reply combined with another button type, cannot be viewed on WhatsApp desktop clients; recipients are prompted to open them on a phone.
Naming
Names are not unique across languages: the same name in en_US and es_ES is two templates that share a name, and each counts toward your template limit (250 per WhatsApp Business Account under an unverified business portfolio, up to 6,000 once the portfolio is verified and a number has an approved display name). A pattern like <event>_<detail>_v<n> (order_shipped_tracking_v2) keeps versions sortable. You can create at most 100 templates per hour per account.
Variables and samples
- Positional variables are
{{1}},{{2}}and so on, numbered in order with no gaps. - Named variables are lowercase letters and underscores, such as
{{order_number}}, and must be unique within the template. - Every variable needs a sample value at submission. Use realistic samples; reviewers judge the filled-in message.
- A template cannot start or end with a variable, which is why every example above ends with static text.
- Variables cannot contain special characters such as
#,$or%in the placeholder itself, and too many variables relative to the amount of fixed text gets a template rejected. - A body and footer identical to an existing template is rejected as a duplicate (this check does not apply to authentication).
Review can take up to 24 hours. At send time the parameter count and format must match the approved template, or the send fails with errors such as 132000 (parameter count mismatch) or 132012 (parameter format mismatch). Every other ceiling is on the WhatsApp limits page.
Putting the examples to work
- Adapt the closest example, keeping utility templates strictly transactional.
- Use realistic samples, run the draft through the template checker, then submit via WhatsApp Manager or the API.
- Subscribe to the
message_template_status_updateandtemplate_category_updatewebhooks, since status and category can change after approval.
If a template comes back rejected, our rejection guide covers each cause and the appeal flow. Conferbot's WhatsApp chatbot connects to the WhatsApp Business Platform so template sends and the conversations that follow run from one flow.
Was this article helpful?
Build and deploy in 10 minutes. No coding needed.
26 WhatsApp Message Template Examples (Utility, Marketing and Authentication) FAQ
Everything you need to know about chatbots for 26 whatsapp message template examples (utility, marketing and authentication).
About the Author
The Conferbot team writes about building, deploying, and improving AI chatbots.
View all articlesRelated Articles
From the reference shelf
Fact-checked reference pages and free tools for the platform this article covers.