{"id":278,"date":"2026-10-25T13:05:08","date_gmt":"2026-10-25T13:05:08","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/"},"modified":"2026-10-25T13:05:10","modified_gmt":"2026-10-25T13:05:10","slug":"enviar-mensagem-api-whatsapp-exemplos","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/","title":{"rendered":"Como enviar mensagem pela API do WhatsApp: exemplos em cURL, Node.js e Python"},"content":{"rendered":"\n<p><em>Atualizado em 25\/10\/2026<\/em><\/p>\n\n\n\n<p>Para enviar uma mensagem pela API oficial do WhatsApp, fa\u00e7a um <code>POST<\/code> para <code>https:\/\/graph.facebook.com\/v26.0\/&lt;PHONE_NUMBER_ID&gt;\/messages<\/code> com o token no cabe\u00e7alho <code>Authorization<\/code> e um JSON com <code>messaging_product<\/code>, <code>to<\/code>, <code>type<\/code> e o conte\u00fado. Texto livre s\u00f3 pode ser enviado dentro da janela de 24 horas aberta pelo cliente; fora dela, \u00e9 preciso usar um template aprovado. A resposta 200 indica que a Meta aceitou o pedido, e a entrega \u00e9 confirmada depois, por webhook.<\/p>\n\n\n\n<p>Abaixo est\u00e3o exemplos copi\u00e1veis de texto e template em cURL, Node.js e Python, a mesma chamada pela Vectalk e uma tabela com os erros que mais aparecem no primeiro envio. Se voc\u00ea ainda n\u00e3o tem acesso \u00e0 API, veja o guia <a href=\"https:\/\/vectalk.com.br\/blog\/api-oficial-do-whatsapp\/\">API Oficial do WhatsApp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que voc\u00ea precisa antes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Phone Number ID<\/strong> do n\u00famero que vai enviar. N\u00e3o \u00e9 o n\u00famero em si; \u00e9 o ID que a Meta gera para ele. Veja o <a href=\"https:\/\/vectalk.com.br\/blog\/glossario-api-whatsapp\/\">gloss\u00e1rio da API<\/a>.<\/li>\n\n\n<li><strong>Token de acesso<\/strong> com a permiss\u00e3o <code>whatsapp_business_messaging<\/code>. Para produ\u00e7\u00e3o, use um token de usu\u00e1rio do sistema, como em <a href=\"https:\/\/vectalk.com.br\/blog\/token-permanente-api-whatsapp\/\">token permanente<\/a>.<\/li>\n\n\n<li><strong>N\u00famero do destinat\u00e1rio<\/strong> com <code>+<\/code> e c\u00f3digo do pa\u00eds, por exemplo <code>+5584999999999<\/code>.<\/li>\n\n\n<li><strong>Template aprovado<\/strong>, se o cliente n\u00e3o escreveu nas \u00faltimas 24 horas.<\/li>\n\n<\/ul>\n\n\n\n<p>Sobre o formato do n\u00famero: a <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\" target=\"_blank\" rel=\"noreferrer noopener\">documenta\u00e7\u00e3o de envio<\/a> recomenda sempre incluir o <code>+<\/code> e o c\u00f3digo do pa\u00eds. Sem o <code>+<\/code>, a Meta prefixa o c\u00f3digo do pa\u00eds do seu n\u00famero comercial, o que pode mandar a mensagem para o n\u00famero errado. A mesma p\u00e1gina avisa que, para Brasil e M\u00e9xico, a API pode ajustar o prefixo do n\u00famero, e isso \u00e9 comportamento esperado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estrutura do payload<\/h2>\n\n\n\n<p>Todo envio usa o mesmo endpoint. O que muda \u00e9 o <code>type<\/code> e o objeto com o mesmo nome:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campo<\/th><th>Obrigat\u00f3rio<\/th><th>Valor<\/th><\/tr><\/thead><tbody><tr><td><code>messaging_product<\/code><\/td><td>Sim<\/td><td>Sempre <code>\"whatsapp\"<\/code><\/td><\/tr><tr><td><code>recipient_type<\/code><\/td><td>N\u00e3o<\/td><td><code>\"individual\"<\/code> (padr\u00e3o) ou <code>\"group\"<\/code><\/td><\/tr><tr><td><code>to<\/code><\/td><td>Sim<\/td><td>N\u00famero do destinat\u00e1rio, de prefer\u00eancia com <code>+<\/code><\/td><\/tr><tr><td><code>type<\/code><\/td><td>Sim<\/td><td><code>text<\/code>, <code>template<\/code>, <code>image<\/code>, <code>document<\/code>, <code>interactive<\/code> etc.<\/td><\/tr><tr><td><code>&lt;type&gt;<\/code><\/td><td>Sim<\/td><td>Objeto com o conte\u00fado, por exemplo <code>text: { body }<\/code><\/td><\/tr><tr><td><code>context.message_id<\/code><\/td><td>N\u00e3o<\/td><td><code>wamid<\/code> de uma mensagem do cliente, para responder citando<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Enviando texto<\/h2>\n\n\n\n<p>Mensagem de texto \u00e9 uma mensagem de servi\u00e7o: s\u00f3 funciona com a janela de atendimento aberta. O corpo aceita at\u00e9 4.096 caracteres, e <code>preview_url: true<\/code> pede ao WhatsApp para gerar a pr\u00e9via do primeiro link (<a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/text-messages\" target=\"_blank\" rel=\"noreferrer noopener\">text messages<\/a>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">cURL<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl 'https:\/\/graph.facebook.com\/v26.0\/SEU_PHONE_NUMBER_ID\/messages' \\\n  -H 'Content-Type: application\/json' \\\n  -H 'Authorization: Bearer SEU_TOKEN' \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"recipient_type\": \"individual\",\n    \"to\": \"+5584999999999\",\n    \"type\": \"text\",\n    \"text\": {\n      \"preview_url\": true,\n      \"body\": \"Seu pedido foi enviado. Acompanhe em https:\/\/exemplo.com.br\/rastreio\/123\"\n    }\n  }'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Node.js (18 ou superior)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">const PHONE_NUMBER_ID = process.env.WA_PHONE_NUMBER_ID;\nconst TOKEN = process.env.WA_TOKEN;\n\nasync function enviarTexto(para, texto) {\n  const r = await fetch(`https:\/\/graph.facebook.com\/v26.0\/${PHONE_NUMBER_ID}\/messages`, {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application\/json' },\n    body: JSON.stringify({\n      messaging_product: 'whatsapp',\n      to: para,\n      type: 'text',\n      text: { body: texto },\n    }),\n  });\n  const corpo = await r.json();\n  if (!r.ok) throw new Error(`${corpo.error?.code}: ${corpo.error?.message}`);\n  return corpo.messages[0].id; \/\/ wamid\n}\n\nenviarTexto('+5584999999999', 'Ol\u00e1! Recebemos sua mensagem.').then(console.log);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Python<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-python\">import os\nimport requests\n\nPHONE_NUMBER_ID = os.environ[\"WA_PHONE_NUMBER_ID\"]\nTOKEN = os.environ[\"WA_TOKEN\"]\n\ndef enviar_texto(para: str, texto: str) -&gt; str:\n    r = requests.post(\n        f\"https:\/\/graph.facebook.com\/v26.0\/{PHONE_NUMBER_ID}\/messages\",\n        headers={\"Authorization\": f\"Bearer {TOKEN}\"},\n        json={\n            \"messaging_product\": \"whatsapp\",\n            \"to\": para,\n            \"type\": \"text\",\n            \"text\": {\"body\": texto},\n        },\n        timeout=15,\n    )\n    corpo = r.json()\n    if not r.ok:\n        raise RuntimeError(f\"{corpo['error']['code']}: {corpo['error']['message']}\")\n    return corpo[\"messages\"][0][\"id\"]  # wamid\n\nprint(enviar_texto(\"+5584999999999\", \"Ol\u00e1! Recebemos sua mensagem.\"))<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Enviando template<\/h2>\n\n\n\n<p>Template \u00e9 o que permite iniciar a conversa. Ele precisa estar com status <code>APPROVED<\/code>, e voc\u00ea informa o nome e o c\u00f3digo de idioma exatos com que foi criado. A categoria (marketing, utilidade ou autentica\u00e7\u00e3o) foi definida na cria\u00e7\u00e3o e determina o pre\u00e7o; o tema est\u00e1 em <a href=\"https:\/\/vectalk.com.br\/blog\/categorias-template-whatsapp\/\">categorias de template<\/a> e em <a href=\"https:\/\/vectalk.com.br\/blog\/templates-whatsapp-api\/\">templates da API do WhatsApp<\/a>.<\/p>\n\n\n\n<p>Suponha um template de utilidade <code>confirmacao_pedido<\/code> com o corpo &#8220;Ol\u00e1, {{1}}! Seu pedido {{2}} foi confirmado.&#8221;:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">cURL<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl 'https:\/\/graph.facebook.com\/v26.0\/SEU_PHONE_NUMBER_ID\/messages' \\\n  -H 'Content-Type: application\/json' \\\n  -H 'Authorization: Bearer SEU_TOKEN' \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"to\": \"+5584999999999\",\n    \"type\": \"template\",\n    \"template\": {\n      \"name\": \"confirmacao_pedido\",\n      \"language\": { \"code\": \"pt_BR\" },\n      \"components\": [\n        {\n          \"type\": \"body\",\n          \"parameters\": [\n            { \"type\": \"text\", \"text\": \"Maria\" },\n            { \"type\": \"text\", \"text\": \"#12345\" }\n          ]\n        }\n      ]\n    }\n  }'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Node.js<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">async function enviarTemplate(para, nome, variaveis, idioma = 'pt_BR') {\n  const r = await fetch(`https:\/\/graph.facebook.com\/v26.0\/${PHONE_NUMBER_ID}\/messages`, {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application\/json' },\n    body: JSON.stringify({\n      messaging_product: 'whatsapp',\n      to: para,\n      type: 'template',\n      template: {\n        name: nome,\n        language: { code: idioma },\n        components: [\n          { type: 'body', parameters: variaveis.map((v) =&gt; ({ type: 'text', text: v })) },\n        ],\n      },\n    }),\n  });\n  const corpo = await r.json();\n  if (!r.ok) throw new Error(`${corpo.error?.code}: ${corpo.error?.message}`);\n  return corpo.messages[0].id;\n}\n\nenviarTemplate('+5584999999999', 'confirmacao_pedido', ['Maria', '#12345']).then(console.log);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Python<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-python\">def enviar_template(para: str, nome: str, variaveis: list[str], idioma: str = \"pt_BR\") -&gt; str:\n    r = requests.post(\n        f\"https:\/\/graph.facebook.com\/v26.0\/{PHONE_NUMBER_ID}\/messages\",\n        headers={\"Authorization\": f\"Bearer {TOKEN}\"},\n        json={\n            \"messaging_product\": \"whatsapp\",\n            \"to\": para,\n            \"type\": \"template\",\n            \"template\": {\n                \"name\": nome,\n                \"language\": {\"code\": idioma},\n                \"components\": [\n                    {\"type\": \"body\", \"parameters\": [{\"type\": \"text\", \"text\": v} for v in variaveis]}\n                ],\n            },\n        },\n        timeout=15,\n    )\n    corpo = r.json()\n    if not r.ok:\n        raise RuntimeError(f\"{corpo['error']['code']}: {corpo['error']['message']}\")\n    return corpo[\"messages\"][0][\"id\"]\n\nprint(enviar_template(\"+5584999999999\", \"confirmacao_pedido\", [\"Maria\", \"#12345\"]))<\/code><\/pre>\n\n\n\n<p>Se o template foi criado com <strong>par\u00e2metros nomeados<\/strong> (<code>{{nome_cliente}}<\/code>), cada par\u00e2metro leva tamb\u00e9m <code>parameter_name<\/code>, e a ordem deixa de importar (<a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">templates<\/a>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{ \"type\": \"text\", \"parameter_name\": \"nome_cliente\", \"text\": \"Maria\" }<\/code><\/pre>\n\n\n\n<p>Para templates com imagem, documento ou v\u00eddeo no cabe\u00e7alho, inclua um componente <code>header<\/code> com o arquivo. O envio de m\u00eddia est\u00e1 em <a href=\"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/\">como enviar imagem, PDF, \u00e1udio e v\u00eddeo<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que a API devolve<\/h2>\n\n\n\n<p>Quando a Meta aceita o pedido, a resposta \u00e9 esta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"contacts\": [{ \"input\": \"+5584999999999\", \"wa_id\": \"5584999999999\" }],\n  \"messages\": [{ \"id\": \"wamid.HBgLNTU4NDk5OTk5OTk5FQIAERgS...\" }]\n}<\/code><\/pre>\n\n\n\n<p>Tr\u00eas cuidados:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Guarde o <code>wamid<\/code>.<\/strong> \u00c9 ele que aparece nos webhooks de status <code>sent<\/code>, <code>delivered<\/code>, <code>read<\/code> e <code>failed<\/code>. Veja <a href=\"https:\/\/vectalk.com.br\/blog\/status-mensagem-webhook-whatsapp\/\">status de mensagem via webhook<\/a> e <a href=\"https:\/\/vectalk.com.br\/blog\/webhook-whatsapp-api\/\">webhooks da API<\/a>.<\/li>\n\n\n<li><strong>200 n\u00e3o \u00e9 entrega.<\/strong> Erros como limite de marketing por usu\u00e1rio chegam depois, no webhook, com status <code>failed<\/code>.<\/li>\n\n\n<li><strong>A ordem n\u00e3o \u00e9 garantida.<\/strong> Se voc\u00ea manda v\u00e1rias mensagens seguidas, a Meta n\u00e3o garante que cheguem na ordem dos pedidos. Para garantir a sequ\u00eancia, espere o status <code>delivered<\/code> de uma antes de mandar a pr\u00f3xima.<\/li>\n\n<\/ol>\n\n\n\n<p>A Meta tenta entregar a mensagem por at\u00e9 30 dias (10 minutos para templates de autentica\u00e7\u00e3o). Se o status <code>delivered<\/code> n\u00e3o chegar nesse prazo, considere a mensagem descartada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erros mais comuns no primeiro envio<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>C\u00f3digo<\/th><th>O que significa<\/th><th>Como resolver<\/th><\/tr><\/thead><tbody><tr><td><code>131047<\/code><\/td><td>Mais de 24 horas desde a \u00faltima mensagem do cliente<\/td><td>Envie um template. Ver <a href=\"https:\/\/vectalk.com.br\/blog\/janela-24-horas-whatsapp\/\">janela de 24 horas<\/a><\/td><\/tr><tr><td><code>132001<\/code><\/td><td>Template n\u00e3o existe nesse idioma ou n\u00e3o est\u00e1 aprovado<\/td><td>Confira nome, c\u00f3digo de idioma e status<\/td><\/tr><tr><td><code>132000<\/code><\/td><td>Quantidade de vari\u00e1veis diferente da definida no template<\/td><td>Envie um valor para cada vari\u00e1vel<\/td><\/tr><tr><td><code>132012<\/code><\/td><td>Vari\u00e1veis no formato errado<\/td><td>Use o formato do template (posicional ou nomeado)<\/td><\/tr><tr><td><code>131026<\/code><\/td><td>N\u00e3o foi poss\u00edvel entregar (n\u00famero sem WhatsApp, vers\u00e3o antiga, termos n\u00e3o aceitos)<\/td><td>Confirme o n\u00famero com o cliente<\/td><\/tr><tr><td><code>130429<\/code><\/td><td>Limite de mensagens por segundo atingido<\/td><td>Reduza o ritmo e tente de novo com espera crescente<\/td><\/tr><tr><td><code>131056<\/code><\/td><td>Muitas mensagens para o mesmo destinat\u00e1rio em pouco tempo<\/td><td>Espere antes de mandar de novo para esse n\u00famero<\/td><\/tr><tr><td><code>133010<\/code><\/td><td>N\u00famero comercial n\u00e3o registrado na plataforma<\/td><td>Registre o n\u00famero<\/td><\/tr><tr><td><code>190<\/code><\/td><td>Token expirado<\/td><td>Gere um novo token de usu\u00e1rio do sistema<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Fonte: <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00f3digos de erro da Meta<\/a>. A lista completa, com causas e solu\u00e7\u00f5es, est\u00e1 em <a href=\"https:\/\/vectalk.com.br\/blog\/erros-api-whatsapp\/\">erros da API do WhatsApp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Boas pr\u00e1ticas para o c\u00f3digo de envio<\/h2>\n\n\n\n<p>Os exemplos acima s\u00e3o o m\u00ednimo para a mensagem sair. Em produ\u00e7\u00e3o, alguns cuidados evitam mensagens duplicadas, custo desnecess\u00e1rio e problemas de qualidade:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Guarde cada envio antes de chamar a API.<\/strong> Registre o pedido no banco com um ID interno e, depois da resposta, salve o <code>wamid<\/code>. Se o processo cair no meio, voc\u00ea sabe o que j\u00e1 saiu e n\u00e3o reenvia a mesma mensagem.<\/li>\n\n\n<li><strong>S\u00f3 repita o que vale repetir.<\/strong> Tente de novo, com espera crescente, em <code>130429<\/code>, <code>131056<\/code> e falhas de rede ou HTTP 5xx. Erros de par\u00e2metro (<code>132000<\/code>, <code>132012<\/code>) e de template (<code>132001<\/code>) n\u00e3o melhoram com nova tentativa: corrija o payload.<\/li>\n\n\n<li><strong>Respeite o limite de marketing por usu\u00e1rio.<\/strong> A Meta orienta esperar pelo menos 24 horas antes de reenviar um template que voltou com <code>131049<\/code>.<\/li>\n\n\n<li><strong>Defina timeout nas chamadas.<\/strong> Uma requisi\u00e7\u00e3o sem timeout pode travar a fila inteira se a rede oscilar.<\/li>\n\n\n<li><strong>N\u00e3o exponha o token.<\/strong> Leia o token de vari\u00e1vel de ambiente ou de um cofre de segredos e nunca o coloque no front-end ou no reposit\u00f3rio.<\/li>\n\n\n<li><strong>Valide o n\u00famero antes.<\/strong> Padronize os n\u00fameros em formato internacional com <code>+<\/code> no cadastro, e n\u00e3o na hora do envio.<\/li>\n\n\n<li><strong>Marque como lida.<\/strong> Ao processar a mensagem do cliente, voc\u00ea pode marc\u00e1-la como lida pela API, o que mostra os dois tiques azuis para ele.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">O mesmo envio pela Vectalk<\/h2>\n\n\n\n<p>A Vectalk \u00e9 um proxy da WhatsApp Cloud API oficial. Os payloads s\u00e3o id\u00eanticos aos da Meta; mudam s\u00f3 a URL base e o token, conforme a <a href=\"https:\/\/docs.vectalk.com.br\/introduction\">introdu\u00e7\u00e3o da documenta\u00e7\u00e3o<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Meta (direto)<\/th><th>Vectalk<\/th><\/tr><\/thead><tbody><tr><td>URL de envio<\/td><td><code>https:\/\/graph.facebook.com\/v26.0\/&lt;PHONE_NUMBER_ID&gt;\/messages<\/code><\/td><td><code>https:\/\/apis.vectalk.com.br\/api\/messages<\/code><\/td><\/tr><tr><td>Token<\/td><td>Token da Meta (usu\u00e1rio do sistema)<\/td><td>Token gerado na Vectalk<\/td><\/tr><tr><td>Phone Number ID<\/td><td>Na URL<\/td><td>Resolvido pelo token de inst\u00e2ncia, ou no corpo com token de organiza\u00e7\u00e3o<\/td><\/tr><tr><td>Payload e resposta<\/td><td>Formato da Meta<\/td><td>Iguais<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Com um <strong>token de inst\u00e2ncia<\/strong>, o n\u00famero \u00e9 resolvido automaticamente:<\/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 SEU_TOKEN_VECTALK\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"to\": \"5584999999999\",\n    \"type\": \"template\",\n    \"template\": {\n      \"name\": \"confirmacao_pedido\",\n      \"language\": { \"code\": \"pt_BR\" },\n      \"components\": [\n        { \"type\": \"body\", \"parameters\": [\n          { \"type\": \"text\", \"text\": \"Maria\" },\n          { \"type\": \"text\", \"text\": \"#12345\" }\n        ] }\n      ]\n    }\n  }'<\/code><\/pre>\n\n\n\n<p>Com um <strong>token de organiza\u00e7\u00e3o<\/strong>, que acessa todas as suas inst\u00e2ncias, inclua o <code>phone_number_id<\/code> no corpo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-python\">import os\nimport requests\n\nr = requests.post(\n    \"https:\/\/apis.vectalk.com.br\/api\/messages\",\n    headers={\"Authorization\": f\"Bearer {os.environ['VECTALK_TOKEN']}\"},\n    json={\n        \"messaging_product\": \"whatsapp\",\n        \"phone_number_id\": \"1234567890\",\n        \"to\": \"5584999999999\",\n        \"type\": \"text\",\n        \"text\": {\"body\": \"Ol\u00e1! Recebemos sua mensagem.\"},\n    },\n    timeout=15,\n)\nprint(r.json()[\"messages\"][0][\"id\"])<\/code><\/pre>\n\n\n\n<p>Os detalhes de cada tipo de mensagem est\u00e3o em <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send\">Mensagens<\/a> e a diferen\u00e7a entre tokens em <a href=\"https:\/\/docs.vectalk.com.br\/authentication\">Autentica\u00e7\u00e3o<\/a>. Para gerar seu token, <a href=\"https:\/\/apps.vectalk.com.br\/register\">crie sua conta<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perguntas frequentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Posso mandar texto para quem nunca falou comigo?<\/h3>\n\n\n\n<p>N\u00e3o. Fora da janela de 24 horas, inclusive para quem nunca escreveu, s\u00f3 templates aprovados podem ser enviados. A API devolve o erro <code>131047<\/code> se voc\u00ea tentar mandar texto livre. E, pela pol\u00edtica do WhatsApp, a pessoa precisa ter dado opt-in.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A API respondeu 200, mas a mensagem n\u00e3o chegou. Por qu\u00ea?<\/h3>\n\n\n\n<p>O 200 s\u00f3 confirma que a Meta aceitou o pedido. A entrega \u00e9 informada no webhook de status. Se vier <code>failed<\/code>, o c\u00f3digo de erro explica o motivo, como <code>131049<\/code> (limite de marketing por usu\u00e1rio) ou <code>131026<\/code> (n\u00famero sem WhatsApp).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qual vers\u00e3o da Graph API devo usar?<\/h3>\n\n\n\n<p>Os exemplos da documenta\u00e7\u00e3o atual da Meta usam a v26.0. Fixe a vers\u00e3o na URL e acompanhe o changelog da Meta antes de atualizar, porque cada vers\u00e3o tem prazo de descontinua\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como mandar para muitos contatos de uma vez?<\/h3>\n\n\n\n<p>N\u00e3o existe endpoint de envio em lote: cada mensagem \u00e9 uma chamada. Controle o ritmo, respeite o limite de mensagens do portf\u00f3lio e trate o erro <code>130429<\/code>. O guia <a href=\"https:\/\/vectalk.com.br\/blog\/disparo-em-massa-whatsapp-api-oficial\/\">disparo em massa pela API oficial<\/a> traz um exemplo com controle de ritmo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como responder citando a mensagem do cliente?<\/h3>\n\n\n\n<p>Inclua <code>\"context\": { \"message_id\": \"&lt;wamid da mensagem do cliente&gt;\" }<\/code> no payload. A resposta aparece no WhatsApp como uma cita\u00e7\u00e3o da mensagem original.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fontes oficiais consultadas em 25\/10\/2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Send messages (service messages)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/text-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Text messages<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Templates<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">Error codes<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/status\" target=\"_blank\" rel=\"noreferrer noopener\">Status webhook<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/access-tokens\" target=\"_blank\" rel=\"noreferrer noopener\">Access tokens<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/introduction\">Documenta\u00e7\u00e3o da Vectalk: introdu\u00e7\u00e3o<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send\">mensagens<\/a> e <a href=\"https:\/\/docs.vectalk.com.br\/authentication\">autentica\u00e7\u00e3o<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Exemplos prontos para enviar texto e template pela API oficial do WhatsApp em cURL, Node.js e Python, direto na Meta ou pela Vectalk, com os erros mais comuns.<\/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-278","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>Enviar mensagem pela API do WhatsApp: exemplos | Vectalk<\/title>\n<meta name=\"description\" content=\"Como enviar mensagem pela API do WhatsApp: payload, texto e template com exemplos em cURL, Node.js e Python, resposta, wamid e erros mais comuns.\" \/>\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\/enviar-mensagem-api-whatsapp-exemplos\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enviar mensagem pela API do WhatsApp: exemplos | Vectalk\" \/>\n<meta property=\"og:description\" content=\"Como enviar mensagem pela API do WhatsApp: payload, texto e template com exemplos em cURL, Node.js e Python, resposta, wamid e erros mais comuns.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-25T13:05:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-25T13:05:10+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=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Como enviar mensagem pela API do WhatsApp: exemplos em cURL, Node.js e Python\",\"datePublished\":\"2026-10-25T13:05:08+00:00\",\"dateModified\":\"2026-10-25T13:05:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/\"},\"wordCount\":1432,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/\",\"name\":\"Enviar mensagem pela API do WhatsApp: exemplos | Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-25T13:05:08+00:00\",\"dateModified\":\"2026-10-25T13:05:10+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Como enviar mensagem pela API do WhatsApp: payload, texto e template com exemplos em cURL, Node.js e Python, resposta, wamid e erros mais comuns.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-mensagem-api-whatsapp-exemplos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como enviar mensagem pela API do WhatsApp: exemplos em cURL, Node.js e Python\"}]},{\"@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":"Enviar mensagem pela API do WhatsApp: exemplos | Vectalk","description":"Como enviar mensagem pela API do WhatsApp: payload, texto e template com exemplos em cURL, Node.js e Python, resposta, wamid e erros mais comuns.","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\/enviar-mensagem-api-whatsapp-exemplos\/","og_locale":"en_US","og_type":"article","og_title":"Enviar mensagem pela API do WhatsApp: exemplos | Vectalk","og_description":"Como enviar mensagem pela API do WhatsApp: payload, texto e template com exemplos em cURL, Node.js e Python, resposta, wamid e erros mais comuns.","og_url":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-25T13:05:08+00:00","article_modified_time":"2026-10-25T13:05:10+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Como enviar mensagem pela API do WhatsApp: exemplos em cURL, Node.js e Python","datePublished":"2026-10-25T13:05:08+00:00","dateModified":"2026-10-25T13:05:10+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/"},"wordCount":1432,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/","url":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/","name":"Enviar mensagem pela API do WhatsApp: exemplos | Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-25T13:05:08+00:00","dateModified":"2026-10-25T13:05:10+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Como enviar mensagem pela API do WhatsApp: payload, texto e template com exemplos em cURL, Node.js e Python, resposta, wamid e erros mais comuns.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Como enviar mensagem pela API do WhatsApp: exemplos em cURL, Node.js e Python"}]},{"@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\/278","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=278"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"predecessor-version":[{"id":281,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/278\/revisions\/281"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}