Templates
Design WhatsApp message templates that Meta approves the first time, with variables, media, and the common rejection traps to avoid.
WhatsApp does not let you send unsolicited free-form messages. To start a conversation, you must send an approved template — a pre-written message structure that Meta has reviewed. This guide covers the entire template lifecycle inside Lynkist.
Why templates exist
WhatsApp wants every conversation initiated by a business to be either:
- Solicited — the recipient sent you a message in the last 24 hours (the "service window"), in which case you can reply freely
- Templated — you're sending a pre-approved structure (the recipient may not have contacted you recently)
Templates exist so Meta can pre-screen for spam, deception, and policy violations.
Template categories
Every template belongs to one of three categories. Pick the right one — the wrong category is the most common rejection reason.
| Category | Use for | Examples |
|---|---|---|
| Utility | Transactional updates about something the user already opted into | Order shipped, OTP, appointment reminder, payment receipt |
| Marketing | Promotional content, offers, announcements | Sale alert, new product launch, re-engagement |
| Authentication | One-time passwords only | Login OTP, 2FA code |
Marketing templates are charged at a higher conversation rate than utility. Authentication templates have special formatting rules (Meta only approves a specific OTP-style structure).
Create a template in Lynkist
- Go to Templates → Create new
- Pick a category
- Pick a language (you'll likely have a separate version of the same template for each language you support)
- Give it a unique name in
snake_case— names cannot have uppercase letters or spaces - Build the body in the editor
The four sections of a template
A template has up to four parts. Most templates use only header and body.
Header (optional)
Either a short text line, an image, a video, a document, or a location. The header is the first thing recipients see — use it for the visual hook (image of the product, document icon for a receipt, etc.).
Body (required)
The main message. Up to 1024 characters. Supports variables and basic formatting.
Hi {{1}}, your order *{{2}}* has been shipped 📦
Track it here: {{3}}
Reply STOP to opt out.Footer (optional)
A single short line — typically a legal disclaimer or opt-out instruction. 60 character limit.
Buttons (optional)
Up to 10 quick-reply buttons, or up to 2 call-to-action buttons (URL or phone call). Quick replies are great for "Yes / No" or for routing inbound to specific topics.
Variables and substitution
Use {{1}}, {{2}}, {{3}} etc. as placeholders. Each variable becomes a parameter at send
time.
Meta is strict about variables. They reject templates that:
- Use a variable as the only content (e.g., body =
{{1}}) - Use a variable at the very start or very end without surrounding text
- Have ambiguous variables where the meaning is unclear from context
- Use too many variables relative to the static text
A safe rule: keep the ratio of static text to variables at 3:1 or higher. If the body is
Hi {{1}}, {{2}} is {{3}}, you'll almost certainly get rejected.
Submitting for approval
When you click Submit for approval, Lynkist hands the template off to your BSP, which forwards it to Meta. Approval times vary:
| Template type | Typical approval time |
|---|---|
| Utility, well-formed | 1–6 hours |
| Marketing | 6–24 hours |
| Authentication | Often within an hour |
| Anything Meta flags for review | 1–3 days |
You'll see the status update in the dashboard:
- Pending — submitted, awaiting Meta review
- Approved — ready to use in messages and campaigns
- Rejected — see the rejection reason and either fix and resubmit, or delete
The top 8 rejection reasons
The vast majority of rejections fall into these buckets:
- Wrong category. Marketing content submitted as utility, or vice versa.
- Promotional language in utility templates. "Special offer", "exclusive deal" — these are marketing, not utility.
- Variable as the only content.
{{1}}alone is not a template. - Misleading content. Templates that look like a personal message when they're not, or that misrepresent the sender.
- Excessive emojis or all-caps shouting.
- Sensitive content. Gambling, adult content, certain financial services are restricted by region.
- URLs in body that aren't on a CTA button. Use the URL button for links — Meta prefers it.
- Spelling errors or grammar that suggests low quality.
Media in templates
If your header is an image, video, or document, you upload a sample during template creation. Meta uses this sample to review the template. At send time you pass the actual media URL or upload ID.
- Images: JPG or PNG, ≤ 5 MB
- Videos: MP4 or 3GPP, ≤ 16 MB
- Documents: PDF (most reliable), ≤ 100 MB
- Audio: AAC, M4A, AMR, MP3, OGG, ≤ 16 MB
Lynkist uploads media via the /meta/media endpoint, which proxies to your BSP for
hosting. You don't need to manage Meta media IDs yourself — pass a URL or upload through
the dashboard and we handle the rest.
Updating an existing template
Approved templates can be edited once every 24 hours, and the edit goes back through Meta review. The template name and category cannot change after creation — to change either, create a new template.
Best practices
- Write the body for the recipient, not for yourself. First-person, conversational tone, no marketing jargon.
- Keep utility utility. Resist the urge to slip a promotional line into a shipping update.
- Pre-build the templates you'll need in the next 30 days. Approval takes time; you don't want to be waiting on approval the day a campaign should launch.
- Use the same template across languages. Create one logical template, then add language variants — keep the structure identical so analytics aggregate cleanly.