# WhatsApp templates: create, sync and use

> On the Templates tab of the WhatsApp screen, create a template with a text header, a body with variables, a footer and buttons, or sync the ones already at Meta, including those with an image, video or document. Once it's approved, pick the template in the campaign and link each variable to a contact field.

Fonte: https://wiki.bip.marketing/en-us/whatsapp-templates · Atualizado: 2026-10-08

<UseCaseMeta effort="nocode" channel="whatsapp" plan="lite" />

Every WhatsApp message BIP sends starts from a Meta-approved template. This is where you build yours, track their approval and personalize each message with each contact's name, coupon or course of interest.

<Checklist items="WhatsApp connected to BIP (see the Connect WhatsApp Business to BIP guide)|The custom fields that will fill the variables, such as Coupon, created in Settings|The message text and a sample value for each variable|For a header with an image, video or document: access to Meta's WhatsApp Manager" />

## What you'll get

- Campaign-ready templates, created without leaving BIP and sent straight to Meta for approval.
- Personalized messages: name, coupon or any contact field in the body, the header and the buttons.
- The templates you already have at Meta, including those with an image, video or document, brought in with one click.
- Approval status and rejection reason that update on their own.
- Several templates created at once from a JSON file.

## How it works

<Steps items="Create the template in BIP or sync the ones already at Meta|Wait for approval: the status changes to Approved on its own|In the campaign, link each variable to a contact field" />

A template has up to four parts: **Header**, **Body**, **Footer** and **Buttons**. The parts that change from person to person are the variables:

- in the body, the variables are `{{1}}`, `{{2}}`, `{{3}}` and so on, in order;
- the text header and each URL button have their own numbering and accept a single variable, always `{{1}}`. The header's `{{1}}` is a separate value from the body's `{{1}}`;
- during approval, Meta sees the sample values; at send time, each contact gets their own data, based on the mapping you set up in the campaign.

## Step by step

### 1. Open the Templates tab

1. In the menu, click **WhatsApp** and open the **Templates** tab.
2. Under **All templates**, each row shows the name, language, category, status and the beginning of the body.
3. Filter by **All categories** (**Marketing** or **Utility**) and by **All statuses**.
4. Click a template to see the preview beside it, just as the message appears on a phone.

<Shot src="/img/templates-whatsapp/1-en-us.png" alt="Templates tab with the template list, the filters and a template preview" url="dash.bip.marketing/…/whatsapp?tab=templates" />

### 2. Create the template and set its identity

1. Click **Create template**. The **New WhatsApp template** screen opens.
2. Under **Identity**, fill in **Name (lowercase)**: lowercase letters, numbers and underscores only, like `horizonte_oferta_semana_en`. When you leave the field, BIP adjusts the name to this format.
3. Under **Category**, choose **Marketing** for offers, news and invitations. Choose **Utility** only for notices about an existing transaction, such as an order or an appointment.
4. Under **Language**, choose the language of the text: **English (US)** for American English.

<Shot src="/img/templates-whatsapp/2-en-us.png" alt="New WhatsApp template screen with the Identity section: name, category and language" url="dash.bip.marketing/…/whatsapp/templates/create" />

### 3. Write the header, body and footer

1. Under **Header**, choose the **Header type**: **None** or **Text**. With **Text**, write the bold line in **Header text**. It accepts one `{{1}}` variable; if you use it, fill in the sample value.
2. Under **Body**, write the message in **Body text**, with `{{1}}`, `{{2}}` where the contact's data goes. Under **Variable Samples**, enter a realistic example for each one.
3. Under **Footer**, use **Footer text (optional)** for a short, fixed line, such as the store name and the offer's end date.
4. Keep an eye on the **Preview**: it shows the message live, with the samples in place of the variables.

BIP checks Meta's rules as you type. If something is off, **Fix these issues before submitting:** appears with the list of what to adjust, and **Save Template** stays disabled until you fix it.

<Shot src="/img/templates-whatsapp/3-en-us.png" alt="Header, Body and Footer sections filled in, with the variable samples and the live preview" url="dash.bip.marketing/…/whatsapp/templates/create" />

