Documentación de todos los endpoints disponibles en Massiva Desktop
Operaciones sobre chats de WhatsApp. Todos los endpoints requieren que la sesión indicada esté en estado connected.
Obtiene la lista de chats activos de una sesión de WhatsApp. Soporta filtros por estado de lectura, paginación y modo ligero.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión de WhatsApp |
onlyUnread | boolean | No | Si es true, retorna solo chats no leídos |
limit | number | No | Máximo de chats a retornar (1–100) |
includePushname | boolean | No | Incluir nombre push del contacto |
lite | boolean | No | Versión reducida de los datos |
{
"success": true,
"data": [
{
"id": "593991234567@c.us",
"name": "Juan Pérez",
"isGroup": false,
"unreadCount": 2,
"timestamp": 1716739200,
"lastMessage": { "body": "Hola, ¿cómo estás?", "fromMe": false }
}
],
"message": "5 chats obtenidos"
}
Obtiene información detallada de un chat por su ID.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
chatId | string | Sí | ID del chat (ej: 593991234567@c.us) |
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
{
"success": true,
"data": {
"id": "593991234567@c.us",
"name": "Juan Pérez",
"isGroup": false,
"unreadCount": 0,
"timestamp": 1716739200,
"isArchived": false,
"isMuted": false
}
}
Obtiene los mensajes de un chat específico desde WhatsApp.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
chatId | string | Sí | ID del chat |
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
limit | number | No | Cantidad de mensajes (1–100) |
ack | number | No | Filtrar por estado ACK |
lite | boolean | No | Versión reducida |
{
"success": true,
"data": [
{
"id": { "id": "3EB0ABC123", "fromMe": true },
"body": "Hola, ¿cómo estás?",
"type": "chat",
"timestamp": 1716739200,
"from": "593991234567@c.us",
"to": "593987654321@c.us",
"ack": 3
}
],
"message": "20 mensajes obtenidos"
}
Obtiene la URL de la foto de perfil de un chat o contacto de WhatsApp.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
chatId | string | Sí | ID del chat |
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
{
"success": true,
"data": {
"profilePicUrl": "https://pps.whatsapp.net/v/t61.24694-24/abc123.jpg"
}
}
profilePicUrl retorna null.Marca todos los mensajes no leídos de un chat como leídos.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
chatId | string | Sí | ID del chat |
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
{ "success": true, "message": "Chat marcado como leído" }
Envía el indicador de estado "escribiendo..." al chat especificado.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
{ "success": true, "message": "Estado \"escribiendo\" enviado" }
Envía una ubicación geográfica al chat especificado.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
latitude | number | Sí | Latitud (ej: -0.225219) |
longitude | number | Sí | Longitud (ej: -78.524493) |
description | string | No | Nombre del lugar |
address | string | No | Dirección del lugar |
url | string | No | URL relacionada |
{
"sessionId": "session-abc123",
"latitude": -0.225219,
"longitude": -78.524493,
"description": "Oficina Massiva",
"address": "Quito, Ecuador"
}
{
"success": true,
"data": { "id": { "id": "3EB0ABC456" }, "type": "location" },
"message": "Ubicación enviada correctamente"
}
Envía un mensaje interactivo con botones de respuesta rápida al chat.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
messageBody | string | Sí | Cuerpo del mensaje |
buttons | array | Sí | Array de {id, text} |
title | string | No | Título del mensaje |
footer | string | No | Pie de mensaje |
{
"sessionId": "session-abc123",
"messageBody": "¿Deseas continuar?",
"buttons": [
{ "id": "btn_si", "text": "Sí" },
{ "id": "btn_no", "text": "No" }
],
"title": "Confirmación",
"footer": "Massiva"
}
Envía un mensaje interactivo con una lista desplegable de opciones.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
listBody | string | Sí | Cuerpo del mensaje |
buttonText | string | Sí | Texto del botón desplegable |
sections | array | Sí | Array de secciones con {title, rows: [{id, title, description}]} |
title | string | No | Título del mensaje |
footer | string | No | Pie de mensaje |
{
"sessionId": "session-abc123",
"listBody": "Selecciona una opción:",
"buttonText": "Ver opciones",
"sections": [
{
"title": "Soporte",
"rows": [
{ "id": "soporte_tecnico", "title": "Soporte técnico", "description": "Problemas con el sistema" },
{ "id": "facturacion", "title": "Facturación", "description": "Consultas de pago" }
]
}
]
}
Gestión del directorio de contactos local (SQLite) y operaciones de consulta hacia WhatsApp.
Obtiene la lista paginada de contactos con búsqueda y filtros.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
page | number | No | Número de página (default: 1) |
limit | number | No | Registros por página (1–100, default: 50) |
search | string | No | Búsqueda por nombre o teléfono |
isGroup | boolean | No | Filtrar solo grupos |
isBlocked | boolean | No | Filtrar solo bloqueados |
tagId | string | No | Filtrar por etiqueta |
all | boolean | No | Retornar todos sin paginación |
{
"success": true,
"data": [
{
"id": "clxyz123",
"name": "Juan Pérez",
"phoneNumber": "+593991234567",
"isGroup": false,
"isBlocked": false,
"createdAt": "2026-01-15T10:00:00.000Z",
"tags": [{ "tag": { "id": "tag-abc", "name": "Cliente", "color": "#3B82F6" } }]
}
],
"pagination": { "page": 1, "limit": 50, "total": 120, "totalPages": 3 }
}
Crea un nuevo contacto en la base de datos local.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
phoneNumber | string | Sí | Número de teléfono (ej: +593991234567) |
name | string | No | Nombre del contacto |
isGroup | boolean | No | Si es grupo de WhatsApp |
avatar | string | No | URL de foto de perfil |
{
"success": true,
"data": { "id": "clxyz456", "name": "María García", "phoneNumber": "+593991234567", "isBlocked": false },
"message": "Contacto creado correctamente"
}
Obtiene la información detallada de un contacto por su ID (CUID).
{
"success": true,
"data": { "id": "clxyz123", "name": "Juan Pérez", "phoneNumber": "+593991234567", "isBlocked": false, "tags": [] }
}
Actualiza los campos de un contacto. Solo se actualizan los campos enviados.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | No | Nuevo nombre |
phoneNumber | string | No | Nuevo número |
avatar | string | No | URL de foto de perfil |
isBlocked | boolean | No | Estado de bloqueo |
{ "success": true, "data": { "id": "clxyz123", "name": "Juan Pérez Actualizado" }, "message": "Contacto actualizado correctamente" }
Elimina un contacto de la base de datos local de forma permanente.
{ "success": true, "message": "Contacto eliminado correctamente" }
Marca un contacto como bloqueado (isBlocked = true).
{ "success": true, "data": { "id": "clxyz123", "isBlocked": true }, "message": "Contacto bloqueado correctamente" }
Desmarca el bloqueo de un contacto (isBlocked = false).
{ "success": true, "data": { "id": "clxyz123", "isBlocked": false }, "message": "Contacto desbloqueado correctamente" }
Historial de mensajes almacenados en BD para un contacto, orden descendente.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
page | number | No | Página (default: 1) |
limit | number | No | Registros por página (default: 50) |
{
"success": true,
"data": [
{ "id": "msg-abc123", "content": "Hola", "direction": "INBOUND", "isRead": true, "timestamp": "2026-05-26T10:00:00.000Z" }
],
"pagination": { "page": 1, "limit": 50, "total": 10, "totalPages": 1 }
}
Conteos generales sobre los contactos en la base de datos.
{
"success": true,
"data": { "total": 350, "groups": 12, "blocked": 5, "recent": 28 }
}
recent indica contactos creados en los últimos 7 días.Obtiene todas las etiquetas disponibles con conteo de contactos asignados.
{
"success": true,
"data": [
{ "id": "tag-abc123", "name": "Cliente VIP", "color": "#3B82F6", "_count": { "contacts": 45 } }
]
}
Crea una nueva etiqueta para organizar contactos.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre único de la etiqueta |
color | string | No | Color hex (default: #3B82F6) |
{ "success": true, "data": { "id": "tag-xyz789", "name": "Proveedor", "color": "#F59E0B" }, "message": "Etiqueta creada correctamente" }
Actualiza el nombre o color de una etiqueta existente.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | No | Nuevo nombre |
color | string | No | Nuevo color hex |
{ "success": true, "data": { "id": "tag-abc123", "name": "Cliente Premium", "color": "#8B5CF6" }, "message": "Etiqueta actualizada correctamente" }
Elimina una etiqueta. Las relaciones con contactos se eliminan automáticamente (CASCADE).
{ "success": true, "message": "Etiqueta eliminada correctamente" }
Asigna una etiqueta existente a un contacto.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
tagId | string | Sí | ID de la etiqueta a asignar |
{ "success": true, "data": { "id": "clxyz123", "tags": [{ "tag": { "id": "tag-abc", "name": "Cliente VIP" } }] }, "message": "Etiqueta asignada correctamente" }
Remueve una etiqueta asignada a un contacto.
{ "success": true, "data": { "id": "clxyz123", "tags": [] }, "message": "Etiqueta desasignada correctamente" }
Verifica si un número está registrado en WhatsApp en tiempo real.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión (debe estar conectada) |
{ "success": true, "data": { "phone": "+593991234567", "isRegistered": true } }
Obtiene información de un contacto directamente desde WhatsApp (nombre push, ID, etc.).
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
{
"success": true,
"data": { "id": "593991234567@c.us", "name": "Juan Pérez", "pushname": "Juancho", "isMyContact": true, "isWAContact": true }
}
Foto de perfil de un contacto desde WhatsApp. Consulta caché local primero; si no existe, consulta WhatsApp y actualiza la caché.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
{ "success": true, "data": { "profilePicUrl": "https://pps.whatsapp.net/v/t61.24694-24/abc123.jpg" } }
Actualiza en batch las fotos de perfil de todos los contactos en BD.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión conectada |
{ "success": true, "message": "Fotos sincronizadas", "data": { "updated": 45, "failed": 2, "total": 47 } }
Importa y actualiza la lista de contactos desde WhatsApp hacia la base de datos local.
{
"success": true,
"data": { "synced": 120, "created": 15, "updated": 105, "failed": 0 },
"message": "120 contactos sincronizados (15 nuevos, 105 actualizados, 0 fallidos)"
}
Analiza el tipo de un ID de chat o contacto. Útil para depuración y validación de IDs de WhatsApp.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
{
"success": true,
"data": { "id": "593991234567@c.us", "type": "contact", "isValid": true, "phoneNumber": "593991234567", "isGroup": false }
}
Envío, consulta y gestión de mensajes de WhatsApp almacenados en la base de datos local.
Lista paginada de mensajes en BD con filtros opcionales.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | No | Filtrar por sesión |
chatId | string | No | Filtrar por chat (también acepta contactId) |
page | number | No | Página (default: 1) |
limit | number | No | Registros por página (default: 50) |
direction | string | No | INBOUND o OUTBOUND |
{
"success": true,
"data": [
{
"id": "msg-abc123", "content": "Hola mundo", "direction": "OUTBOUND",
"type": "TEXT", "isRead": true, "timestamp": "2026-05-26T10:00:00.000Z",
"contact": { "id": "clxyz123", "name": "Juan Pérez", "phoneNumber": "+593991234567" },
"session": { "id": "session-abc", "name": "Mi sesión" }
}
],
"pagination": { "page": 1, "limit": 50, "total": 200, "totalPages": 4 }
}
Envía un mensaje de texto o multimedia. Usuarios FREE tienen límite diario; usuarios PRO son ilimitados.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
chatId | string | Sí* | ID del chat o número de teléfono (también acepta phoneNumber) |
content | string | Sí** | Texto del mensaje |
mediaUrl | string | No | URL de imagen/video/audio o Base64 |
mediaFilename | string | No | Nombre del archivo adjunto |
quotedMessageId | string | No | ID del mensaje citado (reply) |
sendAsVoice | boolean | No | Enviar audio como nota de voz |
content o mediaUrl son obligatorios; al menos uno debe estar presente.{
"sessionId": "session-abc123",
"chatId": "+593991234567",
"content": "Hola, ¿cómo estás?"
}
{
"success": true,
"data": { "id": "msg-newxyz", "content": "Hola, ¿cómo estás?", "direction": "OUTBOUND", "type": "TEXT" },
"message": "Mensaje enviado correctamente"
}
Información detallada de un mensaje por su ID interno.
{
"success": true,
"data": {
"id": "msg-abc123", "content": "Hola mundo", "direction": "OUTBOUND",
"contact": { "name": "Juan Pérez", "phoneNumber": "+593991234567" }
}
}
Marca un mensaje como leído en BD (isRead = true).
{ "success": true, "message": "Mensaje marcado como leído" }
Elimina un mensaje de la BD local permanentemente.
{ "success": true, "message": "Mensaje eliminado correctamente" }
Conteos estadísticos con filtros opcionales por sesión, chat y fechas.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | No | Filtrar por sesión |
chatId | string | No | Filtrar por chat |
startDate | string | No | Fecha inicial ISO 8601 |
endDate | string | No | Fecha final ISO 8601 |
{ "success": true, "data": { "total": 1500, "sent": 900, "received": 600, "unread": 45 } }
Programa el envío de un mensaje a múltiples destinatarios. Se encola y procesa de forma asíncrona.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
contacts | array | Sí | Array de números de teléfono (mínimo 1) |
content | string | Sí | Contenido del mensaje |
mediaUrl | string | No | URL del multimedia a adjuntar |
{
"sessionId": "session-abc123",
"contacts": ["+593991234567", "+593987654321"],
"content": "Hola, tenemos una promoción especial para ti."
}
{ "success": true, "message": "Envío masivo programado para 2 contactos", "data": { "totalContacts": 2, "status": "queued" } }
Envía una reacción emoji a un mensaje de WhatsApp. Para eliminar la reacción, envía reaction: "".
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
reaction | string | Sí | Emoji (ej: "ðŸ‘", "â¤ï¸", "" para eliminar) |
{ "success": true, "message": "Reacción enviada correctamente" }
Reenvía un mensaje existente a otro chat.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
sessionId | string | Sí | ID de la sesión |
toChatId | string | Sí | ID del chat destino |
{ "success": true, "message": "Mensaje reenviado correctamente" }
Gestión completa del ciclo de vida de campañas de envío masivo: creación, destinatarios, control, adjuntos y análisis.
Lista paginada de campañas con filtros por estado y sesión.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
status | string | No | DRAFT SCHEDULED RUNNING PAUSED COMPLETED CANCELLED FAILED |
sessionId | string | No | Filtrar por sesión |
page | number | No | Página (default: 1) |
limit | number | No | Registros por página (1–50, default: 20) |
{
"campaigns": [
{ "id": "camp-abc123", "name": "Promo Mayo 2026", "status": "DRAFT", "totalRecipients": 150, "sentCount": 0 }
],
"total": 8, "page": 1, "totalPages": 1
}
Detalles y estadísticas de una campaña. Opcionalmente incluye lista previa de destinatarios.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
includeRecipients | boolean | No | Incluir lista previa de destinatarios |
recipientsLimit | number | No | Cantidad a incluir (1–100, default: 50) |
{
"id": "camp-abc123", "name": "Promo Mayo 2026", "status": "RUNNING",
"totalRecipients": 150, "sentCount": 75, "deliveredCount": 70, "readCount": 40, "failedCount": 5
}
Crea una nueva campaña en estado DRAFT. Agrega destinatarios en pasos posteriores.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre descriptivo |
sessionId | string | Sí | ID de la sesión a usar |
messageContent | string | Sí | Contenido del mensaje. Soporta variables: {{name}}, {{phone}} |
description | string | No | Descripción de la campaña |
sendingConfig | object | No | Configuración de envío |
{
"name": "Promo Junio 2026",
"sessionId": "session-abc123",
"messageContent": "Hola {{name}}, tienes un descuento especial.",
"sendingConfig": { "delaySeconds": 5, "maxRetries": 3 }
}
{ "id": "camp-newxyz", "name": "Promo Junio 2026", "status": "DRAFT", "totalRecipients": 0 }
Actualiza los datos de una campaña. Solo funciona en estado DRAFT.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | No | Nuevo nombre |
messageContent | string | No | Nuevo contenido |
description | string | No | Nueva descripción |
sendingConfig | object | No | Nueva configuración de envío |
Elimina permanentemente una campaña y todos sus datos. No se pueden eliminar campañas en estado RUNNING.
{ "success": true, "message": "Campaña eliminada exitosamente" }
Inicia el proceso de envío. La campaña pasa al estado RUNNING.
{ "success": true, "message": "Campaña iniciada" }
Pausa temporalmente el envío. Estado pasa a PAUSED.
{ "success": true, "message": "Campaña pausada" }Reanuda el envío de una campaña pausada. Estado vuelve a RUNNING.
{ "success": true, "message": "Campaña reanudada" }Cancela permanentemente. Estado pasa a CANCELLED y no puede reiniciarse.
{ "success": true, "message": "Campaña cancelada" }Programa la campaña para iniciarse automáticamente en una fecha futura.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
startAt | string | Sí | Fecha/hora ISO 8601 (ej: 2026-06-01T09:00:00.000Z) |
{ "success": true, "message": "Campaña programada exitosamente" }Cancela la programación, regresando la campaña al estado DRAFT.
{ "success": true, "message": "Programación cancelada" }Agrega uno o más destinatarios a una campaña existente.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
recipients | array | Sí | Array de destinatarios con al menos phoneNumber |
{
"recipients": [
{ "phoneNumber": "+593991234567", "name": "Juan Pérez" },
{ "phoneNumber": "+593987654321", "name": "María García" }
]
}
{ "success": true, "message": "Destinatarios agregados correctamente" }Lista paginada de destinatarios con filtro por estado de envío.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
status | string | No | PENDING SENDING SENT DELIVERED READ FAILED SKIPPED |
page | number | No | Página (default: 1) |
limit | number | No | Registros por página (default: 50) |
{
"recipients": [
{ "id": "recip-abc", "phoneNumber": "+593991234567", "name": "Juan Pérez", "status": "DELIVERED" }
],
"total": 150, "page": 1, "totalPages": 3
}
Restablece destinatarios fallidos a PENDING para reintento. Usa /resume después para continuar.
{ "success": true, "message": "12 destinatarios reseteados. Usa /resume para continuar.", "retriedCount": 12 }
Exporta los resultados como archivo descargable. La respuesta es un archivo binario (Content-Disposition: attachment).
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
format | string | No | excel (default) o csv |
Métricas avanzadas y análisis de desempeño de la campaña.
{
"deliveryRate": 95.3, "readRate": 62.1, "failureRate": 4.7, "avgDeliveryTimeMs": 3200,
"statusBreakdown": { "SENT": 150, "DELIVERED": 143, "READ": 93, "FAILED": 7 }
}
Métricas de rendimiento en tiempo real de una campaña en ejecución.
{ "messagesPerMinute": 12.5, "estimatedTimeRemainingMs": 180000, "progress": 0.5, "currentStatus": "RUNNING" }
Logs de eventos de la campaña, filtrable por severidad.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
level | string | No | info, warn o error |
page | number | No | Página |
limit | number | No | Registros (default: 100) |
{
"logs": [{ "id": "log-abc", "level": "info", "message": "Mensaje enviado a +593991234567", "timestamp": "2026-05-10T09:05:00.000Z" }],
"total": 150, "page": 1, "totalPages": 2
}
Sube un archivo adjunto a la campaña. Content-Type: multipart/form-data. Tamaño máximo: 10 MB.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
file | file | Sí | Archivo a subir (imagen, video, audio, PDF, Excel, CSV) |
messageIndex | number | No | Índice del mensaje (default: 0) |
{ "id": "attach-abc123", "campaignId": "camp-abc123", "filename": "promocion.jpg", "mimeType": "image/jpeg", "size": 204800, "type": "IMAGE" }
Obtiene la lista de archivos adjuntos de una campaña.
[{ "id": "attach-abc123", "filename": "promocion.jpg", "mimeType": "image/jpeg", "size": 204800, "type": "IMAGE" }]
Cambia manualmente el tipo de un adjunto cuando la detección automática no es correcta.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
type | string | Sí | IMAGE, VIDEO, AUDIO o DOCUMENT |
{ "id": "attach-abc123", "type": "DOCUMENT", "filename": "contrato.pdf" }
Elimina un adjunto de la campaña.
{ "success": true }Reinicializa una campaña completada o cancelada: resetea contadores y destinatarios a PENDING, y cambia a estado DRAFT. Útil para reutilizar una campaña con los mismos destinatarios.
{ "success": true, "message": "Campaña reinicializada exitosamente. Ahora está en estado DRAFT y lista para volver a ejecutarse." }
Gestión del ciclo de vida de sesiones de WhatsApp: creación, conexión, QR, pairing code y eliminación.
Obtiene todas las sesiones del usuario con su estado actual.
{
"success": true,
"data": [
{ "id": "session-abc123", "name": "Mi negocio", "status": "connected", "phoneNumber": "+593991234567" }
]
}
connected, disconnected, connecting, qr_code, pairing_code_requestedConteo y lista de sesiones actualmente conectadas.
{ "success": true, "data": { "activeCount": 2, "activeSessions": [{ "id": "session-abc123", "name": "Mi negocio", "status": "connected" }] } }
Crea una nueva sesión de WhatsApp. Plan FREE: 1 sesión. Planes PRO: hasta 10.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre descriptivo de la sesión |
{ "success": true, "data": { "id": "session-newxyz", "name": "Tienda Norte", "status": "disconnected" }, "message": "Sesión creada correctamente" }
Datos de una sesión específica por su ID.
{ "success": true, "data": { "id": "session-abc123", "name": "Mi negocio", "status": "connected", "phoneNumber": "+593991234567" } }
Estado actual de una sesión específica.
{ "success": true, "data": { "id": "session-abc123", "status": "connected", "phoneNumber": "+593991234567" } }
QR code para vincular WhatsApp. Solo disponible después de llamar a /connect.
{ "success": true, "data": { "qrCode": "data:image/png;base64,iVBORw0KGgo...", "sessionId": "session-abc123" } }
Inicia el proceso de conexión. Genera un QR disponible en /qr para escanear con WhatsApp móvil.
{ "success": true, "message": "Conexión iniciada. Escanea el QR code cuando aparezca.", "data": { "status": "connecting" } }
Desconecta la sesión sin eliminarla ni cerrar sesión en WhatsApp.
{ "success": true, "message": "Sesión desconectada", "data": { "status": "disconnected" } }
Reinicia el cliente de WhatsApp sin hacer logout. Mantiene la autenticación y reconecta automáticamente sin nuevo QR.
{ "success": true, "data": { "status": "connected" } }
Solicita un código de 8 caracteres para vincular WhatsApp sin QR. El código aparece en la app móvil: Configuración → Dispositivos vinculados → Vincular con número.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
phoneNumber | string | Sí | Número en formato internacional sin + (ej: 5939XXXXXXXX) |
{ "success": true, "message": "Pairing code solicitado. Revisa tu WhatsApp móvil.", "data": { "status": "pairing_code_requested" } }
Elimina permanentemente la sesión incluyendo datos de autenticación. No puede deshacerse.
{ "success": true, "message": "Sesión eliminada correctamente" }
Registro y gestión de webhooks para recibir notificaciones de eventos de WhatsApp en tiempo real en una URL externa.
Obtiene todos los webhooks registrados, ordenados por fecha de creación.
{
"success": true,
"data": [
{
"id": "wh-abc123", "name": "Mi servidor",
"url": "https://mi-servidor.com/webhook",
"events": ["message:received", "session:disconnected"],
"isActive": true, "failureCount": 0
}
]
}
sessionIds vacío significa que el webhook recibe eventos de todas las sesiones.Registra un nuevo webhook para recibir notificaciones de eventos de WhatsApp.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre descriptivo |
url | string | Sí | URL pública de destino |
events | array | Sí | Array de eventos a escuchar |
sessionIds | array | No | IDs de sesiones a filtrar (vacío = todas) |
secret | string | No | Clave para firma X-Massiva-Signature |
| Evento | Descripción |
|---|---|
message:received | Mensaje entrante recibido |
message:sent | Mensaje enviado confirmado |
message:delivered | Mensaje entregado al destinatario |
message:read | Mensaje leído por el destinatario |
session:connected | Sesión conectada a WhatsApp |
session:disconnected | Sesión desconectada |
session:qr | Nuevo QR code generado |
{
"name": "CRM Integration",
"url": "https://mi-crm.com/api/webhooks/massiva",
"events": ["message:received", "session:disconnected"],
"sessionIds": ["session-abc123"],
"secret": "mi-clave-secreta-segura"
}
{
"success": true,
"data": { "id": "wh-newxyz", "name": "CRM Integration", "url": "https://mi-crm.com/api/webhooks/massiva", "isActive": true }
}
Actualiza la configuración de un webhook. Solo se actualizan los campos enviados.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | No | Nuevo nombre |
url | string | No | Nueva URL |
events | array | No | Nueva lista de eventos |
isActive | boolean | No | Activar/desactivar. Al reactivar se resetea el contador de fallos |
secret | string | No | Nueva clave secreta |
{ "success": true, "data": { "id": "wh-abc123", "name": "CRM Actualizado", "isActive": true, "failureCount": 0 } }
Elimina permanentemente un webhook registrado.
{ "success": true }Envía un evento de prueba (test.event) a la URL del webhook para verificar conectividad.
{ "success": true, "message": "Test event queued" }
{
"event": "test.event",
"data": { "message": "This is a test event from Massiva", "triggeredBy": "user-id" },
"timestamp": "2026-05-26T10:00:00.000Z"
}
Revisa el API Tester integrado en la aplicación o contáctanos.