A template message is any message your business sends first — before the customer has messaged you, or after the 24-hour window has closed. Because these are business-initiated, Meta reviews them before they can be used. Here's how to write templates that get approved and stay in the category you expect.

The three template categories

  • Utility — must be non-promotional and tied to something the customer did or asked for (an order, an account, a booking, a payment), or be genuinely essential. Order confirmations, shipping updates, appointment reminders, receipts. Usually cheaper than marketing.
  • Authentication — one-time passcodes and login verification. Tightly structured; follow Meta's format.
  • Marketing — anything promotional: offers, announcements, re-engagement, and general surveys or feedback requests. Always charged, subject to Meta's per-user marketing limits, and customers can switch marketing from your business off in WhatsApp.

Meta decides the category

You choose a category when you submit, but Meta has the final word. A template submitted as utility that Meta finds promotional is approved as marketing rather than rejected — and charged as marketing. Since September 2026, Meta can also change the category of any approved template when the messages it actually sends don't fit, even if the category was confirmed before. Write each template for one clear purpose and keep what you send through it on that purpose.

Anatomy of a template

A template has an optional header, a body, an optional footer, and optional buttons. The body can include variables written as {{1}}, {{2}} and so on (or named ones such as {{first_name}}), which you fill in at send time:

Hi {{1}}, your order {{2}} is out for delivery and arrives today between {{3}}. Reply here if anything's not right.

Keep variables meaningful, give Meta an example value for each one, and don't put the whole message into a single {{1}}: Meta treats a template whose content is unclear — a body that is just a variable — as marketing.

Why templates get rejected

  • Dangling variables — the body starts or ends with a variable.
  • Too many variables for the length of the text.
  • Malformed variables — broken braces, numbering with gaps ({{1}} then {{3}}), or missing example values.
  • Duplicates — the same body and footer as a template you already have.
  • Policy content — prohibited goods or services, misleading claims, scams.

At send time, keep variable values short and clean (no line breaks or long runs of spaces): Meta can refuse a send whose parameters don't pass its checks.

After approval

Review time varies, so don't plan a launch around an instant approval. And approval isn't permanent: a template that draws blocks and reports can be paused or disabled for quality, and its category can change as described above. Keep an eye on status and quality.

Where walpio helps

walpio checks a template before submitting it — lower-case name, body within 1,024 characters, no variable at the start or end, numbering without gaps, an example for every variable — then tracks its status, category, quality and any rejection reason, and sends your systems a callback when its status changes. Once approved, a text rule lets your systems keep sending their own wording: outside the window walpio sends the matching template with the values filled in, cleaned of stray line breaks and extra spaces.