### 4. Add the buttons

1. Under **Buttons**, click **Add button**. You can add up to 10 buttons.
2. Under **Type**, choose **Quick reply** or **URL**, and write the button's **Text**.
3. For a **URL** button, enter the full address. For a link that changes per contact, end the URL with `{{1}}`, like `https://www.example.com/summer?coupon={{1}}`, and fill in the sample.
4. Use the arrows to change the order and the trash can to remove a button.

A tap on a **Quick reply** button counts as a reply in the campaign stats. The conversation that follows continues in the WhatsApp Business app.

<Shot src="/img/templates-whatsapp/4-en-us.png" alt="Buttons section with a URL button with a variable and a quick reply button" url="dash.bip.marketing/…/whatsapp/templates/create" />

### 5. Submit for approval

1. Click **Save Template**. BIP submits the template to Meta, shows **Template submitted to Meta** and returns to the **Templates** tab.
2. The template joins the list with the status Meta returns, usually **Pending**. When Meta decides, the status changes on its own to **Approved** or **Rejected**.
3. If it's rejected, select the template: the **Rejection reason** appears above the preview.
4. Meta may change a template's category when it decides the content belongs to another category. BIP always shows the category Meta set.

BIP doesn't edit a template once it's submitted. To change the text, create another template with a new name. **Delete** removes the template from BIP and from your Meta account.

<Shot src="/img/templates-whatsapp/5-en-us.png" alt="Template list with a newly submitted Pending template and a Rejected one with its rejection reason" url="dash.bip.marketing/…/whatsapp?tab=templates" />

### 6. Sync your templates from Meta

1. Templates with an image, video or document header and templates with a copy code button are created in WhatsApp Manager, at Meta.
2. On the **Templates** tab in BIP, click **Sync from Meta**. BIP brings in every template on your account, with category, status and rejection reason, and shows when each one was synced.
3. Templates deleted at Meta leave the list at the next sync. Newly created **Pending** templates stay.
4. A synced template's header media becomes its default media in campaigns.

<Shot src="/img/templates-whatsapp/6-en-us.png" alt="Template with an image in the header, synced from Meta, in the Templates tab preview" url="dash.bip.marketing/…/whatsapp?tab=templates" />

### 7. Import several templates at once

1. Click **Import from JSON**. The **Import templates from JSON** window opens.
2. In **JSON array**, paste a list of templates in Meta's format: `name`, `category`, `language` and `components`. The ready-made JSON is in [Ready to copy](#ready-to-copy).
3. Click **Import**. Each template goes to Meta separately.
4. Check the result: the total that succeeded and failed and, on each row, the name and the error, if any. A template with an error doesn't hold up the others.

<Shot src="/img/templates-whatsapp/7-en-us.png" alt="Import templates from JSON window with the import result for each template" url="dash.bip.marketing/…/whatsapp?tab=templates" />

### 8. Test the template

1. Select an **Approved** template and click **Send test**. The **Test WhatsApp template** window opens.
2. In **Lead**, enter the email, ID, tracker or phone number (with + and the country code, no spaces) of one of your contacts in BIP.
3. Fill in the body **Variables** and click **Send Test**. The message is real and goes out from the default number.

This test fills in only the body variables. For templates with a variable in the header or in a button, save the campaign and use **Test Campaign**: that test follows the full variable mapping.

<Shot src="/img/templates-whatsapp/8-en-us.png" alt="Test WhatsApp template window with the contact and the variable values" url="dash.bip.marketing/…/whatsapp?tab=templates" />

### 9. Use it in a campaign and map the variables

1. In the campaign, under **Channel**, choose **WhatsApp**. The **WhatsApp Template** section appears.
2. Under **Template**, choose an approved template. The list shows the name, language and category.
3. Under **Phone Number**, keep **Use account default phone number** or choose another number.
4. If the template has a media header, you'll see **Header image** (for an image, so you can upload the file) or **Header media URL** (for a video or document). It's a single media file for the whole send. Left blank, the template's own media is used.
5. Under **Variable mappings**, click **Add variable mapping** for each variable. Under **Variable**, choose the part of the template, such as **Body · {{1}}**. Under **Lead field**, choose the data that takes its place.

