Create a WhatsApp message template
A campaign can only send a template that Meta has reviewed and approved — there is no free-text send. This page builds one. Expect about 15 minutes to write it, and however long Meta takes to answer; the template’s status pill changes on its own when it does.
Before you start — you need a WhatsApp Business number connected on the Integrations page, Message Templates access on that account (or workspace ownership), the wording you want to send, and a real example of every value that changes from person to person.
Steps
Open the template editor
In the sidebar, under Messaging, click Templates, then click New Template.
Messaging → Templates. Templates belong to a WhatsApp account — check the account chip before you start.
The editor fills the screen: the form on the left, a live WhatsApp preview on the right. On a phone it is a sheet, and Preview opens the bubble on its own.
Name it, and choose a category and language
Name is how you will find the template later. It is forced to lowercase as
you type, and anything that is not a letter, a number or an underscore becomes an
underscore — so Appointment Reminder becomes appointment_reminder.
A template can never be renamed. Name is read-only once the template exists. If you need a different name, duplicate it under the new name instead — see Change, copy or delete a template.
Category is the choice Meta cares about most. The ⓘ beside it opens Choosing a category:
| Category | What belongs in it |
|---|---|
| Marketing | Promos, offers, announcements. |
| Utility | Updates tied to an existing order or account — reminders, confirmations, alerts. |
| Authentication | One-time codes for login or verification. |
Miscategorising is the single most common reason Meta rejects a template — filing
a promotion as Utility to dodge marketing limits, for instance. Pick the category
that matches the content, not the one with fewer restrictions. The other common
rejections are Missing example values., Prohibited content. and
Near-duplicate templates.
Language is a searchable list of 68 languages, defaulting to English. Regional variants are separate languages to Meta, so English and English (UK) are two different templates.
Authentication templates use a completely different form — if that is what you need, follow Create a one-time code template instead.
Add a header, if you want one
Header (optional) is a three-way choice: None, Text, or Image / video / doc (it reads Media on a narrow screen).
Text gives you a single line capped at 60 characters, with formatting buttons and the ability to insert a variable as a chip. A header variable needs an example value.
Do not format a text header. Meta’s own documentation says not to use markdown characters in a text header, so a bold or italic header may be rejected at review. The formatting buttons are there, but the risk is yours.
Image / video / doc gives you a dropzone. What it accepts:
| Family | Formats | Largest file |
|---|---|---|
| Images | JPG or PNG | 5 MB |
| Videos | MP4 or 3GP | 16 MB |
| Documents | PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX or TXT | 100 MB |
A file of the wrong type is refused on the spot, in two sentences — what it is,
then what to use instead. For example:
WhatsApp doesn’t accept ZIP files as a template header. Pick a JPG or PNG image, an MP4 or 3GP video, or a PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX or TXT document.
An empty file gets its own message:
“<filename>” is empty (0 KB). Pick a file with content in it.
The preview on the right is what a recipient sees, with your example values filled in.
Write the body
Body is the message. Up to 1,024 characters, and you can format it with the
four buttons above the field — Bold, Italic, Strikethrough and
Monospace — which wrap your selection in WhatsApp’s own markers: * for
bold, _ for italic, ~ for strikethrough and three backticks for monospace.
The body is the one part WhatsApp is documented to format. There is an emoji
picker too, and a live character count.
Meta has three rules about the body that are easy to trip over:
- A variable cannot be the very first or the very last thing in the message.
- The body cannot be only variables — there has to be wording around them.
- No more than ten emoji, and never three line breaks in a row.
Put each person’s own details into the message
Press Insert field for the two ways to add a value that changes per person.
The first choice in the menu is Blank placeholder / Fill in at send time —
a value you will type when you send a campaign. It appears as Placeholder 1 and
opens straight away so you can type its example.
Everything below that is your database’s own fields, searchable through
Search fields…. Pick one and a chip drops into the text showing the field’s real
name, with its example value filled in for you.
A chip carries the field's real name — no numbered token to count or type.
Click any chip to open its settings: Linked field (which database field it
reads, or Not linked) and Example value (placeholder e.g. John Doe). It
says Enter to commit, or, while the example is still empty,
Needs an example before you can submit.
Chip colour is the whole signal. Amber means the chip still has no example value; grey means it is fine. The test is the example, not whether the chip is linked to a field — a linked field whose sample came back empty is amber too.
A chip with a small @ in front of it reads from the database, so every recipient gets their own value. A chip without it is a literal that everyone receives identically.
Every variable needs an example value before you can submit. Meta’s reviewers read the example; your recipients never see it.
Add a footer, if you want one
Footer (optional) is one line of up to 60 characters —
e.g. Powered by Raion Hub. It has the same four formatting buttons, but Meta
documents no footer formatting either way, so markdown here may simply not
render.
Add buttons, if you want them
Buttons (optional) offers four tiles:
| Tile | What it does |
|---|---|
| Quick reply | A one-tap reply, like “Yes” |
| Call | Dials a phone number |
| Visit a link | Opens a website |
| Copy a code | Copies an offer code |
Each button you add gets a label field (Button label) plus its own second
field — a URL (https://raiontech.io), a phone number (+60123456789) or an
offer code (e.g. SAVE20). A tile greys out once you hit its limit.
| Limit | Value |
|---|---|
| Quick reply buttons | 10 |
| Visit a link buttons | 2 |
| Call buttons | 1 |
| Copy a code buttons | 1 |
| Buttons in total | 10 |
| Characters in a button label | 25 |
| Characters in an offer code | 20 |
Only the first three buttons show in WhatsApp. Anything past three hides behind a See all options list on the recipient’s phone, so put the button you most want tapped first.
Check it, then submit it
Check before submitting runs a dry run against your draft. It never blocks you — it is advice.
- A clean draft returns
No advisories — this looks ready. Meta still reviews every new template. - Otherwise you get
N advisories to review before submittingand a list, each row naming the thing and what to do about it.
Advisories never stop a submission — they are the problems Meta is likely to raise.
When you are happy, press Submit for review. The toast reads
Template submitted for review. and the template appears in the list with an
amber Pending review pill.
Wait for Meta
The list updates itself — you do not need to reload. When Meta answers, the pill flips to Approved or Rejected on its own.
An Approved template can back a campaign straight away. See Send a WhatsApp campaign, or use the Use in a campaign icon on the template’s own row.
If something goes wrong
| What you see | Why | What to do |
|---|---|---|
| Submit for review is greyed out | Something in the draft is certain to be rejected | Read the issue count beside the button and fix what it names |
Every variable needs an example value before you submit. | At least one chip is amber | Click each amber chip and fill Example value |
Give the template a name. or Add your message body. | A required field is still empty | Fill it in and press again |
The body can't be only variables. Add some wording around them. | The message is nothing but chips | Write words around them |
Meta rejects more than two line breaks in a row. Remove the extra empty lines. | Three or more blank lines somewhere in the body | Delete the extra blank lines |
Body has N emoji. Meta allows 10. | Too many emoji in the body | Remove some |
Body is N characters. Meta allows 1024. | The body is too long | Shorten it — the count above the field is live |
Header is N characters. Meta allows 60. | The text header is too long | Shorten it |
Your header variable needs an example value. | The header has a variable with no example | Click the header chip and fill in its example |
Upload a header image, video, or document. | The header is set to media with no file | Drop a file on the dropzone, or set the header back to None |
Add the offer code for your “Copy a code” button. | A Copy a code button has a label but no code | Fill in the offer code field on that row |
Name can use lowercase letters, numbers and underscores only. | The name holds something other than lowercase letters, numbers and underscores | Clear the field and type the name again, letting the editor convert it |
Meta did not accept this template | Meta refused the submission. Its own sentence sits beneath, naming the field | Fix what it names and submit again |
Connect a WhatsApp account first | No WhatsApp Business account is connected | Click Go to Integrations and connect one |
Message Templates isn't in your plan | Your plan does not include the WhatsApp channel | An owner can click View plans; anyone else asks an owner to upgrade |
No Message Templates access | You have no template permission on any WhatsApp account | Ask a workspace owner or an admin to grant it |
Next
- Send a WhatsApp campaignA campaign sends one approved WhatsApp template to a list of people — numbers
- Find a template and check whether Meta approved itTemplates belong to a WhatsApp number, and none of them can be used in a campaign
- Change, copy or delete a templateEditing an approved template has a cost: it goes back to Meta and cannot be used
- Create a one-time code templateAn Authentication template is the one that sends a login or verification