How to create a message template on the WhatsApp Business API
Message templates are the pre-approved messages you use to start conversations, send order updates, deliver OTPs and run campaigns on the WhatsApp Business API. Every business-initiated message that lands outside the free 24-hour service window has to be a template that Meta has reviewed and approved. This tutorial walks you through creating your first template inside InfiQ — from picking the right category to naming variables, adding buttons and submitting for approval — plus the mistakes that get templates rejected or quietly throttled. If your WhatsApp Business API account is already live with InfiQ, you can have a working template approved and sending within the hour.
What you'll do
Create a WhatsApp message template by choosing the correct category (marketing, utility or authentication), writing header/body/footer text with numbered variables like {{1}}, adding any quick-reply or call-to-action buttons, then submitting for Meta approval. Category drives both approval and billing — WhatsApp bills per delivered template message, so pick utility over marketing wherever the message genuinely qualifies.Step 1 — Choose the right template category
Category is the single most important decision you make, because it drives both whether your template is approved and how much each delivered message costs. WhatsApp bills per delivered message by category, so mislabelling a template can quietly inflate your spend or get it rejected outright. In the InfiQ dashboard, open Templates and click Create Template, then pick the category that honestly matches the message's purpose.
- Marketing — promotions, offers, product launches, re-engagement and anything designed to drive a sale. Highest rate, and requires clear opt-in.
- Utility — transactional follow-ups tied to a specific action the customer took: order confirmations, shipping updates, payment receipts, appointment reminders. Lower rate than marketing.
- Authentication — one-time passcodes and login/verification codes only, using Meta's authentication template format with the built-in copy-code button.
- Don't disguise a promotion as a utility message to save cost — Meta re-categorises templates it judges wrongly labelled, and repeated mismatches hurt your quality rating.
Step 2 — Write the header, body and footer
A template is built from up to four parts: an optional header, the required body, an optional footer, and buttons. Give the template a lowercase, snake_case name (for example order_shipped_v2) and select the language you're submitting — you create a separate language version for each locale you send in. Write natural, specific copy: Meta rejects vague, spammy or placeholder-looking text, and messages that read like a genuine business notification sail through review far more often.
- Header (optional) — a short line of text, or a media header (image, video or document). Text headers support one variable; media headers need a sample file at submission.
- Body (required) — the main message, up to 1024 characters. Insert variables as numbered placeholders {{1}}, {{2}}, {{3}} in order, with no gaps.
- Footer (optional) — a short static line, often used for 'Reply STOP to opt out' on marketing templates.
- Keep the ratio of variables to fixed text reasonable — a body that is almost entirely {{1}} {{2}} {{3}} looks like spam and is commonly rejected.
Step 3 — Add variables and sample values
Variables let one approved template serve thousands of personalised sends. WhatsApp uses positional placeholders — {{1}}, {{2}} and so on — which you map to real data (customer name, order ID, tracking link, OTP) at send time. During creation you must supply a realistic sample value for every variable so Meta's reviewers can see the message in context. Samples that are obviously fake ('test', 'xxxx', 'asdf') are a frequent, avoidable cause of rejection.
- Number variables sequentially with no skipped indices — {{1}} then {{2}}, never {{1}} then {{3}}.
- Provide meaningful samples: {{1}} = 'Aarti', {{2}} = 'IQ-84213', {{3}} = 'https://track.example.in/84213'.
- Never put an OTP or verification code in a marketing or utility body — use the dedicated authentication template type instead.
- Avoid leading or trailing whitespace around a variable and never place two variables side by side with no separating text.
Step 4 — Add buttons (optional but powerful)
Buttons turn a static notification into an action. WhatsApp supports quick-reply buttons that send a predefined text response back to you, and call-to-action buttons that open a URL or dial a phone number. In InfiQ you add these in the Buttons section of the template builder; they are reviewed as part of the template, so URLs and labels need to be legitimate and match the message.
- Quick reply — up to a handful of tappable options like 'Track order', 'Talk to agent' or 'Not now', ideal for triggering the next step of an automated flow.
- Call-to-action — a 'Visit website' button (static or a dynamic URL with a {{1}} suffix) or a 'Call phone number' button.
- Authentication templates use a special one-tap copy-code button rather than custom buttons.
- Keep button labels short and honest — a 'Claim ₹500' button on a template with no such offer will be rejected.
Step 5 — Submit, then test before you scale
When the template looks right, click Submit for approval. Most templates are reviewed within minutes to a couple of hours, though it can take up to 24. InfiQ shows the live status — Pending, Approved or Rejected — and surfaces Meta's rejection reason so you can fix and resubmit fast. Once approved, send a real message to your own number first to confirm the variables map correctly and the buttons work, then roll out gradually.
- Test with your own WhatsApp number using live variable values before any bulk send.
- If the number is new, warm it up — start with lower volumes and grow as your quality rating and messaging tier climb, rather than blasting on day one.
- Watch delivery and read status plus your template's per-template quality rating in the dashboard; a template flagged low-quality can be paused by Meta.
- Version your changes with clear names (order_shipped_v2) instead of editing meaning inside an already-approved template.