{"id":104,"date":"2026-10-25T12:56:09","date_gmt":"2026-10-25T12:56:09","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/"},"modified":"2026-10-25T13:09:23","modified_gmt":"2026-10-25T13:09:23","slug":"enviar-midia-api-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/","title":{"rendered":"Como enviar imagem, PDF, \u00e1udio e v\u00eddeo pela API do WhatsApp"},"content":{"rendered":"\n<p><em>Atualizado em 25\/10\/2026<\/em><\/p>\n\n\n\n<p>Para enviar um arquivo pela API do WhatsApp, voc\u00ea faz um <code>POST<\/code> no endpoint de mensagens com <code>type<\/code> igual a <code>image<\/code>, <code>document<\/code>, <code>audio<\/code> ou <code>video<\/code> e indica o arquivo de duas formas: pelo <code>id<\/code> de uma m\u00eddia enviada antes ao endpoint <code>\/media<\/code> ou por um <code>link<\/code> p\u00fablico. A Meta recomenda o upload com <code>id<\/code>, aceita imagens JPEG e PNG at\u00e9 5 MB, \u00e1udio e v\u00eddeo at\u00e9 16 MB e documentos at\u00e9 100 MB. Fora da janela de 24 horas, a m\u00eddia s\u00f3 vai como cabe\u00e7alho de um template aprovado.<\/p>\n\n\n\n<p>Este guia mostra os formatos aceitos, quando usar upload ou link, quanto tempo um media ID vale, como receber e baixar arquivos que o cliente manda e exemplos prontos em cURL, Node.js e Python.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Upload ou link: as duas formas de enviar m\u00eddia<\/h2>\n\n\n\n<p>Toda mensagem de m\u00eddia da Cloud API tem um objeto com o nome do tipo (<code>image<\/code>, <code>document<\/code>, <code>audio<\/code>, <code>video<\/code> ou <code>sticker<\/code>). Dentro dele vai <strong>um<\/strong> destes campos, nunca os dois:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campo<\/th><th>O que \u00e9<\/th><th>Quando usar<\/th><\/tr><\/thead><tbody><tr><td><code>id<\/code><\/td><td>ID devolvido pelo endpoint <code>POST \/&lt;PHONE_NUMBER_ID&gt;\/media<\/code> depois do upload<\/td><td>Recomendado pela Meta. Arquivo reutilizado em muitos envios, campanhas, arquivos privados<\/td><\/tr><tr><td><code>link<\/code><\/td><td>URL HTTPS p\u00fablica onde o arquivo est\u00e1 hospedado<\/td><td>Envios pontuais, arquivos que j\u00e1 est\u00e3o num CDN. A Meta marca essa op\u00e7\u00e3o como &#8220;n\u00e3o recomendada&#8221; por desempenho<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Com <code>link<\/code>, os servidores da Meta precisam baixar o arquivo do seu servidor no momento do envio. Se a URL exige login, redireciona para uma p\u00e1gina HTML ou devolve um <code>Content-Type<\/code> diferente do arquivo real, o envio falha. Com <code>id<\/code>, o arquivo j\u00e1 est\u00e1 na Meta e o envio n\u00e3o depende do seu servidor estar no ar.<\/p>\n\n\n\n<p>Na pr\u00e1tica, muitos sistemas fazem assim: o arquivo que vai para muita gente (o cat\u00e1logo em PDF, o v\u00eddeo do tutorial) \u00e9 enviado uma vez ao <code>\/media<\/code>, e o <code>id<\/code> \u00e9 reutilizado enquanto valer. Arquivos gerados na hora (um boleto, uma nota) podem ir por <code>link<\/code> assinado de curta dura\u00e7\u00e3o ou por upload logo antes do envio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Formatos e limites de tamanho oficiais<\/h2>\n\n\n\n<p>A tabela abaixo resume a <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/business-phone-numbers\/media\" target=\"_blank\" rel=\"noreferrer noopener\">p\u00e1gina de m\u00eddia da Cloud API<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tipo<\/th><th>Formatos (MIME)<\/th><th>Tamanho m\u00e1ximo<\/th><\/tr><\/thead><tbody><tr><td>Imagem<\/td><td><code>image\/jpeg<\/code>, <code>image\/png<\/code> (8 bits, RGB ou RGBA)<\/td><td>5 MB<\/td><\/tr><tr><td>Documento<\/td><td><code>application\/pdf<\/code>, <code>text\/plain<\/code>, Word (<code>.doc<\/code>, <code>.docx<\/code>), Excel (<code>.xls<\/code>, <code>.xlsx<\/code>), PowerPoint (<code>.ppt<\/code>, <code>.pptx<\/code>)<\/td><td>100 MB<\/td><\/tr><tr><td>\u00c1udio<\/td><td><code>audio\/aac<\/code>, <code>audio\/amr<\/code>, <code>audio\/mpeg<\/code> (MP3), <code>audio\/mp4<\/code> (M4A), <code>audio\/ogg<\/code> (somente codec OPUS, mono)<\/td><td>16 MB<\/td><\/tr><tr><td>V\u00eddeo<\/td><td><code>video\/mp4<\/code>, <code>video\/3gpp<\/code> (v\u00eddeo H.264 e \u00e1udio AAC)<\/td><td>16 MB<\/td><\/tr><tr><td>Sticker<\/td><td><code>image\/webp<\/code><\/td><td>100 KB est\u00e1tico, 500 KB animado<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Alguns detalhes que causam falha com frequ\u00eancia:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Legenda.<\/strong> <code>caption<\/code> vai at\u00e9 1.024 caracteres em imagem, v\u00eddeo e documento. \u00c1udio n\u00e3o tem legenda.<\/li>\n\n\n<li><strong>Documento.<\/strong> O campo <code>filename<\/code> define o nome exibido, e a extens\u00e3o dele escolhe o \u00edcone no app. S\u00f3 os tipos da tabela t\u00eam exibi\u00e7\u00e3o garantida; outros podem ser enviados, mas a Meta n\u00e3o garante que apare\u00e7am corretamente.<\/li>\n\n\n<li><strong>V\u00eddeo no Android.<\/strong> A Meta avisa que o perfil H.264 &#8220;High&#8221; com B-frames n\u00e3o \u00e9 suportado pelo WhatsApp no Android. Use o perfil &#8220;Main&#8221; sem B-frames ou &#8220;Baseline&#8221; e coloque o \u00e1tomo <code>moov<\/code> antes do <code>mdat<\/code> (no ffmpeg, <code>-movflags faststart<\/code>).<\/li>\n\n\n<li><strong>MIME errado.<\/strong> Se a extens\u00e3o ou o tipo declarado n\u00e3o bate com o conte\u00fado real do arquivo, o envio falha com o erro <code>131053<\/code>. No Linux ou macOS, <code>file -I arquivo.png<\/code> mostra o tipo real.<\/li>\n\n<\/ul>\n\n\n\n<p>Exemplo de convers\u00e3o de v\u00eddeo para o formato mais compat\u00edvel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">ffmpeg -i entrada.mov -c:v libx264 -profile:v main -bf 0 \\\n  -c:a aac -ac 2 -movflags faststart saida.mp4<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c1udio comum x mensagem de voz<\/h2>\n\n\n\n<p>A Cloud API diferencia dois tipos de \u00e1udio, segundo a <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/audio-messages\" target=\"_blank\" rel=\"noreferrer noopener\">documenta\u00e7\u00e3o de mensagens de \u00e1udio<\/a>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u00c1udio comum.<\/strong> Aparece com \u00edcone de download e de m\u00fasica. Aceita qualquer formato da tabela.<\/li>\n\n\n<li><strong>Mensagem de voz.<\/strong> Envie <code>\"voice\": true<\/code> dentro do objeto <code>audio<\/code>. O arquivo precisa ser <code>.ogg<\/code> com codec OPUS, mono. A mensagem aparece com a foto do perfil da empresa e o \u00edcone de microfone, baixa automaticamente e pode ser transcrita no app do cliente. O bot\u00e3o de play s\u00f3 aparece em arquivos de at\u00e9 512 KB; acima disso, o cliente v\u00ea o \u00edcone de download.<\/li>\n\n<\/ul>\n\n\n\n<p>Para converter um MP3 em nota de voz compat\u00edvel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">ffmpeg -i audio.mp3 -c:a libopus -ac 1 -b:a 32k voz.ogg<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Passo 1: fazer o upload e obter o media ID<\/h2>\n\n\n\n<p>O upload \u00e9 um <code>multipart\/form-data<\/code> com tr\u00eas campos obrigat\u00f3rios: <code>file<\/code>, <code>type<\/code> (o MIME) e <code>messaging_product=whatsapp<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/PHONE_NUMBER_ID\/media\" \\\n  -H \"Authorization: Bearer $WHATSAPP_TOKEN\" \\\n  -F \"file=@catalogo.pdf;type=application\/pdf\" \\\n  -F \"type=application\/pdf\" \\\n  -F \"messaging_product=whatsapp\"<\/code><\/pre>\n\n\n\n<p>Resposta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{ \"id\": \"1037543291543636\" }<\/code><\/pre>\n\n\n\n<p>O token precisa ter a permiss\u00e3o <code>whatsapp_business_messaging<\/code>. Em produ\u00e7\u00e3o, use um <a href=\"https:\/\/vectalk.com.br\/blog\/token-permanente-api-whatsapp\/\">token permanente de usu\u00e1rio do sistema<\/a> em vez do token tempor\u00e1rio do painel.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quanto tempo o media ID vale<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Origem do ID<\/th><th>Validade<\/th><\/tr><\/thead><tbody><tr><td>Upload feito por voc\u00ea<\/td><td>30 dias (a m\u00eddia fica armazenada criptografada at\u00e9 ser apagada ou expirar)<\/td><\/tr><tr><td>M\u00eddia recebida no webhook<\/td><td>7 dias para baixar<\/td><\/tr><tr><td>URL de download obtida com <code>GET \/&lt;MEDIA_ID&gt;<\/code><\/td><td>5 minutos<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Guarde a data do upload junto do <code>id<\/code> e refa\u00e7a o upload antes dos 30 dias se o arquivo for usado por mais tempo. Para apagar antes, use <code>DELETE \/&lt;MEDIA_ID&gt;<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Passo 2: enviar a mensagem de m\u00eddia<\/h2>\n\n\n\n<p>Com o <code>id<\/code> em m\u00e3os, o envio \u00e9 igual ao de uma <a href=\"https:\/\/vectalk.com.br\/blog\/enviar-mensagem-api-whatsapp-exemplos\/\">mensagem de texto pela API<\/a>, trocando o tipo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/PHONE_NUMBER_ID\/messages\" \\\n  -H \"Authorization: Bearer $WHATSAPP_TOKEN\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"recipient_type\": \"individual\",\n    \"to\": \"5584999999999\",\n    \"type\": \"document\",\n    \"document\": {\n      \"id\": \"1037543291543636\",\n      \"filename\": \"catalogo-outubro.pdf\",\n      \"caption\": \"Segue o cat\u00e1logo de outubro\"\n    }\n  }'<\/code><\/pre>\n\n\n\n<p>A resposta traz o <code>wamid<\/code> da mensagem. Ela s\u00f3 confirma que a Meta aceitou o pedido; a entrega, a leitura e as falhas chegam depois pelo webhook, como explicado no artigo sobre <a href=\"https:\/\/vectalk.com.br\/blog\/status-mensagem-webhook-whatsapp\/\">status de mensagem via webhook<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo em Node.js (upload + envio)<\/h3>\n\n\n\n<p>Usa <code>fetch<\/code>, <code>FormData<\/code> e <code>Blob<\/code> nativos do Node.js 18 ou superior:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">import { readFile } from 'node:fs\/promises';\n\nconst GRAPH = 'https:\/\/graph.facebook.com\/v26.0';\nconst PHONE_ID = process.env.PHONE_NUMBER_ID;\nconst TOKEN = process.env.WHATSAPP_TOKEN;\n\nasync function uploadMidia(caminho, mime) {\n  const form = new FormData();\n  form.append('messaging_product', 'whatsapp');\n  form.append('type', mime);\n  form.append('file', new Blob([await readFile(caminho)], { type: mime }), caminho.split('\/').pop());\n\n  const r = await fetch(`${GRAPH}\/${PHONE_ID}\/media`, {\n    method: 'POST',\n    headers: { Authorization: `Bearer ${TOKEN}` },\n    body: form,\n  });\n  const corpo = await r.json();\n  if (!r.ok) throw new Error(JSON.stringify(corpo.error));\n  return corpo.id;\n}\n\nasync function enviarImagem(para, mediaId, legenda) {\n  const r = await fetch(`${GRAPH}\/${PHONE_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: 'image',\n      image: { id: mediaId, caption: legenda },\n    }),\n  });\n  return r.json();\n}\n\nconst id = await uploadMidia('.\/produto.jpg', 'image\/jpeg');\nconsole.log(await enviarImagem('5584999999999', id, 'Chegou o modelo novo'));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo em Python (link p\u00fablico e nota de voz)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-python\">import os\nimport requests\n\nGRAPH = \"https:\/\/graph.facebook.com\/v26.0\"\nPHONE_ID = os.environ[\"PHONE_NUMBER_ID\"]\nHEADERS = {\"Authorization\": f\"Bearer {os.environ['WHATSAPP_TOKEN']}\"}\n\n\ndef enviar(payload: dict) -&gt; dict:\n    payload = {\"messaging_product\": \"whatsapp\", **payload}\n    r = requests.post(f\"{GRAPH}\/{PHONE_ID}\/messages\", json=payload, headers=HEADERS, timeout=30)\n    r.raise_for_status()\n    return r.json()\n\n\n# V\u00eddeo hospedado no seu CDN\nenviar({\n    \"to\": \"5584999999999\",\n    \"type\": \"video\",\n    \"video\": {\"link\": \"https:\/\/cdn.minhaempresa.com.br\/tutorial.mp4\", \"caption\": \"Como instalar\"},\n})\n\n# Nota de voz a partir de um upload\nwith open(\"voz.ogg\", \"rb\") as f:\n    up = requests.post(\n        f\"{GRAPH}\/{PHONE_ID}\/media\",\n        headers=HEADERS,\n        data={\"messaging_product\": \"whatsapp\", \"type\": \"audio\/ogg\"},\n        files={\"file\": (\"voz.ogg\", f, \"audio\/ogg\")},\n        timeout=60,\n    )\nup.raise_for_status()\nenviar({\"to\": \"5584999999999\", \"type\": \"audio\", \"audio\": {\"id\": up.json()[\"id\"], \"voice\": True}})<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00eddia fora da janela de 24 horas: cabe\u00e7alho de template<\/h2>\n\n\n\n<p>Mensagens de imagem, v\u00eddeo, \u00e1udio e documento s\u00e3o mensagens livres. Elas s\u00f3 podem ser enviadas com a <a href=\"https:\/\/vectalk.com.br\/blog\/janela-24-horas-whatsapp\/\">janela de 24 horas<\/a> aberta pelo cliente. Para mandar um arquivo a quem n\u00e3o falou com voc\u00ea nas \u00faltimas 24 horas, crie um template com cabe\u00e7alho de m\u00eddia (imagem, v\u00eddeo ou documento) e preencha o arquivo no envio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"5584999999999\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"segunda_via_boleto\",\n    \"language\": { \"code\": \"pt_BR\" },\n    \"components\": [\n      {\n        \"type\": \"header\",\n        \"parameters\": [\n          { \"type\": \"document\", \"document\": { \"id\": \"1037543291543636\", \"filename\": \"boleto.pdf\" } }\n        ]\n      },\n      { \"type\": \"body\", \"parameters\": [{ \"type\": \"text\", \"text\": \"Maria\" }] }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<p>O artigo sobre <a href=\"https:\/\/vectalk.com.br\/blog\/templates-whatsapp-api\/\">templates da API do WhatsApp<\/a> explica cria\u00e7\u00e3o, categorias e aprova\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Receber e baixar arquivos enviados pelo cliente<\/h2>\n\n\n\n<p>Quando o cliente manda uma foto, um PDF ou um \u00e1udio, o webhook traz o objeto do tipo com <code>id<\/code>, <code>mime_type<\/code> e <code>sha256<\/code> (e <code>caption<\/code> ou <code>filename<\/code>, quando houver):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"from\": \"5584999999999\",\n  \"id\": \"wamid.HBgM...\",\n  \"type\": \"image\",\n  \"image\": { \"id\": \"1489362375523190\", \"mime_type\": \"image\/jpeg\", \"sha256\": \"8f2c...\" }\n}<\/code><\/pre>\n\n\n\n<p>Para baixar, s\u00e3o duas chamadas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\"># 1. Obter a URL tempor\u00e1ria (vale 5 minutos)\ncurl \"https:\/\/graph.facebook.com\/v26.0\/1489362375523190\" \\\n  -H \"Authorization: Bearer $WHATSAPP_TOKEN\"\n\n# 2. Baixar o bin\u00e1rio da URL devolvida, com o mesmo token\ncurl -L \"URL_DEVOLVIDA\" -H \"Authorization: Bearer $WHATSAPP_TOKEN\" -o foto.jpg<\/code><\/pre>\n\n\n\n<p>Sem o header <code>Authorization<\/code>, o download falha. Se der 404, pe\u00e7a uma URL nova e tente de novo. Baixe logo e salve no seu storage: o ID recebido expira em 7 dias. O limite de m\u00eddia recebida \u00e9 de 100 MB; acima disso, o webhook chega com o erro <code>131052<\/code>, e o ideal \u00e9 pedir ao cliente um arquivo menor. Os detalhes do formato dos eventos est\u00e3o no guia de <a href=\"https:\/\/vectalk.com.br\/blog\/webhook-whatsapp-api\/\">webhooks da API do WhatsApp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erros mais comuns ao enviar m\u00eddia<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Sintoma<\/th><th>Causa prov\u00e1vel<\/th><th>O que fazer<\/th><\/tr><\/thead><tbody><tr><td>Erro <code>131053<\/code><\/td><td>MIME declarado diferente do conte\u00fado, formato n\u00e3o suportado<\/td><td>Confira o tipo real do arquivo e use um formato da tabela<\/td><\/tr><tr><td>Erro <code>131052<\/code> (m\u00eddia recebida)<\/td><td>Arquivo do cliente acima de 100 MB<\/td><td>Pe\u00e7a um arquivo menor<\/td><\/tr><tr><td>Envio com <code>link<\/code> falha<\/td><td>URL privada, redirecionamento para HTML, certificado inv\u00e1lido<\/td><td>Teste a URL com <code>curl -I<\/code> fora da sua rede ou use upload<\/td><\/tr><tr><td>Envio com <code>id<\/code> falha<\/td><td>ID expirado (mais de 30 dias) ou de outro n\u00famero<\/td><td>Refa\u00e7a o upload pelo mesmo <code>phone_number_id<\/code><\/td><\/tr><tr><td>V\u00eddeo n\u00e3o abre no Android<\/td><td>H.264 High com B-frames<\/td><td>Recodifique em Main ou Baseline<\/td><\/tr><tr><td>\u00c1udio chega sem bot\u00e3o de play<\/td><td>Arquivo acima de 512 KB ou fora de OGG OPUS<\/td><td>Reduza o bitrate e envie como <code>voice<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Para a lista completa de c\u00f3digos, veja o artigo sobre <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\">Como fazer com a Vectalk<\/h2>\n\n\n\n<p>Na Vectalk, os payloads de m\u00eddia s\u00e3o os mesmos da Cloud API. Muda a URL base e o token:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Upload:<\/strong> <code>POST https:\/\/apis.vectalk.com.br\/api\/media<\/code> (multipart, com <code>file<\/code>, <code>type<\/code> e <code>messaging_product<\/code>), usando um <strong>token de inst\u00e2ncia<\/strong>.<\/li>\n\n\n<li><strong>Envio:<\/strong> <code>POST https:\/\/apis.vectalk.com.br\/api\/messages<\/code> com o mesmo JSON de imagem, documento, \u00e1udio ou v\u00eddeo.<\/li>\n\n\n<li><strong>M\u00eddia recebida:<\/strong> <code>GET \/api\/media\/{mediaId}<\/code> devolve a URL tempor\u00e1ria, e <code>GET \/api\/media\/{mediaId}\/download<\/code> devolve o bin\u00e1rio direto.<\/li>\n\n\n<li><strong>Excluir:<\/strong> <code>DELETE \/api\/media\/{mediaId}<\/code>.<\/li>\n\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST https:\/\/apis.vectalk.com.br\/api\/media \\\n  -H \"Authorization: Bearer $VECTALK_TOKEN\" \\\n  -F \"file=@produto.jpg\" \\\n  -F \"type=image\/jpeg\" \\\n  -F \"messaging_product=whatsapp\"<\/code><\/pre>\n\n\n\n<p>As rotas est\u00e3o em <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/media\/upload\">Upload de M\u00eddia<\/a> e <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send-image\">Imagem<\/a> na documenta\u00e7\u00e3o. O custo das mensagens entra na fatura da Vectalk, sem cart\u00e3o cadastrado na Meta. Para come\u00e7ar, crie sua conta em <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>. Se voc\u00ea ainda est\u00e1 entendendo a plataforma como um todo, comece pelo guia da <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\">Perguntas frequentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Posso enviar imagem em WebP?<\/h3>\n\n\n\n<p>N\u00e3o como mensagem de imagem. A Cloud API aceita JPEG e PNG para imagens. WebP \u00e9 usado apenas em stickers. Converta antes do upload.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qual o tamanho m\u00e1ximo de um PDF pela API do WhatsApp?<\/h3>\n\n\n\n<p>100 MB, o mesmo limite de todos os documentos suportados (PDF, TXT, Word, Excel e PowerPoint).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enviar m\u00eddia custa mais que enviar texto?<\/h3>\n\n\n\n<p>N\u00e3o. A Meta cobra por mensagem entregue conforme a categoria, e n\u00e3o pelo tipo de conte\u00fado. Uma imagem enviada dentro da janela de atendimento \u00e9 uma mensagem de servi\u00e7o, como um texto livre: desde 1\u00ba de outubro de 2026, cada n\u00famero tem 1.000 mensagens de servi\u00e7o gr\u00e1tis por m\u00eas, e a cobran\u00e7a come\u00e7a na 1.001\u00aa. Os valores est\u00e3o no artigo de <a href=\"https:\/\/vectalk.com.br\/blog\/api-whatsapp-preco-brasil\/\">pre\u00e7o da API do WhatsApp no Brasil<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Posso reutilizar o mesmo media ID para milhares de envios?<\/h3>\n\n\n\n<p>Sim, enquanto ele valer (30 dias ap\u00f3s o upload). \u00c9 a forma recomendada para campanhas com o mesmo arquivo, porque evita que a Meta baixe o arquivo do seu servidor a cada envio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como enviar mais de um arquivo na mesma mensagem?<\/h3>\n\n\n\n<p>N\u00e3o h\u00e1 envio de \u00e1lbum. Cada arquivo \u00e9 uma mensagem separada, com o seu pr\u00f3prio <code>wamid<\/code> e status.<\/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\/business-phone-numbers\/media\" target=\"_blank\" rel=\"noreferrer noopener\">Media (Cloud API)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/image-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Image messages<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/document-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Document messages<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/audio-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Audio messages<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/video-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Video messages<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/media\/upload\">Documenta\u00e7\u00e3o da Vectalk: Upload de M\u00eddia<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Upload ou link, formatos aceitos, limites de tamanho, validade do media ID e exemplos em cURL, Node.js e Python para enviar m\u00eddia pela API oficial do WhatsApp.<\/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-104","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 arquivo pela API do WhatsApp: guia | Vectalk<\/title>\n<meta name=\"description\" content=\"Como enviar arquivo pela API do WhatsApp: imagem, PDF, \u00e1udio e v\u00eddeo por upload ou link, formatos e limites oficiais, media ID e exemplos de c\u00f3digo.\" \/>\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-midia-api-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enviar arquivo pela API do WhatsApp: guia | Vectalk\" \/>\n<meta property=\"og:description\" content=\"Como enviar arquivo pela API do WhatsApp: imagem, PDF, \u00e1udio e v\u00eddeo por upload ou link, formatos e limites oficiais, media ID e exemplos de c\u00f3digo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-25T12:56:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-25T13:09:23+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=\"11 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-midia-api-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-midia-api-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Como enviar imagem, PDF, \u00e1udio e v\u00eddeo pela API do WhatsApp\",\"datePublished\":\"2026-10-25T12:56:09+00:00\",\"dateModified\":\"2026-10-25T13:09:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-midia-api-whatsapp\\\/\"},\"wordCount\":1544,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-midia-api-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-midia-api-whatsapp\\\/\",\"name\":\"Enviar arquivo pela API do WhatsApp: guia | Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-25T12:56:09+00:00\",\"dateModified\":\"2026-10-25T13:09:23+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Como enviar arquivo pela API do WhatsApp: imagem, PDF, \u00e1udio e v\u00eddeo por upload ou link, formatos e limites oficiais, media ID e exemplos de c\u00f3digo.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-midia-api-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-midia-api-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/enviar-midia-api-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como enviar imagem, PDF, \u00e1udio e v\u00eddeo 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":"Enviar arquivo pela API do WhatsApp: guia | Vectalk","description":"Como enviar arquivo pela API do WhatsApp: imagem, PDF, \u00e1udio e v\u00eddeo por upload ou link, formatos e limites oficiais, media ID e exemplos de c\u00f3digo.","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-midia-api-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Enviar arquivo pela API do WhatsApp: guia | Vectalk","og_description":"Como enviar arquivo pela API do WhatsApp: imagem, PDF, \u00e1udio e v\u00eddeo por upload ou link, formatos e limites oficiais, media ID e exemplos de c\u00f3digo.","og_url":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-25T12:56:09+00:00","article_modified_time":"2026-10-25T13:09:23+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Como enviar imagem, PDF, \u00e1udio e v\u00eddeo pela API do WhatsApp","datePublished":"2026-10-25T12:56:09+00:00","dateModified":"2026-10-25T13:09:23+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/"},"wordCount":1544,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/","name":"Enviar arquivo pela API do WhatsApp: guia | Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-25T12:56:09+00:00","dateModified":"2026-10-25T13:09:23+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Como enviar arquivo pela API do WhatsApp: imagem, PDF, \u00e1udio e v\u00eddeo por upload ou link, formatos e limites oficiais, media ID e exemplos de c\u00f3digo.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Como enviar imagem, PDF, \u00e1udio e v\u00eddeo 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\/104","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=104"}],"version-history":[{"count":2,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/104\/revisions"}],"predecessor-version":[{"id":376,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/104\/revisions\/376"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}