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
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
Only
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:
The console disables fields you can’t edit and explains why.
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.