On this page

A rejected WhatsApp template shows Meta's own code on its face, and Meta's codes are close to useless on their own. VGraple CRM maps every rejection reason it stores to a plain explanation of the rule that was broken, the field to open, and exactly what to change, right on the template's page.
Rejection fixes
- 1Open the rejected template
- 2Read the plain-language explanation
- 3Edit the flagged field
- 4Click "Ask Meta to review again."
- 5Wait for the new decision
Before you start
- You need the "Submit templates to Meta" permission to edit and resubmit a rejected template.
- A rejection does not affect your account's messaging limits or quality rating; only templates that were approved and later paused or disabled do that.
- Resubmitting a rejected template counts as an edit against its monthly edit budget of roughly 10 accepted edits, though the daily cooldown between edits applies only once a template reaches Approved.
Steps
- Open the rejected template. From Templates, either click the row directly, or filter to the Needs attention tab, which shows only templates Meta has rejected, paused or disabled.

Read the plain-language explanation. Below the status badge, VGraple CRM shows what Meta's raw code actually means, using the table below, rather than just the bare code.
Edit the flagged field. Click Edit and change the specific component named in the explanation (body, header, footer, buttons, category or name). The pre-submission validator re-runs as you edit, so you can confirm the specific issue clears before resubmitting.
Click "Ask Meta to review again." This resubmits the corrected content to Meta under the same template name; Meta's API has no separate appeal endpoint, so a corrected resubmission is what an appeal is in practice. The status changes to Pending while Meta reviews it again.
Wait for the new decision. Authentication templates review fastest since there is no free text to assess; Utility usually clears within minutes to a few hours; Marketing typically takes 4 to 48 hours.
What you will see
The template's status changes from Rejected to Pending the moment you resubmit, and the previous rejection reason clears from the page. If Meta rejects it again, the new reason (which may be the same one or a different one) appears in its place, and the edit is recorded so you can see what changed between attempts.
Settings and options
| Setting or field | What it does | Default |
|---|---|---|
| Rejection explanation | Meta's raw code mapped to a plain cause and fix, shown on the template | Shown automatically whenever status is Rejected |
| Ask Meta to review again | Resubmits the template's current content under the same name | Available only on Rejected templates that were previously submitted |
| Monthly edit budget | Roughly 10 accepted edits per template per month | Resets on the 1st of each month |
Meta's rejection codes, explained
| Code | What it means | What actually caused it | How to fix it |
|---|---|---|---|
| INVALID_FORMAT | The template's structure broke a formatting rule | Usually a variable at the very start or end of the body, two variables next to each other, variables numbered out of order, or a newline or tab inside a header | Put words around every variable, number them 1, 2, 3 in the order they appear, and keep the header to a single line |
| ABUSIVE_CONTENT | Meta read this as promotional content in a non-promotional category | Marketing language, offers, discounts, invitations to buy, inside a template submitted as Utility or Authentication; Meta also flags content it considers misleading or aggressive | Either rewrite the message so it is purely transactional, or resubmit it as Marketing and accept the marketing rate |
| INCORRECT_CATEGORY | The category does not match the content | Meta reclassifies templates whose wording does not match the category chosen, and charges the higher rate | Resubmit under the category Meta expects; the validator flags this before submission |
| INVALID_ATTRIBUTES | A component carried a value Meta does not allow there | A footer with a variable in it, more than one variable in a header, a URL button whose domain is dynamic, or a validity window on a category that does not support one | Footers must be static text, headers may hold at most one variable, and only the path of a button URL can vary |
| TAG_CONTENT_MISMATCH | The sample values do not match the message | Meta reviews a template using the examples supplied; placeholder samples like "value1" or "test" read as an incomplete submission | Give each variable a realistic example, a real name, a real order number, a real date |
| SCAM_LIKELY | The content resembles a scam pattern | Urgency, prize or payment language, shortened links, or asking for credentials or one-time codes | Remove urgency and reward language, use your own full domain in links, and never ask a recipient for a code or password |
| PROMOTIONAL | Promotional content outside the Marketing category | Utility templates must relate to a transaction the customer has already started | Move it to Marketing, or tie the message to a specific order, booking or account event |
| INVALID_LANGUAGE | The text does not match the language it was submitted in | Body written in one language while the template declares another | Match the language selector to the text, or submit this as a translation of the original |
| DUPLICATE | A template like this already exists | Meta refuses two templates with the same name, or near-identical content in the same category | Edit the existing template instead, or change the wording meaningfully |
| Anything else | Meta rejected this template | An unrecognised reason string, shown exactly as Meta sent it rather than guessed at | Check that every variable has words around it, the samples are realistic, the category matches the content, and no link is shortened, then edit and resubmit |
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| "Only a rejected template can be sent for another review" | Ask Meta to review again was attempted on a template that is not currently Rejected | Wait for the current review to finish, or check the template's actual status first |
| "This template was never submitted, so submit it instead" | A draft template that failed local validation was never actually sent to Meta | Fix the flagged issue and click Submit rather than Ask Meta to review again |
| Same rejection reason comes back after resubmitting | The edit did not actually change the flagged content, or a second issue exists that the first rejection did not mention | Re-read the explanation carefully against the current body, header, footer and buttons; run the pre-submission validator before resubmitting |
| "This template has used all of its edits this month" | The monthly edit budget of roughly 10 accepted edits has been used | Wait for the allowance to reset on the 1st, or duplicate the template as a new one with a different name |
| Rejected repeatedly for the same wording under a different category | The content itself is genuinely promotional and Meta will not approve it as Utility or Authentication regardless of category chosen | Rewrite the content to be strictly transactional, or accept the Marketing category and its rate |
Related reading
To catch these issues before Meta ever sees them, see what each validator message means, and for how Meta prices each category differently, see template categories and pricing.