¿Cómo funciona la API de KYC e identidad de DIGID?

¿Cómo funciona la API de KYC e identidad de DIGID?

Cuando una empresa necesita verificar quién es la persona al otro lado de la pantalla — antes de firmar un contrato, activar una cuenta o aprobar un crédito — el proceso puede integrarse directamente en su sistema mediante la API de KYC de DIGID.

El flujo ocurre del lado del usuario: captura su INE, toma una selfie y completa una prueba de vida. DIGID procesa esa información y devuelve el resultado al sistema de la empresa mediante webhook. Con ese resultado, la empresa toma su propia decisión — aprobar, rechazar, escalar a revisión manual.

Qué valida la API de KYC de DIGID

El proceso de verificación cubre varias capas de validación en una sola sesión:

  • Validación del documento: autenticidad y vigencia de la INE, extracción de datos del documento

  • Face Match: comparación entre el rostro en el documento y la selfie capturada en tiempo real

  • Prueba de vida (liveness): verificación de que la persona presente es real y no una imagen estática o video

  • Extracción de datos: nombre completo, CURP, fecha de nacimiento, domicilio, número de votante y demás campos del documento

  • Análisis de IP: detección de VPN o Tor para identificar sesiones de mayor riesgo

Cada validación devuelve su resultado de forma independiente, con el nivel de detalle suficiente para que el sistema de la empresa construya su propia lógica de decisión.

El resultado que devuelve la API

Cuando la sesión de KYC se completa, DIGID notifica al sistema de la empresa mediante webhook. El payload incluye el resultado completo de todas las validaciones:

