WhatsApp Hub API
API REST para enviar mensajes de WhatsApp y gestionar conexiones multi-tenant. Permite que tus aplicaciones envíen notificaciones, alertas y mensajes a través de WhatsApp sin que el usuario final necesite configurar nada con Meta.
https://wa.pocus.com.ar
Dos canales disponibles
| Canal | Descripción | Cuándo usarlo |
|---|---|---|
evolution | QR de WhatsApp (no oficial) | Onboarding simple, notificaciones internas, clientes sin Meta App |
meta | Meta Cloud API (oficial) | Bots, flujos Typebot, volúmenes altos, cumplimiento total |
Autenticación
Todos los endpoints de la Tenant API requieren una API key en el header x-api-key. Los endpoints Admin requieren el token de administrador en x-admin-token.
| Header | Descripción | Endpoints |
|---|---|---|
x-api-key | API key del tenant | Tenant API |
x-admin-token | Token de administrador | Admin API |
# Ejemplo con curl curl -X POST https://wa.pocus.com.ar/api/v1/send \ -H "x-api-key: pk_tu_api_key_aqui" \ -H "Content-Type: application/json" \ -d '{"to": "5491112345678", "message": "Hola!"}'
Errores
| Código | Descripción |
|---|---|
400 | Parámetros faltantes o inválidos |
401 | API key inválida o ausente |
404 | Recurso no encontrado |
429 | Rate limit excedido |
500 | Error interno (ver campo error en la respuesta) |
{
"ok": false,
"error": "Descripción del error"
}
Conectar WhatsApp
Inicia el proceso de conexión. Si el número no está conectado, devuelve un QR en base64 para escanear con el celular. Si ya está conectado, devuelve already_connected.
Respuesta exitosa — QR listo
{
"ok": true,
"status": "qr_ready",
"qr": {
"base64": "data:image/png;base64,...",
"code": "2@xxx..."
}
}
Respuesta — ya conectado
{
"ok": true,
"status": "already_connected",
"message": "Ya conectado"
}
<img src="${qr.base64}">Estado de conexión
Devuelve el estado actual de la conexión WhatsApp.
{
"ok": true,
"status": "open", // "open" | "close" | "connecting" | "disconnected"
"connected": true
}
Enviar mensaje
Envía un mensaje de WhatsApp a un número de teléfono.
Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | REQUERIDO | Número en formato internacional sin + (ej: 5491112345678) |
message | string | REQUERIDO | Texto del mensaje |
type | string | opcional | text (default) |
{
"to": "5491112345678",
"message": "Tu pedido #1234 fue confirmado. Total: $5.000"
}
Respuesta exitosa
{
"ok": true,
"result": { "key": { "id": "ABC123..." } }
}
Desconectar
Desconecta el WhatsApp asociado al tenant. El QR se invalida y hay que volver a escanear para reconectar.
{ "ok": true }
Listar tenants
Devuelve todos los tenants con stats de uso. La API key aparece truncada (pk_xxxxxx...).
Crear tenant
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | REQUERIDO | Nombre del cliente |
description | string | opcional | Descripción del uso |
channel | string | opcional | evolution (default) o meta |
phoneNumber | string | opcional | Número de teléfono asociado |
Respuesta
{
"ok": true,
"tenant": {
"id": "uuid",
"name": "Univet",
"apiKey": "pk_abc123...", // guardar ahora, no se vuelve a mostrar completa
"channel": "evolution",
"active": true,
"createdAt": "2026-03-24T..."
}
}
Actualizar tenant
Actualiza campos del tenant. También podés desactivarlo temporalmente con active: false.
{
"active": false // suspende el acceso sin eliminar
}
Eliminar tenant
Elimina el tenant y desconecta su instancia de WhatsApp. Irreversible.
Ver logs de uso
Devuelve los últimos eventos del tenant. Query param ?limit=N (default 50, max 500).
[
{ "ts": "2026-03-24T12:00:00Z", "action": "message_sent", "to": "5491112345678" },
{ "ts": "2026-03-24T11:55:00Z", "action": "connect_qr_requested" }
]
Regenerar API key
Genera una nueva API key. La anterior deja de funcionar inmediatamente.
{ "ok": true, "apiKey": "pk_nueva_key..." }
Guía: Flujo QR completo
Para conectar el WhatsApp de tu usuario y luego enviarle mensajes:
Paso 1 — Obtener QR
// En tu backend const res = await fetch('https://wa.pocus.com.ar/api/v1/connect', { method: 'POST', headers: { 'x-api-key': 'pk_tu_key' } }) const data = await res.json() // data.qr.base64 → mostrar como imagen al usuario
Paso 2 — Mostrar QR al usuario
<!-- En tu frontend -->
<img src="${data.qr.base64}" alt="Escaneá con WhatsApp" />
<p>Abrí WhatsApp → Dispositivos vinculados → Vincular dispositivo</p>
Paso 3 — Verificar conexión
const status = await fetch('https://wa.pocus.com.ar/api/v1/status', {
headers: { 'x-api-key': 'pk_tu_key' }
})
const { connected } = await status.json()
if (connected) console.log('✅ WhatsApp conectado')
Paso 4 — Enviar notificaciones
await fetch('https://wa.pocus.com.ar/api/v1/send', {
method: 'POST',
headers: { 'x-api-key': 'pk_tu_key', 'Content-Type': 'application/json' },
body: JSON.stringify({
to: '5491112345678',
message: 'Tu pedido #1234 fue confirmado 🎉'
})
})
Guía: Notificaciones WooCommerce
Enviá una notificación automática cuando se genera un pedido nuevo.
// functions.php de tu tema o plugin custom add_action('woocommerce_checkout_order_processed', function($order_id) { $order = wc_get_order($order_id); $phone = $order->get_billing_phone(); $phone = preg_replace('/[^0-9]/', '', $phone); // limpiar formato $msg = "Hola {$order->get_billing_first_name()}! Tu pedido #{$order_id} fue recibido. Total: $" . $order->get_total(); wp_remote_post('https://wa.pocus.com.ar/api/v1/send', [ 'headers' => [ 'x-api-key' => 'pk_tu_key_aqui', 'Content-Type' => 'application/json', ], 'body' => json_encode(['to' => $phone, 'message' => $msg]), ]); });