Each variable is mapped only once, and the campaign can only be activated when every variable is mapped. If you switch templates, the mapping and the media are cleared. On BIP Full, the **Send WhatsApp** node in Flows uses the same mapping.

<Shot src="/img/templates-whatsapp/9-en-us.png" alt="WhatsApp Template section of the campaign with the template, the number and the variable mapping to contact fields" url="dash.bip.marketing/…/campaigns" />

## Reference

### Builder fields

| Section | Field | Rules |
| --- | --- | --- |
| Identity | **Name (lowercase)** | Lowercase letters, numbers and underscores. Required. |
| Identity | **Category** | **Marketing** or **Utility**. |
| Identity | **Language** | **English (US)**, **Portuguese (BR)**, **Spanish (ES)** or **Spanish (LATAM)**. |
| Header | **Header type** | **None** or **Text**. |
| Header | **Header text** | One bold line, with at most one `{{1}}` variable and its sample. |
| Body | **Body text** | Required. Variables `{{1}}`, `{{2}}`… in order, each with a sample in **Variable Samples**. |
| Footer | **Footer text (optional)** | A short, fixed line below the message. |
| Buttons | **Type** | **Quick reply** or **URL**. Up to 10 buttons. |
| Buttons | **Text** | The button label. |
| Buttons | **URL** | Full address. For a dynamic link, one `{{1}}` variable at the end, with a sample. |

For a header with an image, video or document, or a copy code button: create the template in WhatsApp Manager and use **Sync from Meta**.

### Validation messages

| Message | How to fix it |
| --- | --- |
| **The message body cannot start with a variable.** | Start with text: "Hi {{1}}!". |
| **The message body cannot end with a variable.** | End with text or punctuation after the last variable. |
| **Add text between variables — two variables cannot be next to each other.** | Separate the variables with words. |
| **Number the variables in order, starting at {{1}} with no gaps.** | Use `{{1}}`, `{{2}}`, `{{3}}`, with no gaps. |
| **Provide a sample value for every variable in the body.** | Fill in all the **Variable Samples**. |
| **The header supports at most one variable.** | Keep only `{{1}}` in the header. |
| **Provide a sample value for the header variable.** | Fill in the sample below **Header text**. |

### Categories

| Category | When to use it | Sends through BIP? |
| --- | --- | --- |
| **Marketing** | Offers, launches, invitations, re-engagement. | Yes |
| **Utility** | Notices about an existing transaction. Meta rejects or reclassifies promotional content. | Yes |
| **Authentication** | Access codes. The builder doesn't create them; they show up when they come from Meta. | No |

### Template status

| Status | What it means |
| --- | --- |
| **Pending** | Under review at Meta. |
| **Approved** | Ready for campaigns and tests. |
| **Rejected** | Meta turned it down. Read the **Rejection reason**. |
| **Paused** | Meta paused the template because of its quality. |
| **Disabled** | Meta disabled the template. |
| **In Appeal** | The rejection was appealed and is under review again at Meta. |

BIP also shows the other statuses Meta reports, such as **Flagged**, **Limit Exceeded**, **Locked**, **Archived**, **Unarchived**, **Reinstated**, **Pending Deletion** and **Deleted**. Only **Approved** templates in **Marketing** or **Utility** appear in campaigns.

### Variables at send time

| Template part | How it appears in **Variable** | What to fill in |
| --- | --- | --- |
| Body `{{n}}` | **Body · {{1}}** | One contact field for each variable. |
| Text header `{{1}}` | **Header · {{1}}** | One contact field. |
| URL button `{{1}}` | **Button 1 · {{1}}** | One contact field. The value goes at the end of the link. |
| Copy code button | **Button 2 · coupon code** | A contact field with the code the person copies. |
| Image, video or document header | A separate field above the mapping | One image or URL for the whole send. Left blank, the template's media is used. |

