Pular para o conteúdo

Envio de mídia

Mídia (imagens, áudios, vídeos, documentos e figurinhas) é enviada pelo mesmo endpoint POST /v1/messages usado para texto. Os campos de mídia ficam dentro do objeto content. O tipo vem do campo âncora presente (image_url, video_url, audio_url, document_url ou sticker_url).

Tipos de mídia suportados

VarianteCampo âncoraFormatos comunsTamanho máximocaption?filename?
imageimage_urlJPEG, PNG, WebP16 MB✓—
videovideo_urlMP4100 MB✓—
audioaudio_urlMP3, OGG, M4A16 MB——
documentdocument_urlPDF, DOCX, XLSX, etc.100 MB✓✓
stickersticker_urlWebP (estático ou animado), exatamente 512×512px500 KB——

caption não é aceito em audio e sticker. A API retorna 422 se o campo for enviado nesses tipos.

Depois do envio, só a legenda de imagem, vídeo e documento pode ser editada. O arquivo, o áudio e a figurinha não podem: apagar é a única alteração. Veja o que pode ser alterado depois do envio.

Modalidade: URL pública

Informe uma URL HTTPS acessível publicamente. O Turbo Notify baixa o arquivo antes de entregá-lo ao WhatsApp.

Imagem

send-image.sh
curl -X POST \
https://api.turbonotify.com/v1/messages \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"to": {"number": "+5511988887777"},
"content": {
"image_url": "https://cdn.exemplo.com/foto-produto.jpg",
"mime_type": "image/jpeg",
"caption": "Foto do produto"
}
}'

Vídeo

send-video.sh
curl -X POST \
https://api.turbonotify.com/v1/messages \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"to": {"number": "+5511988887777"},
"content": {
"video_url": "https://cdn.exemplo.com/clip-produto.mp4",
"mime_type": "video/mp4",
"caption": "Veja o vídeo"
}
}'

O caption de vídeo também aceita menções @<numero>.

Áudio

send-audio.sh
curl -X POST \
https://api.turbonotify.com/v1/messages \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"to": {"number": "+5511988887777"},
"content": {
"audio_url": "https://cdn.exemplo.com/audio.ogg",
"mime_type": "audio/ogg"
}
}'

mime_type é opcional e não muda como o arquivo é enviado: o formato que o WhatsApp recebe vem do que o próprio servidor da URL entrega.

Documento

send-document.sh
curl -X POST \
https://api.turbonotify.com/v1/messages \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"to": {"number": "+5511988887777"},
"content": {
"document_url": "https://cdn.exemplo.com/fatura.pdf",
"mime_type": "application/pdf",
"filename": "Fatura-Abril.pdf",
"caption": "Sua fatura do mês de abril"
}
}'

filename aparece como o nome do anexo no chat do destinatário. O caption de documento também aceita menções @<numero>.

Figurinha (sticker)

send-sticker.sh
curl -X POST \
https://api.turbonotify.com/v1/messages \
-H "Authorization: Bearer SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"to": {"number": "+5511988887777"},
"content": {
"sticker_url": "https://cdn.exemplo.com/sticker-animado.webp",
"mime_type": "image/webp"
}
}'

Stickers devem ser WebP (estático ou animado), com dimensões exatas de 512×512 pixels (qualquer outra dimensão é rejeitada mesmo que o WebP seja válido) e respeitar o limite de 500 KB.

Esquema de campos (todos os tipos)

Os campos de mídia ficam dentro do objeto content. O campo âncora (ex.: image_url) determina a variante. Todo envio de mídia é feito por URL pública; não é possível enviar um arquivo informando apenas a chave dele no seu BYO Storage.

Campo em contentTipoObrigatórioNotas
image_urlURLcondicionalCampo âncora para imagens; URL pública HTTPS
video_urlURLcondicionalCampo âncora para vídeos; URL pública HTTPS
audio_urlURLcondicionalCampo âncora para áudios; URL pública HTTPS
document_urlURLcondicionalCampo âncora para documentos; URL pública HTTPS
sticker_urlURLcondicionalCampo âncora para figurinhas; URL pública HTTPS
mime_typestringnãoopcional e informativo: não altera o envio. O formato é identificado a partir do próprio arquivo baixado da URL
captionstringparcialaceito em image, video, document; não aceito em audio e sticker (retorna 422). Aceita tokens de menção @<numero>, detecção implícita, mesmas regras do text
filenamestringnãoapenas em document; aparece como nome do anexo no chat

Resposta

Status HTTP: 202
{
  "message_id": "msg_a1b2c3d4e5f60718293a4b5c6d7e8f90",
  "status": {
    "state": "pending",
    "at": "2026-04-27T10:00:05Z",
    "error": null
  }
}

A confirmação real chega via webhook message.sent. Em caso de falha (URL inacessível, formato não suportado, tamanho excedido) você recebe message.send.failed com um objeto error ({ code, message, hint }) específico.

Webhook outbound

Quando o envio é confirmado pelo WhatsApp, o webhook message.sent traz content_type e preview (mesmo formato de message.received):

webhook-message-sent.json
{
"id": "evt_3f9a1c2b4d5e6f708192a3b4c5d6e7f8",
"type": "message.sent",
"organization_id": "org_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"number_alias": "main",
"number_id": "num_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
"created_at": "2026-04-27T10:00:08Z",
"data": {
"id": "msg_a1b2c3d4e5f60718293a4b5c6d7e8f90",
"from": { "alias": "main", "number": "5511973117056" },
"to": { "number": "5511988887777" },
"preview": "Foto do produto",
"content_type": "image",
"direction": "outbound",
"channel": "whatsapp",
"origin": "tn",
"at": "2026-04-27T10:00:08Z"
}
}

Para baixar o arquivo de uma mídia recebida, consulte GET /v1/numbers/{ref}/messages/{id}: os campos de mídia aparecem diretamente no objeto específico do content_type (image, video, audio, document, sticker), sem sub-objeto media. Com BYO Object Storage configurado, esse objeto vem com kind: "available" e url contendo a URL pré-assinada de download.

Relacionado