📱 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.

EndpointDescripción
POST /api/v1/messages/sendEnviar un mensaje
POST /api/v1/messages/bulk-sendEnvío masivo (Premium)
POST /api/v1/messages/typingIndicador “escribiendo…”
POST /api/v1/messages/presencePresencia: composing, recording, available…
GET /api/v1/messages/history/:accountIdHistorial
GET /api/v1/session/active/listSesiones activas
DELETE /api/v1/session/:idDesconectar 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