WhatsApp Template Messages: The Complete Guide (2026)
Introduction
If you've ever tried to message a customer on WhatsApp and hit a wall because it's been more than 24 hours since they last wrote to you — you've already run into the problem that template messages were built to solve.
This guide covers everything: what template messages are, how the approval process works, what the different categories mean (and why that matters for your costs), how to build them well, and how to actually send them. Whether you're a marketer, a developer, or somewhere in between, this is the one article you'll want to bookmark.
The 24-Hour Window Problem
WhatsApp isn't built like email or SMS. When a customer sends you a message, it opens what's called a session window — a 24-hour period during which your business can reply freely, in any format, back and forth. This is called a session message.
But once that 24-hour window closes, you can no longer send free-form messages. If you try, the message simply won't go through.
This makes a lot of practical situations tricky:
- A customer abandoned their cart 36 hours ago. You want to follow up.
- Someone booked an appointment last week. You want to send a reminder the morning of.
- A payment just failed on a user's subscription. You need to let them know.
None of these can happen through a regular WhatsApp message if the session has expired.
This is exactly what template messages are designed for.
What Is a WhatsApp Template Message?
A WhatsApp template message (also called an HSM — Highly Structured Message) is a pre-approved message format that businesses can send to customers at any time, regardless of whether a session is active.
The key word is pre-approved. Before you can send a template message, Meta reviews and approves it. You can't just write anything and fire it off — the message structure, the content, and the purpose all have to meet Meta's guidelines.
Once a template is approved, you can use it repeatedly, filling in dynamic information (like a customer's name, order number, or appointment time) each time you send it.
Why does this approval process exist?
WhatsApp is a personal messaging platform. People use it to talk to family and friends. Meta wants to make sure that businesses using it don't turn it into a spam channel. The approval process is how they enforce that standard.
Session Messages vs. Template Messages
It helps to understand these two clearly before going further:
Session Message | Template Message | |
When can you send it? | Within 24 hours of the customer's last message | Any time |
Format | Free-form — anything goes | Pre-approved structure only |
Approval required? | No | Yes |
Cost | Typically free or lower-cost | Charged per conversation |
Use case | Customer support, live conversations | Notifications, reminders, alerts, promos |
Most businesses need both. Template messages are for outbound, proactive communication. Session messages are for responsive, conversational support.
Template Message Categories (and Why They Matter)
Since 2024, Meta categorizes every template message into one of three types. This isn't just organizational — the category directly affects what you're charged for each conversation.
Utility
These are transactional messages tied to an action the customer has already taken.
Examples:
"Your order #4521 has shipped. Track it here: [link]"
"Your invoice for March is ready. Amount due: ₹2,400"
"Your account password was changed. If this wasn't you, contact us immediately."
Utility messages are mid-range in cost and are generally easier to get approved because there's a clear, expected reason for the message.
Marketing
These are promotional messages — anything meant to drive awareness, engagement, or a sale.
Examples:
"Our summer sale starts today. Use code SUMMER20 for 20% off."
"You left something in your cart. Here's a 10% discount to help you decide."
"We just launched a new feature we think you'll love."
Marketing messages are the most expensive per conversation. They also face more scrutiny during approval.
Authentication
These are messages that deliver one-time passwords or verification codes.
Examples:
"Your OTP is 847291. Valid for 10 minutes."
"Use this code to log in: 562038. Do not share this with anyone."
Authentication templates have the strictest formatting rules — you can't include URLs, marketing copy, or anything unrelated to the verification itself. They're also the cheapest category.
Why the category matters beyond cost
Choosing the wrong category isn't just a pricing issue — it can get your template rejected or, worse, get your account flagged. Some businesses try to save money by labeling a marketing message as "utility." Meta has automated detection for this, and it can result in your message being re-categorized automatically (with a higher charge), or your template being paused.
Related reading: We've covered the July 2025 changes to template categories in detail — including what changed, what stayed the same, and how to update existing templates if you were affected. Check out Template Message Categories — New Update from July 2025 for the full breakdown.
Anatomy of a Template Message
Every template is made up of optional and required components. Here's what each part does:
Header (Optional)
The header appears at the top of your message. It can be:
- Text — a short headline (e.g., "Your Order Update")
- Image — a product photo, banner, or graphic
- Video — a short clip
- Document — a PDF or other file
- Location — a pinned map location
Not every template needs a header. For simple notifications, a header can feel cluttered. Use it when it adds genuine context or improves click-through.
Body (Required)
This is the main message content — and it's the only required component. The body supports dynamic variables written as {{1}}, {{2}}, etc. These get replaced with real values when the message is sent.
For example:
"Hi {{1}}, your appointment with {{2}} is confirmed for {{3}} at {{4}}."
When sent, this becomes:
"Hi Priya, your appointment with Dr. Sharma is confirmed for Wednesday, July 9 at 10:30 AM."
A note on variables: Use them for specific data points — names, dates, amounts, IDs. Avoid using a single variable for an entire sentence or paragraph. This is a common reason templates get rejected.
Footer (Optional)
A short line of text that appears below the body. Often used for disclaimers or simple notes like "Reply STOP to opt out." (Though for opt-out, using the official button is better — more on that below.)
Buttons (Optional, up to 3)
Buttons are one of the most valuable parts of a template message. Three types are available:
- Call-to-Action (URL): Opens a link in the browser. You can use a static URL or a dynamic one with a variable at the end (e.g., https://track.yourstore.com/{{1}}).
- Call-to-Action (Phone): Dials a phone number directly.
- Quick Reply: A pre-written reply button that, when tapped, sends a specific text back to you. Useful for confirmations, opt-outs, or simple responses.
You can mix button types, but the total count across all types cannot exceed three.
How to Create and Submit a Template
Where to create templates
There are three main paths:
- WhatsApp Manager (via Meta Business Suite): The no-code option. Go to business.facebook.com, navigate to WhatsApp Manager, then Message Templates. This works well for marketers and non-technical users.
- Your BSP's Platform: If you're using a WhatsApp Business Solution Provider (like Twilio, Gupshup, WATI, or others), they usually have a template management interface built into their dashboard. Many people find this easier than Meta's native UI.
- Meta's API directly: Using the POST /v1/configs/templates or the Graph API endpoint. This is the developer route — useful if you're building a system that creates or manages templates programmatically.
The review process
Once submitted, your template enters a review queue. In most cases, approval happens within minutes to a few hours. Sometimes — especially for marketing templates or templates with media — it can take up to 24 hours.
Meta uses a combination of automated review and human review. There's no way to expedite it.
Template statuses
Status | What it means |
Pending | Submitted, waiting for review |
Approved | Ready to use |
Rejected | Didn't meet Meta's policies — you'll get a rejection reason |
Paused | Previously approved, but paused due to low quality signals (usually because too many users marked it as spam or blocked you after receiving it) |
Disabled | No longer usable — typically a result of ongoing policy violations |
If a template is rejected, you can edit and resubmit it. If it's paused, you'll need to wait out the cooldown period and address the underlying issue before it can be re-enabled.
Related reading: For a full breakdown of rejection reasons and how to fix each one, see Template Message Rejection Issues and Resolution.
Getting Templates Approved: What Actually Works
Rejections are frustrating, especially when the reason isn't obvious. Here's what consistently leads to approval:
Make the purpose immediately clear
A reviewer who sees your template for the first time should understand within two seconds what it's for and why the recipient would want it. Ambiguity is a red flag.
Bad: "We have something special for you. Click below to find out more."
Better: "Your exclusive discount for being a member since 2022 — 25% off your next order."
Don't use variables as a crutch
Variables should fill in specific, predictable data — not open-ended content. A template like "{{1}}" (where the entire body is one variable) will almost certainly be rejected. Meta needs to be able to evaluate the actual content.
Avoid spam-trigger language
Words and phrases that commonly trigger rejections or quality issues:
- "Click here" (use descriptive button labels instead)
- "Limited time" with no specifics
- "You've been selected" (feels deceptive)
- Excessive punctuation or ALL CAPS
Use the opt-out button, not text
If you want to include an opt-out mechanism (which is good practice), use the official Quick Reply button labeled "Stop" or "Unsubscribe." Writing "Reply STOP to unsubscribe" in the footer works, but the button approach is cleaner and more reliable.
For authentication templates, keep it strictly functional
OTP templates should contain only the code, basic instructions, and a security note if needed. No brand taglines, no promotional text, no URLs.
Related reading: For a comprehensive list of best practices and frequently asked questions, see Template FAQs and Best Practices.
Real-World Use Cases
Here's how template messages actually get used across different industries:
E-commerce
Order shipped:
"Your order #{{1}} has been dispatched! Expected delivery: {{2}}. Track your package: [Track Now]"
Cart abandonment:
"Hi {{1}}, you left something behind. Your cart is saved — complete your order before it expires. [View Cart]"
Return confirmed:
"We've received your return for order #{{1}}. Your refund of {{2}} will be credited within 5–7 business days."
SaaS / Subscription Products
Invoice due:
"Hi {{1}}, your invoice for {{2}} (₹{{3}}) is due on {{4}}. [View Invoice]"
Subscription expiring:
"Your {{1}} plan expires in {{2}} days. Renew now to avoid service interruption. [Renew Plan]"
Trial ending:
"Your free trial ends on {{1}}. Upgrade to keep access to all features. [See Plans]"
Banking and Finance
Fraud alert:
"Alert: A transaction of {{1}} was attempted on your card ending {{2}} at {{3}}. If this wasn't you, call us immediately: [Call Now]"
OTP:
"Your verification code is {{1}}. Valid for 10 minutes. Do not share this with anyone."
Healthcare
Appointment reminder:
"Reminder: Your appointment with {{1}} is scheduled for {{2}} at {{3}}. [Confirm] [Reschedule]"
Test results ready:
"Hi {{1}}, your test results are now available. Log in to view them: [View Results]"
Events and Entertainment
Ticket delivery:
"Your ticket for {{1}} on {{2}} is ready. [Download Ticket]"
Event reminder:
"{{1}} is tomorrow at {{2}}, {{3}}. We'll see you there!"
Pricing: How WhatsApp Charges for Template Messages
WhatsApp pricing is based on conversations, not individual messages. Here's what that means:
When you send a template message and the customer receives it, a 24-hour conversation window opens. Any messages sent within that window (in either direction) are part of the same conversation and charged as one unit.
The cost per conversation depends on:
- Category — Marketing conversations cost more than Utility, which costs more than Authentication.
- Country — Pricing varies significantly by market. India, for example, has much lower rates than the US or Germany.
- Volume — Higher volumes often come with tiered pricing through BSPs.
Meta provides a free tier of 1,000 service conversations per month (conversations opened by users, not businesses). Template-initiated conversations don't typically fall into this free tier.
For exact current pricing, check Meta's official pricing page — rates do change, and your BSP may also have its own pricing structure on top of Meta's base rates. Learn more about how the pricing, read this WhatsApp API pricing guide article.
Sending Template Messages via API
For developers who need to send templates programmatically, here's a basic example using the Cloud API:
curl -X POST
"https://graph.facebook.com/v18.0/YOURPHONENUMBERID/messages"
-H "Authorization: Bearer YOURACCESSTOKEN"
-H "Content-Type: application/json"
-d '{
"messagingproduct": "whatsapp",
"to": "91XXXXXXXXXX",
"type": "template",
"template": {
"name": "ordershipped",
"language": {
"code": "en"
},
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "4521" },
{ "type": "text", "text": "July 10, 2025" }
]
}
]
}
}'
A few things to note:
The language parameter specifies which language version of the template to use. You can create the same template in multiple languages — WhatsApp will use the one that matches the language.code you pass. If the specified language isn't available, it falls back to the default language of the template.
Variable order matters. The parameters array maps to your {{1}}, {{2}}, etc. variables in the order they appear. Getting the order wrong leads to garbled messages.
Tracking delivery with webhooks
Once you send a message, WhatsApp sends status updates via webhook. The key statuses to track:
- sent — Message left your system and reached WhatsApp's servers
- delivered — Message reached the recipient's device
- read — Recipient opened the message
- failed — Delivery failed (with an error code explaining why)
Tracking read rates and failure rates helps you understand which templates are actually working and catch issues like incorrect phone numbers or users who have blocked your business.
Optimization and Advanced Strategies
Once you have templates running, here's how to improve their performance over time:
A/B test your headers
If you're sending at volume, try running two versions of a template — one with an image header and one with text-only. Compare open rates and button click-through rates over a few weeks. The difference can be significant depending on your audience and use case.
Use UTM parameters on URL buttons
Add UTM parameters to the URLs in your buttons so you can track conversions in Google Analytics or your analytics tool of choice. For example:
https://yoursite.com/cart?utm_source=whatsapp&utm_medium=template&utm_campaign=cart_recovery
This tells you exactly how many purchases, sign-ups, or other actions resulted from a given template.
Personalization beyond just names
Dynamic variables aren't just for names. Using specific, personal details — order amounts, appointment dates, product names — dramatically increases the relevance of a message and reduces the likelihood of a user blocking you. Generic messages feel like spam even when they're technically permitted.
Monitor your quality rating
Meta gives every phone number a quality rating (High, Medium, or Low) based on how users respond to your messages — specifically, how often they block you or report your messages. If your quality rating drops, your template sending limits decrease. If it stays low, your number can be flagged or disabled.
Keep an eye on this in WhatsApp Manager. A sudden drop usually means a recent template or campaign is generating poor responses.
Common Mistakes to Avoid
1. Sending too many parameters (or too few)
If your template has three variables ({{1}}, {{2}}, {{3}}) but your API call only sends two parameters, the message will fail. Build validation into your sending logic to catch this before it causes delivery failures at scale.
2. Ignoring opt-out requests
If a user replies asking to stop receiving messages, honor it immediately. Continuing to send messages to opted-out users is a fast path to a declining quality rating and potential platform action.
3. Re-categorizing marketing content as utility to save costs
This is explicitly against Meta's policies. Beyond the risk of template rejection, it can result in account-level penalties. The short-term savings aren't worth it.
4. Using the same template for wildly different audiences
A template that works well for loyal customers might feel pushy or irrelevant to cold leads. Segment your audience and tailor templates accordingly rather than using a one-size-fits-all approach.
5. Neglecting the footer opt-out option
If you're sending marketing messages, always include a way for users to opt out. Not including one isn't just bad practice — it contributes to users blocking your number instead, which hurts your quality rating.
Read more about Template message FAQs and best practices in this guide.
Troubleshooting: Template Got Rejected?
Here's a quick checklist to work through:
- Check the rejection reason in WhatsApp Manager — Meta provides a reason code for every rejection
- Look at variable usage — are variables used for entire sentences, or just specific data?
- Check the category — is the content genuinely matching the category you selected?
- Review for policy violations — no URLs in authentication templates, no misleading language in any template
- Simplify — sometimes a template is rejected because it's trying to do too much; splitting it into two simpler templates can help
If you believe a rejection was in error, you can submit an appeal through Meta's Business Help Center.
Related reading: Template Message Rejection Issues and Resolution covers every major rejection reason with specific fixes.
Pre-Submission Checklist
Before you submit any new template, run through this:
[ ] Category is correct — Utility for transactional, Marketing for promotional, Authentication for OTPs only
[ ] Variables are specific — each {{n}} maps to a defined, predictable data point
[ ] No full sentences or paragraphs in a single variable
[ ] Header type matches the content — don't use a promotional image for a utility message
[ ] Button labels are descriptive — "Track Order" beats "Click Here"
[ ] Opt-out mechanism included (for marketing templates)
[ ] Authentication templates contain no promotional content or URLs
[ ] Language code is correct for the target audience
[ ] Message reads naturally out loud — if it sounds robotic, revise it
[ ] Tested with real variable values to confirm it renders as expected
Summary
WhatsApp template messages are the standard mechanism for businesses to initiate conversations outside the 24-hour session window. They require Meta approval, fall into one of three pricing categories (Utility, Marketing, Authentication), and follow a defined structure of header, body, footer, and buttons.
Getting them right involves understanding the category system, writing for clarity and honesty, and treating your audience's attention as something worth respecting. The businesses that do this well see strong engagement — open rates that most other channels can't match.
The businesses that treat it like a broadcast medium and fire off generic messages tend to see their quality ratings drop and their accounts restricted.
The difference is mostly in the care you take upfront.