Sesión biométrica embebida
Biométrico
Sesión biométrica embebida
Inicia una sesión de reautenticación biométrica hospedada tras un KYC aprobado: URL lista para iframe, webhooks y veredicto final de Gu1.
POST
Sesión biométrica embebida
Resumen
Biometría embebida permite re-verificar que quien completa un flujo es la misma persona que aprobó el KYC. A diferencia del chequeo biométrico síncrono, acá Gu1 devuelve unsessionUrl con UI hospedada de captura. Tu app lo embebe en un iframe (o redirige) para que el liveness ocurra en un entorno controlado.
Requisitos
- KYC aprobado en Gu1 para la entidad persona.
- Retrato de referencia disponible desde ese KYC.
- KYC habilitado en tu organización (misma API key y permisos que la validación por sesión). La configuración interna de captura biométrica embebida la provisiona el equipo Gu1; como integrador no configurás workflows ni credenciales adicionales. Si la org aún no fue habilitada,
POST /api/kyc/biometric/sessionspuede responderBIOMETRIC_WORKFLOW_NOT_CONFIGURED(400) — contactá a tu contacto Gu1. - Gu1 Biometría activo para tu organización (
global_gueno_biometric_kyc). Si no está habilitado, la API respondeNOT_ENABLED(403) — solicitá la activación a Gu1.
Crear sesión
POST /api/kyc/biometric/sessions
Parámetros clave: entityId, entityExternalId o entityTaxId (exactamente uno requerido), webhookUrl (opcional), callback, language. Flujo face match (liveness + comparación contra retrato del KYC aprobado; NO_PORTRAIT si falta selfie).
Vista previa sandbox (solo GET):
GET /api/entities/by-tax-id/{taxId} puede devolver una persona sintética (sandboxMock: true, id: null) para números de prueba del catálogo cuando no hay fila real. Es solo lectura — para POST /sessions necesitás una entidad persistida.201: id, sessionUrl, iframeAllow, hostedSessionId, status (pending en flujo real; approved / rejected inmediato en mock sandbox). Ver mock sandbox.
Flujo recomendado de integración
- Entidad persona con KYC
approved. POST /api/kyc/biometric/sessionsuna vez por intención del usuario. Guardáid,sessionUrlyhostedSessionId.- Si responde
409 ACTIVE_SESSION_EXISTS, cancelá conPOST .../sessions/{activeSessionId}/cancely recién ahí creá de nuevo (no reintentar en loop sin manejar el 409). - Si
statusespending, embebésessionUrlen iframe (o redirigí). - Esperá webhooks
biometric.session_*(oGET .../sessions/:id/POST .../syncsi hace falta). - Usá
statusyrejectionCodecomo resultado final.
Errores al crear (POST /sessions)
Ejemplo
409 ACTIVE_SESSION_EXISTS (aditivo — clientes que ignoran campos extra no cambian):
POST /sessions con una sesión aún abierta siempre devuelve este 409. Gu1 no responde 201 con la misma sesión pending.
Sesiones previas y “actual”
Una entidad puede tener varias sesiones biométricas (aprobadas, rechazadas, canceladas).
Una sesión aprobada anterior no bloquea crear otra. Solo bloquea una sesión activa (
pending / in_progress) → 409.
hostedSessionId, cancelación y reintentos
hostedSessionId es la referencia de sesión de captura hospedada devuelta al crear. Gu1 la guarda de forma única para webhooks y sync.
Recuperación correcta: 409 → cancelar activeSessionId → un solo POST nuevo.
Tras cancelar, podés crear una sesión nueva. La persistencia idempotente (reutilizar una fila terminal existente si vuelve el mismo hostedSessionId) aplica solo después del cancel u otros outcomes terminales — no mientras la sesión siga pending o in_progress.
Mock sandbox: prefijo sandbox-mock-bio-; cada create mock genera un ID nuevo.
Embeber
Consultar estado
GET /api/kyc/biometric/sessions/:id— una sesión por IDGET /api/kyc/biometric/entities/:entityId/current— sesión actual = la más reciente porcreatedAt. Responde200connullsi no hay sesiones.GET /api/kyc/biometric/entities/by-tax-id/:taxId/current— igual, resuelto por tax IDGET /api/kyc/biometric/entities/by-external-id/:externalId/current— igual, resuelto por external IDGET /api/kyc/biometric/sessions?entityId=...— listado; también aceptaentityTaxIdoentityExternalId(uno a la vez).currentSessionIdes la última sesiónapproved.POST /api/kyc/biometric/sessions/:id/syncPOST /api/kyc/biometric/sessions/:id/cancel— cancela manualmente sesionespendingoin_progress(marcacancelleden Gu1).GET /api/kyc/biometric/sessions/:id/media?key=— imágenes persistidas referenciadas endecision.
POST /sessions responde 409 ACTIVE_SESSION_EXISTS, el cuerpo incluye activeSessionId para cancelar sin consultar /current.
La plataforma puede reportar In Review durante la revisión de la captura; en Gu1 eso se refleja como
in_progress hasta el veredicto final (approved o rejected). Solo los estados terminales de resultado cuentan para definir la sesión actual.Webhooks
webhookUrlpor request — si lo enviás al crear la sesión.- Webhooks de organización — eventos
biometric.session_*. Ver eventos biométricos.
Sesiones mock en sandbox
En sandbox, si la entidad tiene un KYC mock aprobado (taxId de prueba como 99990001, o KYC con metadata.sandboxMock: true), POST /api/kyc/biometric/sessions puede devolver un resultado mock inmediato (approved o rejected) sin captura hospedada.
- Por defecto:
99990001→ biometría approved;99990011→ biometría rejected (KYC sigue approved). - Override:
"metadata": { "sandboxMockOutcome": "rejected" }en cualquier entidad elegible. - Las respuestas mock usan
hostedSessionIdcon prefijosandbox-mock-bio-y pueden traerstatus: approvedorejecteden el create (no solopending).