WhatsApp template guidelines
Every WhatsApp template is reviewed by Meta before it can send, and the rules it is reviewed against are Meta's, not Bird's. This page collects them: what fits in each part of a template, what variables may look like, how long review takes, and what gets a submission rejected.
Bird's catalog templates are already approved and sending, so these rules explain the shape they take. They matter directly once you author your own. Everything on Bird's side of the line, what your workspace can send today and how a template is read and filled over the API, is on WhatsApp templates.
Character limits per component
A template is built from components, and each one has its own ceiling:
| Component | Limit | Notes |
|---|---|---|
| Text header | 60 characters | One header per template, and it supports at most one variable |
| Body | 1,024 characters | Supports multiple variables |
| Footer | 60 characters | No variables |
| Button label | 25 characters | Applies to call, URL, and quick-reply buttons |
| URL button target | 2,000 characters | Supports one variable, appended at the end of the URL |
| Copy-code button value | 20 characters | The string copied to the device clipboard |
The body ceiling is the one to design against. It is also not always the full 1,024: Meta narrows the effective body limit for some template formats and categories, and caps how many emoji a body may carry.
Variables
Variables are the parts of a template you fill in at send time. Meta's constraints on them cause more rejections than the content rules do:
- A placeholder is either positional, written {{1}} and {{2}}, or named, written {{order_number}}. You do not choose between them. A template uses one parameter format throughout, and its category sets which: authentication templates are positional, utility and marketing templates are named. A placeholder in the other style is rejected, naming the variable at fault.
- Positional placeholders are index numbers from {{1}} upward, and both sample and send values are read in the order the placeholders appear. A body that jumps from {{2}} to {{5}} is rejected.
- Named placeholders use lowercase letters, numbers, and underscores, such as {{order_number}}, and no name repeats within a language. Their values are matched by name rather than position, so the order they are supplied in does not matter.
- Wrap every placeholder in double curly braces on both sides. A carousel card is the one exception to the style rule: its parameters are positional whatever the template's format, because Meta accepts no named example inside a card.
- Keep special characters such as #, $, and % out of the placeholder itself.
- Never start or end a template with a variable. Meta rejects dangling parameters, because a message that opens or closes with substituted text gives the reader no context.
- Surround each placeholder with fixed text that says what the substituted value is. Meta rejects a template carrying too many placeholders for too little context, because a body that is mostly variables reads as a blank form rather than a message. Add wording, or carry fewer values.
- Submit sample values with the template. Review is done against a rendered preview, and a submission with no samples cannot be assessed.
Formatting
WhatsApp supports a small set of inline formatting in the body: bold, italic, strikethrough, and monospace. Emoji are allowed in body and buttons, and header text takes no formatting markup at all.
Meta accepts no HTML, no links styled as anchor text, and no line-length control beyond the line breaks you write. A URL in body text is rendered as a raw link, which is what URL buttons exist to avoid.
Review and approval
Meta reviews a template automatically on creation, and on every edit. A decision takes up to 24 hours, and usually far less. Approved templates can be sent immediately; anything else cannot be sent at all.
After approval, a template carries a quality rating that Meta updates from delivery, read rates, and recipient feedback. It starts unrated, then reads high, medium, or low. Medium and low still send, and they are a warning: recurring negative feedback pauses the template, and a paused template cannot be sent until its rating recovers.
Bird surfaces both the status and the per-language verdict on the template itself. WhatsApp templates defines each value and what it means for a send.
Why templates get rejected
Most rejections fall into four buckets, in rough order of how often they happen:
- Variable formatting. Mismatched braces, non-sequential placeholders, a variable at the very start or end, or more variables than fixed text.
- Duplication. A template whose body and footer match wording already registered on your account is rejected as a duplicate. Meta names the existing template in the rejection, so you can send that one instead. Authentication templates are exempt from this check.
- Policy. Content that breaks the WhatsApp Business Messaging Policy or, for anything transactional, the Commerce Policy. Prohibited goods are the clearest case, but so is a message whose purpose the reader would not recognize as coming from you.
- Miscategorization. A marketing message submitted as utility, most often. Category drives both what Meta permits and what the message costs, so Meta corrects it rather than letting it through.
A rejection tells you the reason in Business Support Home and by email. Fix the template and resubmit, or appeal the decision if you disagree, in which case the sample values are required. Appeals are decided within 24 hours.
Next steps
- WhatsApp templates: the catalog, statuses, and variables in Bird
- Sending WhatsApp messages: filling a template's variables on a send
- The WhatsApp customer service window: when a template is the only thing that reaches someone