Home/Help Center/Validator messages

Templates

What Each Template Validator Message Means

Every message the WhatsApp template pre-submission validator can show in VGraple CRM, what it means, and exactly how to fix it before you submit to Meta.

By Chirag Darji · Updated 27 Aug 2026 · 11 min read

On this page
  1. Before you start
  2. Steps
  3. What you will see
  4. Body and variable messages
  5. Header messages
  6. Footer messages
  7. Button messages
  8. Carousel and limited-time offer messages
  9. Settings and options
  10. Troubleshooting
  11. Related reading
WhatsApp approved message template library in VGraple CRM

The pre-submission validator in VGraple CRM checks a template against roughly thirty of Meta's known rejection rules before you ever click Submit, and shows each finding with a plain message and a 0-100 rejection-risk score. This article lists every message the validator can produce, straight from the code that generates it, what it means, and what to change.

Validator messages

  1. 1Watch the risk panel as you build
  2. 2Open a finding to see its exact
  3. 3Fix the highest-weighted findings first
  4. 4Re-check before submitting
The steps on this page, in order.

Before you start

  • The validator runs automatically as you build a template, on a short debounce after each change; nothing needs to be triggered manually.
  • Every message names the field it applies to (body, header, footer or buttons) so you know exactly where to look.
  • Fixing an error-severity finding is required to move the risk score meaningfully; warning-severity findings are worth reading but do not block submission.

Steps

  1. Watch the risk panel as you build. Below the phone preview, a circular gauge shows the current score in low (green), moderate (amber) or high (red) risk bands, with the top three contributing factors named underneath.

Templates screen in VGraple CRM with the gallery, Meta library and sync options

  1. Open a finding to see its exact wording. Each message below is shown next to the field it concerns, with a short explanation of the rule it enforces.

  2. Fix the highest-weighted findings first. The table below is sorted roughly by how much each finding moves the score, from the checks Meta enforces mechanically down to the more stylistic ones.

  3. Re-check before submitting. The score recalculates on every keystroke, so you can confirm a fix actually cleared the finding rather than assuming it did.

What you will see

Every message below is the exact text the validator shows, taken directly from the checker. "Field" is where the issue was found; "Meaning" is why Meta cares; "Fix" is what to change.

Body and variable messages

MessageFieldMeaningFix
Body text is required.BodyEvery non-Authentication template needs body textWrite the message body
Body is [n] chars; Meta's limit is 1024.BodyThe body text exceeds Meta's character limitShorten the message to 1,024 characters or fewer
Remove '!!' - double exclamation marks cause rejection.BodyMeta treats double exclamation marks as a rejection triggerUse a single exclamation mark, or rephrase
Body contains special characters ({, }, |, ^, etc.) that may trigger rejection.BodyCharacters Meta treats as markup outside of {{n}} variables were foundRemove stray braces, pipes, carets or backticks that are not part of a variable
Three or more consecutive blank lines detected - Meta may reject this.BodyLong runs of blank lines read as low-effort or malformed contentCollapse extra blank lines to one or two at most
Remove URL shortener '[shortener]' - Meta rejects templates with shortened URLs. Use the full URL.BodyMeta rejects templates containing bit.ly, tinyurl.com and similar shortened linksReplace the shortened link with the full destination URL
Phone number in body may trigger rejection. Use a Call button type instead.BodyA phone number written into the message text, rather than as a button, is flaggedMove the number into a Call Phone Number button
Email address in body may trigger rejection. Consider using a URL button.BodyAn email address written into the message text is flaggedMove contact details into a Visit Website button, or remove it
Body has [n] variables - Meta's maximum is 10.BodyMeta caps a template at 10 total variablesReduce the number of {{n}} placeholders
Variable {{[n]}} is missing but {{[max]}} exists. Variables must be sequential.BodyVariables were numbered with a gap, for example {{1}} and {{3}} with no {{2}}Renumber variables so every integer from 1 up to the highest is used, in order
Possible mismatched brace - use {{n}} syntax for variables.BodyA single { or } was found outside a {{n}} pairFix the brace so it forms a proper {{n}} variable, or remove it
Template has [n] variable(s) but only [m] sample value(s) provided. Meta requires one sample per variable.BodyMeta rejects a submission that does not include an example value for every variableEnter a sample value for each {{n}} in the body
Variables can't be at the start of the template. Add static text before {{1}}.BodyMeta rejects a body that opens directly on a variableAdd a greeting or other fixed text before the first variable
Variables can't be at the end of the template. Add static text after the last variable.BodyMeta rejects a body that closes directly on a variableAdd fixed text, like a closing sentence, after the last variable
Two variables sit next to each other. Put fixed words between them.BodyTwo {{n}} placeholders with nothing between them render as one run-on valueAdd a word or two of fixed text between the two variables
Only [n] characters of fixed text around [m] variable(s). Meta wants this to read as a message, not a form.BodyThe body is mostly placeholders with too little surrounding textAdd more fixed wording so the message reads naturally, not like a data form
This template reads as MARKETING ([n] signal word(s): [words]...). Meta may reclassify it and charge the higher rate.Body, header or footerMarketing-signal words were found in a template not filed as MarketingRemove the promotional language, or change the category to Marketing