The button number follows the order of the buttons in the template. Templates with a location header can't be used in campaigns.

### Most-used contact fields

The **Lead field** list names the data in English. The most common ones:

| In the list | What goes in |
| --- | --- |
| **first name** | The first name: "Marina". |
| **name** | The full name: "Marina Alves". |
| **email** | The main email address. |
| **phone in national format** | The phone number in the country's format. |
| **"Coupon" field value** | The value of the custom field _Coupon_. |
| **formatted date from "Birth date" field** | The date in the _Birth date_ field, in YYYY-MM-DD format. |
| **kpi "Points" value** | The value of a KPI, such as _Points_. |

### Approval tips

- Pick the right category: offers and promotions are **Marketing**. **Utility** is only for an existing transaction.
- Use realistic samples for each variable. They're how Meta understands the message.
- Say who's talking: put the business name in the body or the footer.
- Write text before and after the variables, with no variables side by side.
- Use full links on your own domain, with no URL shorteners.
- Choose the **Language** of the text you wrote.
- Don't ask for sensitive data, such as ID documents or passwords.

## Ready to copy

Before using these, create the _Coupon_ and _Course of interest_ fields in **Settings** → **General** → **Fields**, with the **String** type. Replace `www.example.com` with your website's address.

### Weekly offer with a coupon (Loja Horizonte)

<WaTemplate name="horizonte_oferta_semana_en" category="MARKETING" header="An offer for {{1}} at Loja Horizonte" footer="Loja Horizonte · Offer valid through Sunday" buttons="View collection">
Hi {{1}}! This week, the Loja Horizonte summer collection is 20% off. Use coupon {{2}} online or in store through Sunday. Happy shopping!
</WaTemplate>

**URL** button: `https://www.example.com/summer?coupon={{1}}`

| Campaign variable | Lead field | Sample value |
| --- | --- | --- |
| **Body · {{1}}** | **first name** | Marina |
| **Body · {{2}}** | **"Coupon" field value** | SUMMER20 |
| **Header · {{1}}** | **first name** | Marina |
| **Button 1 · {{1}}** | **"Coupon" field value** | SUMMER20 |

### Saturday bake with reservations (Padaria Aurora)

<WaTemplate name="aurora_fornada_sabado_en" category="MARKETING" header="Special Saturday bake" footer="Padaria Aurora · Pickup at the counter" buttons="Save me one|Not now">
Hi {{1}}! This Saturday, Padaria Aurora is pulling sourdough bread and our house apple pie fresh from the oven. Reserve by Friday and pick up from 7 a.m. Want us to set one aside for you?
</WaTemplate>

Both buttons are **Quick reply** buttons. Anyone who taps either one within 24 hours of the send counts under **Replies**, and the reservation continues in the WhatsApp Business app.

| Campaign variable | Lead field | Sample value |
| --- | --- | --- |
| **Body · {{1}}** | **first name** | Tiago |

### Enrollment is open (Escola Atlas)

<WaTemplate name="atlas_matriculas_abertas_en" category="MARKETING" footer="Escola Atlas · 2027 enrollment" buttons="See class times|Talk to the school">
Hi {{1}}! Enrollment for the {{2}} course at Escola Atlas is open, with evening and Saturday classes. Save your spot by Friday and get 30% off your first monthly fee. Tap the button to see class times and prices.
</WaTemplate>

Fixed **URL** button: `https://www.example.com/enrollment`. The second button is a **Quick reply**.

| Campaign variable | Lead field | Sample value |
| --- | --- | --- |
| **Body · {{1}}** | **first name** | Sofia |
| **Body · {{2}}** | **"Course of interest" field value** | English |

### The three templates in JSON

Paste this into **Import from JSON** to create all three at once:

