HSM template
A WhatsApp template Meta has approved, with fixed category and variables, required for anything sent outside the customer service window.
WhatsApp message templates must be approved before they can be sent outside a customer service window. Categories and variables must match the approved version.
WhatsApp message templates must be approved before they can be sent outside a customer service window. Categories and variables must match the approved version.
All glossary terms
The short version
- An HSM template is a pre-approved WhatsApp message that a business can send outside the customer service window. The old name meant highly structured message; Meta now calls them message templates.
- Every template has a category, a language, a header, a body, optional footer and buttons, and numbered variables that must match the approved version exactly.
- Category is not cosmetic. Marketing, utility and authentication carry different rules and different prices, and a utility message that reads like a promotion gets rejected or re-categorised.
- Editing an approved template sends it back for review and creates a new version. Treat the wording as a release, not a draft you can keep tweaking.
- In India, WhatsApp templates are separate from DLT registration, which still governs commercial SMS and OTP. Confusing the two delays launches.
- Price the channel in INR with 18% GST: LoopNow bills marketing at ₹1.15 per delivered message and utility or authentication at ₹0.22.
What an HSM template is today
An HSM template is a message that Meta has reviewed and approved for business-initiated delivery on the WhatsApp Business Platform. The acronym stood for highly structured message, a name from the early API era when the point was a fixed structure with placeholders. The current documentation calls them message templates, and the structure is still the point: a category, a language, a header, a body, an optional footer and optional buttons, with variables in defined positions.
Approval is the defining feature. A business cannot invent a message at send time and push it to someone who has not written to it in the last day. It submits a template, waits for review, and then sends that exact template with values substituted into the placeholders. The approved version is the contract. If the text changes, the approval no longer covers it, which is why an edit triggers a fresh review rather than a silent update.
What it is not: a template is not a newsletter builder with a free-text field at the end, and it is not the same object as a DLT template in India. DLT registers entities, headers and SMS templates with the telecom ecosystem for commercial SMS. WhatsApp templates are reviewed by Meta and delivered over the WhatsApp Business Platform. A campaign that runs on both channels needs two registrations, two content reviews and two sets of rules, even when the words are identical.
Why templates exist: the customer service window
WhatsApp is a messaging product before it is a marketing channel, and the template system exists to keep it that way. When a person messages a business, a twenty-four hour customer service window opens. Inside that window the business can reply with free-form messages, because the person started the conversation and is presumably present. When the window closes, the business can no longer send free text. It can send an approved template, which is the mechanism that allows a delivery update, an appointment reminder or a payment confirmation to reach someone who is not currently chatting.
The window is per conversation, not per contact, and it resets each time the person sends a message. That has an operational consequence that surprises teams: a support agent who replies promptly keeps the window open and can talk naturally, while a marketing team that wants to reach a dormant contact must use a template and pay for it. Building a workflow that assumes free text will work at any time is the most common reason a WhatsApp automation fails silently at the first scheduled send.
The window also shapes content. A utility template sent after the window is a notification, not a conversation, so it should carry the fact and a clear next step rather than a paragraph of brand voice. A marketing template is an interruption and should earn the tap with a specific offer and an obvious opt-out path. Copy that ignores this distinction tends to be rejected in review or, worse, approved and then blocked by recipients, which damages the quality rating that governs whether the template can keep sending.
Category is a rule, not a label
Every template is submitted under one of three categories. Marketing covers promotions, offers, product announcements, re-engagement and anything whose purpose is to generate interest. Utility covers a specific transaction or account event that the person is already party to: an order confirmation, a delivery update, a payment receipt, an appointment change. Authentication covers one-time passcodes and multi-factor login messages, and it has its own restricted format because its only job is to deliver a code.
The category determines the rules and the price. A utility message is expected to reference a real transaction and to avoid promotional language. A marketing message may promote, but it needs a clear opt-out and it costs more per message in most markets, including India. Submitting a discount as utility to get the lower rate is the single most common cause of re-categorisation, and repeated miscategorisation puts the business account under review. The reviewer is asking one question: is this message about something that already happened between you and this person, or are you trying to create interest?
Authentication is a separate design space. The message must be a code, it must not contain marketing content, and the format is intentionally constrained so that recipients can trust it. Mixing a code with a promotional line does not make it a better authentication message; it makes it a rejected one. If you need to tell someone about an offer at login, that is a second template under marketing, sent separately and priced separately.
The parts of a template
A template has up to five regions. The header is optional and can be text, an image, a video or a document; text headers may carry a single variable. The body is required and carries the message, with numbered placeholders such as {{1}} and {{2}}. The footer is optional, small and often used for an opt-out line. Buttons are optional and can open a URL, call a number, reply with a quick answer or trigger a flow. Language is chosen at submission, and a multilingual template is submitted as separate language versions with matching structure.
Variables are positional, not named. The first value you send fills {{1}}, the second fills {{2}}, and there is no label to protect you if the order drifts. That is why the sample values submitted with the template matter: they show the reviewer what a real message looks like, and they document the intended order for the engineer who later builds the payload. A template with variables and no samples is rejected, and a template whose samples do not resemble the real data is a rejection waiting to happen.
Structure also constrains length. A body that runs long gets truncated or rejected, and a message that needs three paragraphs to make sense is usually a message that should be an email. The strongest templates read like a notification from a competent operations team: what happened, which order or account, what the person should do next, and a way to reach a human. Everything else is optional, and most of it is noise on a lock screen.
Writing copy that passes review
The review is not a mystery. A reviewer is checking that the category matches the content, that the variables are used correctly, that the message is complete, and that nothing in it violates the business or commerce policies. Copy that fails most often does so for boring reasons: a variable at the very start or end of the body that leaves the message reading as a fragment, two variables with no text between them, a placeholder used for a sentence rather than a value, or a sample value that is obviously not representative.
Write the message as if the variable were already filled. If the body reads your order has been shipped and the variable is the order number, then the sentence must still make sense when a real alphanumeric order id lands in it. Avoid punctuation that depends on the value, avoid gendered grammar that assumes a name, and avoid a variable inside a URL path unless the button type supports it. Number the placeholders in the order a human would fill a form, and keep the same order in the code that builds the payload.
Keep promotional language out of utility templates and keep utility specifics out of marketing ones. A delivery update that adds a discount code will be re-categorised, and a marketing message that pretends to be a delivery update will be reported by recipients. Both outcomes cost more than the message would have. The safest habit is to write the category on the brief before the copy, and to reject any draft that drifts from it during review.
Why templates get rejected, and what to do
Rejections cluster. The most common is a category mismatch: promotional content submitted as utility, or a utility message that does not reference a specific transaction. The second is variable misuse: missing sample values, placeholders with no surrounding text, or a body that reads as a template rather than a message. The third is content that touches a prohibited or restricted category, such as alcohol, gambling, medicines or financial products where the policy requires care. The fourth is an incomplete or ambiguous message that a recipient could not act on.
The remedy depends on the reason, and the reason is usually visible in the review notes. A category mismatch needs a rewrite of the content or a resubmission under the correct category, not a plea in support. Variable misuse needs a copy edit and new samples. A policy issue needs a legal and compliance look before resubmission, because repeated attempts at the same content can escalate. A message that is merely unclear needs a shorter body and one clear call to action.
Two operational habits reduce the rate. Keep a library of approved templates and their approved text, so a new campaign starts from something that already passed rather than from a blank page. And log every rejection with its reason and the fix, because the same three mistakes account for most of the volume and a shared note stops the fourth person from repeating them. The library is also what makes localisation tractable: translate an approved structure rather than inventing a new one per language.
Editing, versioning and re-approval
An approved template is not frozen forever, but it is versioned in practice. When you edit an approved template, the change goes back for review, and the previously approved version may continue to send until the new one is decided or may be paused depending on the edit and the account state. Meta also limits how frequently an approved template can be edited, which turns careless iteration into a real cost. The safe design is to treat each approved template as a release with a version number, a change note and an owner.
Versioning matters because downstream code refers to a template by name. If you rename a template, every automation that sends it breaks. If you change the order of variables, every payload silently fills the wrong slot, and the message goes out with the amount where the name should be. Keep the name stable, change the version in your own registry, and update the sending code in the same release. A template is an API contract that happens to be written in prose.
Localisation adds a second axis. Each language version is reviewed separately, and the variable count and order should match across languages so that one payload builder can serve all of them. A Hindi version with three variables and an English version with two will force a branch in the code and a bug in the branch that nobody tests. Design the structure once, translate the text, and keep the placeholders aligned.
Quality rating and the cost of a bad send
WhatsApp tracks how recipients respond to a template. Blocks, reports and a pattern of recipients who never engage push the quality rating down, and a template rated low can be paused, which stops sends until the problem is fixed or a new version is approved. The rating is per template, not just per account, so one aggressive campaign can take down the exact message that your delivery notifications depend on. That is a sharp lesson for teams that reuse a single template for everything.
The operational response is segmentation and restraint. Send marketing templates to people who have engaged recently, cap frequency per contact, and make the opt-out real and easy. Send utility templates only when the underlying event actually happened, because a delivery update for an order that does not exist is both a support ticket and a quality signal. And keep a small set of critical utility templates on a separate, conservative sending pattern so that a marketing mistake does not degrade them.
Cost is per delivered message and varies by category, so the category decision is also a budget decision. In India, LoopNow bills marketing messages at ₹1.15 and utility or authentication at ₹0.22 per delivered message, with 18% GST added on the invoice. A campaign that is re-categorised from marketing to utility changes the unit price by a factor of five, which is why the category argument is worth having before submission rather than after the first invoice.
India: opt-in, DPDP and the DLT confusion
Meta requires opt-in for marketing messages, and Indian law adds its own layer. Under the DPDP Act, consent must be free, specific, informed and unambiguous, with notice in clear language and an easy withdrawal path. A tick box that bundles WhatsApp marketing with terms of service is not specific consent. A phone number collected at a store counter for billing is not consent for promotional WhatsApp. The template system makes the content auditable but says nothing about whether you were allowed to send it to that person.
DLT is the persistent source of confusion. India requires registration of entities, headers and templates for commercial SMS through the DLT ecosystem, and OTP and transactional SMS routes depend on it. WhatsApp has its own review and its own rules. A team that has only ever run SMS assumes the DLT template id is the thing to quote in a WhatsApp payload, and then cannot work out why the message is rejected. Keep the two registries separate in your documentation, even when the campaign copy is shared.
The practical India checklist is short. Capture channel-level consent with the notice version, keep a suppression list that covers opt-outs and blocks, price the channel in INR with GST, and decide the escalation path for a customer who replies to a template with a question. That last one is the most human detail: a template is business-initiated, but the reply is a person waiting, and the twenty-four hour window is now open. Route it to someone who can answer.
Worked example: an order delay notice in Hinglish
A Delhi electronics retailer needs to tell customers that a shipment is delayed by two days. The first draft reads: Hi {{1}}, your order {{2}} is delayed. Sorry for the inconvenience. Shop more at our store and get 10% off. The category is submitted as utility, and it is rejected, because the last sentence is promotional and the message does not name the new delivery date. The rejection note says the content does not match the selected category, which is accurate.
The approved version drops the offer and adds the fact: Hi {{1}}, your order {{2}} is now expected on {{3}}. You can track it from the order page or reply here to speak to our team. The variables are name, order id and date, each with a realistic sample, and the body has text around every placeholder. The footer carries a support line rather than an opt-out, because this is a transactional message the customer is expecting. A separate marketing template, with its own opt-in and its own opt-out, carries the offer to people who have agreed to receive it.
The lesson is not that promotions are forbidden. It is that one message cannot be two things. Splitting the notification from the offer made both messages pass, kept the utility price, and gave the customer a clear reason to open the first one. It also meant that when the marketing template was paused for low engagement, the delivery notification kept working, which is exactly the resilience the category system is designed to encourage.
Frequently asked questions
What does HSM stand for?
Highly structured message. It was the early name for a WhatsApp message with a fixed structure and placeholders, and the acronym stuck in vendor documentation. Meta now calls the object a message template. If a contract or a colleague says HSM, they mean the same approved template that the current API calls a template, so the terminology is a translation problem rather than a technical one.
Can I send free text on WhatsApp at any time?
No. Free-form messages are allowed only inside the twenty-four hour customer service window, which opens when the person messages you and resets on each new message from them. Outside that window, you need an approved template. A scheduled campaign that fires after the window has closed will fail unless it uses a template, which is why automations should check the window before choosing the message type.
How long does template approval take?
Usually minutes to a few hours, and occasionally up to a day. Meta does not promise a fixed turnaround, so a launch plan that depends on same-hour approval is fragile. Submit a few days before a campaign, keep an approved fallback template ready, and avoid editing an approved template the night before a send, because the edit returns it to review.
What happens when I edit an approved template?
The edited version goes back for review, and the previously approved version may continue or be paused depending on the change and the account state. Meta also limits how often an approved template can be edited in a period, so repeated tweaking has a cost. Treat the approved text as a release: version it in your own registry, keep the template name stable, and update the sending code in the same change.
Why was my utility template rejected for being promotional?
Because the content did not match the category. Utility is for a specific transaction or account event the person is already party to, and a discount, an upsell or a brand campaign is marketing by definition. Split the message: send the factual notification as utility and the offer as a separate marketing template with its own opt-in. Resubmitting the same copy under utility usually fails again.
Do I need opt-in for utility messages?
You need a lawful basis for the message, and in practice that means the person has an account or a transaction with you and expects operational contact. Meta still requires that you have obtained opt-in in accordance with its business policies, and DPDP requires specific, informed consent or another lawful ground. A delivery update for a real order is a different case from a promotional message to the same number.
Is DLT registration required for WhatsApp templates in India?
No. DLT is the Indian registration system for commercial SMS, covering entities, headers and SMS templates. WhatsApp templates are reviewed by Meta for the WhatsApp Business Platform. If you run the same campaign on SMS and WhatsApp, you need both, and the identifiers are not interchangeable. Quoting a DLT template id in a WhatsApp payload will not satisfy either system.
What does a WhatsApp template cost in India?
Pricing is per delivered message and depends on the category. LoopNow bills marketing at ₹1.15 and utility or authentication at ₹0.22 per delivered message, with 18% GST added on the invoice. A thousand marketing messages therefore cost about ₹1,357 including GST, against about ₹260 for utility. Re-categorisation changes the unit price, which is why the category decision has a budget consequence.
What happens if a template gets a low quality rating?
Meta can pause the template, which stops sends until the issue is resolved or a new version is approved. Quality reflects blocks, reports and low engagement from recipients. The fix is usually segmentation and frequency rather than copy: send to people who opted in and engaged recently, cap how often they hear from you, make opt-out easy, and keep critical utility templates on a separate, restrained pattern.
Can I use one template for many languages?
You submit a separate language version for each language, reviewed independently. Keep the structure and the number and order of variables identical across versions so that one payload builder works for all of them. A Hindi version with three placeholders and an English version with two forces a branch in the code, and the branch that nobody tests is where the wrong value ends up in the wrong sentence.