A template is a pre-approved message structure you can send at any time, regardless of whether a 24h session is open. Meta approves templates per category, language, and content. Until a template isDocumentation Index
Fetch the complete documentation index at: https://docs.apifycloud.io/llms.txt
Use this file to discover all available pages before exploring further.
approved, you cannot
use it.
Category
Every template has exactly one category. Meta prices and enforces each one independently:Marketing
Promotions, product launches, offers, newsletters, event invites.
Highest user friction — treat opt-in like marketing email.
Utility
Transactional updates tied to an existing user action: order confirm,
shipping, receipt, password reset, appointment reminder.
Authentication
OTPs and verification codes. Dedicated layout with COPY_CODE button
or ONE_TAP subtypes. Lowest cost but narrowest content.
Structure
A template is assembled from:- Header (optional):
TEXT,IMAGE,VIDEO,DOCUMENT, orLOCATION. Text headers allow one variable. - Body (required): the main content, plain text with optional
variables (
{{1}},{{2}}, … or named like{{first_name}}). - Footer (optional): a short trailing line (no variables).
- Buttons (optional): up to the Meta-allowed count, mixing allowed types.
Variables and personalisation
Template bodies and many button types accept variables — placeholders you fill in at send time so the same template personalises per recipient. Two naming styles, both supported:- Indexed:
{{1}},{{2}},{{3}}, … - Named:
{{first_name}},{{order_id}},{{amount}}, …
Where variables can appear
| Location | Variables allowed |
|---|---|
| Body | Any number |
| TEXT header | Exactly one (or none) |
| Footer | None |
| URL button | At most one, and it must be at the end of the URL |
| QUICK_REPLY label | None |
| PHONE_NUMBER | None (phone is a constant) |
| COPY_CODE | None on the label; the code itself is the body variable |
| VOICE_CALL | None |
Filling variables at send time
- Campaign: the wizard maps each variable to a column of the contact list (or a constant)
- Direct message (Messages tab): the composer asks for each variable’s value
- Flow: the Template node maps variables to flow variables or contact attributes
- Public API: variable values are passed in the request body
Sample values for Meta’s review
When submitting a template, you must provide sample values for every variable. Meta uses them to render the template during review — so use realistic examples (Ana, A-10042, $1,250), not
placeholders like FIRSTNAME or the literal {{1}}. Sample values
don’t affect actual sends; they’re only for review.
Languages
Templates are language-scoped.en, es, pt_BR, es_AR, fr,
de — Meta supports ~90 locales. A single template name can
exist in multiple languages; each language is submitted and approved
separately.
Button types
QUICK_REPLY
QUICK_REPLY
A tap inserts the button’s text as the user’s reply. Most common
choice for starting a flow or collecting yes/no/option feedback.
URL
URL
Opens a URL in the user’s browser. Can contain at most one
variable, and the variable must be at the end of the URL
(e.g.,
https://example.com/orders/{{1}}).PHONE_NUMBER
PHONE_NUMBER
Opens the phone dialer with the configured number. Not compatible with
VOICE_CALL buttons on the same template.COPY_CODE (Authentication)
COPY_CODE (Authentication)
Copies a code (OTP) to the user’s clipboard. Used inside Authentication
templates.
VOICE_CALL (Gupshup + voice calling only)
VOICE_CALL (Gupshup + voice calling only)
Initiates a WhatsApp voice call to your business inside the WhatsApp
app. Configured with a TTL in minutes (1 to 43,200, default 10,080 /
7 days) after which the button is no longer tappable.Only visible when voice calling is enabled on the app. Not compatible
with
PHONE_NUMBER buttons.Call Permission Request (CPR) flag
A template can be flagged as a CPR (is_cpr = true) if it has at
least one VOICE_CALL button. Sending a CPR template to a user asks for
their permission for your business to call them inside WhatsApp.
Rules:
- CPR requires at least one
VOICE_CALLbutton - CPR is mutually exclusive with most other flags and with
PHONE_NUMBERbuttons - Only templates in
approvedstatus and flagged as CPR can be selected as the CPR template in a Call Permission Request
VOICE_CALL button.
Status lifecycle
| Status | What it means |
|---|---|
draft | Created in the console, not yet submitted to Meta |
pending | Submitted; Meta is reviewing (minutes to a few hours, up to 24h for novel content) |
approved | Meta approved; usable everywhere (messages, campaigns, widgets) |
rejected | Meta rejected, with a reason. Can be edited and resubmitted |
paused | Approved but temporarily paused by Meta due to low quality signals. Can recover |
disabled | Permanently disabled by Meta after severe or repeated negative feedback. Create a new template |
archived | Auto-archived after 12+ months of inactivity; deleted after another 28 days if unused |
missing | Used to exist but can no longer be found — stale or deleted |
approved templates are selectable for sending. The picker
shows all statuses but disables non-approved entries with a reason.
Full walkthrough of approval, pausing, disabled, and archival:
Approval flow.
Edit restrictions post-approval
Meta is strict about what you can change once a template is approved:| Field | Editable after approval? |
|---|---|
| Name | No |
| Language | No |
| Category | Only if the template is in rejected state |
| Header | Limited (content yes, type no, depending on Meta) |
| Body | Limited |
| Footer | Limited |
| Buttons | Limited |
Limits
Meta enforces per-template edit rate limits. When you reach them, the template editor surfaces the remaining quota and blocks further edits until the window rolls over — so you don’t burn an edit on a typo.Sync
Templates stay in sync whether you authored them in ApifyCloud or in your provider’s dashboard — approval status, rejection reasons, category changes, and new templates flow both ways automatically.What’s next
Approval flow
How submission works, reasons for rejection, and how to handle
them.
Template categories
Marketing, Utility, Authentication, and when to use each.
Template examples
Copy-and-adapt patterns you can submit for approval.