Skip to main content
Los webhooks permiten a tu sistema recibir notificaciones en tiempo real cuando ocurren eventos dentro de NUFI, evitando la necesidad de consultar continuamente la API. Cuando ocurre un evento, NUFI enviará una solicitud POST a la URL que configures junto con la información del evento.

Configuración

Para utilizar webhooks, debes:
  1. Definir una URL pública que pueda recibir solicitudes POST
  2. Configurar un secret para validar la autenticidad del webhook
  3. Seleccionar al menos un evento
Debes seleccionar al menos un evento para registrar un webhook.

Eventos disponibles

status_changed

Se dispara cuando cambia el estado general de un expediente (Ej: Pendiente, En Revisión, Completado).

document_submitted

Notifica cuando un documento es enviado o actualizado.

document_verdict

Se dispara cuando un documento recibe un veredicto (Aprobado/Rechazado).

document_verdict_v2

Se dispara cuando un documento recibe un veredicto con el detalle de cada validación aplicada.

channel_changed

Se activa cuando cambia el canal de comunicación o método de verificación.

section_feedback

Notifica cuando se actualiza una sección del expediente con retroalimentación.

document_json_export

Envía la información completa del expediente en formato JSON al finalizar el proceso.

authorized_enrollment

Notifica cuando un representante legal completa su enrolamiento biométrico con estatus AUTORIZADO.
Mapeo tolerante: toma los atributos que necesitas e ignora los que no conoces, en lugar de rechazar el mensaje completo. Es la práctica estándar para integraciones por eventos y evita que cualquier mejora futura vuelva a detener el flujo.
Construye tu receptor de forma tolerante. El cuerpo de los eventos puede crecer con el tiempo: agregamos campos nuevos para dar mejor trazabilidad sin previo cambio de versión. Tu integración debe leer los campos que necesita e ignorar los que no conoce; nunca rechaces un evento por traer un atributo adicional.

Estructura del Request

Headers

Body (Ejemplo)

Se anexan ejemplos para cada tipo de evento

status_changed

document_submitted

document_verdict

document_verdict_v2

Incluye el resultado global del veredicto (Approved) y un arreglo Results con el detalle de cada validación ejecutada. Cada elemento contiene:
  • id: Identificador de la validación
  • valid: Indica si la validación pasó (true) o falló (false)
  • message: Descripción del resultado de la validación

channel_changed

section_feedback

document_json_export

Envía la información completa del expediente al finalizar el proceso. Estructura general:
Biométrico Veridas — INE
Expediente con validación biométrica usando credencial INE (MX_IDCard_2019). Incluye bloque Ine con resultado de consulta al padrón. El formato del bloque depende de la versión del servicio INE: v1.1 (campos planos) o v4 (respuesta estructurada con detailResponse y response).
Bloque Ine — v1.1
Formato plano con validaciones booleanas por campo y estatus registral. Vive dentro de BiometricoData.Ine.
Bloque Ine — v4
Formato estructurado con metadatos de la petición (detailResponse), datos de comparación (respuestaComparacion), situación registral y respuesta facial (facialResponse).
Biométrico Veridas — Pasaporte
Expediente con validación biométrica usando pasaporte mexicano (MX_Passport_YYYY). Incluye campos como OD_CAN_Out, PD_BirthPlace_Out y OD_CURP_Out. No incluye bloque Ine.

authorized_enrollment

El campo Source permite identificar qué sistema creó el expediente. Este valor se devuelve en el webhook para que puedas enrutar o procesar la información según su origen

Validación de firma

Para garantizar que el webhook proviene de NUFI, debes validar la firma utilizando tu secret. Antes de usar el HMACSHA256 deberás hacer un slice para quitar la versión del valor del signature, por defecto viene como v1= y seguido del hash hmac Generación de la firma:
Donde:
  • timestamp: Header x-nufi-webhook-timestamp
  • rawBody: Body sin modificar (raw)
  • secret: Tu clave privada

JavaScript (Node.js)

Python (Flask)

C# (.NET / ASP.NET Core)

PHP (Laravel/Plain PHP)