Webhooks
Los webhooks te permiten recibir notificaciones HTTP en tiempo real cuando ocurren eventos en tu cuenta de Wisboo. Cuando un evento se dispara, Wisboo envía una solicitud POST con un cuerpo JSON a la URL que hayas configurado.
Las solicitudes se entregan de forma asíncrona. Si tu endpoint retorna un código de estado que no sea 2xx, la entrega se reintenta hasta 5 veces con el siguiente esquema:
Formato de la solicitud
Cada solicitud de webhook es un POST con Content-Type: application/json. El cuerpo siempre tiene la siguiente estructura:
Validación de la firma
Cada solicitud incluye un header Wisboo-Signature. Verificarlo confirma que la solicitud provino de Wisboo y que el cuerpo no fue alterado.
Formato del header
t— Timestamp Unix (en segundos) de cuándo se envió la solicitud.v1— Firma HMAC-SHA256 del payload firmado.
Pasos de verificación
- Extraer
tyv1del header. - Construir el payload firmado concatenando el timestamp, un
.literal y el cuerpo crudo de la solicitud: - Calcular un HMAC-SHA256 usando el secreto de tu endpoint y el payload firmado:
- Comparar
expectedcontrav1usando una comparación en tiempo constante para prevenir timing attacks. - Rechazar la solicitud si no coinciden, o si
testá muy alejado en el pasado (tolerancia recomendada: 5 minutos).
El secreto del endpoint comienza con whsec_ y se muestra una única vez al crear el endpoint.
Ejemplo (Ruby)
Ejemplo (Node.js)
Importante: siempre calcular el HMAC sobre los bytes crudos del cuerpo de la solicitud, antes de cualquier parseo de JSON.
Eventos soportados
Payloads por evento
user.created
Se dispara cuando un nuevo usuario se registra.
Ejemplo
product.sold
Se dispara cuando se completa la compra de un producto.
Campos principales
Objeto discount
null cuando no se aplicó ningún código de descuento.
Objeto product
Objeto user
Objeto checkout_session
Ejemplo
product.access_granted
Se dispara cuando un usuario obtiene acceso a un producto, independientemente del motivo (compra, asignación manual, inscripción gratuita, etc.).
Objeto product
Objeto user
Ejemplo
payment.succeeded
Se dispara cuando un pago se procesa exitosamente. Puede corresponder a una compra única, al cobro de una cuota o al pago de una suscripción.
Objeto product
Objeto user
Ejemplo
course.completed
Se dispara cuando un usuario completa un curso.
Objeto product
Objeto user
Ejemplo

