Approved WhatsApp Business Templates — How to Create Them Without Rejection
> cd .. / HUB_EDITORIALE
Software Gestionali

Approved WhatsApp Business Templates — How to Create Them Without Rejection

[2026-07-26] Author: Ing. Calogero Bono
> share
Zenithby Meteora Web The operating system for your business. Social, clients, bookings and invoices in one platform. Gyms, barbers, professionals. Discover Zenith Free demo · no card

You spent hours crafting the perfect message for your WhatsApp campaign. You submit it for approval. 24 hours later, you get a notification: "Rejected." No clear explanation, no details on what to fix. You restart, waste time, and your promotion slips.

At Meteora Web, we see this happen every week. The problem isn't the content: it's the lack of understanding of how Meta reviews templates. The platform doesn't look for beautiful messages — it looks for compliant ones: no spam, no ambiguity, no unnecessary reply requests.

In this guide, we'll show you exactly how to create an approved template on the first try: structure, categories, best practices, and code to send it via Twilio API. Ready to use.

What are WhatsApp Business templates and why must they be approved?

The WhatsApp Business API doesn't work like regular WhatsApp. You cannot send a free-form message to a user who hasn't contacted you first. For any business-initiated (proactive) communication, you must use a pre-defined template — a message approved by Meta that follows strict rules on content, format, and purpose.

Templates exist for two reasons:

  • Spam control: Meta wants to prevent millions of businesses from bombarding users. Templates are reviewed for aggressive promotional language, requests for sensitive data, or unverified links.
  • User experience: Proactive messages must be useful and relevant. A well-structured template increases the likelihood that the user will respond or engage.

We compare it to Facebook's ad review system: if you try to run an ad with misleading headlines or non-compliant images, it gets blocked. WhatsApp is the same, but even stricter because the channel is personal.

Sponsored Protocol

Which template categories exist and how to choose the right one?

Meta classifies templates into three macro-categories. Choosing the wrong category is the main cause of rejection.

Marketing

For promotions, discounts, new arrivals, events. Content can include links to landing pages, coupons, promotional images. Rules:

  • Must include a clear opt-out (e.g., "Reply STOP to unsubscribe").
  • Cannot use language that simulates personal communication (e.g., "Hi Marco, we remind you…") if the relationship is not already established.
  • Call-to-action buttons must be explicit ("Learn more", "Shop now") — no ambiguous text.

Utility

For order notifications, shipping updates, appointment reminders, account updates. These are the easiest to approve because they are expected by the user. Rules:

  • Must relate to a specific user action (e.g., "Your order #1234 has shipped").
  • Can include a button like "View order" or "Track shipment", but no cross-promotions.
  • Body must be clear, with no invitations to reply for unrelated requests.

Authentication

For verification codes (login, transactions). Extremely strict: only the OTP code, no other content. Adding a promotional note even in the footer will get it rejected immediately.

Operational tip: We at Meteora Web often see clients classify as "Marketing" messages that are actually "Utility" — a simple order confirmation with "Thank you for your purchase" can be utility, but as soon as you add a discount for the next purchase, it becomes marketing. Draw a sharp line.

How to structure a template to pass Meta's review?

A template is composed of fixed blocks. Meta's reviewer analyzes each one. Here's how to build them for approval.

Sponsored Protocol

Header

Optional. Can be text, image, or document. If using an image, ensure:

  • No promotional text that invites clicking (e.g., "CLICK HERE FOR DISCOUNT") — that's the button's job.
  • Not offensive or misleading (e.g., a photo of an out-of-stock product).
  • Good quality: minimum 300x200 px, 1.91:1 aspect ratio for horizontal images.

Body

The heart of the message. Use placeholders for personalization (e.g., {{1}}, {{2}}). Meta approves the text with placeholders, not the final personalized text — so avoid phrases that could be misinterpreted if the placeholder is empty. Example:

Hi {{1}}, your order {{2}} has shipped.
It will arrive by {{3}}.

Rules:

  • Max 1024 characters.
  • No undeclared URLs — use a button for links, not the body anchor.
  • No invitation to reply with personal information (e.g., "Reply with your address").

Footer

Here you put legal notes or opt-out. Plain text, no clickable links (unless part of a button). Mandatory for marketing templates: example "You received this message because you purchased from [Company]. To stop receiving messages, reply STOP."

Buttons

Up to 2 buttons. Allowed types:

  • Call-to-action (URL or phone number). For marketing, use URL buttons. For utility, "View order" is fine.
  • Quick reply (short text that user clicks to send a predefined reply). Use sparingly — if not needed, omit.

Example of a recently approved marketing template by us:

