v1 — REST API publica
Integra Wando con tus sistemas existentes. Lee mensajes pendientes, envia respuestas automaticas, consulta contactos y simula mensajes entrantes para testing.
Spec OpenAPI: importa toda la API en Postman o Insomnia con un clic usando https://tu-dominio.com/api/v1/openapi (en Postman: Import → pegar la URL).
Todos los endpoints requieren el header X-API-Key con una key valida. Las keys se generan desde Configuracion → API Keys en el panel de Wando.
curl -H "X-API-Key: tu-api-key-aqui" \ https://tu-dominio.com/api/v1/mensajes
Al crear la key elegis que puede hacer. Cada endpoint indica el permiso que exige:
leer — consultar mensajes, contactos y plantillas.escribir — registrar mensajes en la bandeja.enviar — mandar WhatsApp reales (respuestas y plantillas).Las keys pueden tener vencimiento (30/90/365 dias). Una key vencida devuelve 401; sin el permiso necesario, 403.
120 solicitudes por minuto por API key. Si te pasas, recibis 429 con el header Retry-After (segundos a esperar). Demasiados intentos con keys invalidas bloquean tu IP por 15 minutos.
Ademas de consultarnos por API, Wando puede avisarle a tu sistema cuando pasa algo: configuras una URL en Integraciones del panel (Make, Zapier, n8n o una URL propia), elegis los eventos, y te hacemos un POST con JSON cada vez que ocurren.
nuevo_mensaje — un cliente te escribio por WhatsApp.mensaje_aprobado — un agente aprobo y envio una respuesta.conversacion_escalada — un mensaje se marco como urgente / necesita un humano.chat_manual — alguien del equipo uso "Enviar a mi sistema" desde el chat (incluye los ultimos 10 mensajes y el link a la conversacion).Todos los eventos comparten esta base. sugerencia_ia solo viene en nuevo_mensaje (si la IA ya genero una); conversacion, mensajes y enviado_por solo en chat_manual.
{
"evento": "nuevo_mensaje",
"evento_id": "9f1b6c2e-...", // unico por evento, ESTABLE entre reintentos
"empresa_id": "uuid",
"contacto": {
"nombre": "Juan Perez",
"telefono": "+5491123456789",
"email": "juan@mail.com" // puede ser null
},
"mensaje": {
"texto": "Hola, quiero consultar...",
"timestamp": "2026-07-07T14:30:00Z"
},
"sugerencia_ia": "Hola Juan! ...", // opcional
// Solo en chat_manual:
"conversacion": { "id": "uuid", "link": "https://wando.online/admin?chat=..." },
"mensajes": [ { "tipo": "Recibido", "texto": "...", "timestamp": "..." } ],
"enviado_por": "Nombre del agente"
}Cada POST lleva dos headers: X-Wando-Event (el nombre del evento) y X-Wando-Signature = sha256=<hex>, el HMAC-SHA256 del body crudo calculado con el secret de tu integracion (lo ves en el panel, en Integraciones al editar el webhook). Verificalo asi (Node.js):
const crypto = require('crypto')
function esDeWando(bodyCrudo, headerFirma, secret) {
const esperada = 'sha256=' +
crypto.createHmac('sha256', secret).update(bodyCrudo).digest('hex')
return headerFirma?.length === esperada.length &&
crypto.timingSafeEqual(Buffer.from(headerFirma), Buffer.from(esperada))
}Importante: firma sobre los bytes exactos del body. Si tu framework parsea el JSON antes, usa el raw body (en Express: express.raw() o req.rawBody). La verificacion es opcional pero recomendada si tu URL hace algo sensible.
evento_id: si tu sistema ya lo proceso, ignora el duplicado (puede pasar que respondas lento y el envio cuente como fallo).chat_manual no reintenta — el que lo mando esta mirando y ve el error al instante.Content-Type: application/json./responder) solo se puede enviar si el cliente escribio en las ultimas 24 horas. Fuera de esa ventana, WhatsApp exige plantillas aprobadas (/send-template)./api/v1/mensajes/entrante es para testing. No genera sugerencia de IA ni dispara webhooks.Wando API v1 — Documentacion generada automaticamente