Para desarrolladores
WhatsApp en tu software con una API que se explica sola
REST y JSON, autenticación por Bearer, idempotencia en los envíos, errores legibles y webhooks firmados. Tú escribes la integración; nosotros mantenemos la infraestructura de conexión.
https://api.waqr.app/v1
-
Claves con permisos acotados
Cada clave de API tiene los permisos que tú eliges y accede solo a las conexiones que autorices. Se muestran una vez y se pueden rotar o revocar.
-
Idempotencia en cada envío
Los POST que envían mensajes exigen Idempotency-Key. Si reintentas, no se duplica el mensaje.
-
Errores que se entienden
Respuestas application/problem+json (RFC 9457) con código, detalle y X-Request-Id para rastrear cualquier petición.
-
Webhooks firmados
Cada entrega va firmada con HMAC-SHA256 y marca de tiempo. Reintentos con backoff si tu servidor no responde.
-
Límites visibles
Cabeceras RateLimit-* en cada respuesta y 429 con Retry-After cuando tocas el límite de tu plan.
-
Paginación por cursor
Listados estables con cursor opaco, pensados para sincronizar sin perder ni repetir registros.
Enviar un mensaje
Una petición. Un mensaje en camino.
Indicas la conexión, el destinatario en formato E.164 y el contenido. La respuesta trae el id del mensaje y su estado inicial; el resto llega por webhook.
curl -X POST https://api.waqr.app/v1/connections/conn_01J9ZQ4V8K/messages \
-H "Authorization: Bearer wqk_live_xxx" \
-H "Idempotency-Key: 6c4e2a8e-1f0b-4c7a-9b2e-0f1d2c3b4a5f" \
-H "Content-Type: application/json" \
-d '{
"to": "+51987654321",
"type": "text",
"text": "Hola, tu pedido está listo."
}' {
"id": "msg_01J9ZQ5C2M",
"conversationId": "conv_01J9ZQ3T7A",
"status": "pending",
"createdAt": "2026-10-14T15:04:05Z"
} Webhooks
Recibe eventos en tiempo real
Registra un endpoint HTTPS desde el panel y elige qué eventos quieres: mensajes recibidos, enviados, cambios de estado, cambios en la conexión y revocaciones.
- 1 Recalcula HMAC-SHA256 de «{t}.{cuerpo crudo}» con tu secreto y compara en tiempo constante.
- 2 Rechaza entregas con una marca de tiempo de más de 5 minutos.
- 3 Deduplica con WAQR-Delivery o con el id del evento: la entrega es at-least-once.
POST https://tu-sistema.example/webhooks/waqr
Content-Type: application/json
WAQR-Event: message.received
WAQR-Delivery: dlv_0192a3b4c5d6
WAQR-Signature: t=1760454245,v1=5f2b9c… import { createHmac, timingSafeEqual } from "node:crypto";
export function verifyWaqrSignature(rawBody: string, header: string, secret: string) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
return fresh && timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
} Recursos
Lo esencial de la API v1
- GET
/connectionsConexiones a las que tiene acceso tu clave y su estado. - POST
/connections/{id}/messagesEnvía texto o archivos. Requiere Idempotency-Key. - GET
/conversationsConversaciones con filtros por conexión y estado, paginadas por cursor. - GET
/conversations/{id}/messagesHistorial de una conversación. - GET
/contactsContactos con búsqueda por nombre o número. - GET
/attachments/{id}/urlURL firmada y temporal para descargar un archivo. - POST
/webhook-endpointsRegistra un endpoint y recibe su secreto de firma. - GET
/webhook-endpoints/{id}/deliveriesÚltimas entregas, respuestas y errores de tu endpoint.
Documentación completa, en camino
La referencia generada desde OpenAPI y las guías paso a paso se publicarán junto con la beta. Mientras tanto, esta página y el panel tienen lo necesario para enviar tu primer mensaje; si te atascas, escríbenos.
Hablar con nosotrosTu WhatsApp no debería estar aislado de tus sistemas.
Conéctalo una vez y úsalo donde lo necesites.
¿Usas Emboxia, Zygore o AXEN? Conéctalo desde tu cuenta