Webhooks
Los webhooks te permiten recibir notificaciones en tiempo real cuando ocurren eventos en tu cuenta, en lugar de tener que consultar la API periódicamente.
Configuración
Crea un endpoint de webhook desde Ajustes → Desarrolladores → Webhooks, indicando la URL de destino (debe usar HTTPS) y los eventos a los que quieres suscribirte. Al crearlo se genera un secreto de firma que solo se muestra una vez.
Headers de cada entrega
| Header | Contenido |
|---|---|
| X-Lueira-Webhook-Event | Nombre del evento, p. ej. order.created |
| X-Lueira-Webhook-Id | UUID de la entrega — úsalo como clave de idempotencia |
| X-Lueira-Webhook-Timestamp | Momento de envío, en ISO 8601 |
| X-Lueira-Webhook-Signature | sha256=<hex> — HMAC-SHA256 de la petición |
| X-Lueira-Webhook-Tenant-Id | Tenant de origen |
| X-Lueira-Webhook-Version | v1 |
Verificar la firma
La firma es un HMAC-SHA256 calculado sobre la cadena {timestamp}.{cuerpo en bruto}, usando tu secreto de webhook como clave. Recalcúlala y compárala con X-Lueira-Webhook-Signature antes de procesar el evento; rechaza cualquier entrega cuyo timestamp tenga más de 5 minutos de antigüedad para evitar ataques de repetición.
const crypto = require("crypto");
function isValidSignature(secret, timestamp, rawBody, signatureHeader) {
const expected = crypto
.createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
return signatureHeader === `sha256=${expected}`;
}Reintentos y estado del endpoint
Si tu endpoint no responde con un código 2xx, la entrega se reintenta hasta 6 veces con espera exponencial (aprox. 1 min, 5 min, 30 min, 2 h, 6 h, 12 h). Tras 20 fallos consecutivos, el endpoint se deshabilita automáticamente y recibirás un aviso por email; puedes reactivarlo, reenviar entregas concretas o enviar un evento de prueba desde el panel.
Catálogo de eventos
| Evento | Descripción |
|---|---|
| order.created | Se ha creado un nuevo pedido o reserva. |
| order.updated | Cambios en un pedido existente. |
| order.cancelled | El pedido ha sido cancelado. |
| order.completed | El pedido ha sido completado. |
| customer.created | Se ha registrado un nuevo cliente. |
| customer.updated | Cambios en los datos del cliente. |
| payment.captured | Se ha capturado un pago. |
| payment.refunded | Se ha reembolsado un pago (total o parcial). |
| product.created | Se ha añadido un producto al catálogo. |
| product.updated | Cambios en el catálogo (precios, stock, etc.). |
| voucher.redeemed | Se ha canjeado un bono regalo. |
| invoice.issued | Se ha emitido una factura. |