Mensajes
Enviar media
Envía una imagen, video, audio (voz/regular) o documento por URL o base64
POST
Enviar media
Auth:
Documento (PDF) con
Envía un PDF como documento.
Envoltorio de error:
TokenAccount o TokenInstance • Rate-limit: Global (100/min) • Idempotente: no
Descripción
Envía un archivo de media (image, video, document o audio) desde una URL pública o un string base64. La fuente se puede indicar en mediaUrl (que acepta tanto la URL como el base64 de la media) o en el campo mediaBase64, envía uno u otro, nunca ambos. Soporta message como subtítulo, replyTo (cita por ID), replyPrivate, mention / mentionAll (solo chats de grupo), delay (en segundos) para simular tipeo real y, para audio, isVoice (PTT), duration y waveform. El servidor descarga el archivo (cuando es URL) o decodifica el base64, detecta el mimeType cuando se omite y lo sube a los servidores de WhatsApp antes de enviar.
Ejemplos
Imagen por URL
Envía una imagen (mediaType: "image") descargada desde una URL pública, con message usado como el subtítulo que aparece bajo la foto en el chat.
Imagen por base64
En lugar de una URL, envía el contenido de la media en base64. Puedes poner el base64 en el propiomediaUrl (con o sin el prefijo data URI data:image/jpeg;base64,) o en el campo dedicado mediaBase64. Como no hay URL para inferir el nombre/tipo, se recomienda indicar mimeType (y fileName, para documentos).
Audio de voz (PTT)
CuandomediaType: "audio" e isVoice se omite, el servidor asume true por defecto (mensaje de voz/PTT). Para enviar como audio “regular” (una pista musical, por ejemplo), pasa isVoice: false.
Documento (PDF) con fileName
Envía un PDF como documento. fileName (Contract-2026.pdf) define el nombre mostrado en la tarjeta de adjunto y message aparece como texto acompañante. Sin fileName, WhatsApp muestra un nombre genérico.
Video con subtítulo y delay
Envía un video MP4 con el subtítulo “Check out this video!” ydelay: 3, el servidor envía el indicador “escribiendo…” durante 3 segundos antes de disparar el video, simulando tipeo real.
Imagen en grupo con respuesta y mención
Envía una imagen en un grupo (@g.us), citando un mensaje anterior vía replyTo y mencionando a un miembro vía el array mention. @5511888888888 en el subtítulo se vuelve clicable y dispara una notificación para el usuario etiquetado.
Respuesta exitosa
ElmessageType refleja el mediaType que enviaste (image, video, document o audio). Los metadatos resueltos por el upload aparecen en mediaUrl (URL re-emitida para mmg.whatsapp.net), mediaMimeType y mediaSize. Para audio PTT, el servidor también retorna mediaDuration cuando puede calcularla.
200 OK
Para
mediaType: "document", fileName aparece en la tarjeta. Para mediaType: "audio" con isVoice: true, el mensaje se entrega como PTT (waveform + ícono de micrófono). Para audio “regular” (una pista musical), usa isVoice: false.Parámetros de ruta
Nombre de la instancia (p. ej.,
$Instance_Name).Cabeceras
TokenAccount o TokenInstance.application/jsonCuerpo de la solicitud
Destino: teléfono (
5511999999999) o JID (@s.whatsapp.net, @lid, @g.us, @newsletter).Uno de:
image, video, document, audio. Determina cómo WhatsApp renderiza el mensaje.Fuente de la media: una URL pública del archivo o el base64 de la media (con data URI
data:<mime>;base64,... o base64 crudo). Cuando es una URL, debe ser accesible públicamente (sin autenticación) y el servidor la descarga. Debes indicar mediaUrl o mediaBase64 (nunca ambos).Base64 de la media (alternativa a
mediaUrl), con data URI data:<mime>;base64,... o base64 crudo. No se puede usar junto con mediaUrl, envía uno u otro. Como no hay URL, se recomienda indicar mimeType (y fileName para documentos).Subtítulo de la media. Para
mediaType: "document", aparece como texto acompañante. Opcional para todos los tipos.Tipo MIME del archivo (p. ej.,
image/jpeg, application/pdf). Cuando se omite, el servidor lo detecta automáticamente desde la descarga.Nombre del archivo mostrado en la tarjeta. Recomendado para
mediaType: "document", sin él, WhatsApp muestra un nombre genérico.Aplica solo a
mediaType: "audio". Cuando es true, el mensaje se entrega como PTT (mensaje de voz, con waveform). Cuando es false, se entrega como audio regular (una pista musical). Cuando el campo se omite en audio, el servidor asume true.Duración del audio en segundos. Aplica solo a
mediaType: "audio". Opcional, cuando se omite, el servidor intenta detectarla automáticamente.Waveform de audio precomputada (PTT). Opcional, cuando se omite, el servidor genera automáticamente una waveform default. Aplica solo a
mediaType: "audio" con isVoice: true.Tiempo en segundos a esperar antes de enviar. Durante el intervalo, el servidor envía el indicador “escribiendo…” al destinatario y dispara “pausado” antes del envío real.
ID del mensaje a citar (respuesta). El mensaje original debe pertenecer a la misma instancia y haber sido guardado en la base de datos. Posibles errores:
reply_message_not_found, reply_message_instance_mismatch.Cuando es
true y replyTo apunta a un mensaje originado en un grupo, la respuesta se redirige al chat privado del autor original (manteniendo la cita). Ignorado si el mensaje original no es de un grupo.Lista de números (o JIDs) a mencionar. Solo en chats de grupo (
@g.us). Para aparecer como enlace clicable, incluye @5511... en message (subtítulo). Sin eso, se vuelven menciones ocultas (solo notifican).Cuando es
true, menciona a todos los miembros del grupo (excepto la propia instancia). Equivalente a @everyone. Solo en chats de grupo.Identificador de origen para trazabilidad (p. ej.,
crm, bot-suporte, n8n). Guardado en el registro del mensaje en la base de datos y propagado a los webhooks. Cuando se omite, el default es "api".Notas
delayes en segundos, no milisegundos. Un valor de3= 3 segundos de “escribiendo”.- Para
mediaType: "audio",isVoiceasumetrueautomáticamente cuando el campo se omite. Para enviar como pista musical, debes enviar explícitamenteisVoice: false. - La media puede venir por URL o base64. Usa
mediaUrl(que acepta URL o base64) omediaBase64, enviar ambos retorna400 use either mediaUrl or mediaBase64, not both; no enviar ninguno retorna400 mediaUrl or mediaBase64 is required. - Cuando
mediaUrles una URL, debe ser accesible públicamente. URLs con autenticación, sesiones o protección anti-bot comúnmente fallan conmedia_download_failed. - Para envíos en base64, se recomienda indicar
mimeType(no hay URL para inferir el tipo). El base64 acepta data URI (data:<mime>;base64,...) o base64 crudo. - Cuando
mimeTypeno se proporciona, el servidor lo detecta desde los primeros bytes de la descarga (net/http+ sniff). En casos raros (extensiones atípicas), proporcionarlo manualmente evita problemas. - Para números BR (que comienzan con
55), el servicio prueba automáticamente variaciones con y sin el 9° dígito. mentionymentionAllson exclusivos de grupos. Si se envían a un DM/canal, la respuesta es400 Mentions are only supported in group chats.- El campo
duration(audio) es informativo,whatsmeowaún calcula su propio valor desde el archivo. Útil cuando el servidor no puede inferirlo. - El campo
waveformes opcional y consultivo: si se omite, el servidor genera una waveform estándar para PTT.
Errores
| HTTP | Status interno | Mensaje |
|---|---|---|
| 400 | , | Instance name is required |
| 400 | , | Invalid request body: <detail> |
| 400 | , | Number is required |
| 400 | , | MediaType is required |
| 400 | , | mediaUrl or mediaBase64 is required |
| 400 | , | use either mediaUrl or mediaBase64, not both |
| 400 | , | MediaType must be one of: image, video, document, audio |
| 400 | invalid_number | Invalid phone number format: <detail> |
| 400 | mentions_not_supported | Mentions are only supported in group chats |
| 400 | media_download_failed | Failed to download media: <reason> |
| 400 | media_input_invalid | Failed to resolve media: <reason> |
| 400 | media_validation_failed | Invalid media file: <reason> |
| 400 | unsupported_media_type | Unsupported media type: <mime> |
| 500 | media_upload_failed | Failed to upload media to WhatsApp servers |
| 500 | send_failed | Failed to send message: <reason> |
| 404 | , | Instance not found |
| 503 | disconnected | Instance is not connected to WhatsApp |