Resumen
Los webhooks te permiten recibir notificaciones en tiempo real cuando cambia el estado de verificación KYC. Gu1 envía automáticamente solicitudes HTTP POST a tu endpoint webhook configurado cada vez que se actualiza el estado de una validación.¿Por Qué Usar Webhooks?
Actualizaciones en Tiempo Real
Recibe notificaciones instantáneas cuando cambia el estado de verificación
Eficiente
No necesitas consultar la API repetidamente
Flujos Automáticos
Actualiza automáticamente cuentas de usuario según los resultados de verificación
Mejor UX
Notifica a los clientes inmediatamente después de la verificación
Eventos de Webhook
Gu1 envía webhooks para los siguientes eventos de validación KYC:| Tipo de Evento | Descripción | Cuándo se Dispara |
|---|---|---|
kyc.validation_created | Sesión de validación creada | Cuando creas una nueva validación KYC |
kyc.validation_in_progress | Cliente inició verificación | Cliente comienza el proceso de verificación |
kyc.validation_approved | Verificación aprobada | Identidad verificada exitosamente |
kyc.validation_rejected | Verificación rechazada | Verificación de identidad falló |
kyc.validation_abandoned | Cliente abandonó el proceso | Cliente abandonó sin completar |
kyc.validation_expired | Sesión de validación expiró | Sesión expiró (típicamente después de 7 días) |
Configurar Webhooks
Paso 1: Configurar Webhook en el Dashboard
Configura la URL de tu webhook en el dashboard de Gu1:-
Navega a Configuración de Webhooks
- Inicia sesión en tu dashboard de Gu1
- Ve a Configuración → Webhooks
-
Crear Nuevo Webhook
- Haz clic en Agregar Webhook o Crear Webhook
- Ingresa un nombre descriptivo (ej., “Webhook KYC Producción”)
- Ingresa la URL de tu webhook (debe ser HTTPS):
https://tuapp.com/webhooks/kyc
-
Seleccionar Ambiente
- Elige Sandbox para pruebas
- Elige Producción para eventos en vivo
-
Suscribirse a Eventos
- Selecciona todos los eventos KYC o específicos:
kyc.validation_createdkyc.validation_in_progresskyc.validation_approvedkyc.validation_rejectedkyc.validation_abandonedkyc.validation_expired
- Selecciona todos los eventos KYC o específicos:
-
Guardar tu Secreto
- Se generará automáticamente un secreto de webhook
- Copia y guarda este secreto - lo necesitarás para verificar las firmas de webhook
- No podrás verlo nuevamente (pero puedes regenerarlo después)
-
Activar el Webhook
- Activa el webhook marcándolo como Habilitado
- Haz clic en Guardar
Puedes crear webhooks separados para los ambientes sandbox y producción con URLs diferentes.
Paso 2: Crear un Endpoint de Webhook
Crea un endpoint en tu aplicación para recibir solicitudes POST de webhook:Paso 3: Hacer tu Endpoint Públicamente Accesible
Tu endpoint de webhook debe:- Ser públicamente accesible vía HTTPS
- Poder recibir solicitudes POST
- Retornar código de estado 200 rápidamente (dentro de 30 segundos)
Para desarrollo local, usa herramientas como ngrok para crear una URL pública que haga túnel a tu servidor local.
Seguridad: Verificar Firmas de Webhook
Siempre verifica las firmas de webhook para asegurar que las solicitudes provienen de Gu1.Cómo Funciona la Verificación de Firmas
- Gu1 genera una firma HMAC SHA-256 del payload del webhook usando tu secreto
- La firma se envía en el header
X-Webhook-Signature - Tu servidor recalcula la firma usando el mismo secreto
- Compara las firmas - si coinciden, el webhook es auténtico
Ejemplos de Verificación de Firma
Headers HTTP
Cada solicitud de webhook incluye estos headers:| Header | Descripción | Ejemplo |
|---|---|---|
Content-Type | Siempre application/json | application/json |
X-Webhook-Event | Tipo de evento | kyc.validation_approved |
X-Webhook-ID | ID de configuración del webhook | 550e8400-e29b-41d4-a716-446655440000 |
X-Webhook-Timestamp | Timestamp ISO 8601 | 2025-01-15T10:30:00.000Z |
X-Webhook-Signature | Firma HMAC SHA-256 | abc123... |
Estructura del Payload de Webhook
Todos los webhooks siguen esta estructura estándar:Campos Comunes del Payload
El tipo de evento (ej.,
kyc.validation_approved)Timestamp ISO 8601 cuando ocurrió el evento
Tu ID de organización
El ID de validación KYC en Gu1
El ID de entidad (persona) siendo verificada
Información de la entidad incluyendo tu
externalId para fácil búsquedaEstado actual de validación:
pending, in_progress, approved, rejected, abandoned, expiredPayloads Específicos por Evento
kyc.validation_created
Enviado cuando se crea una nueva validación KYC.kyc.validation_in_progress
Enviado cuando un cliente inicia el proceso de verificación.kyc.validation_approved
Enviado cuando la verificación se completa exitosamente.verifiedAt: Timestamp cuando se aprobó la verificaciónextractedData: Información personal extraída del documentoverifiedFields: Array de campos que fueron verificados exitosamentewarnings: Array de advertencias detectadas durante la verificacióndecision: Resultados de verificación (imágenes/URLs removidas por seguridad)
kyc.validation_rejected
Enviado cuando la verificación falla.kyc.validation_abandoned
Enviado cuando un cliente inicia pero no completa la verificación.kyc.validation_expired
Enviado cuando una sesión de validación expira sin completarse.Política de Reintentos
Si tu endpoint de webhook falla en responder con un código de estado 2xx, Gu1 automáticamente reintentará la entrega. Política de Reintentos Predeterminada:- Reintentos Máximos: 3 intentos
- Delay Inicial: 1000ms (1 segundo)
- Multiplicador de Backoff: 2x
- Secuencia de Reintentos: 1s → 2s → 4s
- Intento inicial en
T+0s - Primer reintento en
T+1s - Segundo reintento en
T+3s(1s + 2s) - Tercer reintento en
T+7s(1s + 2s + 4s)
- Códigos de estado HTTP 200-299 se consideran exitosos
- Cualquier otro código de estado o error de red dispara un reintento
- Cada intento tiene un timeout de 30 segundos
- Si tu endpoint no responde dentro de 30 segundos, el intento se marca como fallido
Mejores Prácticas
Retornar 200 Rápidamente
Retornar 200 Rápidamente
Siempre retorna un código de estado 200 lo más rápido posible para confirmar la recepción. Procesa el webhook asincrónicamente si es necesario.
Verificar Firmas
Verificar Firmas
Siempre verifica el header
X-Webhook-Signature para asegurar que el webhook es auténtico.Manejar Idempotencia
Manejar Idempotencia
Podrías recibir el mismo webhook múltiples veces. Usa el
validationId para asegurar que procesas cada evento solo una vez.Usar entity.externalId para Búsqueda
Usar entity.externalId para Búsqueda
El webhook incluye
entity.externalId que es el ID que proporcionaste al crear la entidad. Úsalo para buscar al cliente en tu base de datos.Almacenar IDs de Validación
Almacenar IDs de Validación
Almacena el
validationId de Gu1 en tu base de datos. Esto te permite consultar detalles de validación después si es necesario.Manejar Errores Graciosamente
Manejar Errores Graciosamente
Si el procesamiento falla, registra el error pero aún así retorna 200 para prevenir reintentos. Almacena webhooks fallidos para revisión manual.
Usar Webhooks Específicos por Ambiente
Usar Webhooks Específicos por Ambiente
Crea configuraciones de webhook separadas para los ambientes sandbox y producción.
- Sandbox: Usar para pruebas con datos de prueba
- Producción: Usar para verificaciones de clientes en vivo
Probar Webhooks
Probar en el Dashboard
- Ve a Configuración → Webhooks
- Selecciona tu webhook
- Haz clic en Probar Webhook
- Gu1 enviará un evento de prueba a tu endpoint
- Verifica el estado de respuesta y logs
Desarrollo Local
Usa ngrok para exponer tu servidor local:Flujo de Prueba
- Crea un webhook sandbox apuntando a tu endpoint de desarrollo
- Crea una validación KYC de prueba
- Tu endpoint de webhook recibe
kyc.validation_created - Completa la verificación (o simula diferentes resultados)
- Tu endpoint de webhook recibe actualizaciones de estado
Monitoreo y Debugging
Logs de Webhook
Ver historial de entrega de webhook en tu dashboard:- Ve a Configuración → Webhooks
- Selecciona tu webhook
- Haz clic en Ver Logs o Historial
- Timestamp de cada intento de entrega
- Código de estado HTTP recibido
- Body de respuesta
- Tiempo de respuesta
- Mensajes de error (si hay)
- Intentos de reintento
Estadísticas de Webhook
Cada webhook muestra:- Disparos Totales: Número total de veces que se disparó el webhook
- Conteo de Éxitos: Entregas exitosas
- Conteo de Fallos: Entregas fallidas
- Último Disparado: Timestamp del último intento
- Último Éxito: Timestamp de última entrega exitosa
- Último Fallo: Timestamp de último fallo
Solución de Problemas
No Recibir Webhooks
No Recibir Webhooks
Verifica estos elementos:
- URL del webhook es públicamente accesible vía HTTPS
- Firewall permite solicitudes POST entrantes de Gu1
- Endpoint retorna código de estado 200 dentro de 30 segundos
- Webhook está configurado y habilitado en el dashboard
- Ambiente correcto seleccionado (sandbox vs producción)
- Verifica logs del servidor para solicitudes entrantes
- Verifica que el webhook está suscrito a los tipos de evento correctos
Verificación de Firma Fallando
Verificación de Firma Fallando
Causas comunes:
- Usando secreto incorrecto (verifica el dashboard para el secreto actual)
- Verificando firma en JSON parseado en lugar de body raw
- Secreto no guardado correctamente después de crear webhook
- Problemas de codificación (asegurar UTF-8)
Recibir Webhooks Duplicados
Recibir Webhooks Duplicados
Este es un comportamiento normal. Los webhooks pueden enviarse múltiples veces debido a:
- Problemas de red
- Timeouts
- Reintentos después de fallos
validationId del webhook y el tipo de event.Endpoint de Webhook con Timeout
Endpoint de Webhook con Timeout
Tu endpoint debe responder dentro de 30 segundos. Si el procesamiento toma más tiempo:
Falta extractedData
Falta extractedData
extractedData y verifiedFields solo se incluyen en:kyc.validation_approvedkyc.validation_rejected
validation_created o validation_in_progress.Secreto de Webhook Perdido
Secreto de Webhook Perdido
Si perdiste tu secreto de webhook:
- Ve a Configuración → Webhooks
- Selecciona tu webhook
- Haz clic en Regenerar Secreto
- Guarda el nuevo secreto en tus variables de entorno
- Actualiza tu aplicación con el nuevo secreto