← Blog

·

WhatsApp template rejected: common reasons and how to fix them

Updated on October 25, 2026

A WhatsApp template is rejected when Meta finds a formatting problem (malformed variables, variables out of sequence, too many for the text length or placed at the start or end of the message), content that breaks policy (requests for sensitive data, threats, scams, prohibited products), the wrong category or duplicate text. To fix it, read the reason in WhatsApp Manager or in the message_template_status_update webhook, edit the template and resubmit, or file an appeal with sample values. Meta makes a decision within 24 hours.

Below are the official reasons, how to spot each one and what to change in the text. If you are still building your first templates, start with how Meta categorizes templates.

How the review works

Every new template, and every edited template, is reviewed before it can be sent. According to Meta’s template review documentation, the review combines automated systems and manual review and takes up to 24 hours. The result shows up:

  • in WhatsApp Manager, as a notification;
  • by email to the business portfolio admins;
  • in Business Support Home, with the rejection details;
  • in the message_template_status_update webhook, if you track it through the API.

Until the review is complete, the template stays PENDING and cannot be used.

The most common rejection reasons

Meta lists the reasons below as the most frequent ones. The right-hand column shows the fix.

ReasonExample of the problemHow to fix
Missing or mismatched curly braces{{1}, {1}}, {{ 1 }}Use exactly {{1}}
Special characters in a variable{{#1}}, {{$amount}}, {{1%}}Keep the symbol outside the variable: $ {{1}}
Variables out of sequence{{1}}, {{2}}, {{5}}, {{4}}Number them in order: {{1}}, {{2}}, {{3}}
Too many variables for the text length“Hi {{1}}, {{2}} {{3}} {{4}}.”Add fixed text or use fewer variables
Message starts or ends with a variable“{{1}}, your order has shipped.” or “…code {{1}}”Put text before and after
Request for sensitive data“Send us your full card number”Ask only for the last digits, never a full ID or account number
Abusive or threatening content“Pay today or we will make your name public”Remove threats of legal action or public shaming
Commerce Policy violationSelling prohibited itemsCheck the policy before creating the template
Spam or scam-like contentExaggerated promises, suspicious linksClear text, identified brand, your own domain
Character limitsBody too long, too many emojisRespect each component’s limits
DuplicateSame body and footer as an existing templateChange the text or reuse the existing template

The duplicate rule does not apply to authentication templates, which use preset text defined by Meta.

Variables: the errors that cause most rejections

Most formatting rejections come from variables. Compare:

Likely rejectedLikely approved
“{{1}}, your bill is due tomorrow.”“Hi {{1}}, your bill is due tomorrow.”
“Your tracking code is {{1}}”“Your tracking code is {{1}}. Track it on the carrier’s website.”
“Amount: {{$1}}”“Amount: $ {{1}}.”
“Hi {{1}}! {{2}} {{3}}.”“Hi {{1}}, your order {{2}} was delivered on {{3}}. If anything is wrong, just reply to this message.”
“{{1}}{{2}}”“Order {{1}}, expected delivery on {{2}}. Thank you for your purchase.”

Variables placed side by side ({{1}}{{2}}) are also rejected: Meta uses this very case as its INVALID_FORMAT example.

Every parameter needs a sample value. In WhatsApp Manager, use the Add Sample button; in the API, use the example field of each component. Without samples, the reviewer cannot judge the real message. Use realistic samples: “Marina” and “48213” say more than “test” and “123”.

How to read the reason in the webhook

If you track templates through the API, the result arrives in the message_template_status_update field. A formatting rejection looks like this:

{
  "field": "message_template_status_update",
  "value": {
    "event": "REJECTED",
    "message_template_id": 1689556908129835,
    "message_template_name": "bill_reminder",
    "message_template_language": "en_US",
    "reason": "INVALID_FORMAT",
    "message_template_category": "UTILITY",
    "rejection_info": {
      "reason": "Your template has parameters placed next to each other (like {{1}}{{2}}) without text or punctuation between them.",
      "recommendation": "Separate parameters with descriptive text and ensure each parameter is clearly contextualized."
    }
  }
}

The rejection_info object, with an explanation and a recommendation, is only included when the reason is INVALID_FORMAT. Possible reason values, according to the webhook reference:

reasonMeaningAction
INVALID_FORMATInvalid formatRead rejection_info and fix variables, limits or structure
INCORRECT_CATEGORYContent does not match the chosen categoryChange the category or rewrite (see template categories)
TAG_CONTENT_MISMATCHContent does not match the chosen categorySame action as INCORRECT_CATEGORY
PROMOTIONALContent violates policiesReview the text against the policies
ABUSIVE_CONTENTContent violates policiesRemove threats and aggressive or misleading language
SCAMContent violates policiesRemove promises and scam-like elements
CATEGORY_NOT_AVAILABLEDeprecatedShould not appear on new templates

A simple handler that stores the reason and alerts the team:

export function handleTemplateStatus(value, db, alert) {
  db.updateTemplate(value.message_template_id, {
    status: value.event,
    category: value.message_template_category,
    reason: value.reason,
  });

  if (value.event === 'REJECTED') {
    const detail = value.rejection_info?.recommendation ?? 'see Business Support Home';
    alert(`Template ${value.message_template_name} rejected (${value.reason}): ${detail}`);
  }
}

Watch for other events in the same webhook too: PAUSED and DISABLED (low quality), FLAGGED (negative feedback, at risk of being disabled), IN_APPEAL (appeal in progress) and LIMIT_EXCEEDED (the account has reached its template limit).

Fix and resubmit, or appeal

You have two paths when a template is rejected.

Edit and resubmit

If the problem is in the text, edit and resubmit. According to the template management documentation, only APPROVED, REJECTED or PAUSED templates can be edited, and each edit replaces all components at once. For rejected templates, the category can also be changed in the edit.

With the Cloud API directly, the edit is a POST to the template ID:

curl -X POST "https://graph.facebook.com/v26.0/TEMPLATE_ID" \
  -H "Authorization: Bearer META_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "components": [
      {
        "type": "BODY",
        "text": "Hi {{1}}, the bill for order {{2}} is due on {{3}}. You can get a copy using the button below.",
        "example": { "body_text": [["Marina", "48213", "10/30/2026"]] }
      }
    ]
  }'

