Como enviar imagem, áudio, vídeo e documento pela API de WhatsApp
Cada tipo de mídia tem um endpoint próprio, e todos seguem a mesma lógica: você informa a conexão, o número e o arquivo, por URL pública ou base64. Para receber, a mídia que o cliente manda chega pelo webhook e pode ser baixada pela API.
Por que mídia muda o resultado da conversa
Um boleto em PDF resolve mais do que um link para ele. A foto do produto vende melhor que a descrição. Um áudio curto do vendedor soa mais próximo que três parágrafos. Em sistemas de gestão, o comprovante que o cliente fotografa e manda de volta precisa chegar ao financeiro sem ninguém baixar e subir arquivo na mão.
Uma API de WhatsApp trata os dois sentidos: seu sistema anexa arquivos nas mensagens que envia e recebe os arquivos que os clientes mandam, já prontos para salvar ou processar.
Endpoints de envio por tipo de mídia
| Tipo | Endpoint | Campo do arquivo | Opcionais úteis |
|---|---|---|---|
| Imagem | /messages/send/image | image | caption |
| Áudio | /messages/send/audio | audio | ptt (mensagem de voz) |
| Vídeo | /messages/send/video | video | caption, ptv, gifPlayback |
| Documento | /messages/send/document | document | fileName, mimetype |
| Álbum | /messages/send/album | media (lista) | caption por item |
| Figurinha | /messages/send/sticker | sticker | - |
Todas as rotas ficam em https://api.d-api.cloud/api/v1 e exigem sessionId e to, com o número no formato internacional sem sinal de mais, como 5511999999999.
Exemplos de envio
Documento com nome amigável
curl -X POST https://api.d-api.cloud/api/v1/messages/send/document \
-H "Authorization: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "financeiro",
"to": "5511999999999",
"document": "https://arquivos.suaempresa.com/faturas/8812.pdf",
"fileName": "fatura-setembro.pdf",
"mimetype": "application/pdf"
}'Sem fileName, o cliente vê um nome genérico e desconfia. É um detalhe pequeno que reduz a pergunta "isso é golpe?" no atendimento.
Imagem, voz e álbum com o SDK de Node
import { DApi } from 'd-api-sdk'
const dapi = new DApi({ apiKey: process.env.DAPI_KEY })
await dapi.messages.sendImage({
sessionId: 'loja',
to: '5511999999999',
image: 'https://cdn.suaempresa.com/produtos/tenis-azul.jpg',
caption: 'Chegou no seu tamanho. Quer que eu separe?',
})
await dapi.messages.sendAudio({
sessionId: 'loja',
to: '5511999999999',
audio: 'https://cdn.suaempresa.com/audios/boas-vindas.ogg',
ptt: true,
})
await dapi.messages.sendAlbum({
sessionId: 'loja',
to: '5511999999999',
media: [
{ type: 'image', url: 'https://cdn.suaempresa.com/produtos/frente.jpg', caption: 'Frente' },
{ type: 'image', url: 'https://cdn.suaempresa.com/produtos/lateral.jpg', caption: 'Lateral' },
],
})O SDK é um cliente fino sobre a mesma API REST, então tudo acima também funciona com qualquer cliente HTTP. Mais detalhes na página do SDK de Node.js.
URL pública ou base64: como decidir
Nos envios individuais, o campo do arquivo aceita dois formatos, e cada um tem seu lugar. No álbum, os itens vão sempre por URL.
- URL pública: o arquivo fica num storage ou CDN e você passa o link. A requisição fica leve, o mesmo arquivo serve para vários destinatários e você não trafega megabytes a cada chamada. O link precisa responder sem login e sem redirecionar para uma página de autenticação.
- Base64: o conteúdo vai dentro do JSON. Faz sentido para arquivos gerados na hora, como um recibo montado pelo sistema, ou quando o documento tem dado sensível e você não quer deixá-lo num link acessível. O custo é um payload maior.
Se optar por URL com dado sensível, use links assinados com expiração curta. A API só precisa buscar o arquivo no momento do envio.
Receber e baixar a mídia que o cliente envia
Quando o cliente manda foto, áudio ou documento, o evento messages.received chega no seu webhook com type igual a image, audio, video, document ou sticker. O media_url normalmente já traz um link do arquivo armazenado, e media_data traz tipo, tamanho, legenda, duração e, em áudio, se é mensagem de voz.
Se você precisa do conteúdo em base64 (para mandar a um OCR ou a um modelo de transcrição, por exemplo) ou o link não veio preenchido, use o download. O WhatsApp entrega a mídia criptografada, e o endpoint decifra usando os metadados que vieram no evento:
curl -X POST https://api.d-api.cloud/api/v1/media/download \
-H "Authorization: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "financeiro",
"direct_path": "<do webhook>",
"media_key": "<do webhook>",
"mimetype": "image/jpeg",
"base64": true
}'Sem base64: true, o arquivo é salvo em storage e a resposta devolve media_url. Para arquivos grandes, o parâmetro async faz o download em segundo plano. Quem quer guardar tudo no próprio bucket pode usar a integração nativa com S3 ou MinIO.
Erros comuns ao enviar mídia
- Link que exige login ou expira rápido demais: o envio falha ou chega vazio. Teste a URL numa aba anônima.
- Áudio sem
pttquando a ideia era parecer voz: o cliente recebe um arquivo, não um recado. - Mandar a mesma mídia pesada em lote para muita gente: além do custo de banda, volume atípico de envio é um dos sinais que levam a bloqueio. Leia como evitar banimento antes de automatizar campanhas.
- Processar a mídia antes de responder o webhook: baixe e trate o arquivo num worker, depois de devolver 200.
Se você quer disparar mídia a partir de gatilhos do seu sistema sem escrever código, veja a API de WhatsApp para automação. Para combinar mídia com opções clicáveis, continue em botões e listas.
Perguntas frequentes
Posso enviar um PDF pela API de WhatsApp?
Sim. Use o envio de documento, passando o arquivo por URL pública ou base64. Informe fileName para o cliente ver um nome legível, como boleto-marco.pdf, e mimetype quando o tipo não for óbvio pela extensão.
Como fazer o áudio chegar como mensagem de voz gravada?
Envie com ptt igual a true. Sem esse campo, o arquivo aparece como áudio anexado, com player de arquivo. Com ptt, aparece como a bolinha de voz, igual a um áudio gravado na hora.
É melhor mandar a mídia por URL ou em base64?
URL pública costuma ser o melhor caminho: o corpo da requisição fica pequeno e o mesmo arquivo serve para vários envios. Base64 faz sentido quando o arquivo é gerado na hora e não pode ficar exposto num link.
Como recebo as fotos e áudios que o cliente me envia?
Eles chegam no webhook de mensagem recebida, com o tipo da mídia e, normalmente, um link já pronto em media_url. Quando precisar do arquivo em base64 ou o link não vier preenchido, use o endpoint de download de mídia com os metadados do evento.
Dá para mandar várias fotos numa mensagem só?
Sim, com o envio de álbum. Você passa uma lista de imagens e vídeos por URL, cada um com legenda opcional, e o WhatsApp mostra tudo agrupado, como quando alguém seleciona várias fotos da galeria.
Continue lendo
Teste a API de WhatsApp da D-API
Trial de 3 dias com acesso completo. Sem cartão, sem fidelidade.