WhatsApp template character limits
Meta's template components documentation sets hard limits on every part of a template. Submissions over these limits fail at the API before a human reviewer ever sees them, so it pays to check them while writing.
Characters are counted as you see them: an emoji or an Arabic letter counts as one. Line breaks count too, and Markdown-style formatting characters such as the asterisks in *bold* are part of the count.
Source: Meta, Template components, https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/components (checked October 2026).
- Template name: up to 512 characters, lowercase letters, numbers and underscores only.
- Text header: up to 60 characters and at most 1 variable. Media headers can be an image, video or document; location headers are allowed for utility and marketing only.
- Body: up to 1,024 characters, required, with as many variables as you need.
- Footer: up to 60 characters, no variables.
- Buttons: up to 10 in total, including at most 10 quick replies, 2 URL buttons, 1 phone number button and 1 copy code button. Button labels are limited to 25 characters, URLs to 2,000, phone numbers to 20 and copy codes to 20.
Variable rules that cause rejections
Most rejected templates fail on their placeholders, not their wording. Meta's template review guide lists the variable problems it rejects: parameters that are not sequential, contain special characters such as #, $ or %, have mismatched curly braces, or sit at the very start or end of the message ("dangling parameters").
Meta also rejects templates with too many variables relative to their length. It publishes no exact ratio, so this tool warns when there are fewer than three fixed words per variable. Reviewers also commonly reject two variables placed side by side, such as {{1}} {{2}}; merge them into one or put words between them.
Every variable needs a realistic sample value at submission. Reviewers read the samples to understand what the message really says, so "test" or "xxx" invites a rejection.
Source: Meta, Template review, https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/template-review.
Template rejected? Decode Meta's reason
Switch to the "Rejected? Paste Meta's reason" tab and paste the reason from WhatsApp Manager, Business Support Home, the rejection email or the message_template_status_update webhook. The tool recognises Meta's reason codes, such as INVALID_FORMAT, INCORRECT_CATEGORY, TAG_CONTENT_MISMATCH, PROMOTIONAL, SCAM and ABUSIVE_CONTENT, and the wording of the common causes in Meta's template review guide, then shows the likely cause and the fix.
A rejected template can be edited and resubmitted, or you can appeal in WhatsApp Manager after adding sample values; Meta says appeals are decided within 24 hours. A reason of NONE means the template was paused, not rejected.
Utility vs marketing vs authentication
Category drives both approval and price. Utility templates follow up on something the customer did or asked for, such as an order, booking, account change or alert, and must be non-promotional. Authentication templates carry one-time passcodes and use fixed wording from Meta. Everything else, including cart reminders, offers and re-engagement, is marketing.
Meta's categorization guidelines state that a template mixing utility and promotional content is marketing. Discount codes, sales offers, upselling, cart reminders and app download prompts all push a template into marketing. Meta periodically re-checks approved templates and moves utility templates that look promotional into the marketing category, usually with one day's notice.
The checker scans your wording in English, Arabic, French, Spanish, German and Portuguese for promotional terms and warns you before Meta recategorizes the template for you. Only authentication templates may send one-time passcodes, so it also flags OTP wording in other categories.
Source: Meta, Template categorization, https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/template-categorization.
Buttons: grouping, dynamic URLs and what customers see
Quick reply buttons and call-to-action buttons must be grouped: all quick replies before the other buttons, or all after them. A quick reply sandwiched between two links is rejected by the API.
A URL button can carry one variable, and it must sit at the end of the URL, for example https://shop.example.com/orders/{{1}}. Percent-encode the value you send (a space becomes %20). Avoid link shorteners: they hide the destination and look like spam.
When a template has more than three buttons, WhatsApp shows two and puts the rest behind "See all options". Templates with four or more buttons, or quick replies mixed with other buttons, cannot be viewed on WhatsApp desktop clients, so put the most important action first.
From preview to sending at scale
The exported JSON follows the request body of POST /<WABA_ID>/message_templates in the WhatsApp Business Management API, including example values. For media headers, upload a sample with the Resumable Upload API and replace the placeholder handle.
Once approved, you send the template by name and language with the real values for each variable. OmniChannels.ai manages templates across WhatsApp Business Accounts, tracks review status and quality, and sends approved templates through one REST API, campaigns or the shared inbox, with SMS fallback when WhatsApp isn't available.
