Envía archivos multimedia a través de WhatsApp. Soporta imágenes, videos, audio, documentos y stickers.
Métodos de Envío
Hay dos formas de enviar media:
Con URL (link)
Con media_id
Proporciona una URL pública y Meta descargará el archivo: {
"to" : "+5215512345678" ,
"type" : "image" ,
"image" : {
"link" : "https://example.com/imagen.jpg" ,
"caption" : "Descripción opcional"
}
}
Primero sube el archivo con /media/v1, luego usa el ID: {
"to" : "+5215512345678" ,
"type" : "image" ,
"image" : {
"id" : "123456789012345" ,
"caption" : "Descripción opcional"
}
}
¿Cuándo usar cada método?
Método Tamaño Mejor para link< 5MB URLs públicas de CDN, imágenes pequeñas id (via /media/v1)Cualquiera Archivos grandes, URLs privadas, múltiples envíos
Compresión Automática de Imágenes : Si envías una imagen por URL que excede 5MB, Whaapy automáticamente la detecta, la descarga, la comprime con calidad progresiva, y la sube a Meta. No necesitas hacer nada adicional - el proceso es transparente.
Proxy Automático : Si Meta no puede descargar tu URL (error 131052), Whaapy automáticamente descarga el archivo y lo re-sube. Para archivos muy grandes que no se pueden comprimir, usa autoConvert: true para enviarlos como documento, o súbelos primero via /media/v1 .
Imagen
Formatos soportados: JPEG, PNG, WebP
Tamaño máximo: 5 MB
Con URL
curl -X POST https://api.whaapy.com/messages/v1 \
-H "Authorization: Bearer wha_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+5215512345678",
"type": "image",
"image": {
"link": "https://example.com/producto.jpg",
"caption": "¡Mira nuestro nuevo producto!"
}
}'
{
"to" : "+5215512345678" ,
"type" : "image" ,
"image" : {
"id" : "123456789012345" ,
"caption" : "Imagen subida previamente"
}
}
Campos
URL pública de la imagen. Mutuamente excluyente con id.
ID de media obtenido de /media/v1. Mutuamente excluyente con link.
Descripción opcional que aparece debajo de la imagen. Máximo 1024 caracteres.
Video
Formatos soportados: MP4, 3GPP
Tamaño máximo: 16 MB
Códecs recomendados: H.264 video, AAC audio
Para videos grandes (>5MB), siempre usa /media/v1 primero. El proxy automático tiene límites de tamaño.
Con URL
{
"to" : "+5215512345678" ,
"type" : "video" ,
"video" : {
"link" : "https://example.com/tutorial.mp4" ,
"caption" : "Tutorial de instalación"
}
}
{
"to" : "+5215512345678" ,
"type" : "video" ,
"video" : {
"id" : "123456789012345" ,
"caption" : "Video subido previamente"
}
}
Campos
URL pública del video. Mutuamente excluyente con id.
ID de media obtenido de /media/v1. Mutuamente excluyente con link.
Descripción opcional. Máximo 1024 caracteres.
Audio
Formatos soportados: AAC, MP3, OGG (Opus), AMR
Tamaño máximo: 16 MB
Los audios se muestran como notas de voz en WhatsApp si son formato OGG con códec Opus.
Ejemplo
curl -X POST https://api.whaapy.com/messages/v1 \
-H "Authorization: Bearer wha_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+5215512345678",
"type": "audio",
"audio": {
"link": "https://example.com/mensaje.mp3"
}
}'
{
"to" : "+5215512345678" ,
"type" : "audio" ,
"audio" : {
"id" : "123456789012345"
}
}
Campos
ID de media obtenido de /media/v1.
Los audios no soportan caption. Si necesitas agregar contexto, envía un mensaje de texto antes o después.
Documento
Formatos soportados: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT
Tamaño máximo: 100 MB
Ejemplo
curl -X POST https://api.whaapy.com/messages/v1 \
-H "Authorization: Bearer wha_TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+5215512345678",
"type": "document",
"document": {
"link": "https://example.com/factura.pdf",
"filename": "factura-enero-2026.pdf",
"caption": "Tu factura del mes de enero"
}
}'
{
"to" : "+5215512345678" ,
"type" : "document" ,
"document" : {
"id" : "123456789012345" ,
"filename" : "contrato.pdf" ,
"caption" : "Contrato firmado"
}
}
Campos
URL pública del documento.
ID de media obtenido de /media/v1.
Nombre del archivo que verá el usuario al descargar. Recomendado para mejor UX.
Descripción opcional del documento.
Sticker
Formato soportado: WebP
Tamaño máximo: 500 KB
Dimensiones: 512x512 píxeles (recomendado)
Los stickers animados deben usar WebP animado y no exceder 500KB.
Ejemplo
{
"to" : "+5215512345678" ,
"type" : "sticker" ,
"sticker" : {
"link" : "https://example.com/sticker.webp"
}
}
{
"to" : "+5215512345678" ,
"type" : "sticker" ,
"sticker" : {
"id" : "123456789012345"
}
}
Campos
URL pública del sticker en formato WebP.
ID de media obtenido de /media/v1.
Los stickers no soportan caption. Son elementos visuales independientes.
Respuesta Exitosa
{
"messaging_product" : "whatsapp" ,
"contacts" : [
{ "input" : "+5215512345678" , "wa_id" : "5215512345678" }
],
"messages" : [
{ "id" : "550e8400-e29b-41d4-a716-446655440000" , "wamid" : "wamid.HBgLNTIxNTUx..." }
],
"data" : {
"id" : "550e8400-e29b-41d4-a716-446655440000" ,
"conversationId" : "660e8400-e29b-41d4-a716-446655440001" ,
"messageType" : "image" ,
"direction" : "outbound" ,
"status" : "sent" ,
"createdAt" : "2026-01-22T10:30:00Z"
}
}
Límites de Tamaño
Tipo Formatos Tamaño Máximo imageJPEG, PNG, WebP 5 MB videoMP4, 3GPP 16 MB audioAAC, MP3, OGG, AMR 16 MB documentPDF, DOC, XLS, PPT, TXT 100 MB stickerWebP 500 KB
Errores Comunes
{
"error" : "media_download_failed" ,
"message" : "No se pudo descargar el archivo multimedia" ,
"code" : "131052"
}
Solución : Usa una URL pública o sube el archivo via /media/v1 .
{
"error" : "unsupported_media_type" ,
"message" : "El formato del archivo no es compatible" ,
"code" : "131051"
}
Solución : Convierte el archivo a un formato soportado.
Archivo Demasiado Grande (131053)
{
"error" : "file_too_large" ,
"message" : "El archivo excede el tamaño máximo permitido" ,
"code" : "131053"
}
Solución : Comprime el archivo o divídelo en partes más pequeñas.
Flujo Recomendado para Archivos Grandes
El media_id expira después de ~30 días. Puedes reutilizarlo para enviar el mismo archivo a múltiples destinatarios sin re-subirlo.
Conversión Automática (autoConvert)
Cuando un archivo excede el límite de tamaño para su tipo, puedes usar autoConvert: true para que Whaapy intente comprimir automáticamente y, si la compresión no es suficiente, envíe el archivo como documento.
Habilita compresión automática y conversión a documento como fallback
Comportamiento
Tipo Límite Con autoConvert image5 MB Comprime con calidad progresiva (85% → 70% → 50%). Si sigue excediendo, envía como documento video16 MB No comprime (muy costoso). Si excede, envía como documento directamenteaudio16 MB Comprime a MP3 64kbps mono. Si sigue excediendo, envía como documento document100 MB Sin cambios (ya tiene el límite más alto)
Ejemplo: Imagen Grande con autoConvert
{
"to" : "+5215512345678" ,
"type" : "image" ,
"image" : {
"link" : "https://example.com/foto-alta-resolucion.jpg" ,
"caption" : "Foto en alta resolución"
},
"autoConvert" : true
}
Sin autoConvert : Si la imagen excede 5MB, recibirás error 413.
Con autoConvert: true :
Whaapy intenta comprimir la imagen
Si la compresión es exitosa → se envía como imagen
Si la compresión no es suficiente → se envía como documento
Respuesta cuando se convierte a documento
{
"messaging_product" : "whatsapp" ,
"messages" : [{ "id" : "..." }],
"data" : {
"messageType" : "document" ,
"metadata" : {
"originalType" : "image" ,
"wasConverted" : true ,
"reason" : "Exceeded size limit after compression"
}
}
}
Cuando un archivo se envía como documento, el destinatario no verá una vista previa en la conversación. Deberá descargarlo para verlo.
Para mejor experiencia de usuario, comprime tus imágenes antes de enviarlas. Si usas Cloudinary o servicios similares, agrega transformaciones como q_auto,w_1920 para reducir el tamaño automáticamente.
Cuando un archivo excede el límite y autoConvert está deshabilitado:
{
"error" : "media_too_large" ,
"message" : "image exceeds 5MB limit (7.9MB)" ,
"suggestion" : "Use autoConvert:true to auto-compress, or send as document type" ,
"limits" : {
"image" : "5MB" ,
"video" : "16MB" ,
"audio" : "16MB" ,
"document" : "100MB"
}
}
El error incluye los límites actuales de Meta WhatsApp Cloud API para tu referencia.
Control de IA (Opcional)
Puedes controlar el comportamiento del agente IA al enviar mensajes de media usando el campo ai:
Pausar la IA después de enviar este mensaje
Duración de la pausa en minutos (default: 5, máximo: 1440)
Desactivar la IA permanentemente en esta conversación
Ejemplo: Enviar Imagen y Pausar IA
{
"to" : "+5215512345678" ,
"type" : "image" ,
"image" : {
"link" : "https://example.com/producto.jpg" ,
"caption" : "Aquí está la foto que pediste"
},
"ai" : { "pause" : true , "pauseDuration" : 30 }
}
Esto es útil cuando integras con sistemas externos (n8n, Zapier, CRMs) y necesitas evitar que la IA responda automáticamente. Ver Control de IA para más opciones.
Próximos Pasos
Subir Media Endpoint para subir archivos grandes
Enviar Templates Mensajes fuera de ventana 24h
Control de IA Controla cuándo la IA responde