{"id":747,"date":"2026-10-29T13:22:19","date_gmt":"2026-10-29T13:22:19","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/"},"modified":"2026-10-29T13:22:27","modified_gmt":"2026-10-29T13:22:27","slug":"criar-template-via-api-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/","title":{"rendered":"Como criar, editar e excluir templates pela API do WhatsApp"},"content":{"rendered":"\n<p><em>Atualizado em 29\/10\/2026<\/em><\/p>\n\n\n\n<p>Para criar um template pela API do WhatsApp, voc\u00ea faz <code>POST \/&lt;WABA_ID&gt;\/message_templates<\/code> com <code>name<\/code>, <code>language<\/code>, <code>category<\/code> e o array <code>components<\/code>, incluindo um valor de exemplo para cada vari\u00e1vel. A Meta responde com o <code>id<\/code> do template e o status <code>PENDING<\/code>; quando a revis\u00e3o termina, chega o webhook <code>message_template_status_update<\/code>. Para editar, use <code>POST \/&lt;TEMPLATE_ID&gt;<\/code>; para excluir, <code>DELETE \/&lt;WABA_ID&gt;\/message_templates?name=...<\/code>, com <code>hsm_id<\/code> se quiser apagar um idioma s\u00f3.<\/p>\n\n\n\n<p>Este guia mostra os payloads de cada opera\u00e7\u00e3o, os limites de edi\u00e7\u00e3o e exclus\u00e3o e os erros que mais travam quem automatiza templates. O conceito de template e as regras de uso est\u00e3o no guia <a href=\"https:\/\/vectalk.com.br\/blog\/templates-whatsapp-api\/\">templates da API do WhatsApp<\/a>; aqui o foco \u00e9 o ciclo de vida pela API.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Onde os templates vivem depois de 23\/09\/2026<\/h2>\n\n\n\n<p>Desde 23 de setembro de 2026, a Meta separa a antiga WABA em <strong>conta do WhatsApp<\/strong> (o n\u00famero e o perfil) e <strong>conta de mensagens<\/strong> (templates, cobran\u00e7a e webhooks). A documenta\u00e7\u00e3o de templates j\u00e1 fala em &#8220;Messaging account&#8221;: os templates s\u00e3o ativos da conta de mensagens, e cada conta de mensagens tem seus pr\u00f3prios templates.<\/p>\n\n\n\n<p>Na pr\u00e1tica, nada muda no c\u00f3digo. As contas de mensagens herdaram o ID da WABA, e os exemplos da documenta\u00e7\u00e3o continuam usando <code>\/&lt;WABA_ID&gt;\/message_templates<\/code>. Ou seja: o mesmo ID que voc\u00ea j\u00e1 usava serve para criar, listar e excluir. A consequ\u00eancia que importa \u00e9 outra: templates n\u00e3o s\u00e3o compartilhados entre contas de mensagens. Se o mesmo n\u00famero for usado por dois provedores, cada um tem a sua conta de mensagens e precisa ter os templates criados nela. A estrutura completa est\u00e1 em <a href=\"https:\/\/vectalk.com.br\/blog\/conta-whatsapp-conta-de-mensagens-waba\/\">conta do WhatsApp x conta de mensagens<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Antes de come\u00e7ar<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ID da conta<\/strong>: o WABA ID (ou ID da conta de mensagens, que \u00e9 o mesmo). Se n\u00e3o sabe onde ele fica, veja <a href=\"https:\/\/vectalk.com.br\/blog\/onde-encontrar-phone-number-id-whatsapp\/\">onde encontrar o Phone Number ID e o WABA ID<\/a>.<\/li>\n\n\n<li><strong>Token<\/strong>: um token com a permiss\u00e3o <code>whatsapp_business_management<\/code>. S\u00f3 com <code>whatsapp_business_messaging<\/code>, a exclus\u00e3o devolve erro de c\u00f3digo 200, segundo a documenta\u00e7\u00e3o. Para produ\u00e7\u00e3o, use um <a href=\"https:\/\/vectalk.com.br\/blog\/token-permanente-api-whatsapp\/\">token permanente de usu\u00e1rio do sistema<\/a>.<\/li>\n\n\n<li><strong>Vers\u00e3o da Graph API<\/strong>: os exemplos abaixo usam <code>v26.0<\/code>. Troque pela vers\u00e3o que voc\u00ea usa.<\/li>\n\n\n<li><strong>Limites da conta<\/strong>: at\u00e9 100 templates criados por hora por conta de mensagens. O total \u00e9 de 250 templates se o portf\u00f3lio n\u00e3o for verificado e de at\u00e9 6.000 se o portf\u00f3lio for verificado e tiver nome de exibi\u00e7\u00e3o aprovado em pelo menos uma conta do WhatsApp.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Os campos da cria\u00e7\u00e3o<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campo<\/th><th>Obrigat\u00f3rio<\/th><th>O que \u00e9<\/th><\/tr><\/thead><tbody><tr><td><code>name<\/code><\/td><td>Sim<\/td><td>Letras min\u00fasculas, n\u00fameros e sublinhado; at\u00e9 512 caracteres<\/td><\/tr><tr><td><code>language<\/code><\/td><td>Sim<\/td><td>C\u00f3digo do idioma, como <code>pt_BR<\/code>, <code>en_US<\/code> ou <code>es_MX<\/code><\/td><\/tr><tr><td><code>category<\/code><\/td><td>Sim<\/td><td><code>MARKETING<\/code>, <code>UTILITY<\/code> ou <code>AUTHENTICATION<\/code><\/td><\/tr><tr><td><code>components<\/code><\/td><td>Na pr\u00e1tica, sim<\/td><td><code>HEADER<\/code>, <code>BODY<\/code>, <code>FOOTER<\/code> e <code>BUTTONS<\/code><\/td><\/tr><tr><td><code>parameter_format<\/code><\/td><td>N\u00e3o<\/td><td><code>POSITIONAL<\/code> (<code>{{1}}<\/code>) ou <code>NAMED<\/code> (<code>{{nome}}<\/code>)<\/td><\/tr><tr><td><code>message_send_ttl_seconds<\/code><\/td><td>N\u00e3o<\/td><td>Tempo de vida da mensagem enviada<\/td><\/tr><tr><td><code>library_template_name<\/code><\/td><td>N\u00e3o<\/td><td>Cria a partir de um modelo da biblioteca da Meta<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>O nome n\u00e3o \u00e9 \u00fanico: voc\u00ea pode ter <code>pedido_enviado<\/code> em <code>pt_BR<\/code> e em <code>es_MX<\/code>, e cada combina\u00e7\u00e3o nome + idioma \u00e9 um template com ID pr\u00f3prio. A resposta da cria\u00e7\u00e3o traz tr\u00eas campos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"id\": \"1252715608684590\",\n  \"status\": \"PENDING\",\n  \"category\": \"UTILITY\"\n}<\/code><\/pre>\n\n\n\n<p>Guarde o <code>id<\/code>. Ele \u00e9 a chave para consultar, editar e excluir s\u00f3 aquele idioma.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 1: utilidade com vari\u00e1veis posicionais<\/h2>\n\n\n\n<p>Toda vari\u00e1vel precisa de um valor de exemplo. Sem isso, a cria\u00e7\u00e3o \u00e9 rejeitada. No corpo, os exemplos v\u00e3o em <code>example.body_text<\/code>, um array dentro de outro array, na ordem das vari\u00e1veis.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"name\": \"pedido_enviado\",\n    \"language\": \"pt_BR\",\n    \"category\": \"UTILITY\",\n    \"components\": [\n      {\n        \"type\": \"HEADER\",\n        \"format\": \"TEXT\",\n        \"text\": \"Pedido {{1}} enviado\",\n        \"example\": { \"header_text\": [\"#4821\"] }\n      },\n      {\n        \"type\": \"BODY\",\n        \"text\": \"Ol\u00e1, {{1}}! Seu pedido saiu para entrega e deve chegar at\u00e9 {{2}}. C\u00f3digo de rastreio: {{3}}.\",\n        \"example\": { \"body_text\": [[\"Ana\", \"05\/11\", \"BR123456789\"]] }\n      },\n      {\n        \"type\": \"FOOTER\",\n        \"text\": \"Responda esta mensagem se precisar de ajuda\"\n      }\n    ]\n  }'<\/code><\/pre>\n\n\n\n<p>O cabe\u00e7alho de texto aceita uma vari\u00e1vel s\u00f3. O exemplo do cabe\u00e7alho vai em <code>header_text<\/code> (array simples), e o do corpo em <code>body_text<\/code> (array de arrays). Trocar um pelo outro \u00e9 um erro frequente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 2: vari\u00e1veis nomeadas<\/h2>\n\n\n\n<p>Com <code>parameter_format: \"NAMED\"<\/code>, as vari\u00e1veis ganham nome em vez de n\u00famero, e os exemplos passam para <code>body_text_named_params<\/code> (no cabe\u00e7alho, <code>header_text_named_params<\/code>), cada um com <code>param_name<\/code> e <code>example<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"name\": \"boleto_disponivel\",\n  \"language\": \"pt_BR\",\n  \"category\": \"UTILITY\",\n  \"parameter_format\": \"NAMED\",\n  \"components\": [\n    {\n      \"type\": \"BODY\",\n      \"text\": \"Oi, {{primeiro_nome}}. O boleto da fatura {{numero_fatura}} vence em {{vencimento}}.\",\n      \"example\": {\n        \"body_text_named_params\": [\n          { \"param_name\": \"primeiro_nome\", \"example\": \"Carlos\" },\n          { \"param_name\": \"numero_fatura\", \"example\": \"2026-10-0193\" },\n          { \"param_name\": \"vencimento\", \"example\": \"10\/11\/2026\" }\n        ]\n      }\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>Vari\u00e1veis nomeadas deixam o envio mais leg\u00edvel e evitam trocar <code>{{2}}<\/code> por <code>{{3}}<\/code> quando algu\u00e9m reescreve o texto. Nos exemplos da Meta, os nomes usam letras min\u00fasculas e sublinhado; siga o mesmo padr\u00e3o. Lembre que a escolha vale para o envio: um template <code>NAMED<\/code> \u00e9 enviado com <code>parameter_name<\/code> em cada par\u00e2metro, como mostramos em <a href=\"https:\/\/vectalk.com.br\/blog\/enviar-template-api-whatsapp\/\">como enviar template pela API<\/a>.<\/p>\n\n\n\n<p>Um lembrete de fatura do pr\u00f3prio cliente, como o do exemplo, \u00e9 utilidade. Cobran\u00e7a de d\u00edvida de terceiros \u00e9 proibida pela Pol\u00edtica de Mensagens Comerciais, em qualquer categoria.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 3: cabe\u00e7alho com imagem, v\u00eddeo ou documento<\/h2>\n\n\n\n<p>Para cabe\u00e7alho de m\u00eddia, o exemplo n\u00e3o \u00e9 uma URL: \u00e9 um <strong>handle<\/strong> gerado pela Resumable Upload API da Graph API. S\u00e3o duas chamadas, e a primeira usa o <strong>App ID<\/strong> do seu app da Meta, n\u00e3o o WABA ID.<\/p>\n\n\n\n<p>Passo 1, abrir a sess\u00e3o de upload:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/&lt;APP_ID&gt;\/uploads?file_name=banner.jpg&amp;file_length=184320&amp;file_type=image\/jpeg\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>A resposta traz <code>{\"id\": \"upload:&lt;UPLOAD_SESSION_ID&gt;\"}<\/code>. Passo 2, enviar o arquivo bin\u00e1rio para essa sess\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/upload:&lt;UPLOAD_SESSION_ID&gt;\" \\\n  -H \"Authorization: OAuth &lt;TOKEN&gt;\" \\\n  -H \"file_offset: 0\" \\\n  --data-binary @banner.jpg<\/code><\/pre>\n\n\n\n<p>Repare no cabe\u00e7alho <code>Authorization: OAuth<\/code>, como est\u00e1 na documenta\u00e7\u00e3o. A resposta traz <code>{\"h\": \"4::aW...\"}<\/code>. Esse valor vai em <code>example.header_handle<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"type\": \"HEADER\",\n  \"format\": \"IMAGE\",\n  \"example\": { \"header_handle\": [\"4::aW...\"] }\n}<\/code><\/pre>\n\n\n\n<p>Os tipos aceitos pela Resumable Upload API s\u00e3o <code>application\/pdf<\/code>, <code>image\/jpeg<\/code>, <code>image\/jpg<\/code>, <code>image\/png<\/code> e <code>video\/mp4<\/code>. Para <code>format<\/code> use <code>IMAGE<\/code>, <code>VIDEO<\/code> ou <code>DOCUMENT<\/code> (o formato <code>GIF<\/code> existe s\u00f3 para a Marketing Messages API). O arquivo de exemplo \u00e9 s\u00f3 para a revis\u00e3o: no envio, voc\u00ea manda a m\u00eddia real de cada destinat\u00e1rio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 4: marketing com bot\u00f5es<\/h2>\n\n\n\n<p>Os bot\u00f5es ficam num \u00fanico componente <code>BUTTONS<\/code>. Este template de campanha combina URL com sufixo din\u00e2mico, c\u00f3digo de cupom e resposta r\u00e1pida:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"name\": \"cupom_black_friday\",\n  \"language\": \"pt_BR\",\n  \"category\": \"MARKETING\",\n  \"components\": [\n    {\n      \"type\": \"BODY\",\n      \"text\": \"{{1}}, sua Black Friday come\u00e7ou: {{2}} de desconto em todo o site at\u00e9 domingo.\",\n      \"example\": { \"body_text\": [[\"Marina\", \"20%\"]] }\n    },\n    {\n      \"type\": \"BUTTONS\",\n      \"buttons\": [\n        {\n          \"type\": \"URL\",\n          \"text\": \"Ver ofertas\",\n          \"url\": \"https:\/\/loja.exemplo.com.br\/ofertas?c={{1}}\",\n          \"example\": [\"bf2026\"]\n        },\n        { \"type\": \"COPY_CODE\", \"example\": \"BF20\" },\n        { \"type\": \"QUICK_REPLY\", \"text\": \"Parar promo\u00e7\u00f5es\" }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>A URL aceita uma vari\u00e1vel, sempre no fim. O exemplo de URL \u00e9 um array; o de <code>COPY_CODE<\/code> \u00e9 uma string. Bot\u00f5es de resposta r\u00e1pida, quando misturados com outros tipos, precisam ficar agrupados (todos antes ou todos depois dos demais); fora dessa ordem, a API devolve erro. Para cards com imagem e bot\u00e3o, o formato \u00e9 outro: o template carrossel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Limites dos componentes<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Elemento<\/th><th>Limite<\/th><\/tr><\/thead><tbody><tr><td>Texto do cabe\u00e7alho<\/td><td>60 caracteres, 1 vari\u00e1vel<\/td><\/tr><tr><td>Corpo<\/td><td>1.024 caracteres<\/td><\/tr><tr><td>Rodap\u00e9<\/td><td>60 caracteres<\/td><\/tr><tr><td>Texto de bot\u00e3o (URL, telefone, resposta r\u00e1pida)<\/td><td>25 caracteres<\/td><\/tr><tr><td>Exemplo de c\u00f3digo de cupom<\/td><td>20 caracteres<\/td><\/tr><tr><td>URL do bot\u00e3o<\/td><td>2.000 caracteres, 1 vari\u00e1vel<\/td><\/tr><tr><td>Bot\u00f5es no total<\/td><td>10<\/td><\/tr><tr><td>Bot\u00f5es de URL<\/td><td>2<\/td><\/tr><tr><td>Bot\u00f5es de telefone<\/td><td>1<\/td><\/tr><tr><td>Bot\u00f5es de copiar c\u00f3digo<\/td><td>1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>A documenta\u00e7\u00e3o avisa ainda que templates com 4 ou mais bot\u00f5es, ou com resposta r\u00e1pida junto de outro tipo de bot\u00e3o, n\u00e3o aparecem no WhatsApp para desktop. N\u00e3o use Markdown no cabe\u00e7alho de texto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Categoria: o que acontece se voc\u00ea errar<\/h2>\n\n\n\n<p>A categoria declarada n\u00e3o \u00e9 a palavra final. Desde 9 de abril de 2025, se voc\u00ea envia um template como <code>UTILITY<\/code> e a Meta conclui que ele \u00e9 de marketing, ele \u00e9 <strong>aprovado como <code>MARKETING<\/code><\/strong>, sem precisar do antigo <code>allow_category_change: true<\/code> (esse comportamento passou a ser o padr\u00e3o). Em outros casos, o template volta <code>REJECTED<\/code> com motivo <code>INCORRECT_CATEGORY<\/code>.<\/p>\n\n\n\n<p>A Meta tamb\u00e9m revisa templates j\u00e1 aprovados. Quando vai mudar a categoria de um, ela dispara o webhook <code>template_category_update<\/code> com o campo <code>correct_category<\/code>; depois da mudan\u00e7a, o evento traz <code>previous_category<\/code> e <code>new_category<\/code>. Para mudan\u00e7as de utilidade para marketing, a documenta\u00e7\u00e3o fala em aviso com 1 dia de anteced\u00eancia, que n\u00e3o \u00e9 dado para empresas j\u00e1 advertidas por uso indevido. H\u00e1 60 dias para contestar no Business Support Home.<\/p>\n\n\n\n<p>Como a diferen\u00e7a de pre\u00e7o \u00e9 grande (no Brasil, desde 1\u00ba\/10\/2026, R$ 0,3217 por marketing e R$ 0,0350 por utilidade), vale ler <a href=\"https:\/\/vectalk.com.br\/blog\/categorias-template-whatsapp\/\">como a Meta classifica templates<\/a> antes de automatizar a cria\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Consultar o status<\/h2>\n\n\n\n<p>Para um template espec\u00edfico, pe\u00e7a os campos que interessam:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl \"https:\/\/graph.facebook.com\/v26.0\/&lt;TEMPLATE_ID&gt;?fields=name,language,status,category,rejected_reason,quality_score\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>Para listar, use <code>GET \/&lt;WABA_ID&gt;\/message_templates<\/code>. Sem <code>fields<\/code>, a resposta traz <code>name<\/code>, <code>parameter_format<\/code>, <code>components<\/code>, <code>language<\/code>, <code>status<\/code>, <code>category<\/code>, <code>sub_category<\/code> e <code>id<\/code>. D\u00e1 para filtrar e paginar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates?fields=name,status,category&amp;status=rejected&amp;limit=50\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>A resposta vem com <code>data<\/code> e <code>paging<\/code>, que traz os cursores <code>before<\/code> e <code>after<\/code> e a URL <code>next<\/code>. Siga <code>next<\/code> at\u00e9 ele n\u00e3o existir mais.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Receber mudan\u00e7as de status por webhook<\/h2>\n\n\n\n<p>Consultar em loop funciona, mas o certo \u00e9 assinar o campo <code>message_template_status_update<\/code> no webhook do app. O evento chega com <code>field: \"message_template_status_update\"<\/code> e, em <code>value<\/code>, os campos <code>event<\/code>, <code>message_template_id<\/code>, <code>message_template_name<\/code>, <code>message_template_language<\/code>, <code>message_template_category<\/code> e <code>reason<\/code>. Um exemplo com valores ilustrativos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"object\": \"whatsapp_business_account\",\n  \"entry\": [{\n    \"id\": \"&lt;WABA_ID&gt;\",\n    \"time\": 1761730000,\n    \"changes\": [{\n      \"field\": \"message_template_status_update\",\n      \"value\": {\n        \"event\": \"REJECTED\",\n        \"message_template_id\": 1252715608684590,\n        \"message_template_name\": \"cupom_black_friday\",\n        \"message_template_language\": \"pt_BR\",\n        \"message_template_category\": \"MARKETING\",\n        \"reason\": \"INVALID_FORMAT\",\n        \"rejection_info\": {\n          \"reason\": \"...\",\n          \"recommendation\": \"...\"\n        }\n      }\n    }]\n  }]\n}<\/code><\/pre>\n\n\n\n<p>Os valores de <code>event<\/code> mais \u00fateis para automatizar:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><code>event<\/code><\/th><th>O que fazer<\/th><\/tr><\/thead><tbody><tr><td><code>APPROVED<\/code><\/td><td>Liberar o template no seu sistema<\/td><\/tr><tr><td><code>REJECTED<\/code><\/td><td>Ler <code>reason<\/code> (e <code>rejection_info<\/code>, nos casos de <code>INVALID_FORMAT<\/code>), corrigir e editar<\/td><\/tr><tr><td><code>PAUSED<\/code> \/ <code>FLAGGED<\/code><\/td><td>Avisar o time; o template est\u00e1 com qualidade ruim<\/td><\/tr><tr><td><code>DISABLED<\/code><\/td><td>Parar de usar; <code>disable_info<\/code> traz a data<\/td><\/tr><tr><td><code>REINSTATED<\/code> \/ <code>UNARCHIVED<\/code><\/td><td>Voltar a liberar<\/td><\/tr><tr><td><code>ARCHIVED<\/code><\/td><td>Template parado por inatividade; ser\u00e1 exclu\u00eddo em 28 dias se n\u00e3o for desarquivado<\/td><\/tr><tr><td><code>LIMIT_EXCEEDED<\/code><\/td><td>A conta atingiu o limite de templates<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Os motivos de <code>reason<\/code> incluem <code>INCORRECT_CATEGORY<\/code>, <code>TAG_CONTENT_MISMATCH<\/code>, <code>INVALID_FORMAT<\/code>, <code>PROMOTIONAL<\/code>, <code>ABUSIVE_CONTENT<\/code> e <code>SCAM<\/code>. As corre\u00e7\u00f5es mais comuns est\u00e3o em <a href=\"https:\/\/vectalk.com.br\/blog\/template-reprovado-whatsapp\/\">template reprovado: motivos e como corrigir<\/a>, e o caso de pausa em <a href=\"https:\/\/vectalk.com.br\/blog\/template-pausado-whatsapp\/\">template pausado ou desativado<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Editar um template<\/h2>\n\n\n\n<p>A edi\u00e7\u00e3o \u00e9 um <code>POST<\/code> no ID do template, e o array <code>components<\/code> enviado <strong>substitui todos os componentes<\/strong>. N\u00e3o existe edi\u00e7\u00e3o de um componente isolado: mande o template inteiro.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/&lt;TEMPLATE_ID&gt;\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"components\": [\n      {\n        \"type\": \"BODY\",\n        \"text\": \"Ol\u00e1, {{1}}! Seu pedido saiu para entrega e chega at\u00e9 {{2}}. Rastreio: {{3}}.\",\n        \"example\": { \"body_text\": [[\"Ana\", \"05\/11\", \"BR123456789\"]] }\n      }\n    ]\n  }'<\/code><\/pre>\n\n\n\n<p>A resposta \u00e9 <code>{\"success\": true}<\/code>. As regras da p\u00e1gina de gerenciamento de templates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>D\u00e1 para editar templates <code>APPROVED<\/code>, <code>REJECTED<\/code> ou <code>PAUSED<\/code> (a refer\u00eancia da API cita aprovados e rejeitados).<\/li>\n\n\n<li>Os campos edit\u00e1veis s\u00e3o categoria, componentes e tempo de vida, mas a <strong>categoria de um template aprovado n\u00e3o pode ser editada<\/strong>.<\/li>\n\n\n<li>Um template aprovado pode ser editado <strong>no m\u00e1ximo uma vez a cada 24 horas e at\u00e9 10 vezes em 30 dias<\/strong>. Rejeitados e pausados n\u00e3o t\u00eam esse limite.<\/li>\n\n\n<li>Depois de editado, um template aprovado ou pausado passa de novo pela revis\u00e3o; se passar, continua aprovado.<\/li>\n\n<\/ul>\n\n\n\n<p>Se voc\u00ea precisa mudar o nome, o idioma ou a categoria de um template aprovado, o caminho \u00e9 criar um template novo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Excluir templates<\/h2>\n\n\n\n<p>A exclus\u00e3o usa o endpoint de listagem com <code>DELETE<\/code>. H\u00e1 tr\u00eas formas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\"># Apaga TODOS os idiomas com esse nome\ncurl -X DELETE \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates?name=pedido_enviado\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"\n\n# Apaga s\u00f3 o template com esse ID (um idioma)\ncurl -X DELETE \"https:\/\/graph.facebook.com\/v26.0\/&lt;WABA_ID&gt;\/message_templates?hsm_id=1252715608684590&amp;name=pedido_enviado\" \\\n  -H \"Authorization: Bearer &lt;TOKEN&gt;\"<\/code><\/pre>\n\n\n\n<p>A terceira \u00e9 <code>hsm_ids<\/code>, com um array JSON de at\u00e9 100 IDs. Ela n\u00e3o pode ser combinada com <code>name<\/code> nem com <code>hsm_id<\/code>, e um \u00fanico ID inv\u00e1lido faz a requisi\u00e7\u00e3o inteira falhar.<\/p>\n\n\n\n<p>O que acontece depois:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mensagens j\u00e1 enviadas e ainda n\u00e3o entregues ficam com o template em <code>PENDING_DELETION<\/code>, e o WhatsApp tenta entreg\u00e1-las por 30 dias.<\/li>\n\n\n<li>O nome de um template aprovado exclu\u00eddo <strong>n\u00e3o pode ser reutilizado por 30 dias<\/strong>.<\/li>\n\n\n<li>Templates desativados (<code>DISABLED<\/code>) n\u00e3o podem ser exclu\u00eddos.<\/li>\n\n\n<li>Excluir um nome que n\u00e3o existe devolve erro.<\/li>\n\n<\/ul>\n\n\n\n<p>Antes de rodar uma limpeza, lembre que a pr\u00f3pria Meta arquiva templates sem uso por 12 meses e agenda a exclus\u00e3o para 28 dias depois. \u00c0s vezes a limpeza manual nem \u00e9 necess\u00e1ria.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erros comuns na automa\u00e7\u00e3o<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Exemplo faltando<\/strong>: cada vari\u00e1vel precisa de exemplo, inclusive a da URL do bot\u00e3o.<\/li>\n\n\n<li><strong><code>header_text<\/code> com array de arrays<\/strong> ou <code>body_text<\/code> como array simples: os formatos s\u00e3o diferentes.<\/li>\n\n\n<li><strong>URL no <code>header_handle<\/code><\/strong>: o exemplo de m\u00eddia \u00e9 o handle da Resumable Upload API.<\/li>\n\n\n<li><strong>WABA ID no upload<\/strong>: a sess\u00e3o de upload \u00e9 aberta no App ID.<\/li>\n\n\n<li><strong>Token sem <code>whatsapp_business_management<\/code><\/strong>: lista ou cria, mas falha na exclus\u00e3o com c\u00f3digo 200.<\/li>\n\n\n<li><strong>Mais de 100 cria\u00e7\u00f5es por hora<\/strong> numa conta de mensagens.<\/li>\n\n\n<li><strong>Recriar com o mesmo nome logo ap\u00f3s excluir<\/strong> um aprovado: espere 30 dias ou use outro nome.<\/li>\n\n\n<li><strong>Editar um aprovado duas vezes no mesmo dia<\/strong>: a segunda edi\u00e7\u00e3o esbarra no limite de 24 horas.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Como fazer isso com a Vectalk<\/h2>\n\n\n\n<p>A Vectalk \u00e9 um proxy da <a href=\"https:\/\/vectalk.com.br\/blog\/api-oficial-do-whatsapp\/\">API oficial do WhatsApp<\/a>, e as mesmas opera\u00e7\u00f5es est\u00e3o na API dela, com token de inst\u00e2ncia (o WABA ID \u00e9 resolvido pelo token, ent\u00e3o n\u00e3o vai na URL):<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Opera\u00e7\u00e3o<\/th><th>Rota na Vectalk<\/th><\/tr><\/thead><tbody><tr><td>Listar ou filtrar por nome<\/td><td><code>GET https:\/\/apis.vectalk.com.br\/api\/templates?name=pedido_enviado<\/code><\/td><\/tr><tr><td>Criar<\/td><td><code>POST https:\/\/apis.vectalk.com.br\/api\/templates<\/code><\/td><\/tr><tr><td>Editar (s\u00f3 <code>APPROVED<\/code> ou <code>REJECTED<\/code>)<\/td><td><code>POST https:\/\/apis.vectalk.com.br\/api\/templates\/{templateId}<\/code><\/td><\/tr><tr><td>Excluir por nome<\/td><td><code>DELETE https:\/\/apis.vectalk.com.br\/api\/templates?name=pedido_enviado<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>O corpo da cria\u00e7\u00e3o usa os mesmos campos da Meta (<code>name<\/code>, <code>language<\/code>, <code>category<\/code>, <code>components<\/code>), e a resposta traz <code>id<\/code>, <code>status: \"PENDING\"<\/code> e <code>category<\/code>:<\/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 &lt;TOKEN_DE_INSTANCIA&gt;\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"name\": \"pedido_enviado\",\n    \"language\": \"pt_BR\",\n    \"category\": \"UTILITY\",\n    \"components\": [\n      {\n        \"type\": \"BODY\",\n        \"text\": \"Ol\u00e1, {{1}}! Seu pedido saiu para entrega e deve chegar at\u00e9 {{2}}.\",\n        \"example\": { \"body_text\": [[\"Ana\", \"05\/11\"]] }\n      }\n    ]\n  }'<\/code><\/pre>\n\n\n\n<p>Tokens de organiza\u00e7\u00e3o n\u00e3o acessam templates; crie um token vinculado \u00e0 inst\u00e2ncia em <strong>Configura\u00e7\u00f5es \u2192 API Tokens<\/strong>. Se preferir n\u00e3o escrever JSON, o painel tem a se\u00e7\u00e3o de templates com a Biblioteca de Modelos. Os detalhes de cada rota est\u00e3o na <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/templates\/create\">documenta\u00e7\u00e3o de templates da Vectalk<\/a>, e a conta \u00e9 criada em <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>. Para ideias de texto por setor, veja os <a href=\"https:\/\/vectalk.com.br\/blog\/modelos-templates-whatsapp\/\">60 modelos de template<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perguntas frequentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Quanto tempo a Meta leva para aprovar um template criado pela API?<\/h3>\n\n\n\n<p>A Meta n\u00e3o fixa um prazo \u00fanico na p\u00e1gina de gerenciamento. O template nasce <code>PENDING<\/code>, e voc\u00ea fica sabendo do resultado pelo webhook <code>message_template_status_update<\/code> ou consultando <code>GET \/&lt;TEMPLATE_ID&gt;?fields=status<\/code>. N\u00e3o monte um fluxo que dependa de aprova\u00e7\u00e3o imediata.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Devo usar o WABA ID ou o ID da conta de mensagens?<\/h3>\n\n\n\n<p>S\u00e3o o mesmo n\u00famero. Na separa\u00e7\u00e3o de 23\/09\/2026, as contas de mensagens herdaram o ID da WABA, e a documenta\u00e7\u00e3o de templates continua usando <code>\/&lt;WABA_ID&gt;\/message_templates<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Posso mudar a categoria de um template aprovado?<\/h3>\n\n\n\n<p>N\u00e3o pela edi\u00e7\u00e3o: a documenta\u00e7\u00e3o diz que a categoria de um template aprovado n\u00e3o pode ser editada. Crie outro template com a categoria certa. Quem pode mudar a categoria de um aprovado \u00e9 a Meta, avisando pelo webhook <code>template_category_update<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como criar o mesmo template em v\u00e1rios idiomas?<\/h3>\n\n\n\n<p>Fa\u00e7a um <code>POST<\/code> por idioma com o mesmo <code>name<\/code> e <code>language<\/code> diferente. Cada um recebe um <code>id<\/code>. Para excluir s\u00f3 um idioma, use <code>name<\/code> + <code>hsm_id<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O exemplo de imagem aparece para o cliente?<\/h3>\n\n\n\n<p>N\u00e3o. O handle do exemplo serve \u00e0 revis\u00e3o da Meta. No envio, voc\u00ea passa a m\u00eddia de verdade no componente <code>header<\/code>, por link ou media id.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fontes oficiais consultadas em 29\/10\/2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Templates overview (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-management\" target=\"_blank\" rel=\"noreferrer noopener\">Template management (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/reference\/whatsapp-business-account\/message-template-api\" target=\"_blank\" rel=\"noreferrer noopener\">Message Templates API (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/components\" target=\"_blank\" rel=\"noreferrer noopener\">Template components (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-categorization\" target=\"_blank\" rel=\"noreferrer noopener\">Template categorization (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/message_template_status_update\" target=\"_blank\" rel=\"noreferrer noopener\">Webhook message_template_status_update (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/docs\/graph-api\/guides\/upload\" target=\"_blank\" rel=\"noreferrer noopener\">Resumable Upload API (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/account-model-evolution\/\" target=\"_blank\" rel=\"noreferrer noopener\">Atualiza\u00e7\u00f5es nas contas do WhatsApp Business (Meta)<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/templates\/create\">Templates na API da Vectalk<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Do POST em message_templates \u00e0 exclus\u00e3o por hsm_id: payloads completos para criar, consultar, editar e apagar templates da API do WhatsApp sem abrir o Gerenciador.<\/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":[8],"tags":[],"class_list":["post-747","post","type-post","status-publish","format-standard","hentry","category-uncategorized-pt"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Criar template via API do WhatsApp: guia | Vectalk<\/title>\n<meta name=\"description\" content=\"Como criar template via API do WhatsApp: message_templates, exemplos obrigat\u00f3rios, categoria, status por webhook, limites de edi\u00e7\u00e3o e exclus\u00e3o.\" \/>\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\/criar-template-via-api-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Criar template via API do WhatsApp: guia | Vectalk\" \/>\n<meta property=\"og:description\" content=\"Como criar template via API do WhatsApp: message_templates, exemplos obrigat\u00f3rios, categoria, status por webhook, limites de edi\u00e7\u00e3o e exclus\u00e3o.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T13:22:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T13:22:27+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=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Como criar, editar e excluir templates pela API do WhatsApp\",\"datePublished\":\"2026-10-29T13:22:19+00:00\",\"dateModified\":\"2026-10-29T13:22:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/\"},\"wordCount\":2141,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/\",\"name\":\"Criar template via API do WhatsApp: guia | Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-29T13:22:19+00:00\",\"dateModified\":\"2026-10-29T13:22:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Como criar template via API do WhatsApp: message_templates, exemplos obrigat\u00f3rios, categoria, status por webhook, limites de edi\u00e7\u00e3o e exclus\u00e3o.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/criar-template-via-api-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como criar, editar e excluir templates pela API do WhatsApp\"}]},{\"@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":"Criar template via API do WhatsApp: guia | Vectalk","description":"Como criar template via API do WhatsApp: message_templates, exemplos obrigat\u00f3rios, categoria, status por webhook, limites de edi\u00e7\u00e3o e exclus\u00e3o.","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\/criar-template-via-api-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Criar template via API do WhatsApp: guia | Vectalk","og_description":"Como criar template via API do WhatsApp: message_templates, exemplos obrigat\u00f3rios, categoria, status por webhook, limites de edi\u00e7\u00e3o e exclus\u00e3o.","og_url":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-29T13:22:19+00:00","article_modified_time":"2026-10-29T13:22:27+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Como criar, editar e excluir templates pela API do WhatsApp","datePublished":"2026-10-29T13:22:19+00:00","dateModified":"2026-10-29T13:22:27+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/"},"wordCount":2141,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/","name":"Criar template via API do WhatsApp: guia | Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-29T13:22:19+00:00","dateModified":"2026-10-29T13:22:27+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Como criar template via API do WhatsApp: message_templates, exemplos obrigat\u00f3rios, categoria, status por webhook, limites de edi\u00e7\u00e3o e exclus\u00e3o.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/criar-template-via-api-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Como criar, editar e excluir templates pela API do WhatsApp"}]},{"@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\/747","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=747"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/747\/revisions"}],"predecessor-version":[{"id":750,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/747\/revisions\/750"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}