Header: (product image)
Body: Hi {{1}}, your favorite product is 20% off today only!
Use code SAVE20 at checkout.
Button: Shop now (URL: https://yoursite.com/product-page)
Footer: You received this message because you subscribed to our newsletter. STOP to unsubscribe.

How to submit a template for approval via Twilio API?

Once you've created the template, you need to send it to Meta for review. With Twilio, the flow is straightforward: you create the template via API, and Twilio forwards it to Meta. Once approved, you receive an APPROVED status and can use it immediately.

Sponsored Protocol

Here's a PHP cURL example (we use Laravel, but the logic is the same):

$twilio_account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$twilio_auth_token = 'your_auth_token';
$twilio_messaging_service_sid = 'MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$url = "https://content.twilio.com/v1/Contents";

$data = [
    'friendly_name' => 'Shipping Notification - v1.0',
    'language' => 'en',
    'types' => [
        'whatsapp' => [
            'body' => 'Hi {{1}}, your order {{2}} has shipped. It will arrive by {{3}}.',
            'header' => [
                'type' => 'text',
                'text' => 'Great news!'
            ],
            'footer' => [
                'text' => 'You received this message for your purchase. STOP to unsubscribe.'
            ],
            'buttons' => [
                [
                    'type' => 'URL',
                    'text' => 'Track your package',
                    'url' => 'https://yoursite.com/tracking?order={{2}}'
                ]
            ]
        ]
    ]
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Basic ' . base64_encode("$twilio_account_sid:$twilio_auth_token")
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

echo $response;

After creation, monitor status with a GET on /v1/Contents/{sid}. When status becomes APPROVED, you're ready.

Sponsored Protocol

What common errors cause template rejection and how to avoid them?

The most frequent rejections we see in our clients' projects:

  • Missing opt-out: For marketing templates, it's mandatory. Meta checks that the user can easily unsubscribe. Always include "Reply STOP to unsubscribe" in the footer — but for utility templates, don't add it.
  • Placeholder names: Use only incrementing numbers ({{1}}, {{2}}, …). Don't use names like {{customer_name}} — Meta will reject.
  • Text that simulates personal conversation without consent: E.g., "Hi Francesco, how are you?" — implies a personal relationship, but it's marketing. Meta requires clear announcement tone.
  • Non-compliant buttons: Button text must be short (max 20 chars) and descriptive. No "Click" alone, use "Learn more" or "Buy now".
  • Non-HTTPS or unverified links: All URLs must be HTTPS and point to domains you own, verified in Meta Business Manager.

We helped a client unblock 5 rejected templates: the issue was that date placeholders used US format (MM/DD/YYYY) and the reviewer didn't recognize it. Switching to international format got them approved in 24 hours.

How to handle a rejected template?

First, don't rewrite from scratch. Read the rejection reason (Meta provides a short error code, e.g., INVALID_BODY_FORMAT or MISSING_OPT_OUT). Then:

Sponsored Protocol

  1. Fix the flagged part — often a small detail.
  2. Submit a new version with the same name but incremented version (e.g., "Shipping Notification v1.1").
  3. Do not resubmit identical content — if the template was rejected for policy violation, an exact copy will be rejected again.
  4. If the rejection is for wrong category, reclassify it and resubmit.

You can contact Meta Business support, but expect long waits. The fastest path is to correct and resubmit.

What to do next

Approved templates = campaigns that launch without hiccups. Here's what you do right now:

  • Analyze your current messages — classify them correctly (marketing/utility/authentication) and check format compliance.
  • Create a first test template using the code example above. Use a Twilio Sandbox development environment to test approval.
  • Check placeholders — they must be numeric ({{1}}, {{2}}) and unambiguous.
  • Document versions — keep track of changes to avoid resubmitting already rejected templates.
  • If you need a complete platform for WhatsApp campaign management (template creation, sending, approval monitoring, reporting), check out our bulk WhatsApp sending system — we built it on Laravel and Livewire specifically to solve these issues at the root.

Official reference docs: Twilio Content API and Meta WhatsApp Business API Template Guidelines.

Try it with Zenith

Zenith ZenApp is the all-in-one platform to run your business — clients, scheduling, deadlines, invoicing and WhatsApp reminders, all from your browser. No installation required.

Discover Zenith ZenApp →
> share
Ing. Calogero Bono

> AUTHOR_EXTRACTED

Ing. Calogero Bono

Ingegnere informatico, fondatore di Meteora Web e Zenith OS. System administrator e progettista di piattaforme, app e CMS proprietari, con esperienza in sviluppo full-stack, marketing digitale ed ecosistema Google.
[ Read Full Dossier ]

> METEORA_WEB // DIGITAL AGENCY

We build the digital presence your business deserves.

Websites, social media, online advertising, e-commerce and high-performance hosting, engineered with method by computer engineers in Sciacca, for all of Italy.

> MW_JOURNAL

> READ_ALL()