<Copy label="whatsapp-templates.json" code>
[
  {
    "name": "horizonte_oferta_semana_en",
    "category": "MARKETING",
    "language": "en_US",
    "components": [
      { "type": "HEADER", "format": "TEXT", "text": "An offer for {{1}} at Loja Horizonte", "example": { "header_text": ["Marina"] } },
      { "type": "BODY", "text": "Hi {{1}}! This week, the Loja Horizonte summer collection is 20% off. Use coupon {{2}} online or in store through Sunday. Happy shopping!", "example": { "body_text": [["Marina", "SUMMER20"]] } },
      { "type": "FOOTER", "text": "Loja Horizonte · Offer valid through Sunday" },
      { "type": "BUTTONS", "buttons": [
        { "type": "URL", "text": "View collection", "url": "https://www.example.com/summer?coupon={{1}}", "example": ["https://www.example.com/summer?coupon=SUMMER20"] }
      ] }
    ]
  },
  {
    "name": "aurora_fornada_sabado_en",
    "category": "MARKETING",
    "language": "en_US",
    "components": [
      { "type": "HEADER", "format": "TEXT", "text": "Special Saturday bake" },
      { "type": "BODY", "text": "Hi {{1}}! This Saturday, Padaria Aurora is pulling sourdough bread and our house apple pie fresh from the oven. Reserve by Friday and pick up from 7 a.m. Want us to set one aside for you?", "example": { "body_text": [["Tiago"]] } },
      { "type": "FOOTER", "text": "Padaria Aurora · Pickup at the counter" },
      { "type": "BUTTONS", "buttons": [
        { "type": "QUICK_REPLY", "text": "Save me one" },
        { "type": "QUICK_REPLY", "text": "Not now" }
      ] }
    ]
  },
  {
    "name": "atlas_matriculas_abertas_en",
    "category": "MARKETING",
    "language": "en_US",
    "components": [
      { "type": "BODY", "text": "Hi {{1}}! Enrollment for the {{2}} course at Escola Atlas is open, with evening and Saturday classes. Save your spot by Friday and get 30% off your first monthly fee. Tap the button to see class times and prices.", "example": { "body_text": [["Sofia", "English"]] } },
      { "type": "FOOTER", "text": "Escola Atlas · 2027 enrollment" },
      { "type": "BUTTONS", "buttons": [
        { "type": "URL", "text": "See class times", "url": "https://www.example.com/enrollment" },
        { "type": "QUICK_REPLY", "text": "Talk to the school" }
      ] }
    ]
  }
]
</Copy>

## How to measure

- On the **Templates** tab, filter **All statuses** → **Pending** to see what's still under review, and by **Rejected** to read each **Rejection reason**.
- Click **Sync from Meta** whenever you want to check the status of all your templates at once. The preview shows when each template was synced.
- Before the first campaign, do a test send and check the text with the contact's real data on your phone.
- To compare templates, send each one to part of your audience and compare **Read Rate** and **Reply Rate** in **Campaign Stats**.

## Frequently asked questions

### Why can't I create a template with an image in BIP?

BIP's builder creates text headers. For an image, video or document, create the template in WhatsApp Manager, at Meta, and click **Sync from Meta**. In the campaign, you choose the media for the send or use the template's own.

### Can I edit an approved template?

Not in BIP. Create a new template with another name and the updated text, and delete the old one if you won't use it anymore. If you edit the template in WhatsApp Manager, click **Sync from Meta** to bring the new version into BIP.

### Why doesn't my template show up in the campaign?

The campaign lists only **Approved** templates in the **Marketing** and **Utility** categories. Check the status on the **Templates** tab. If the template was created directly at Meta, click **Sync from Meta** first.

### What's the difference between Marketing and Utility?

**Marketing** is for offers, news and invitations. **Utility** is for notices about something the customer already did, such as an order or an appointment. If the content of a **Utility** template is promotional, Meta rejects it or changes its category to **Marketing**.

## See also

- [Connect WhatsApp Business to BIP](/en-us/connect-whatsapp)
- [Campaigns: one-time, recurring and API-triggered](/en-us/campaigns)
- [Import contacts from a spreadsheet](/en-us/import-contacts)
- [Segments: the 10 criteria to filter contacts](/en-us/segments)