Header messages

MessageFieldMeaningFix
Header is [n] chars; limit is 60.HeaderThe header text exceeds Meta's 60-character limitShorten the header
A text header may contain at most one variable.HeaderA text header had two or more {{n}} placeholdersReduce the header to at most one variable
The header variable needs a sample value for Meta's review.HeaderA header variable has no example value enteredEnter a sample for the header's own variable, separate from the body's samples
Headers cannot contain line breaks or bold and italic formatting.HeaderA newline or WhatsApp formatting markup was found in the headerKeep the header to one plain line of text
A media header carries a file, not text, so it cannot contain a variable.HeaderA variable placeholder was found in an image, video or document headerRemove the variable; media headers cannot substitute values
MessageFieldMeaningFix
Footer is [n] chars; limit is 60.FooterThe footer text exceeds Meta's 60-character limitShorten the footer
Footers are identical for every recipient, so they cannot contain variables.FooterA {{n}} placeholder was found in the footerRemove the variable from the footer; move personalisation to the body
A footer cannot sit next to a limited-time offer. The offer strip takes that space in the bubble, and Meta rejects the pair.FooterBoth a footer and a limited-time offer were set on the same templateRemove the footer while the offer is active

Button messages

MessageFieldMeaningFix
[n] buttons - maximum is 10.ButtonsTotal button count exceeds Meta's limitRemove buttons until 10 or fewer remain
Maximum 3 Quick Reply buttons.ButtonsMore than 3 Quick Reply buttons were addedReduce to 3 or fewer
Maximum 2 Visit Website buttons.ButtonsMore than 2 Visit Website (URL) buttons were addedReduce to 2 or fewer
Maximum 2 Call Phone Number buttons.ButtonsMore than 2 Call Phone Number buttons were addedReduce to 2 or fewer
Maximum 1 Copy Offer Code button.ButtonsMore than 1 Copy Offer Code button was addedKeep only one
Button "[text]" exceeds 25 characters ([n]).ButtonsA button label is longer than Meta's 25-character limitShorten the label
Visit Website button requires a URL.ButtonsA URL button was added with no destination linkEnter the destination URL
URL button cannot have a dynamic domain. Only the path can be dynamic (e.g. https://example.com/{{1}}).ButtonsA variable was placed in the domain portion of a button URLKeep the domain fixed; only the path after the domain may contain a variable
Call Phone Number button requires a phone number.ButtonsA phone button was added with no numberEnter the phone number to dial
Copy Offer Code button requires a sample code for Meta review.ButtonsA Copy Code button has no example value for Meta's reviewerEnter a sample coupon code
Two buttons are both labelled "[text]". Every button label must be unique.ButtonsTwo buttons share the same labelGive each button a distinct label
Quick replies are mixed in among the other buttons. WhatsApp groups them together, so reorder them here to see what the customer will actually get.ButtonsQuick Reply buttons are interleaved with URL, phone or copy-code buttons in the builder's orderGroup quick replies together; WhatsApp renders them as one block regardless of the order set here
Button URL is [n] characters; Meta's limit is 2000.ButtonsA button URL is longer than Meta allowsShorten the URL, for example with your own link-shortening domain rather than a public shortener
Button phone number is longer than 20 digits.ButtonsA phone number exceeds Meta's digit limitCorrect the phone number
Nothing here lets the recipient opt out. Add a "Stop promotions" quick reply - blocks and reports are what drive a number quality rating down.ButtonsA Marketing template has no visible opt-out mechanismAdd a quick reply or body/footer line offering to stop promotions
MessageFieldMeaningFix
Carousel templates require at least 2 cards.BodyFewer than 2 cards were added to a carouselAdd at least one more card
Carousel templates support a maximum of 10 cards.BodyMore than 10 cards were addedRemove cards until 10 or fewer remain
All carousel cards must use the same header type.BodyCards mix header types, for example some image and some videoSet every card to the same header type
Card [n] body text is required.BodyA carousel card has no body textWrite the card's body
Card [n] body exceeds 160 characters.BodyA card's body text is longer than Meta's per-card limitShorten the card's body
Card [n] has more than 2 buttons.ButtonsA carousel card has more than 2 buttonsRemove buttons from the card until 2 or fewer remain
Limited-time offer templates must use the MARKETING category.BodyAn offer was added to a non-Marketing templateChange the category to Marketing
Limited-time offer requires a coupon code.BodyNo coupon code was entered for the offerEnter the coupon code
A limited-time offer needs a website button next to the offer code. Meta requires the pair and rejects the template without it.ButtonsAn offer has no Visit Website buttonAdd a Visit Website button; the builder places it after the code button automatically
A limited-time offer needs a countdown length, otherwise WhatsApp shows the offer as already expired.BodyNo expiry duration was set for the offerSet how long the offer countdown should run
A [category] template's validity window must be [range].(general)The message validity (TTL) setting is outside Meta's allowed range for the chosen categorySet the TTL within the range shown: 1-15 minutes for Authentication, 30 seconds-12 hours for Utility, 12 hours-30 days for Marketing

Settings and options

SettingWhat it doesDefault
Risk score (0-100)Sums the weight of every finding and maps it onto a curve, capped at 99Recalculated on every change
Risk bandLow (under 25), Moderate (25-59) or High (60+)Shown with a colour and label under the score
Error vs warning severityErrors are Meta's mechanically enforced rules; warnings are stylistic or judgement-based signalsBoth shown; only errors are colour-flagged as blocking

Troubleshooting

SymptomLikely causeFix
Risk score stays high after fixing the top factorMultiple findings stack; the score sums every weight, not just the largest oneWork through the full list of findings shown, not only the top three summarised under the gauge
A finding disappears then reappears after an unrelated editSome checks (like variable density or category prediction) re-evaluate the whole body on every changeRe-read the current message text; the underlying content likely shifted again
Score is low but Meta still rejected the templateThe validator predicts based on known rejection patterns; Meta's actual review can catch things outside that rule setOpen the rejected template for the plain-language reason; see template rejected: reasons and fixes

Once a submission comes back rejected despite a clean risk score, or you want to understand Meta's own rejection codes rather than the pre-submission checks, see template rejected: reasons and fixes.

Frequently asked questions

What does the 0-100 risk score actually measure?
It sums the weight of every check the validator flagged, then maps the total onto a curve that flattens near the top, so a template with one issue does not read the same as one with five. Low is under 25, moderate is 25 to 59, and high is 60 or above.
Does a warning mean Meta will definitely reject my template?
No. Error-severity findings block the template from being treated as valid, but Meta still makes the final call. Warning-severity findings are risk signals the validator has learned from Meta's own published rejection reasons and past rejections, not guarantees.
Why do I see a "reads as MARKETING" warning on a template I filed as Utility?
The validator scans the body, header and footer for marketing-signal words like offer, discount, limited time and exclusive. Finding one or more raises this warning, because Meta reclassifies mismatched templates and bills the higher rate, even after approval.
Can I submit a template with warnings still showing?
Yes, warnings do not block submission. Error-severity findings, shown in a different colour, are the ones worth fixing first, since they are the checks most closely tied to Meta's own mechanical rejection rules rather than stylistic judgement.
Where do these rules come from?
They are ordered by how often each one appears in Meta's own published rejection reasons and in the rejection text this product has already stored, so a mechanically enforced rule, like a missing sample value, weighs more than a stylistic one Meta applies unevenly.
Does the validator check carousel and limited-time offer templates too?
Yes. Carousels are checked for card count, matching header types, per-card body length and button count, and limited-time offers are checked for a matching category, a coupon code, an expiry length and the required Visit Website button.

Run your WhatsApp on VGraple CRM

Free forever plan, official Meta WhatsApp Business API, set up in 15 minutes. No card needed.