{
  "success": true,
  "status": "Approved",
  "session_id": "12345678-1234-1234-1234-123456789abc",
  "vendor_data": "usuario_12345",
  "verification": {
    "face_match": true,
    "face_match_score": 97.22,
    "liveness_check": true,
    "liveness_score": 100,
    "document_valid": true,
    "liveness_method": "PASSIVE",
    "age_estimation": 29.4,
    "face_quality": 96.5
  },
  "document": {
    "document_type": "Identity Card",
    "full_name": "Juan Carlos García López",
    "personal_number": "GALJ950822HDFRPN09",
    "birth_date": "1995-08-22",
    "expiry_date": "2034-12-31",
    "nationality": "MEX",
    "gender": "M",
    "age": 30,
    "place_of_birth": "Ciudad de México",
    "extra_fields": {
      "voter_number": "GRLPJN95082209H234",
      "ine_model": "G",
      "section": "1234"
    },
    "address_data": {
      "full_address": "Calle Falsa 123, Col Centro 06000, Ciudad de México, CDMX.",
      "street": "Calle Falsa 123",
      "city": "Ciudad de México",
      "state": "Ciudad de México",
      "postal_code": "06000",
      "address_parsed": true
    }
  },
  "ip_analysis": {
    "ip_address": "203.0.113.45",
    "ip_city": "Ciudad de México",
    "is_vpn_or_tor": false
  },
  "images": {
    "front_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/front_image",
    "back_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/back_image",
    "selfie_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/selfie_image"
  },
  "pdf_url": "https://digidmexico.com.mx/api/sdk/image/{session_id}/pdf"
}
{
  "success": true,
  "status": "Approved",
  "session_id": "12345678-1234-1234-1234-123456789abc",
  "vendor_data": "usuario_12345",
  "verification": {
    "face_match": true,
    "face_match_score": 97.22,
    "liveness_check": true,
    "liveness_score": 100,
    "document_valid": true,
    "liveness_method": "PASSIVE",
    "age_estimation": 29.4,
    "face_quality": 96.5
  },
  "document": {
    "document_type": "Identity Card",
    "full_name": "Juan Carlos García López",
    "personal_number": "GALJ950822HDFRPN09",
    "birth_date": "1995-08-22",
    "expiry_date": "2034-12-31",
    "nationality": "MEX",
    "gender": "M",
    "age": 30,
    "place_of_birth": "Ciudad de México",
    "extra_fields": {
      "voter_number": "GRLPJN95082209H234",
      "ine_model": "G",
      "section": "1234"
    },
    "address_data": {
      "full_address": "Calle Falsa 123, Col Centro 06000, Ciudad de México, CDMX.",
      "street": "Calle Falsa 123",
      "city": "Ciudad de México",
      "state": "Ciudad de México",
      "postal_code": "06000",
      "address_parsed": true
    }
  },
  "ip_analysis": {
    "ip_address": "203.0.113.45",
    "ip_city": "Ciudad de México",
    "is_vpn_or_tor": false
  },
  "images": {
    "front_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/front_image",
    "back_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/back_image",
    "selfie_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/selfie_image"
  },
  "pdf_url": "https://digidmexico.com.mx/api/sdk/image/{session_id}/pdf"
}
{
  "success": true,
  "status": "Approved",
  "session_id": "12345678-1234-1234-1234-123456789abc",
  "vendor_data": "usuario_12345",
  "verification": {
    "face_match": true,
    "face_match_score": 97.22,
    "liveness_check": true,
    "liveness_score": 100,
    "document_valid": true,
    "liveness_method": "PASSIVE",
    "age_estimation": 29.4,
    "face_quality": 96.5
  },
  "document": {
    "document_type": "Identity Card",
    "full_name": "Juan Carlos García López",
    "personal_number": "GALJ950822HDFRPN09",
    "birth_date": "1995-08-22",
    "expiry_date": "2034-12-31",
    "nationality": "MEX",
    "gender": "M",
    "age": 30,
    "place_of_birth": "Ciudad de México",
    "extra_fields": {
      "voter_number": "GRLPJN95082209H234",
      "ine_model": "G",
      "section": "1234"
    },
    "address_data": {
      "full_address": "Calle Falsa 123, Col Centro 06000, Ciudad de México, CDMX.",
      "street": "Calle Falsa 123",
      "city": "Ciudad de México",
      "state": "Ciudad de México",
      "postal_code": "06000",
      "address_parsed": true
    }
  },
  "ip_analysis": {
    "ip_address": "203.0.113.45",
    "ip_city": "Ciudad de México",
    "is_vpn_or_tor": false
  },
  "images": {
    "front_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/front_image",
    "back_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/back_image",
    "selfie_image": "https://digidmexico.com.mx/api/sdk/image/{session_id}/selfie_image"
  },
  "pdf_url": "https://digidmexico.com.mx/api/sdk/image/{session_id}/pdf"
}

Qué significa cada sección

verification — los resultados cuantitativos de cada validación biométrica:

  • face_match_score: puntuación de similitud entre el rostro del documento y la selfie (0–100). En el ejemplo, 97.22 — alta confianza

  • liveness_score: certeza de que la persona es real (0–100). En el ejemplo, 100

  • document_valid: si el documento pasó las verificaciones de autenticidad

  • face_quality: calidad de la imagen facial capturada, que afecta la confianza de la comparación

document — los datos extraídos del documento de identidad: nombre completo, CURP, fecha de nacimiento, domicilio estructurado, número de votante, modelo de INE y demás campos disponibles según el documento presentado.

ip_analysis — ubicación aproximada de la sesión y detección de VPN o Tor. Útil para identificar sesiones de mayor riesgo cuando la ubicación declarada no coincide con la IP.

images — URLs para acceder a las imágenes capturadas durante la sesión: frente y reverso del documento, selfie y retrato extraído del documento. Disponibles para descarga durante el período de retención configurado.

pdf_url — URL del reporte PDF de la sesión, que consolida todos los resultados de validación con evidencia fotográfica. Equivale al expediente del proceso de verificación.

La lógica de decisión la define la empresa

DIGID devuelve los resultados. La empresa decide qué hacer con ellos.

Eso es intencional: cada empresa tiene su propio perfil de riesgo, sus propias políticas de cumplimiento y sus propios umbrales de aceptación. Una empresa puede decidir que un face_match_score mayor a 90 es suficiente para aprobar automáticamente. Otra puede requerir revisión manual para cualquier score entre 80 y 95. Una tercera puede rechazar automáticamente sesiones donde is_vpn_or_tor sea verdadero.

