Skip to main content
Real-world template patterns, organised by category. Each example shows the body, variables, buttons, and the reasoning for its category. Adapt to your brand and submit — they’re written to clear Meta’s review with minimal friction.
Always personalise the copy to match your actual business. Generic or overly templated content is a common cause of rejection.

Utility templates

Transactional updates tied to something the user already did. Usually free inside the 24h window, otherwise priced at the Utility rate.

Order confirmation

  • Name: order_confirmation
  • Category: UTILITY
  • Header: TEXT — Order confirmed ✅
  • Body:
  • Variables: {{1}} = first name, {{2}} = order ID, {{3}} = total
  • Footer: Customer Support Team
  • Buttons:
    • URL: “View order” → https://example.com/orders/{{1}}
Why Utility: responds directly to a purchase the user initiated.

Shipping status update

  • Name: shipping_in_transit
  • Category: UTILITY
  • Body:
  • Footer: Track it in real time
  • Buttons:
    • URL: “Track shipment” → https://example.com/track/{{1}}
    • QUICK_REPLY: “Change address”
Why Utility: fact about an existing order, not a promotion.

Appointment reminder

  • Name: appointment_reminder_24h
  • Category: UTILITY
  • Body:
  • Buttons:
    • QUICK_REPLY: “Yes, I’ll be there”
    • QUICK_REPLY: “Need to reschedule”
Why Utility: confirms a scheduled event the user booked.

Account alert

  • Name: account_security_alert
  • Category: UTILITY
  • Body:
  • Buttons:
    • URL: “Review activity” → https://example.com/security/{{1}}
    • QUICK_REPLY: “That wasn’t me”
Why Utility: security notification tied to a specific account event.

Payment receipt

  • Name: payment_receipt
  • Category: UTILITY
  • Header: DOCUMENT (PDF sample of the receipt)
  • Body:
  • Buttons:
    • URL: “View history” → https://example.com/payments
Why Utility: confirms a transaction the user authorised.

Low balance / quota warning

  • Name: low_balance_alert
  • Category: UTILITY
  • Body:
  • Buttons:
    • URL: “Top up” → https://example.com/topup
Why Utility: reports a factual account state.

Marketing templates

Promotional content. Always charged at the Marketing rate (outside Free Entry Points) and counts toward the per-user marketing cap. Requires explicit marketing opt-in.

Product launch announcement

  • Name: launch_new_product
  • Category: MARKETING
  • Header: IMAGE (product hero shot)
  • Body:
  • Footer: Reply STOP to unsubscribe
  • Buttons:
    • URL: “See the product” → https://example.com/p/{{1}}
    • QUICK_REPLY: “Tell me more”
Why Marketing: promotes a new product.

Back in stock

  • Name: back_in_stock
  • Category: MARKETING
  • Body:
  • Footer: Reply STOP to unsubscribe
  • Buttons:
    • URL: “Shop now” → https://example.com/p/{{1}}
Why Marketing: drives a new purchase decision.

Price drop alert

  • Name: price_drop_alert
  • Category: MARKETING
  • Body:
  • Footer: Reply STOP to unsubscribe
  • Buttons:
    • URL: “See it” → https://example.com/p/{{1}}
    • QUICK_REPLY: “Not interested”
Why Marketing: promotes a purchase decision based on a price change.

Flash sale / limited-time offer

  • Name: flash_sale_announcement
  • Category: MARKETING
  • Header: IMAGE (sale hero)
  • Body:
  • Footer: Reply STOP to unsubscribe
  • Buttons:
    • URL: “Shop” → https://example.com/sale

Customer survey (NPS)

  • Name: nps_survey_request
  • Category: MARKETING
  • Body:
  • Buttons:
    • QUICK_REPLY: “10”
    • QUICK_REPLY: “7-9”
    • QUICK_REPLY: “6 or lower”
Why Marketing: not transactional; solicits opinion for business benefit. (Some teams misclassify this as Utility — it’s not.)

Re-engagement

  • Name: reengagement_30_days
  • Category: MARKETING
  • Body:
  • Footer: Reply STOP to stop receiving messages
  • Buttons:
    • QUICK_REPLY: “Show me”
    • QUICK_REPLY: “No, thanks”

Authentication templates

Authentication templates are a dedicated Meta layout for OTPs and verification codes. The structure is fixed — a code, one short line of context, and a COPY_CODE button — and the editor guides you through it. No marketing, no extra content beyond the code. Typical use cases (all follow the same structure, only name and wording change): login OTP, two-factor authentication, password reset, email verification, phone verification. The console’s template editor guides you through the Authentication-specific layout, including ONE_TAP auto-fill and other Authentication subtypes.

The pitfalls you’ll avoid with these patterns

Category and content

  • Don’t mix marketing into Utility — even a small upsell (“enjoy 10% off your next purchase”) turns an order confirmation into a Marketing reclassification risk.
  • Don’t load Authentication with context — keep it to the code, a one-line instruction, and a copy button.
  • Always include an opt-out line on Marketing footers — “Reply STOP to unsubscribe” or locale equivalent. Missing this is the #1 cause of Marketing rejections.
  • No clickbait or excessive formatting — ALL CAPS throughout, walls of emojis, ”🔥🔥🔥 ACT NOW 🔥🔥🔥” — Meta rejects theatrics, especially in Marketing.

Variables

  • Don’t start the body with a variable — Meta rejects bodies that begin with {{1}}. Lead with a literal word (Hi {{1}}, Hey {{1}}, Your order {{1}}, etc.).
  • Don’t place consecutive variables without text between them{{1}} {{2}} with no literal separator gets rejected. Always anchor variables with surrounding text.
  • Number variables sequentially from {{1}} — no gaps ({{1}} then {{3}}), no starting at {{2}}, no duplicate indexes.
  • Sample values must match the variables exactly — if the body has 3 variables, you provide 3 sample values. Mismatches cause PARAMETER_MISMATCH rejections.
  • Sample values must be realistic — use Ana, A-10042, not FIRSTNAME or {{1}}.

URL buttons

  • URL buttons may contain at most one variable, at the endhttps://example.com/orders/{{1}} works; https://example.com/{{1}}/orders doesn’t.
  • Don’t put URLs in the body text — all links go in URL buttons. Plain URLs in the body are a rejection flag.

Character limits

  • Body: up to 1024 characters
  • TEXT header: up to 60 characters
  • Footer: up to 60 characters, no variables
  • Button labels: up to 25 characters

Media headers

  • Upload a real, working sample — Meta fetches the sample image, video, or document during review. Broken URLs, placeholder images, or empty PDFs cause rejections. Upload a realistic sample that represents what the user will receive in production.

What’s next

Template categories

How Meta categorizes templates and when reclassification happens.

Approval flow

What happens after submission, rejection reasons, pausing.

Per-user marketing limits

The dynamic cap Meta applies to Marketing templates per user.

Compliance

Opt-in, opt-out, and what counts as a policy violation.