---
title: "WhatsApp Message Templates: Categories, Approval Rules, and How to Stop Getting Rejected"
description: "Every business-initiated WhatsApp message needs an approved template. A working guide to the three categories, the 24-hour window, what gets rejected, and template examples that pass."
author: "Ilayaraja S"
pubDate: 2026-08-14
canonical: "https://www.convo.co.in/blog/whatsapp-message-template-approval-guide/"
---
# WhatsApp Message Templates: Categories, Approval Rules, and How to Stop Getting Rejected

On the WhatsApp Business API you cannot simply type a message and send it to a
customer. If they have not written to you recently, the message has to be a
**template** Meta approved in advance.

This is the rule that most confuses teams migrating off the free WhatsApp
Business app, and it is where most early campaign problems originate — wrong
category, inflated costs, or a rejection the day before a sale launches.

## The 24-hour customer service window

Everything about templates follows from one mechanic.

When a customer sends you a message, a **24-hour customer service window** opens.
Inside that window you can reply freely — plain text, images, documents, whatever
you like, no template, no approval.

The clock resets every time the customer writes again. When it closes, free-form
replies stop being possible, and reopening the conversation requires an approved
template.

That is the whole model. Customer-initiated: free-form. Business-initiated:
template. In API terms, a plain `type: "text"` send only reaches a contact inside
an open window; outside it you send a template or the call is rejected.

<blockquote>
A budget note worth diarising: from 1 October 2026, free-form service replies and
utility templates sent inside the 24-hour window stop being free to deliver and
move to per-message billing, at the utility rate for each country. The window
still works the same way — it just stops being a zero-cost zone.
</blockquote>

## The three template categories

Meta assigns every template a category, and the category determines what it may
say and what it costs. Convo's dashboard and Template API use the labels
`TRANSACTIONAL`, `MARKETING` and `OTP`:

| Category (Convo / Meta) | Purpose | Examples |
| --- | --- | --- |
| **`TRANSACTIONAL`** / Utility | Follows up on a specific transaction or request the customer already made | Order confirmed, shipped, out for delivery, payment received, appointment reminder, ticket update |
| **`OTP`** / Authentication | Verifying identity | One-time passcodes, login codes, account recovery |
| **`MARKETING`** / Marketing | Everything else | Offers, launches, re-engagement, abandoned cart, newsletters, event invites |

Marketing is the most expensive category and the most heavily scrutinised.
Authentication has a rigid, restricted format. Utility is the workhorse.

### Meta decides the category, not you

You propose a category on submission; Meta's review confirms or changes it. The
line is drawn on **content**, and it is drawn strictly.

A template that says `Your order #{{1}} has shipped` is utility. Add
`— and here's 10% off your next one` and the whole template becomes marketing,
at marketing rates, even though 90% of it is transactional.

The practical rule: **do not mix a promotion into a transactional message**. It
does not save you money and it frequently re-categorises the whole thing. Send
the utility message, and if you want to promote, send a separate marketing
template to a segment that will actually respond.

### Authentication has its own rules

Authentication templates are the most constrained. Meta requires a fixed
structure — a code delivered in a specific format with a copy-code button, and
language it largely dictates. Do not attempt creative OTP copy; it will be
rejected, and the standard format converts better anyway.

Note also that sending OTPs to recipients outside your WABA's registered country
is billed at a separate, higher **authentication-international** rate.

## Anatomy of a template

A template has up to four parts:

- **Header** (optional) — a short line of text, or an image, video or document.
- **Body** (required) — your message, with variables as `{{1}}`, `{{2}}` and so
  on.
- **Footer** (optional) — small grey text. Where an opt-out line belongs.
- **Buttons** (optional) — quick replies, a call-to-action URL, a phone number,
  or a copy-code button.

Variables are the point. Write one template with placeholders and reuse it for
every customer:

```
Hi {{1}}, your order {{2}} has been shipped and will arrive by {{3}}.
Track it any time using the button below.
```

Then supply `["Priya", "#40219", "Thursday"]` per recipient. One template, one
approval, every customer's message personalised.

### Submitting a template from the API

If you drive templates from your own systems rather than the dashboard, the
Convo call is `POST /project/{project_id}/wa_template` with your
`X-API-WA-Project-API-Pwd` header. The fields that matter:

- `label` — the name you see in the dashboard
- `name` — a unique identifier, lowercase and underscores only
- `category` — `TRANSACTIONAL`, `MARKETING` or `OTP`
- `type` — `TEXT`, `IMAGE`, `VIDEO`, `FILE`, `LOCATION`, `CAROUSEL` or
  `ORDER_DETAILS`
- `language` — the full language name, e.g. `"English"` or `"Hindi"`
- `text` — the body, with `{{1}}` placeholders
- `sample_text` — a realistic filled-in version for Meta's reviewers
- buttons via `message_action_type` (`CTA`, `QuickReplies` or `All`), and
  `isClickTrackingEnabled` to track URL clicks

A successful submission returns the template with `status: "PENDING"`. The most
common 400s are a duplicate `name` or an invalid enum value.

## Why templates get rejected

Meta's review is largely automated and unforgiving on formatting. In rough order
of frequency:

**1. Variables at the very start or very end.** A body that begins with `{{1}}` or
ends with `{{2}}` is rejected almost automatically — Meta cannot tell what the
message will look like. Wrap them in text: `Hi {{1}}, your…`

**2. Non-sequential or mismatched variables.** Using `{{1}}` and `{{3}}` with no
`{{2}}`, or declaring three variables and providing two samples.

**3. Missing or unrealistic sample values.** Submitting `sample_text` with values
like "xxx" or "test." Give real-looking samples — "Priya", "#40219", "Thursday".

**4. Wrong category.** Promotional content submitted as `TRANSACTIONAL`.
Re-categorised or rejected.

**5. Grammar and formatting.** Spelling errors, ALL CAPS, excessive emoji, three
exclamation marks, or a wall of unbroken text.

**6. Policy-restricted content.** Alcohol, tobacco, weapons, adult content,
gambling, unapproved health claims, real-money lending offers, cryptocurrency
promotions, and anything promising guaranteed returns.

**7. URL problems.** Shortened links from generic shorteners (bit.ly and friends)
are frequently flagged. Use your own domain, or a branded short domain.

**8. Duplicate templates.** Submitting the same content twice under different
names.

## Templates that pass — patterns to copy

**Order confirmation (utility / `TRANSACTIONAL`)**

```
Hi {{1}}, thanks for your order!

Order: {{2}}
Total: ₹{{3}}
Expected delivery: {{4}}

We'll message you the moment it ships.
```
Button: *Track order* (URL)

**Appointment reminder (utility / `TRANSACTIONAL`)**

```
Hi {{1}}, a reminder about your appointment with {{2}} tomorrow at {{3}}.

Reply CONFIRM to keep the slot, or RESCHEDULE if you need a different time.
```
Buttons: *Confirm* / *Reschedule* (quick replies)

**Abandoned cart (marketing / `MARKETING`)**

```
Hi {{1}}, you left {{2}} in your cart.

It's still available, but stock moves quickly. Want to complete your order?
```
Footer: *Reply STOP to opt out*
Button: *Complete order* (URL)

**Re-engagement (marketing / `MARKETING`)**

```
Hi {{1}}, it's been a while since your last visit to {{2}}.

Here's what's new this month — have a look and tell us what you think.
```
Footer: *Reply STOP to opt out*

Three habits run through all of these: text before the first variable, realistic
samples, and an opt-out line on anything marketing.

## Getting approved faster

- **Submit early.** Approval is usually minutes to a few hours, but budget a day
  before a campaign. Never submit the morning of a sale.
- **Build a library, not one-offs.** Approve a reusable set — confirmation,
  shipping, delivery, reminder, feedback, re-engagement — and vary them with
  variables rather than submitting new templates weekly.
- **Keep names systematic.** `order_shipped_en`, `appointment_reminder_hi`. You
  will thank yourself at fifty templates.
- **Localise properly.** Templates are per-language. Approve a Hindi version as
  its own template rather than mixing languages in one body.
- **Watch template quality.** Meta tracks per-template quality from block and
  report rates. A template that draws complaints can be paused or disabled
  outright, so retire poor performers rather than pushing volume through them.

## From approved template to send

Once a template shows `APPROVED`, Convo's programmatic pattern is to link it to a
named, reusable campaign: `POST /project/{project_id}/campaign/api` with
`template_name` and a stable `campaign_name`. That returns a `LIVE` campaign of
type `API` that you then send to contacts repeatedly through the Send Campaign
endpoint — configure once, send per contact.

## Where templates fit in your setup

Templates are step five of the API setup — after your number is live and before
your first campaign. If you are earlier in the process, start with the
[step-by-step setup guide](/how-to-set-up-whatsapp-business-api/). If you are
still deciding whether the API is right for you, the
[app vs API comparison](/whatsapp-business-app-vs-whatsapp-business-api/) covers
that.

Convo includes a template submission dashboard on
[both plans](https://convo.co.in/pricing), so you can draft, submit, track
approval status and reuse templates across campaigns without going into Meta's
tooling directly. Both plans also include the Template Message API if you want to
trigger templates from your own systems — the
[API documentation](https://doc.convo.co.in/introduction) covers the endpoints.

[Book a 30-minute demo](https://calendly.com/suranshu_convo/30min) and we will
review your first set of templates before you submit them.

## FAQ

**How long does WhatsApp template approval take?**
Usually minutes to a few hours. Occasionally up to 24 hours if a template gets
flagged for manual review.

**Can I edit an approved template?**
Yes, within limits — Meta allows a small number of edits to an approved template
per month, and edits re-enter review. Substantial rewrites are better submitted
as a new template.

**How many templates can I create?**
Meta allows a large number per WABA — thousands — so the practical limit is your
own ability to maintain them, not the cap.

**Do I need a template to reply to a customer?**
No. Inside the 24-hour customer service window you can reply free-form. Outside
it, you need a template.

**Why was my template marked as marketing when I submitted it as `TRANSACTIONAL`?**
Almost always because it contains promotional content — a discount, an upsell, a
"check out our new range" line — alongside the transactional content. Split them
into two templates.