DIGID aporta los datos. La lógica de negocio vive en el sistema de la empresa.

Los eventos de webhook del flujo de KYC

El proceso de verificación emite eventos en cada momento relevante, para que el sistema de la empresa pueda reaccionar en tiempo real:

#

Tipo

Estatus

Significado

2

Firmante

Inicio Proceso

El firmante arrancó su KYC

3

Firmante

KYC Exitoso

KYC del firmante aprobado

4

Firmante

KYC Fallido

KYC del firmante falló

5

Firmante

Reinicio KYC

Se reinició el KYC del firmante

6

Firmante

Documentación Aprobada

Documentación del firmante aprobada

7

Firmante

Documentación Rechazada

Documentación del firmante rechazada

Cuando el KYC forma parte de un flujo de firma — el usuario verifica su identidad antes de firmar el documento — los eventos de KYC y los eventos de firma ocurren en la misma sesión y llegan al mismo endpoint de webhook configurado.

Cuándo el KYC va antes de la firma y cuándo va solo

El módulo de KYC puede usarse de dos formas:

Integrado al flujo de firma: el firmante completa su verificación de identidad como parte del proceso de firma del documento. El documento no avanza hasta que el KYC es exitoso. Ideal para contratos de crédito, onboarding con documentos, comodatos.

Como validación independiente: la empresa inicia una sesión de KYC sin documento asociado — para verificar la identidad de un operador antes de asignarle una unidad, para hacer el onboarding de un usuario en una app, para validar a un cliente antes de una operación de alto valor. El resultado llega por webhook y el sistema actúa en consecuencia.

Qué queda en el expediente

Cada sesión de KYC completada genera:

  • Resultado completo de todas las validaciones con scores individuales

  • Imágenes del documento y selfie capturadas durante la sesión

  • Reporte PDF con toda la evidencia consolidada

  • Registro de IP y metadatos de la sesión

  • Fecha y hora exacta de cada evento del proceso

Ese expediente es el respaldo de la empresa para demostrar que realizó el proceso de verificación de identidad — relevante en auditorías, en procesos de cumplimiento y ante cualquier disputa posterior.

Preguntas frecuentes

¿El usuario necesita instalar una app para completar el KYC? No. El proceso puede completarse desde el navegador del dispositivo del usuario, sin instalación. También existe SDK móvil para empresas que prefieren embeber el flujo directamente en su propia app.

¿Qué pasa si el usuario falla el liveness o el face match? DIGID emite el webhook con el estatus correspondiente (KYC Fallido). El sistema de la empresa recibe el resultado y puede permitir que el usuario reintente, escalarlo a revisión manual o rechazarlo según su política.

¿Los datos extraídos del documento se validan contra RENAPO? La validación contra RENAPO es un módulo adicional que puede activarse según los requerimientos de cada operación. El artículo dedicado a RENAPO entra en detalle sobre ese flujo.

¿Cuánto tiempo están disponibles las imágenes y el PDF de la sesión? Las URLs de imágenes y el PDF están disponibles durante el período de retención configurado en la cuenta. Pasado ese período, se recomienda que la empresa haya descargado y almacenado los archivos en su propio sistema.

¿La API de KYC tiene sandbox? Sí. El entorno de sandbox permite probar el flujo completo de verificación con documentos de prueba antes de salir a producción.

Integra verificación de identidad en tu flujo de onboarding o firma

Con la API de KYC de DIGID puedes validar INE, selfie, prueba de vida y extracción de datos en una sola sesión — con el resultado completo disponible via webhook para que tu sistema tome la decisión.

Solicita acceso al sandbox y empieza a probar.

digid banner bg

Firma y protege tus contratos digitales con DIGID

Gestiona contratos digitales de forma inteligente

digid banner bg

Firma y protege tus contratos digitales con DIGID

Gestiona contratos digitales de forma inteligente