> ## Documentation Index
> Fetch the complete documentation index at: https://docs.digifist.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Creating Templates

> How to build and submit a WhatsApp message template in Galantis — header, body, footer, buttons, and submission.

Templates are built in Galantis and submitted to Meta for review from the same interface. The template builder walks through each structural component — header, body, footer, and buttons — and lets you preview the assembled message before submitting. Once submitted, Meta reviews the template and returns an approval or rejection, typically within minutes to a few hours.

## What this covers

* The four template components and their options
* How to create and submit a template
* Variable placeholder syntax
* Component requirements and limits
* Submission behavior and what happens after

## Creating a template

<Steps>
  <Step title="Open the template builder">
    Go to **Templates → New Template** in the Galantis dashboard.
  </Step>

  <Step title="Set the category">
    Select **Marketing** or **Utility**. This must be set before building the template content — it is a declaration of intent that Meta evaluates against your message. See [Template Categories](./template-categories) if you are unsure which applies.
  </Step>

  <Step title="Set the language">
    Select the language code for this template (e.g., `en`, `es`, `pt_BR`). Each template is tied to a single language. If you need the same message in multiple languages, create separate template records — one per language.
  </Step>

  <Step title="Build the template components">
    Configure the header, body, footer, and buttons as described below.
  </Step>

  <Step title="Preview and submit">
    Review the assembled template in the preview panel. When ready, click **Submit** to send it to Meta for review. The status changes to `PENDING_APPROVAL` immediately.
  </Step>
</Steps>

## Template components

### Header (optional)

The header appears above the body text. It is optional but strongly recommended for templates that use image or product formats — a text-only template without a header is valid but may perform less well visually.

<Tabs>
  <Tab title="TEXT">
    A single line of plain text. Supports one optional variable placeholder (`{{1}}`).

    Use for: subject-line-style context above the body — store name, offer headline, or a personalized greeting that would feel redundant in the body.
  </Tab>

  <Tab title="IMAGE">
    An uploaded image displayed above the body. The image is stored in Galantis and uploaded to Meta's media infrastructure.

    Use for: product shots, promotional banners, brand imagery. Meta requires images meet minimum size and format standards — see [Support — Catalog Sync Errors](/whatsapp/support/troubleshooting/catalog-sync-errors) for image requirements.
  </Tab>

  <Tab title="VIDEO">
    An uploaded video displayed above the body.

    Use for: product demonstrations, brand videos, how-to content. Keep videos short — WhatsApp loads media inline and long videos create friction.
  </Tab>

  <Tab title="DOCUMENT">
    An uploaded PDF or document file.

    Use for: product guides, size charts, menus, or any reference material the customer needs to download or view.
  </Tab>

  <Tab title="PRODUCT">
    A single product pulled from your synced Meta Catalog. Displays the product image, name, and price.

    Use for: Single Product Message (SPM) format templates. Requires a connected and synced Meta Catalog. See [Template Formats](./template-formats).
  </Tab>

  <Tab title="LOCATION">
    A location pin with coordinates, name, and address.

    Use for: store location messages, event venue details, or delivery address confirmations.
  </Tab>
</Tabs>

***

### Body (required)

The body is the main text of the message. It is the only required component — a template with only a body and no header, footer, or buttons is valid.

**Variable placeholders** are defined in the body using positional syntax: `{{1}}`, `{{2}}`, `{{3}}`. Each placeholder is mapped to a customer or order data field when the template is used in a campaign or automation. Variable positions must be sequential starting from `{{1}}` — gaps in the sequence (e.g., using `{{1}}` and `{{3}}` without `{{2}}`) will cause submission to fail.

**Rich text** — the body supports bold (`*text*`), italic (`_text_`), and strikethrough (`~text~`) formatting.

<Note>
  Meta requires that all variable placeholders in a submitted template include example values — concrete sample text that demonstrates what the variable will contain at send time. Submitting a template with empty variable examples is a common rejection cause. Fill in realistic example values for every `{{N}}` placeholder before submitting.
</Note>

***

### Footer (optional)

A short line of static text below the body. Does not support variables. Character limit applies — keep it brief.

Common uses:

* Opt-out instruction: `Reply STOP to unsubscribe`
* Brand tagline
* Legal or compliance notice

***

### Buttons (optional, up to 3)

Buttons appear below the footer and give the customer a tappable action. Up to three buttons can be added per template, but all buttons must be of compatible types — not all button type combinations are supported by Meta.

<Tabs>
  <Tab title="QUICK_REPLY">
    A tappable reply button that sends a predefined text response back to your WhatsApp number when the customer taps it.

    Use for: simple binary responses ("Yes, I'm interested" / "No thanks"), feedback collection, or opt-in confirmation flows.

    The reply text is defined at template creation time and is fixed — it cannot be personalized per recipient.
  </Tab>

  <Tab title="URL">
    Opens a link in the customer's browser when tapped. Supports a dynamic URL variable — the path or query string can be personalized per recipient using a `{{1}}` placeholder in the URL field.

    Use for: "Shop now" links to collection pages, "View order" links to order status pages, abandoned checkout recovery links.

    <Tip>
      Use dynamic URL variables to link directly to a customer's abandoned checkout URL or a personalized recommendation page rather than a generic homepage.
    </Tip>
  </Tab>

  <Tab title="PHONE_NUMBER">
    Initiates a phone call to a specified number when tapped.

    Use for: customer service contact, sales team calls, or support escalation paths where a live call is the appropriate next step.
  </Tab>

  <Tab title="COPY_CODE">
    Copies a predefined text string to the customer's clipboard when tapped. Typically used for discount codes.

    Use for: promotional offer codes, referral codes, or any fixed string the customer needs to paste elsewhere.

    The code is set at template creation time. If your offer codes vary per customer, use a URL button linking to a personalized checkout with the discount pre-applied instead.
  </Tab>
</Tabs>

## Submission and what happens next

When you click **Submit**, Galantis sends the template to Meta's Template API. The template status changes to `PENDING_APPROVAL` and Meta begins its review.

Meta reviews templates for:

* Category accuracy — does the content match the declared category?
* Variable example completeness — are all `{{N}}` placeholders accompanied by example values?
* Content policy compliance — does the message contain prohibited content?
* Button configuration validity — are the button types and values correctly formed?

Approval is typically returned within minutes to a few hours. The template status updates automatically in Galantis when Meta responds — you do not need to manually check or refresh. See [Approval Lifecycle](./approval-lifecycle) for the full status reference.

## Best practices

* **Write the body copy first, then set variables.** Decide what the message says before deciding what to personalize — over-using variables produces awkward, robotic-feeling messages.
* **Always include example values for every variable placeholder.** Empty examples are a rejection trigger. Use realistic values that reflect actual customer data — `Sarah` for `customer.first_name`, `$89.00` for `order.total_price`.
* **Keep footer text genuinely brief.** The footer competes with the body for the customer's attention. `Reply STOP to unsubscribe` is ideal — anything longer reduces the clarity of the main message.
* **Test button URLs before submitting.** A URL button linking to a broken or redirecting URL is a poor first impression and may affect quality signals. Verify all URLs are live and landing on the intended destination.
* **Do not resubmit a rejected template without addressing the rejection reason.** Repeated submissions of the same rejected content signals disregard for Meta's policies and may affect your account standing.

## Related guides

* [Template Categories](./template-categories) — Choosing the correct category before building
* [Template Formats](./template-formats) — Structural format options beyond the standard layout
* [Variables & Localization](./variables-localization) — Variable placeholder mapping and language management
* [Approval Lifecycle](./approval-lifecycle) — What happens after submission
