Sign inGet Started

WhatsApp template guidelines

A template you author must pass Bird's submission checks and Meta's review before it can be used. This page explains the content limits Bird checks, how to supply variables, and how to respond to a review decision. Passing local validation does not guarantee Meta approval or later delivery.
Bird also provides managed catalog templates. Read WhatsApp templates to check the available languages and current sendability, and Authoring templates to create a template on your own account.

Character limits per component

Bird checks these limits when you submit authored content:
ComponentLimitNotes
Text header60 charactersOne header per template, and it supports at most one variable
Body1,024 charactersSupports multiple variables
Footer60 charactersNo variables
Button label25 charactersApplies to call, URL, and quick-reply buttons
URL button target2,000 charactersSupports one variable, appended at the end of the URL
Copy-code button value20 charactersThe string copied to the device clipboard
A carousel card body has a separate 160-character limit. Category and component rules also apply: an authentication template uses Meta's generated wording, while GIF headers, carousels, and coupon copy-code buttons belong to marketing templates in Bird's authoring flow. Check the validation response for the affected language and field.

Variables

Variables are the parts of a template you fill in at send time. Match the format of the component you are authoring:
  • Bird creates authentication templates with positional parameters, written {{1}} and {{2}}. Their wording comes from Meta's authentication format. Top-level text in utility and marketing templates uses named parameters such as {{order_number}}.
  • 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. Carousel card text uses positional parameters and positional sample values. A variable URL button uses one terminal positional placeholder, such as https://example.com/orders/{{1}}, even when the template's body uses named parameters.
  • 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

Submitting a new language or an edit starts the applicable review process. Check the current status in Bird and WhatsApp Manager rather than scheduling a launch around a guaranteed decision time. Before sending, confirm that the requested language is available, the sending number belongs to the right account, and the recipient is eligible.
Approval and quality are separate. Meta updates template quality as it receives usage and recipient feedback. A medium or low rating calls for investigation; a paused or disabled language is unavailable for sending. Follow its current status and the action Meta shows rather than assuming a rating change automatically restores it.
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

Use the reason returned for the affected language. Problems to check include:
  • 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.
Read the decision in WhatsApp Manager or Business Support Home and in the notifications Meta provides. Fix the reported issue and resubmit. If the decision offers an appeal and you disagree, supply the requested context and sample values. Track the review status; approval and completion time are not guaranteed.

Next steps