📱 documentación
WhatsApp API multi-tenant
La API usa el protocolo de WhatsApp Web (Baileys): no necesitás la API oficial de Meta ni un número verificado de empresa. Cada usuario (tenant) maneja sus propias sesiones, con credenciales cifradas en PostgreSQL — sin dependencia del filesystem.
Conectar una sesión
curl -X POST https://tudominio.com/api/v1/session/connect \
-H "x-api-key: TU_API_KEY"
El QR llega en tiempo real por WebSocket (Socket.IO, namespace /ws):
import { io } from 'socket.io-client';
const socket = io('https://tudominio.com/ws', {
query: { apiKey: 'TU_API_KEY' },
transports: ['websocket'],
});
socket.emit('session:join', { accountId: 'TU_ACCOUNT_ID' });
socket.on('session:qr', ({ qr }) => renderQr(qr));
socket.on('session:status', ({ status, phone }) => console.log(status, phone));
socket.on('message:received', ({ from, message }) => console.log(from, message));
Enviar mensajes
curl -X POST https://tudominio.com/api/v1/messages/send \
-H "x-api-key: TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "accountId": "...", "to": "5215512345678", "message": "Hola 👋" }'
Los mensajes entran a una cola (BullMQ + Redis) con delay aleatorio entre envíos — jitter anti-ban para no parecer un bot disparando a intervalos fijos.
| Endpoint | Descripción |
|---|---|
POST /api/v1/messages/send | Enviar un mensaje |
POST /api/v1/messages/bulk-send | Envío masivo (Premium) |
POST /api/v1/messages/typing | Indicador “escribiendo…” |
POST /api/v1/messages/presence | Presencia: composing, recording, available… |
GET /api/v1/messages/history/:accountId | Historial |
GET /api/v1/session/active/list | Sesiones activas |
DELETE /api/v1/session/:id | Desconectar sesión |
Webhooks de mensajes entrantes
Configurá tu webhookUrl en el dashboard y cada mensaje entrante se reenvía a tu
backend firmado con tu webhookSecret, para que construyas bots de respuesta.
Buenas prácticas anti-ban
- Mantené el delay de la cola (default 400 ms + jitter) — no lo bajes a cero.
- Calentá números nuevos: pocos mensajes los primeros días.
- Usá
typingantes de responder: comportamiento humano = menos riesgo.