You can also create a new template with a different name. If you delete an approved template, its name is blocked for 30 days.

File an appeal

If you think the rejection was a mistake, appeal it. Any rejected template can be appealed, and the appeal must include samples. In WhatsApp Manager:

  1. Hover over the suitcase icon (Account tools) and click Message templates. If you have several accounts, pick the right one in the top-right dropdown.
  2. Click the rejected template.
  3. Adjust the content if needed.
  4. Click Add Sample and fill in sample values and images.
  5. Click Submit.

Meta responds within 24 hours. During the appeal, the webhook may send the IN_APPEAL event.

Category rejections follow a different path: the review is requested in Business Support Home, within 60 days. Templates that Meta identifies as disguised authentication cannot be reviewed; in that case, create an authentication template (see WhatsApp verification codes).

Send errors that look like rejections

Some errors only show up when you send an already approved template. They are often mistaken for rejections:

CodeMeaningAction
132000Number of parameters does not match the templateCheck how many parameters each component expects
132001Template does not exist in the given language or is not approvedCheck name, language code and status
132007Template content violates a WhatsApp policyReview the text against the rejection reasons
132015Template paused due to low qualityWait for the pause to end or edit it
132016Template disabled after repeated pausesCreate a new template with different content

The full list, with causes and fixes, is in WhatsApp API error codes.

Checklist to avoid rejection

  • Variables in {{1}} format, in sequence, with no symbols inside and never side by side.
  • Fixed text before the first variable and after the last one.
  • A realistic sample value for every variable and a sample image for media headers.
  • No requests for full card, account or ID numbers.
  • No threats, aggressive collection language or exaggerated promises.
  • A category that matches the content: notices are utility, offers are marketing.
  • Text that differs from the templates you already have.

How to do it with Vectalk

On Vectalk, templates are created and edited with the same request bodies as the Cloud API, using an instance token (the WABA is resolved from the token). To fix a rejected template, send the new components to POST /api/templates/{templateId}; editing works for APPROVED or REJECTED templates. To check the status, use GET /api/templates?name=bill_reminder. The message_template_status_update webhook arrives in Meta’s format at the URLs you registered.

curl -X POST https://apis.vectalk.com.br/api/templates/TEMPLATE_ID \
  -H "Authorization: Bearer YOUR_INSTANCE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "components": [ { "type": "BODY", "text": "Hi {{1}}, the bill for order {{2}} is due on {{3}}. You can get a copy using the button below.", "example": { "body_text": [["Marina", "48213", "10/30/2026"]] } } ] }'

See the endpoints at docs.vectalk.com.br and create your account at apps.vectalk.com.br/register.

Frequently asked questions

How long does Meta take to review a template?

Up to 24 hours, for both the initial review and appeals. Many templates are approved sooner, but plan launches around the maximum.

Can I use a rejected template while my appeal is pending?

No. Only templates with APPROVED status can be sent. If the send is urgent, create a corrected version with a different name in parallel.

My template was approved, but as marketing. Is that a rejection?

No. Since April 2025, templates submitted as utility that Meta considers marketing are approved as marketing. The fix is to request a category review or rewrite the text. See template categories.

Why was an identical template approved in another account and rejected in mine?

Meta notes that its examples are illustrative and that similar text can get different results depending on the exact content and sample values. The duplicate rule also matters: if a template with the same body and footer already exists, the new one is rejected. Adjust the text and use realistic samples.

How many times can I edit a template?

Approved templates can be edited up to 10 times in 30 days, or once in 24 hours. The documentation does not state a limit for rejected templates.


Official sources checked on October 25, 2026: Template review, message_template_status_update webhook, Template management, Template categorization, Error codes, WhatsApp Business Messaging Policy.

Integre o WhatsApp oficial ao seu sistema

A Vectalk entrega a Cloud API da Meta com os mesmos payloads e webhooks, um token para todas as contas e documentação completa.