{"id":516,"date":"2026-10-28T16:05:44","date_gmt":"2026-10-28T16:05:44","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/"},"modified":"2026-10-28T16:05:53","modified_gmt":"2026-10-28T16:05:53","slug":"baixar-midia-webhook-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/","title":{"rendered":"Como receber e baixar a m\u00eddia que o cliente envia pela API do WhatsApp"},"content":{"rendered":"\n<p><em>Atualizado em 28\/10\/2026<\/em><\/p>\n\n\n\n<p>Quando o cliente manda uma foto, um PDF, um \u00e1udio ou um v\u00eddeo, o webhook da API do WhatsApp n\u00e3o traz o arquivo: traz um <strong>media id<\/strong>. Para baixar, voc\u00ea faz <code>GET \/{media-id}<\/code> para obter uma URL tempor\u00e1ria, que <strong>expira em 5 minutos<\/strong>, e depois faz um <code>GET<\/code> nessa URL com o seu token de acesso no cabe\u00e7alho <code>Authorization<\/code>. Como o media id recebido por webhook vale s\u00f3 <strong>7 dias<\/strong>, o certo \u00e9 baixar logo e guardar o arquivo no seu pr\u00f3prio storage.<\/p>\n\n\n\n<p>Este guia mostra o fluxo completo, os campos de cada tipo de m\u00eddia, os limites de tamanho, como conferir a integridade do arquivo e exemplos em cURL, Node.js e Python, incluindo o envio para o Amazon S3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O fluxo em 4 passos<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Webhook<\/strong>: chega uma mensagem com <code>type<\/code> igual a <code>image<\/code>, <code>document<\/code>, <code>audio<\/code>, <code>video<\/code> ou <code>sticker<\/code>, com o <code>id<\/code> da m\u00eddia.<\/li>\n\n\n<li><strong>URL tempor\u00e1ria<\/strong>: <code>GET https:\/\/graph.facebook.com\/v26.0\/{media-id}<\/code> devolve <code>url<\/code>, <code>mime_type<\/code>, <code>sha256<\/code> e <code>file_size<\/code>.<\/li>\n\n\n<li><strong>Download<\/strong>: <code>GET<\/code> na <code>url<\/code> com <code>Authorization: Bearer &lt;token&gt;<\/code>. Sem o token, a requisi\u00e7\u00e3o falha.<\/li>\n\n\n<li><strong>Armazenamento<\/strong>: salve no seu storage (S3, GCS, disco) e grave no banco o caminho do arquivo, nunca a URL da Meta.<\/li>\n\n<\/ol>\n\n\n\n<p>Os prazos v\u00eam da <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/business-phone-numbers\/media\" target=\"_blank\" rel=\"noreferrer noopener\">documenta\u00e7\u00e3o de m\u00eddia da Meta<\/a>: URLs de m\u00eddia expiram em 5 minutos (depois disso, basta consultar o media id de novo para gerar outra), media ids vindos de webhooks expiram em 7 dias e media ids gerados por upload expiram em 30 dias.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que chega no webhook<\/h2>\n\n\n\n<p>Este \u00e9 o formato de uma imagem recebida, segundo a <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/image\" target=\"_blank\" rel=\"noreferrer noopener\">refer\u00eancia de webhooks de imagem<\/a> (valores de exemplo):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"object\": \"whatsapp_business_account\",\n  \"entry\": [{\n    \"id\": \"WABA_ID\",\n    \"changes\": [{\n      \"field\": \"messages\",\n      \"value\": {\n        \"messaging_product\": \"whatsapp\",\n        \"metadata\": {\n          \"display_phone_number\": \"5511999999999\",\n          \"phone_number_id\": \"PHONE_NUMBER_ID\"\n        },\n        \"contacts\": [{ \"profile\": { \"name\": \"Maria\" }, \"wa_id\": \"5511988887777\" }],\n        \"messages\": [{\n          \"from\": \"5511988887777\",\n          \"id\": \"wamid.HBgLNTUx...\",\n          \"timestamp\": \"1761650000\",\n          \"type\": \"image\",\n          \"image\": {\n            \"caption\": \"Comprovante\",\n            \"mime_type\": \"image\/jpeg\",\n            \"sha256\": \"SfInY0gGKTsJlUWbwxC1k+FAD0FZHvzwfpvO0zX0GUI=\",\n            \"id\": \"1003383421387256\",\n            \"url\": \"https:\/\/lookaside.fbsbx.com\/whatsapp_business\/attachments\/?mid=...\"\n          }\n        }]\n      }\n    }]\n  }]\n}<\/code><\/pre>\n\n\n\n<p>O objeto muda de nome conforme o tipo (<code>image<\/code>, <code>document<\/code>, <code>audio<\/code>, <code>video<\/code>, <code>sticker<\/code>), mas a estrutura \u00e9 parecida. Documentos trazem tamb\u00e9m <code>filename<\/code>, \u00fatil para salvar com o nome original.<\/p>\n\n\n\n<p>Repare no campo <code>url<\/code>. A Meta come\u00e7ou a liberar esse campo no pr\u00f3prio webhook de forma gradual a partir de 12\/11\/2025, permitindo pular o passo 2 e baixar direto com o token. Como a libera\u00e7\u00e3o \u00e9 gradual, seu c\u00f3digo deve funcionar com e sem ele: use a <code>url<\/code> se vier e, se n\u00e3o vier ou o download der erro, consulte o media id.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campo<\/th><th>Para que serve<\/th><\/tr><\/thead><tbody><tr><td><code>id<\/code><\/td><td>Media id; use para gerar a URL de download<\/td><\/tr><tr><td><code>mime_type<\/code><\/td><td>Tipo do arquivo (<code>image\/jpeg<\/code>, <code>application\/pdf<\/code>, <code>audio\/ogg<\/code>&#8230;)<\/td><\/tr><tr><td><code>sha256<\/code><\/td><td>Hash do arquivo, para conferir integridade<\/td><\/tr><tr><td><code>caption<\/code><\/td><td>Legenda enviada pelo cliente, quando houver<\/td><\/tr><tr><td><code>filename<\/code><\/td><td>Nome original (documentos)<\/td><\/tr><tr><td><code>url<\/code><\/td><td>URL de download direto, em libera\u00e7\u00e3o gradual<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Tipos e limites de tamanho<\/h2>\n\n\n\n<p>A tabela abaixo resume os tipos suportados e os tamanhos m\u00e1ximos da p\u00e1gina de m\u00eddia da Meta. Ela ajuda a dimensionar o storage e o tempo limite do download:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tipo<\/th><th>Formatos<\/th><th>Tamanho m\u00e1ximo<\/th><\/tr><\/thead><tbody><tr><td>\u00c1udio<\/td><td>AAC, AMR, MP3, M4A, OGG (s\u00f3 codec OPUS, mono)<\/td><td>16 MB<\/td><\/tr><tr><td>Documento<\/td><td>TXT, XLS, XLSX, DOC, DOCX, PPT, PPTX, PDF<\/td><td>100 MB<\/td><\/tr><tr><td>Imagem<\/td><td>JPEG, PNG (8 bits, RGB ou RGBA)<\/td><td>5 MB<\/td><\/tr><tr><td>Figurinha<\/td><td>WebP<\/td><td>500 KB animada, 100 KB est\u00e1tica<\/td><\/tr><tr><td>V\u00eddeo<\/td><td>3GP, MP4 (H.264 e AAC)<\/td><td>16 MB<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Notas de voz chegam como mensagens do tipo <code>audio<\/code>. Se voc\u00ea vai passar o \u00e1udio para um servi\u00e7o de transcri\u00e7\u00e3o, confira o <code>mime_type<\/code> recebido e se o servi\u00e7o aceita aquele formato; se n\u00e3o aceitar, converta antes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo com cURL<\/h2>\n\n\n\n<p>Passo 2, obter a URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl \"https:\/\/graph.facebook.com\/v26.0\/1003383421387256\" \\\n  -H \"Authorization: Bearer $TOKEN\"<\/code><\/pre>\n\n\n\n<p>Resposta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"url\": \"https:\/\/lookaside.fbsbx.com\/whatsapp_business\/attachments\/?mid=...\",\n  \"mime_type\": \"image\/jpeg\",\n  \"sha256\": \"SfInY0gGKTsJlUWbwxC1k+FAD0FZHvzwfpvO0zX0GUI=\",\n  \"file_size\": 303833,\n  \"id\": \"1003383421387256\"\n}<\/code><\/pre>\n\n\n\n<p>Passo 3, baixar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -L \"URL_RETORNADA\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -o comprovante.jpg<\/code><\/pre>\n\n\n\n<p>Opcionalmente, envie <code>phone_number_id<\/code> como par\u00e2metro de consulta no passo 2: assim a Meta s\u00f3 processa a requisi\u00e7\u00e3o se a m\u00eddia pertencer \u00e0quele n\u00famero, uma prote\u00e7\u00e3o \u00fatil quando a mesma aplica\u00e7\u00e3o atende v\u00e1rios n\u00fameros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo em Node.js<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">import crypto from 'node:crypto';\nimport { S3Client, PutObjectCommand } from '@aws-sdk\/client-s3';\n\nconst GRAPH = 'https:\/\/graph.facebook.com\/v26.0';\nconst TOKEN = process.env.WHATSAPP_TOKEN;\nconst s3 = new S3Client({ region: process.env.AWS_REGION });\n\nasync function obterUrl(mediaId) {\n  const res = await fetch(`${GRAPH}\/${mediaId}`, {\n    headers: { Authorization: `Bearer ${TOKEN}` },\n  });\n  if (!res.ok) throw new Error(`media ${mediaId}: HTTP ${res.status}`);\n  return res.json(); \/\/ { url, mime_type, sha256, file_size, id }\n}\n\nasync function baixar(url) {\n  const res = await fetch(url, { headers: { Authorization: `Bearer ${TOKEN}` } });\n  if (!res.ok) throw Object.assign(new Error('download falhou'), { status: res.status });\n  return Buffer.from(await res.arrayBuffer());\n}\n\nexport async function salvarMidia(midia, chave) {\n  let info = { url: midia.url, sha256: midia.sha256, mime_type: midia.mime_type };\n  let arquivo;\n  try {\n    if (!info.url) throw new Error('sem url no webhook');\n    arquivo = await baixar(info.url);\n  } catch {\n    info = await obterUrl(midia.id); \/\/ gera uma URL nova\n    arquivo = await baixar(info.url);\n  }\n\n  const hash = crypto.createHash('sha256').update(arquivo).digest('base64');\n  if (info.sha256 &amp;&amp; hash !== info.sha256) throw new Error('hash n\u00e3o confere');\n\n  await s3.send(new PutObjectCommand({\n    Bucket: process.env.BUCKET,\n    Key: chave,\n    Body: arquivo,\n    ContentType: info.mime_type,\n  }));\n  return chave;\n}<\/code><\/pre>\n\n\n\n<p>O hash <code>sha256<\/code> dos exemplos da Meta est\u00e1 em base64, por isso a compara\u00e7\u00e3o usa <code>digest('base64')<\/code>. Se no seu caso o formato vier diferente, registre os dois valores antes de ativar a checagem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo em Python<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-python\">import base64\nimport hashlib\nimport os\n\nimport boto3\nimport httpx\n\nGRAPH = \"https:\/\/graph.facebook.com\/v26.0\"\nTOKEN = os.environ[\"WHATSAPP_TOKEN\"]\nHEADERS = {\"Authorization\": f\"Bearer {TOKEN}\"}\ns3 = boto3.client(\"s3\")\n\n\ndef obter_url(client: httpx.Client, media_id: str) -&gt; dict:\n    r = client.get(f\"{GRAPH}\/{media_id}\", headers=HEADERS)\n    r.raise_for_status()\n    return r.json()\n\n\ndef salvar_midia(midia: dict, chave: str) -&gt; str:\n    with httpx.Client(timeout=60, follow_redirects=True) as client:\n        info = obter_url(client, midia[\"id\"])\n        r = client.get(info[\"url\"], headers=HEADERS)\n        if r.status_code == 404:  # URL vencida: gere outra e tente de novo\n            info = obter_url(client, midia[\"id\"])\n            r = client.get(info[\"url\"], headers=HEADERS)\n        r.raise_for_status()\n\n    calculado = base64.b64encode(hashlib.sha256(r.content).digest()).decode()\n    if info.get(\"sha256\") and calculado != info[\"sha256\"]:\n        raise ValueError(\"hash n\u00e3o confere\")\n\n    s3.put_object(\n        Bucket=os.environ[\"BUCKET\"],\n        Key=chave,\n        Body=r.content,\n        ContentType=info[\"mime_type\"],\n    )\n    return chave<\/code><\/pre>\n\n\n\n<p>Para documentos de at\u00e9 100 MB, carregar tudo em mem\u00f3ria pode pesar. Nesse caso, baixe em <em>stream<\/em> para um arquivo tempor\u00e1rio e use <code>upload_fileobj<\/code> do boto3 ou o <code>Upload<\/code> do pacote <code>@aws-sdk\/lib-storage<\/code> no Node, que fazem upload em partes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Onde colocar isso na arquitetura<\/h2>\n\n\n\n<p>N\u00e3o baixe a m\u00eddia dentro da requisi\u00e7\u00e3o do webhook. O endpoint deve validar a assinatura, enfileirar o evento e responder <code>200<\/code> r\u00e1pido; um worker separado faz o download e o upload. Assim, um v\u00eddeo grande n\u00e3o segura o webhook nem gera reenvios da Meta. Sobre a valida\u00e7\u00e3o, veja <a href=\"https:\/\/vectalk.com.br\/blog\/assinatura-webhook-whatsapp\/\">como validar a assinatura do webhook<\/a>.<\/p>\n\n\n\n<p>Algumas boas pr\u00e1ticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chave de armazenamento previs\u00edvel<\/strong>, por exemplo <code>whatsapp\/{phone_number_id}\/{wa_id}\/{wamid}.{ext}<\/code>, para achar o arquivo pela mensagem.<\/li>\n\n\n<li><strong>Idempot\u00eancia<\/strong>: antes de baixar, verifique se aquela mensagem j\u00e1 foi processada; o webhook pode chegar repetido.<\/li>\n\n\n<li><strong>Bucket privado<\/strong> e links assinados para quem precisa ver o arquivo, j\u00e1 que comprovantes e documentos t\u00eam dados pessoais. A LGPD (Lei 13.709\/2018) exige cuidado com seguran\u00e7a e reten\u00e7\u00e3o desses dados; defina por quanto tempo guarda cada tipo. Isso n\u00e3o substitui a orienta\u00e7\u00e3o de um advogado.<\/li>\n\n\n<li><strong>Retry com prazo<\/strong>: se o download falhar, voc\u00ea tem at\u00e9 7 dias de validade do media id para tentar de novo.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Erros comuns<\/h2>\n\n\n\n<p><strong>404 ao baixar.<\/strong> A p\u00e1gina de m\u00eddia orienta gerar uma nova URL de m\u00eddia e tentar de novo; se continuar, renove o token de acesso. Na pr\u00e1tica, a causa mais comum \u00e9 usar uma URL guardada h\u00e1 mais de 5 minutos.<\/p>\n\n\n\n<p><strong>401 ou 403 no download.<\/strong> O <code>GET<\/code> na URL foi feito sem o cabe\u00e7alho <code>Authorization<\/code>, ou com um token que n\u00e3o tem acesso \u00e0 conta. Use um token permanente de usu\u00e1rio do sistema; veja <a href=\"https:\/\/vectalk.com.br\/blog\/token-permanente-api-whatsapp\/\">token permanente da API do WhatsApp<\/a>.<\/p>\n\n\n\n<p><strong>Erro 131052 no webhook.<\/strong> A <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">tabela de erros da Meta<\/a> define como &#8220;n\u00e3o foi poss\u00edvel baixar a m\u00eddia enviada pelo usu\u00e1rio&#8221;. Leia o campo <code>error_data.details<\/code> do webhook e pe\u00e7a ao cliente para reenviar o arquivo por outro meio.<\/p>\n\n\n\n<p><strong>Media id expirado.<\/strong> Depois de 7 dias, n\u00e3o h\u00e1 como recuperar a m\u00eddia pela API. Por isso o download deve acontecer logo ap\u00f3s o webhook.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como fazer isso com a Vectalk<\/h2>\n\n\n\n<p>Na Vectalk, os webhooks s\u00e3o os mesmos da Meta, ent\u00e3o o media id chega no mesmo campo. Para a m\u00eddia, a <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/media\/get-url\">API da Vectalk<\/a> oferece <code>GET https:\/\/apis.vectalk.com.br\/api\/media\/{mediaId}<\/code>, que devolve a URL tempor\u00e1ria (v\u00e1lida por cerca de 5 minutos), e <code>GET https:\/\/apis.vectalk.com.br\/api\/media\/{mediaId}\/download<\/code>, que j\u00e1 devolve o arquivo bin\u00e1rio com o <code>Content-Type<\/code> correto, eliminando o segundo passo. As duas rotas usam o token de inst\u00e2ncia. Crie sua conta em <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>.<\/p>\n\n\n\n<p>Para o caminho inverso, enviar arquivos ao cliente, veja <a href=\"https:\/\/vectalk.com.br\/blog\/enviar-midia-api-whatsapp\/\">como enviar imagem, PDF, \u00e1udio e v\u00eddeo pela API<\/a>. Se o seu bot recebe muitos arquivos, os exemplos completos est\u00e3o nos tutoriais de <a href=\"https:\/\/vectalk.com.br\/blog\/bot-whatsapp-python-api-oficial\/\">bot em Python<\/a> e <a href=\"https:\/\/vectalk.com.br\/blog\/bot-whatsapp-nodejs-api-oficial\/\">bot em Node.js<\/a>. O guia geral \u00e9 o 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\">Quanto tempo a URL da m\u00eddia fica v\u00e1lida?<\/h3>\n\n\n\n<p>5 minutos. Depois disso, consulte o media id de novo para gerar uma URL nova. O media id recebido por webhook vale 7 dias.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Posso guardar a URL da Meta no banco e abrir depois?<\/h3>\n\n\n\n<p>N\u00e3o. A URL expira em 5 minutos e exige o token para download. Guarde o arquivo no seu storage e salve no banco o caminho dele.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Preciso do token para baixar a URL?<\/h3>\n\n\n\n<p>Sim. A documenta\u00e7\u00e3o da Meta diz que a requisi\u00e7\u00e3o falha se voc\u00ea omitir o token. Envie <code>Authorization: Bearer &lt;token&gt;<\/code> tanto na consulta do media id quanto no download.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qual o tamanho m\u00e1ximo de um arquivo recebido?<\/h3>\n\n\n\n<p>Pela tabela de tipos suportados da Meta, imagens v\u00e3o at\u00e9 5 MB, \u00e1udio e v\u00eddeo at\u00e9 16 MB e documentos at\u00e9 100 MB. Figurinhas t\u00eam limites menores.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como saber se o arquivo baixado est\u00e1 \u00edntegro?<\/h3>\n\n\n\n<p>Calcule o SHA-256 do conte\u00fado e compare com o <code>sha256<\/code> do webhook ou da resposta do media id. Nos exemplos da Meta, o valor vem em base64.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fontes oficiais consultadas em 28\/10\/2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/business-phone-numbers\/media\" target=\"_blank\" rel=\"noreferrer noopener\">Media (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/image\" target=\"_blank\" rel=\"noreferrer noopener\">Webhook de mensagens de imagem (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/document\" target=\"_blank\" rel=\"noreferrer noopener\">Webhook de mensagens de documento (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00f3digos de erro (Meta)<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/media\/get-url\">M\u00eddia na API da Vectalk<\/a>, <a href=\"https:\/\/docs.aws.amazon.com\/AWSJavaScriptSDK\/v3\/latest\/client\/s3\/command\/PutObjectCommand\/\" target=\"_blank\" rel=\"noreferrer noopener\">PutObjectCommand (AWS SDK for JavaScript v3)<\/a>, <a href=\"https:\/\/boto3.amazonaws.com\/v1\/documentation\/api\/latest\/reference\/services\/s3\/client\/upload_fileobj.html\" target=\"_blank\" rel=\"noreferrer noopener\">upload_fileobj (boto3)<\/a>, <a href=\"https:\/\/www.planalto.gov.br\/ccivil_03\/_ato2015-2018\/2018\/lei\/l13709.htm\" target=\"_blank\" rel=\"noreferrer noopener\">LGPD (Lei 13.709\/2018)<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Do webhook ao seu storage: como transformar o media id que chega na Cloud API em arquivo salvo, com URL tempor\u00e1ria, token, limites de tamanho e exemplos em cURL, Node e Python.<\/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-516","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>Baixar m\u00eddia do webhook do WhatsApp: guia com c\u00f3digo<\/title>\n<meta name=\"description\" content=\"Como baixar m\u00eddia do webhook do WhatsApp: media id, URL tempor\u00e1ria de 5 minutos, download com token e S3. Exemplos em cURL, Node e Python.\" \/>\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\/baixar-midia-webhook-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Baixar m\u00eddia do webhook do WhatsApp: guia com c\u00f3digo\" \/>\n<meta property=\"og:description\" content=\"Como baixar m\u00eddia do webhook do WhatsApp: media id, URL tempor\u00e1ria de 5 minutos, download com token e S3. Exemplos em cURL, Node e Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-28T16:05:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-28T16:05:53+00:00\" \/>\n<meta name=\"author\" content=\"wanderleyfcunha\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wanderleyfcunha\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"Como receber e baixar a m\u00eddia que o cliente envia pela API do WhatsApp\",\"datePublished\":\"2026-10-28T16:05:44+00:00\",\"dateModified\":\"2026-10-28T16:05:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/\"},\"wordCount\":1301,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/\",\"name\":\"Baixar m\u00eddia do webhook do WhatsApp: guia com c\u00f3digo\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-28T16:05:44+00:00\",\"dateModified\":\"2026-10-28T16:05:53+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"Como baixar m\u00eddia do webhook do WhatsApp: media id, URL tempor\u00e1ria de 5 minutos, download com token e S3. Exemplos em cURL, Node e Python.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/baixar-midia-webhook-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como receber e baixar a m\u00eddia que o cliente envia 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":"Baixar m\u00eddia do webhook do WhatsApp: guia com c\u00f3digo","description":"Como baixar m\u00eddia do webhook do WhatsApp: media id, URL tempor\u00e1ria de 5 minutos, download com token e S3. Exemplos em cURL, Node e Python.","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\/baixar-midia-webhook-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Baixar m\u00eddia do webhook do WhatsApp: guia com c\u00f3digo","og_description":"Como baixar m\u00eddia do webhook do WhatsApp: media id, URL tempor\u00e1ria de 5 minutos, download com token e S3. Exemplos em cURL, Node e Python.","og_url":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-28T16:05:44+00:00","article_modified_time":"2026-10-28T16:05:53+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"Como receber e baixar a m\u00eddia que o cliente envia pela API do WhatsApp","datePublished":"2026-10-28T16:05:44+00:00","dateModified":"2026-10-28T16:05:53+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/"},"wordCount":1301,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/","name":"Baixar m\u00eddia do webhook do WhatsApp: guia com c\u00f3digo","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-28T16:05:44+00:00","dateModified":"2026-10-28T16:05:53+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"Como baixar m\u00eddia do webhook do WhatsApp: media id, URL tempor\u00e1ria de 5 minutos, download com token e S3. Exemplos em cURL, Node e Python.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/baixar-midia-webhook-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Como receber e baixar a m\u00eddia que o cliente envia 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\/516","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=516"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/516\/revisions"}],"predecessor-version":[{"id":519,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/516\/revisions\/519"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}