{"id":675,"date":"2026-10-29T13:12:50","date_gmt":"2026-10-29T13:12:50","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/whatsapp-api-message-templates\/"},"modified":"2026-10-29T13:12:53","modified_gmt":"2026-10-29T13:12:53","slug":"whatsapp-api-message-templates","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/","title":{"rendered":"WhatsApp API message templates: categories, creation, variables and approval"},"content":{"rendered":"\n<p><em>Updated on October 29, 2026<\/em><\/p>\n\n\n\n<p>A WhatsApp Business API message template is a message pre-approved by Meta, and it is the only kind of message you can send outside the 24-hour customer service window. You create the template via API with a name, language, category (marketing, utility or authentication) and components; Meta reviews it within 24 hours and, if approved, you send it by filling in the variables. The category sets the price, and any promotional intent in the text makes Meta treat a utility template as marketing.<\/p>\n\n\n\n<p>This guide shows how to build, create and send templates with real payloads, why they get rejected, and how to write notifications that stay in the utility category.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When a template is required<\/h2>\n\n\n\n<p>The WhatsApp Cloud API separates two kinds of messages. Free-form messages (text, images, buttons, lists) can only be sent while the <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-24-hour-customer-service-window\/\">24-hour window<\/a> is open, that is, after the user has messaged or called the business. Outside it, only approved templates go out.<\/p>\n\n\n\n<p>In practice, templates are what you use to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>notify someone about an order, payment, appointment or account change;<\/li>\n\n\n<li>send a verification code (OTP);<\/li>\n\n\n<li>send offers and campaigns to people who agreed to receive them;<\/li>\n\n\n<li>reach back out to someone who hasn&#8217;t talked to you in more than 24 hours.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The three template categories<\/h2>\n\n\n\n<p>Every template needs a category. Meta validates the choice based on the content, and the category is used for billing (see the Brazil rates in <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-pricing-brazil\/\">WhatsApp API pricing in Brazil<\/a> and other markets in <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-pricing-by-country\/\">WhatsApp API pricing by country<\/a>). For a deeper look at how Meta decides, see <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-categories\/\">WhatsApp template categories<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Category<\/th><th>What it&#8217;s for<\/th><th>Accepted examples<\/th><th>Watch out for<\/th><\/tr><\/thead><tbody><tr><td><code>MARKETING<\/code><\/td><td>Awareness, sales, retargeting, app promotion, relationship building<\/td><td>Coupon, abandoned cart, subscription renewal with a discount, birthday<\/td><td>Also gets templates with mixed content (notice + promotion) or vague content, such as just <code>{{1}}<\/code><\/td><\/tr><tr><td><code>UTILITY<\/code><\/td><td>Following up on a user action or request<\/td><td>Order confirmation and tracking, account alert, billing reminder, survey about a specific interaction<\/td><td>Must be non-promotional and specific to the user, or essential (security, recall, privacy policy change)<\/td><\/tr><tr><td><code>AUTHENTICATION<\/code><\/td><td>One-time code to verify identity<\/td><td>&#8220;{{1}} is your verification code.&#8221;<\/td><td>Requires an OTP button (copy code or one-tap autofill); no URLs, media or emoji; parameters up to 15 characters<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Verification codes can only go in authentication templates. When Meta detects a marketing or utility template that should be authentication, it notifies you and changes the status to <code>REJECTED<\/code> on the first day of the following month.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anatomy: the components of a template<\/h2>\n\n\n\n<p>A template has up to four components. Only the body is required.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Component<\/th><th>Required<\/th><th>Main limits<\/th><\/tr><\/thead><tbody><tr><td>Header (<code>HEADER<\/code>)<\/td><td>No<\/td><td>Text up to 60 characters with 1 parameter; or media (image, video, document; GIF only through the Marketing Messages API); or location (utility and marketing only)<\/td><\/tr><tr><td>Body (<code>BODY<\/code>)<\/td><td>Yes<\/td><td>Up to 1,024 characters, multiple parameters<\/td><\/tr><tr><td>Footer (<code>FOOTER<\/code>)<\/td><td>No<\/td><td>Up to 60 characters, text only<\/td><\/tr><tr><td>Buttons (<code>BUTTONS<\/code>)<\/td><td>No<\/td><td>Up to 10 in total, with per-type limits<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>The most common buttons follow these rules:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Button type<\/th><th>Maximum<\/th><th>Details<\/th><\/tr><\/thead><tbody><tr><td><code>QUICK_REPLY<\/code><\/td><td>10<\/td><td>Label up to 25 characters; tapping sends the text as a user message<\/td><\/tr><tr><td><code>URL<\/code><\/td><td>2<\/td><td>Label up to 25 characters; URL up to 2,000 characters with 1 variable at the end<\/td><\/tr><tr><td><code>PHONE_NUMBER<\/code><\/td><td>1<\/td><td>Label up to 25 characters; number up to 20 characters<\/td><\/tr><tr><td><code>COPY_CODE<\/code><\/td><td>1<\/td><td>Copied text up to 20 characters (e.g., a coupon)<\/td><\/tr><tr><td><code>FLOW<\/code><\/td><td>\u2014<\/td><td>Opens a WhatsApp Flow<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Quick replies and other buttons must be grouped (all quick replies together). Templates with 4 or more buttons, or with a quick reply mixed with another type, can&#8217;t be viewed on WhatsApp desktop: the user is prompted to open them on a phone. With more than three buttons, the message shows two and groups the rest under &#8220;See all options&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to create a template via API<\/h2>\n\n\n\n<p>On the Cloud API directly, creating a template is a <code>POST<\/code> to the <code>message_templates<\/code> endpoint of your WhatsApp Business Account (WABA). Since the account structure changed on September 23, 2026, templates, billing and webhooks belong to what Meta calls the messaging account, which is still identified by the WABA ID; the new model is explained in <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-account-messaging-account-waba\/\">WhatsApp account vs. messaging account<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl 'https:\/\/graph.facebook.com\/v26.0\/YOUR_WABA_ID\/message_templates' \\\n  -H 'Authorization: Bearer META_TOKEN' \\\n  -H 'Content-Type: application\/json' \\\n  -d '{ \"name\": \"template_name\", \"language\": \"en_US\", \"category\": \"UTILITY\", \"components\": [ { \"type\": \"BODY\", \"text\": \"...\" } ] }'<\/code><\/pre>\n\n\n\n<p>With Vectalk, the body is the same. Only the base URL and token change: with an instance token, the WABA is resolved automatically and you don&#8217;t pass its ID in the path.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST https:\/\/apis.vectalk.com.br\/api\/templates \\\n  -H \"Authorization: Bearer YOUR_INSTANCE_TOKEN\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"name\": \"order_confirmed\",\n    \"language\": \"en_US\",\n    \"category\": \"UTILITY\",\n    \"components\": [\n      { \"type\": \"HEADER\", \"format\": \"TEXT\", \"text\": \"Order confirmed\" },\n      {\n        \"type\": \"BODY\",\n        \"text\": \"Hi {{1}}, your order {{2}} is confirmed and will arrive within {{3}} business days.\",\n        \"example\": { \"body_text\": [[\"Marina\", \"48213\", \"5\"]] }\n      },\n      { \"type\": \"FOOTER\", \"text\": \"Example Store\" },\n      {\n        \"type\": \"BUTTONS\",\n        \"buttons\": [\n          { \"type\": \"URL\", \"text\": \"Track order\", \"url\": \"https:\/\/store.example.com\/orders\/{{1}}\", \"example\": [\"https:\/\/store.example.com\/orders\/48213\"] }\n        ]\n      }\n    ]\n  }'<\/code><\/pre>\n\n\n\n<p>The response includes the <code>id<\/code>, the <code>status<\/code> (usually <code>PENDING<\/code>) and the category. The review result arrives through the <code>message_template_status_update<\/code> webhook, which Vectalk forwards in Meta&#8217;s format to your registered URLs (see the guide to <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-webhooks\/\">WhatsApp API webhooks<\/a>). To look it up later, use <code>GET \/api\/templates?name=order_confirmed<\/code>.<\/p>\n\n\n\n<p>Rules that prevent errors at creation time:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Names accept only lowercase letters, numbers and underscores, up to 512 characters. Names aren&#8217;t unique: the same name can exist in different languages, and each language counts as one template.<\/li>\n\n\n<li>Meta allows up to 100 templates created per hour in each messaging account.<\/li>\n\n\n<li>A messaging account can hold up to 250 templates if the business portfolio isn&#8217;t verified. With a verified portfolio and at least one approved display name, the ceiling rises to 6,000.<\/li>\n\n\n<li>Meta doesn&#8217;t translate anything. Each language needs its own text and its own examples.<\/li>\n\n\n<li>On Meta, a media header requires a handle obtained through the Resumable Upload API, and the sample image is reviewed too.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Variables: positional or named<\/h2>\n\n\n\n<p>The <code>parameter_format<\/code> field sets the format. Without it, the default is <code>positional<\/code>.<\/p>\n\n\n\n<p><strong>Positional<\/strong> variables use <code>{{1}}<\/code>, <code>{{2}}<\/code> and so on, in sequence. Sample values at creation and real values at send time follow the order in which they appear in the text.<\/p>\n\n\n\n<p><strong>Named<\/strong> variables use lowercase names with underscores, such as <code>{{customer_name}}<\/code>. The order of values no longer matters, which reduces bugs when the text changes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"name\": \"order_shipped\",\n  \"language\": \"en_US\",\n  \"category\": \"UTILITY\",\n  \"parameter_format\": \"named\",\n  \"components\": [\n    {\n      \"type\": \"BODY\",\n      \"text\": \"Hi {{customer_name}}! Your order {{order_number}} is out for delivery with tracking code {{tracking}}. We'll let you know when it arrives.\",\n      \"example\": {\n        \"body_text_named_params\": [\n          { \"param_name\": \"customer_name\", \"example\": \"Marina\" },\n          { \"param_name\": \"order_number\", \"example\": \"48213\" },\n          { \"param_name\": \"tracking\", \"example\": \"BR123456789\" }\n        ]\n      }\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>At send time, each named parameter carries <code>parameter_name<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{ \"type\": \"text\", \"parameter_name\": \"tracking\", \"text\": \"BR987654321\" }<\/code><\/pre>\n\n\n\n<p>Every parameter needs a sample value at creation. Without samples, the reviewers have no way to judge the final text.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sending the template<\/h2>\n\n\n\n<p>Sending uses the messages endpoint with <code>type: \"template\"<\/code>. Through Vectalk:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST https:\/\/apis.vectalk.com.br\/api\/messages \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"to\": \"5584999999999\",\n    \"type\": \"template\",\n    \"template\": {\n      \"name\": \"order_confirmed\",\n      \"language\": { \"code\": \"en_US\" },\n      \"components\": [\n        { \"type\": \"body\", \"parameters\": [\n          { \"type\": \"text\", \"text\": \"Marina\" },\n          { \"type\": \"text\", \"text\": \"48213\" },\n          { \"type\": \"text\", \"text\": \"5\" }\n        ]},\n        { \"type\": \"button\", \"sub_type\": \"url\", \"index\": \"0\", \"parameters\": [\n          { \"type\": \"text\", \"text\": \"48213\" }\n        ]}\n      ]\n    }\n  }'<\/code><\/pre>\n\n\n\n<p>With an organization token, also include the sender number&#8217;s <code>phone_number_id<\/code> in the body. These are the most common send errors:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Meaning<\/th><th>What to do<\/th><\/tr><\/thead><tbody><tr><td><code>132000<\/code><\/td><td>Number of parameters doesn&#8217;t match the template<\/td><td>Check how many parameters each component expects<\/td><\/tr><tr><td><code>132001<\/code><\/td><td>Template doesn&#8217;t exist in that language or isn&#8217;t approved<\/td><td>Check name, language code and status<\/td><\/tr><tr><td><code>132012<\/code><\/td><td>Parameters in a different format from the template<\/td><td>Use the right format (positional or named)<\/td><\/tr><tr><td><code>132015<\/code><\/td><td>Template paused for low quality<\/td><td>Wait out the pause or edit the content<\/td><\/tr><tr><td><code>132016<\/code><\/td><td>Template disabled after repeated pauses<\/td><td>Create a new template with different content<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Why templates get rejected<\/h2>\n\n\n\n<p>Review combines automated systems and manual analysis and takes up to 24 hours. The most common reasons Meta lists are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Variable formatting<\/strong>: missing or mismatched braces, special characters such as <code>#<\/code>, <code>$<\/code> or <code>%<\/code> inside the variable, numbering out of sequence (<code>{{1}}<\/code>, <code>{{2}}<\/code>, <code>{{5}}<\/code>).<\/li>\n\n\n<li><strong>Too many variables for the text length<\/strong>: a short body with many parameters gets rejected. Add fixed text or cut variables.<\/li>\n\n\n<li><strong>Variable at the edges<\/strong>: the text can&#8217;t start or end with a parameter.<\/li>\n\n\n<li><strong>Requests for sensitive data<\/strong>: full card number, bank account or national ID number. Asking only for the last digits is accepted.<\/li>\n\n\n<li><strong>Threatening content<\/strong>: threatening the customer with legal action or public shaming.<\/li>\n\n\n<li><strong>Commerce Policy violations<\/strong>: products and services that are prohibited on the platform.<\/li>\n\n\n<li><strong>Duplicates<\/strong>: the same body and footer wording as an existing template (this rule doesn&#8217;t apply to authentication).<\/li>\n\n<\/ul>\n\n\n\n<p>If you disagree with a rejection, you can edit and resubmit, or appeal in WhatsApp Manager with sample values. Meta decides appeals within 24 hours. The full troubleshooting walkthrough is in <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-template-rejected\/\">WhatsApp template rejected<\/a>.<\/p>\n\n\n\n<p>To edit via API, Meta allows changes to templates with status <code>APPROVED<\/code>, <code>REJECTED<\/code> or <code>PAUSED<\/code>. An edit replaces all components at once, and an approved template can be edited up to 10 times in 30 days or once in 24 hours. With Vectalk, editing is a <code>POST \/api\/templates\/{templateId}<\/code> with the new components; the Vectalk docs list <code>APPROVED<\/code> and <code>REJECTED<\/code> templates as editable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to keep utility from turning into marketing<\/h2>\n\n\n\n<p>This is the most expensive template problem. Under Meta&#8217;s rules, a template is utility only if it meets two conditions at the same time:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>It is <strong>non-promotional<\/strong>, with no persuasive intent.<\/li>\n\n\n<li>It is <strong>specific to the user<\/strong> (tied to their order, account, service or transaction) <strong>or essential<\/strong> (security, recall, fraud alert, privacy policy change).<\/li>\n\n<\/ol>\n\n\n\n<p>Since April 9, 2025, if you submit a template as <code>UTILITY<\/code> and Meta concludes it&#8217;s marketing, the template is <strong>approved as <code>MARKETING<\/code><\/strong> instead of rejected. You only notice by checking the category in the response or the webhook.<\/p>\n\n\n\n<p>After approval, the template keeps being evaluated. Meta runs a recurring process that recategorizes utility templates that should be marketing, with 1 day&#8217;s notice via the <code>template_category_update<\/code> webhook and email. The payload carries the template&#8217;s category in <code>new_category<\/code> and the category it should have in <code>correct_category<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"field\": \"template_category_update\",\n  \"value\": {\n    \"message_template_id\": 278077987957091,\n    \"message_template_name\": \"payment_reminder\",\n    \"message_template_language\": \"en_US\",\n    \"new_category\": \"UTILITY\",\n    \"correct_category\": \"MARKETING\",\n    \"category_update_timestamp\": 1746169200\n  }\n}<\/code><\/pre>\n\n\n\n<p>On Meta&#8217;s API you can also list templates with <code>?fields=category,correct_category<\/code> and compare the two fields. When they differ and <code>correct_category<\/code> is filled in, the category is updated to that value on the first day of the next month. You have 60 days to request a review in Business Support Home.<\/p>\n\n\n\n<p>Here is the difference in practice:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Text<\/th><th>Likely category<\/th><th>Why<\/th><\/tr><\/thead><tbody><tr><td>&#8220;Your order {{1}} has shipped with tracking code {{2}}. We&#8217;ll let you know when it&#8217;s delivered.&#8221;<\/td><td>Utility<\/td><td>Specific to the order, no promotion<\/td><\/tr><tr><td>&#8220;Your order {{1}} has shipped. Enjoy 10% off your next purchase!&#8221;<\/td><td>Marketing<\/td><td>Mixes a notice with an offer<\/td><\/tr><tr><td>&#8220;Your subscription expires on {{1}}. Renew today with a discount.&#8221;<\/td><td>Marketing<\/td><td>Renewal attempt with an incentive<\/td><\/tr><tr><td>&#8220;Your {{1}} bill is due on {{2}} and will be charged to the card ending in {{3}}.&#8221;<\/td><td>Utility<\/td><td>Account alert with no persuasion<\/td><\/tr><tr><td>&#8220;How was your experience with us?&#8221;<\/td><td>Marketing<\/td><td>Generic survey, not tied to a specific interaction<\/td><\/tr><tr><td>&#8220;You contacted our support about order {{1}}. How did we do?&#8221;<\/td><td>Utility<\/td><td>Survey tied to a specific interaction<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>A checklist before sending as utility:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Does the text mention something about the user (order number, date, amount, ticket number)?<\/li>\n\n\n<li>Does any word sound like an invitation to buy, renew or &#8220;take advantage&#8221;?<\/li>\n\n\n<li>Does the button lead to the order or account page rather than the storefront?<\/li>\n\n\n<li>Is the footer free of slogans or sales pitches?<\/li>\n\n<\/ul>\n\n\n\n<p>Repeatedly classifying marketing as utility has consequences. Meta describes an escalating set of restrictions for accounts that do this:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Level<\/th><th>What happens<\/th><th>Duration<\/th><\/tr><\/thead><tbody><tr><td>Warning<\/td><td>Written warning to the messaging account admins; utility-to-marketing changes become immediate, with no advance notice<\/td><td>Ongoing<\/td><\/tr><tr><td>Rate limiting<\/td><td>Utility message volume capped in a rolling 24-hour window; the excess is rejected<\/td><td>At least 7 days<\/td><\/tr><tr><td>Utility restriction<\/td><td>All the account&#8217;s approved utility templates become marketing; creating new ones and requesting category reviews are blocked<\/td><td>7 days (30 for repeat violations)<\/td><\/tr><tr><td>Portfolio-level restriction<\/td><td>The same, across all messaging accounts in the portfolio<\/td><td>30 days<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>These actions arrive through the <code>account_update<\/code> webhook, with <code>violation_type<\/code> equal to <code>UTILITY_TEMPLATE_ABUSE<\/code> (warnings and utility restrictions) or <code>UTILITY_TEMPLATE_ABUSE_RATE_LIMIT<\/code> (rate limiting).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Template quality and pausing<\/h2>\n\n\n\n<p>Each approved template gets a rating based on usage, feedback and engagement: <code>GREEN<\/code> (high), <code>YELLOW<\/code> (medium), <code>RED<\/code> (low) or <code>UNKNOWN<\/code> (no data yet). A template that reaches <code>RED<\/code> is paused automatically: 3 hours the first time, 6 hours the second, and disabled the third. While it&#8217;s paused, the API rejects sends without charging and without counting them toward the messaging limit.<\/p>\n\n\n\n<p>Pausing the campaigns that depend on the template avoids a queue of errors. The pause doesn&#8217;t affect the phone number right away, but Meta warns that frequently sending templates that reach low quality can eventually affect the number. Volume and audience care for large sends through the API are covered in <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-bulk-messaging-official-api\/\">bulk messaging with the official API<\/a>. If you send marketing at scale, also read about the <a href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-marketing-messages-api\/\">Marketing Messages API<\/a>, Meta&#8217;s dedicated route for marketing templates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">How long does Meta take to approve a template?<\/h3>\n\n\n\n<p>The documentation says the decision comes within 24 hours. Many templates are approved sooner, but plan your launch around the maximum.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I send a template to any number?<\/h3>\n\n\n\n<p>No. Meta requires the recipient to have given consent (opt-in) to receive messages from your business, and sends outside the window count toward the portfolio&#8217;s messaging limit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I change the category of an approved template?<\/h3>\n\n\n\n<p>Via API, the category of an approved template can&#8217;t be edited. For rejected templates, you can edit the category and resubmit. For templates approved as marketing that you believe are utility, request a review in WhatsApp Manager.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is a utility template sent inside the 24-hour window free?<\/h3>\n\n\n\n<p>Not anymore. Since October 1, 2026, Meta charges for utility templates sent inside the customer service window. The only case in which templates aren&#8217;t charged is the free entry point window, which can stay open for up to 7 days for users who arrive through a Click to WhatsApp ad.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is the template payload on Vectalk different from Meta&#8217;s?<\/h3>\n\n\n\n<p>No. The creation and send bodies are the same as the Cloud API. Only the base URL (<code>https:\/\/apis.vectalk.com.br\/api<\/code>) and the token, generated in the Vectalk dashboard, change.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Create your templates with Vectalk<\/h2>\n\n\n\n<p>With Vectalk you create, list, edit and send templates using the same payloads as Meta&#8217;s documentation. Template management uses an instance token (one per number), and an organization token can send messages from any of your numbers when you include the <code>phone_number_id<\/code>. Billing works with a monthly fee plus a prepaid balance: Vectalk puts its own line of credit on your number, each delivered message is deducted from your balance, and you never register a card with Meta. Create your account at <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a> and check the endpoints at <a href=\"https:\/\/docs.vectalk.com.br\/\">docs.vectalk.com.br<\/a>. If you have questions, use the <a href=\"https:\/\/vectalk.com.br\/contato.html\">contact page<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Sources checked on October 29, 2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Template overview<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/components\" target=\"_blank\" rel=\"noreferrer noopener\">Template components<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-categorization\" target=\"_blank\" rel=\"noreferrer noopener\">Template categorization<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-review\" target=\"_blank\" rel=\"noreferrer noopener\">Template review<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-management\" target=\"_blank\" rel=\"noreferrer noopener\">Template management<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-pausing\" target=\"_blank\" rel=\"noreferrer noopener\">Template pausing<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">Error codes<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How WhatsApp Business API templates work: the three categories, components and buttons, creating and sending them via API, why they get rejected and how to keep utility templates as utility.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-675","post","type-post","status-publish","format-standard","hentry","category-blog"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WhatsApp API Message Templates: Categories and Approval<\/title>\n<meta name=\"description\" content=\"WhatsApp API message templates: categories, creation via API, variables, buttons, rejection reasons and how to keep utility templates out of marketing.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WhatsApp API Message Templates: Categories and Approval\" \/>\n<meta property=\"og:description\" content=\"WhatsApp API message templates: categories, creation via API, variables, buttons, rejection reasons and how to keep utility templates out of marketing.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T13:12:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T13:12:53+00:00\" \/>\n<meta name=\"author\" content=\"wanderleyfcunha\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wanderleyfcunha\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"WhatsApp API message templates: categories, creation, variables and approval\",\"datePublished\":\"2026-10-29T13:12:50+00:00\",\"dateModified\":\"2026-10-29T13:12:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/\"},\"wordCount\":2221,\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/\",\"name\":\"WhatsApp API Message Templates: Categories and Approval\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-29T13:12:50+00:00\",\"dateModified\":\"2026-10-29T13:12:53+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"WhatsApp API message templates: categories, creation via API, variables, buttons, rejection reasons and how to keep utility templates out of marketing.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/en\\\/whatsapp-api-message-templates\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WhatsApp API message templates: categories, creation, variables and approval\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\",\"name\":\"Blog Vectalk\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\",\"name\":\"wanderleyfcunha\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"caption\":\"wanderleyfcunha\"},\"sameAs\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WhatsApp API Message Templates: Categories and Approval","description":"WhatsApp API message templates: categories, creation via API, variables, buttons, rejection reasons and how to keep utility templates out of marketing.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/","og_locale":"en_US","og_type":"article","og_title":"WhatsApp API Message Templates: Categories and Approval","og_description":"WhatsApp API message templates: categories, creation via API, variables, buttons, rejection reasons and how to keep utility templates out of marketing.","og_url":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-29T13:12:50+00:00","article_modified_time":"2026-10-29T13:12:53+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"WhatsApp API message templates: categories, creation, variables and approval","datePublished":"2026-10-29T13:12:50+00:00","dateModified":"2026-10-29T13:12:53+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/"},"wordCount":2221,"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/","url":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/","name":"WhatsApp API Message Templates: Categories and Approval","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-29T13:12:50+00:00","dateModified":"2026-10-29T13:12:53+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"WhatsApp API message templates: categories, creation via API, variables, buttons, rejection reasons and how to keep utility templates out of marketing.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/en\/whatsapp-api-message-templates\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"WhatsApp API message templates: categories, creation, variables and approval"}]},{"@type":"WebSite","@id":"https:\/\/vectalk.com.br\/blog\/#website","url":"https:\/\/vectalk.com.br\/blog\/","name":"Blog Vectalk","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vectalk.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b","name":"wanderleyfcunha","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","caption":"wanderleyfcunha"},"sameAs":["https:\/\/vectalk.com.br\/blog"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/comments?post=675"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/675\/revisions"}],"predecessor-version":[{"id":677,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/675\/revisions\/677"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}