Categories
Every template has exactly one category, set when you submit it to Meta. The category drives pricing and what content is allowed.| Category | Use it for | Notes |
|---|---|---|
| Marketing | Promotions, offers, event invites, re-engagement | Most expensive tier; subject to opt-in rules |
| Utility | Order updates, account alerts, reminders, follow-ups to a user-initiated flow | Cheaper than Marketing; content must relate to a specific transaction or request |
| Authentication | One-time passwords and account verification codes | Strict format; no marketing content allowed; cheapest tier |
Header formats
A template’s header is optional. When present, it can be one of:- TEXT — short string, may include one variable.
- IMAGE — JPEG or PNG, max 5 MB. See Media headers.
- VIDEO — MP4 or 3GPP with H.264/AAC, max 16 MB.
- DOCUMENT — PDF (most reliable), Office formats, or plain text. Max 100 MB. The filename is visible to the recipient.
- LOCATION — latitude, longitude, name, and address. Useful for store visits or delivery confirmations.
Body and variables
The body is the main message text. Variables use double curly braces with a 1-based index:- Numbers must be sequential starting from
{{1}}— you cannot skip indexes. - Provide a sample value for every variable when you submit. Meta uses the samples to evaluate the template.
- Keep variables to short, predictable values. Long pasted blocks are a common rejection reason.
{{n}} syntax is used in TEXT headers and URL buttons (see below).
Formatting in the body
WhatsApp supports a limited set of inline formatting in template bodies:- Bold with
*asterisks* - Italic with
_underscores_ - Strikethrough with
~tildes~ - Monospace with triple-backticks
Footer
Optional plain text shown after the body. No variables, no formatting.Buttons
A template can include up to 10 buttons total, grouped as either quick replies or call-to-action. The combinations Meta allows have shifted over Cloud API versions; the most reliable patterns:| Button type | What it does | Example | Variable? |
|---|---|---|---|
| QUICK_REPLY | Sends a pre-set text reply back to your business | Yes, that's me | No |
| URL | Opens a web page | https://acme.com/orders/{{1}} | One in the URL |
| PHONE | Calls a phone number | +44 20 7946 0000 | No |
| COPY_CODE | Copies a code to the clipboard | SAVE20 | One for the code |
| FLOW | Opens a WhatsApp Flow | (linked Flow ID) | Variables via the Flow itself |
| CATALOG | Opens your WhatsApp catalog | (linked catalog ID) | No |
| MPM | Multi-Product Message launcher | (catalog products) | No |
| VOICE_CALL | Initiates a WhatsApp voice call (where supported) | (your business number) | No |
Specialised template types
Meta has several specialised marketing template types that bundle extra functionality on top of the base structure.Carousel templates
A carousel template shows multiple cards in a horizontal scroll, each with its own media, body, and buttons. Useful for catalog showcases, multi-product offers, or feature comparisons.- Up to 10 cards per template.
- Each card has its own image or video header (one media type per template — all images or all videos, not mixed).
- Each card can have up to 2 buttons (Quick Reply, URL, or Phone).
- The body of each card can have up to 3 variables.
Limited-time offer (LTO) templates
LTO templates render a countdown timer beneath the body. Once the timer expires, the offer is shown as expired and tapping the CTA does nothing.- A deal code parameter is required and shown to the user.
- An expiration epoch (in seconds) is required.
- The CTA button is usually a Copy Code or URL.
Coupon code templates
Like LTO but without the countdown — just a code the user can copy with one tap.- The code can be up to 20 characters (recently increased from 15).
- The Copy Code button always copies the literal value, not a variable.
Authentication templates
Specialised templates for OTP delivery. Three sub-types:- One-tap autofill — uses Android’s autofill API to populate the OTP automatically when the user taps the button. Best UX where supported.
- Copy code — shows a Copy button; user pastes the code into your app. Works everywhere.
- Zero-tap — for trusted senders, the OTP can be delivered without any tap (an automatic API callback from the WhatsApp client to your app). Strict eligibility.
Location templates
Carry a pinpoint location in the header, useful for store visits, delivery confirmations, or event venues. The user can open the location in their map app with one tap.Submission lifecycle
When you submit a template from Flowella, it moves through these states:PENDING
Submitted to Meta and under review. Most templates clear Meta’s automated review within minutes, but some are routed for human review and can take up to 48 hours.
REJECTED
Meta declined the template. The rejection reason appears on the template page. Edit and resubmit.
PAUSED
Meta has temporarily restricted sending the template, usually because of recipient feedback or low quality. Comes back automatically if quality recovers.
Quality rating
Once approved, each template builds up its own quality rating — separate from the phone number quality rating. The template-level rating uses the same Green/Yellow/Red scale and is driven mostly by:- Block rate among recipients
- Frequency of “Report” actions in WhatsApp
- Sustained low engagement (no replies, no link clicks)
Time-to-live (TTL)
Templates can have a time-to-live that controls how long Meta will attempt delivery before giving up. Useful for time-sensitive sends like flash sale invitations.- Default: 30 days for most templates.
- OTP / authentication templates: much shorter (a few minutes by default), since codes have no value once stale.
- Custom TTL: can be set per-send for some template types.
Common rejection reasons
- Promotional content submitted as Utility. Re-submit as Marketing.
- Variable samples that don’t match the body — for example, samples that contain links the body doesn’t justify.
- Body or header text that looks like spam — excessive capitalisation, “Click here”, “Free!!!”, multiple exclamation marks.
- Broken or unreachable media header URLs.
- Footer text that contradicts the body.
- Generic templates that could be sent by anyone —
Hi {{1}}, special offer for youwithout specifics is too generic for marketing approval. - Variables in the wrong context — using a variable in a place Meta doesn’t allow it (e.g. some button types).
- Display name doesn’t match the brand of the template content. If the WABA’s display name is “Acme” and the template promotes “Beta Co”, it’ll be rejected.
Related guides
- Templates — the step-by-step of building a template
- Media headers — media format reference
- Template rejected — diagnosing rejections
- Quality score — how phone-number quality interacts with template quality
- Messaging limits — the tier system that constrains how many templates you can send

