Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.apifycloud.io/llms.txt

Use this file to discover all available pages before exploring further.

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 is 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.
Meta can reclassify a template post-approval based on content heuristics and user signals. The ApifyCloud console flags this with a category change indicator on the template list and detail view.

Structure

A template is assembled from:
  • Header (optional): TEXT, IMAGE, VIDEO, DOCUMENT, or LOCATION. 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}}, …
Pick one style per template and stay consistent. Named variables are easier to read in complex templates; indexed ones are more compact for short messages.

Where variables can appear

LocationVariables allowed
BodyAny number
TEXT headerExactly one (or none)
FooterNone
URL buttonAt most one, and it must be at the end of the URL
QUICK_REPLY labelNone
PHONE_NUMBERNone (phone is a constant)
COPY_CODENone on the label; the code itself is the body variable
VOICE_CALLNone

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

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.
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}}).
Opens the phone dialer with the configured number. Not compatible with VOICE_CALL buttons on the same template.
Copies a code (OTP) to the user’s clipboard. Used inside Authentication templates.
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_CALL button
  • CPR is mutually exclusive with most other flags and with PHONE_NUMBER buttons
  • Only templates in approved status and flagged as CPR can be selected as the CPR template in a Call Permission Request
The CPR toggle appears in the template editor only when the template has at least one VOICE_CALL button.

Status lifecycle

StatusWhat it means
draftCreated in the console, not yet submitted to Meta
pendingSubmitted; Meta is reviewing (minutes to a few hours, up to 24h for novel content)
approvedMeta approved; usable everywhere (messages, campaigns, widgets)
rejectedMeta rejected, with a reason. Can be edited and resubmitted
pausedApproved but temporarily paused by Meta due to low quality signals. Can recover
disabledPermanently disabled by Meta after severe or repeated negative feedback. Create a new template
archivedAuto-archived after 12+ months of inactivity; deleted after another 28 days if unused
missingUsed to exist but can no longer be found — stale or deleted
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:
FieldEditable after approval?
NameNo
LanguageNo
CategoryOnly if the template is in rejected state
HeaderLimited (content yes, type no, depending on Meta)
BodyLimited
FooterLimited
ButtonsLimited
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.