Skip to main content

Descripción general

En sandbox, cuando creas una validación KYC para una entidad persona, la API puede devolver un resultado mock inmediato según el taxId (documento) de la entidad. No se realiza ninguna verificación externa; la respuesta y los webhooks coinciden con el resultado asociado a ese documento en nuestro set de prueba. Así puedes probar todos los flujos (aprobado, rechazado, cancelado, doble chequeo RENAPER, etc.) sin pasar por una verificación real.
¡Configura un webhook para recibir las respuestas!En sandbox, el resultado de KYC se actualiza de forma asíncrona (igual que en producción). Aunque la API devuelve 201 inmediatamente después de crear la validación, el resultado final (aprobado, rechazado, etc.) se envía a través de webhooks momentos después.Debes configurar un endpoint webhook en tu organización para recibir las notificaciones de validación. Sin un webhook configurado, no recibirás las actualizaciones de estado.📚 Aprende a configurar webhooks: Integración webhook
El formato no importa. El taxId de la entidad puede enviarse con o sin formato (p. ej. 99.990.001 o 99990001). La API lo normaliza antes de comparar, por lo que ambos funcionan igual.

Cómo funciona

  1. La entidad persona pertenece a una organización en modo sandbox.
  2. Llamas a POST /api/kyc/validations con el entityId de esa entidad.
  3. La API busca el taxId de la entidad en el mapa de prueba de sandbox (tras normalizar: solo dígitos y letras).
  4. Si hay coincidencia, se crea una validación mock con estado pending (201 Created) y momentos después se actualiza al estado final (p. ej. approved, rejected, cancelled).
  5. Se envían los webhooks correspondientes a tu endpoint configurado con el resultado final.
  6. Si no hay coincidencia, la API sigue el flujo normal (crea una sesión de verificación real y devuelve providerSessionUrl).
Flujo asíncrono: El comportamiento en sandbox replica exactamente el flujo de producción, que es asíncrono. La validación se crea en estado pending, y luego se actualiza y se notifica vía webhook. No intentes hacer polling inmediato al endpoint GET después de crear la validación - usa webhooks para recibir el resultado.

Vista previa sintética de entidad (solo GET)

En sandbox, si consultás un número de documento del catálogo de prueba y no existe una entidad real, Gu1 puede devolver una persona sintética en lugar de 404:
  • GET /api/entities/by-tax-id/{taxId}
  • GET /api/entities?taxId={taxId} (filtro exacto, cero coincidencias reales)
La respuesta incluye sandboxMock: true, id: null y metadata.sandboxKycOutcome. No se escribe nada en la base de datos.
La vista previa es para descubrimiento y documentación. Para POST /api/kyc/validations o POST /api/kyc/biometric/sessions con entityTaxId, primero debés crear una entidad persona real (con el mismo taxId de prueba). Los endpoints KYC/biometría resuelven solo filas persistidas.
RENAPER en sandbox: Si envías doubleCheckRenaper: true al crear la validación y el resultado es aprobado (o un rechazo relacionado con RENAPER), la respuesta y el payload del webhook incluirán metadata.responseDoubleChecks.renaper con la misma estructura que en producción.

Valores de prueba por defecto

Ofrecemos un set fijo de números de documento de prueba en cuatro formatos. Cada número corresponde a un resultado. La clave de búsqueda es el valor normalizado (sin puntos, guiones ni espacios).

Lista de resultados (qué devuelve cada número)

#ResultadoSignificado
01approvedKYC aprobado. Si pediste doble chequeo RENAPER, la respuesta incluye RENAPER correcto.
02approved_with_renaperIgual que approved; RENAPER en la respuesta solo si se pidió en la creación.
03cancelledValidación cancelada.
04rejectedRechazo genérico.
05rejected_document_mismatchRechazo por documento no coincidente con la entidad.
06rejected_renaper_tramite_not_matchRechazo: número de trámite no coincide con el registro.
07rejected_renaper_dni_not_matchRechazo: documento no coincide con el registro.
08rejected_renaper_verification_unavailableRechazo: verificación con el registro no disponible.
09rejected_renaper_dni_missingRechazo: sin documento para verificación con el registro.
10rejectedRechazo genérico (segundo número para pruebas).

Argentina – DNI (8 dígitos)

Usa cualquiera de estos como taxId de la entidad (con o sin puntos). El valor normalizado es el que se usa para el match.
Valor de ejemploNormalizadoResultado
99.990.001 o 9999000199990001approved
99.990.002 o 9999000299990002approved_with_renaper
99.990.00399990003cancelled
99.990.00499990004rejected
99.990.00599990005rejected_document_mismatch
99.990.00699990006rejected_renaper_tramite_not_match
99.990.00799990007rejected_renaper_dni_not_match
99.990.00899990008rejected_renaper_verification_unavailable
99.990.00999990009rejected_renaper_dni_missing
99.990.01099990010rejected
99.990.01199990011approved (KYC); mock biométrico por defecto rejected — ver Biometría embebida mock

Argentina – CUIT (11 dígitos)

Formato: 20-XXXXXXXX-X. Ejemplo: 20-99990001-9.
Valor de ejemploNormalizadoResultado
20-99990001-920999900019approved
20-99990002-920999900029approved_with_renaper
20-99990003-920999900039cancelled
20-99990004-920999900049rejected
20-99990005-920999900059rejected_document_mismatch
20-99990006-920999900069rejected_renaper_tramite_not_match
20-99990007-920999900079rejected_renaper_dni_not_match
20-99990008-920999900089rejected_renaper_verification_unavailable
20-99990009-920999900099rejected_renaper_dni_missing
20-99990010-920999900109rejected
20-99990011-920999900119approved (KYC); mock biométrico por defecto rejected

Brasil – CPF (11 dígitos)

Formato: XXX.XXX.XXX-XX. Ejemplo: 999.900.001-01.
Valor de ejemploNormalizadoResultado
999.900.001-0199990000101approved
999.900.001-0299990000102approved_with_renaper
999.900.001-0399990000103cancelled
999.900.001-0499990000104rejected
999.900.001-0599990000105rejected_document_mismatch
999.900.001-0699990000106rejected_renaper_tramite_not_match
999.900.001-0799990000107rejected_renaper_dni_not_match
999.900.001-0899990000108rejected_renaper_verification_unavailable
999.900.001-0999990000109rejected_renaper_dni_missing
999.900.001-1099990000110rejected

Brasil – CNPJ (14 dígitos)

Formato: XX.XXX.XXX/XXXX-XX. Ejemplo: 99.990.000/0001-01.
Valor de ejemploNormalizadoResultado
99.990.000/0001-0199990000000101approved
99.990.000/0001-0299990000000102approved_with_renaper
99.990.000/0001-0399990000000103cancelled
99.990.000/0001-0499990000000104rejected
99.990.000/0001-0599990000000105rejected_document_mismatch
99.990.000/0001-0699990000000106rejected_renaper_tramite_not_match
99.990.000/0001-0799990000000107rejected_renaper_dni_not_match
99.990.000/0001-0899990000000108rejected_renaper_verification_unavailable
99.990.000/0001-0999990000000109rejected_renaper_dni_missing
99.990.000/0001-1099990000000110rejected

Ejemplo: aprobado con RENAPER

  1. Crea una entidad persona en sandbox con taxId: 99990001 (o 99.990.001).
  2. Llama a POST /api/kyc/validations con entityId y doubleCheckRenaper: true (body o query).
  3. La API devuelve 201 con la validación; poco después el estado es approved y se envía el webhook kyc.validation_approved.
  4. El payload del webhook incluye el objeto completo de la validación, incluido metadata.responseDoubleChecks.renaper con verified: true, matchResult: "match", personalNumber, idTramitePrincipal y renaperData (respuesta mock del registro).

Ejemplo de respuesta (mock aprobado)

El body de la respuesta y el payload del webhook siguen la misma estructura que una validación real. Ejemplo de forma para un mock aprobado (campos relevantes):
{
  "id": "uuid",
  "entityId": "uuid",
  "status": "approved",
  "verifiedAt": "2026-02-21T12:00:00.000Z",
  "extractedData": {
    "firstName": "Sandbox",
    "lastName": "User",
    "fullName": "Sandbox User",
    "dateOfBirth": "1990-01-15",
    "documentNumber": "99990001",
    "documentType": "Identity Card",
    "nationality": "AR",
    "gender": "M",
    "ejemplar": "A",
    "age": 34
  },
  "verifiedFields": ["identity_document", "liveness_check", "face_match"],
  "warnings": [],
  "metadata": {
    "doubleChecks": { "renaper": true },
    "responseDoubleChecks": {
      "renaper": {
        "verified": true,
        "matchResult": "match",
        "personalNumber": "99990001",
        "idTramitePrincipal": "987654321",
        "verifiedAt": "2026-02-21T12:00:00.000Z",
        "comparisonResults": {
          "dni": { "field": "dni", "compared": true, "passed": true, "ocrValue": "99990001", "renaperValue": "99990001" },
          "tramite": { "field": "tramite", "compared": true, "passed": true, "ocrValue": "99990001", "renaperValue": "987654321" },
          "ejemplar": { "field": "ejemplar", "compared": true, "passed": true, "ocrValue": "A", "renaperValue": "A" }
        },
        "renaperData": {
          "id_tramite_principal": "987654321",
          "id_tramite_tarjeta_reimpresa": "112233445",
          "ejemplar": "A",
          "vencimiento": "2030-05-20",
          "emision": "2015-05-20",
          "apellido": "User",
          "nombres": "Sandbox",
          "fecha_nacimiento": "1990-01-15",
          "cuil": "20-99990001-9",
          "calle": "Av. Corrientes",
          "numero": "1234",
          "piso": "5",
          "departamento": "B",
          "codigo_postal": "1043",
          "barrio": "San Nicolás",
          "monoblock": "",
          "ciudad": "Ciudad Autónoma de Buenos Aires",
          "municipio": "Comuna 1",
          "provincia": "Buenos Aires",
          "pais": "Argentina",
          "nacionalidad": "Argentina",
          "codigo_fallecido": "",
          "mensaje_fallecido": "",
          "fecha_fallecimiento": "",
          "id_ciudadano": "99990001",
          "codigo": "",
          "mensaje": ""
        }
      }
    }
  }
}
Cuando no se pide doble chequeo RENAPER, metadata.responseDoubleChecks no aparece en aprobado; cuando sí se pide, aparece como arriba. Para renaperData en rechazos o errores de servicio, ver forma de renaperData.

Biometría embebida (mock sandbox)

Tras un KYC mock aprobado para la misma entidad, podés crear una sesión biométrica embebida (POST /api/kyc/biometric/sessions) también en modo mock en sandbox: sin UI hospedada; Gu1 devuelve el resultado de inmediato.
La biometría mock usa la misma organización sandbox y el mismo mapa de taxId de prueba que el mock de KYC. Las validaciones mock incluyen metadata.sandboxMock: true. Las sesiones biométricas mock incluyen metadata.sandboxMock: true y metadata.sandboxMockOutcome (approved o rejected).

Requisitos

  1. Organización en modo sandbox (igual que KYC mock).
  2. Entidad persona con taxId de prueba cuyo outcome de KYC sea approved o approved_with_renaper (p. ej. 99990001, 99990002, 99990011).
  3. KYC aprobado para esa entidad (crearlo antes con POST /api/kyc/validations).

Outcomes biométricos por documento de prueba

Ejemplo taxIdNormalizadoMock KYCMock biometría (default)
99990001 / 20-99990001-999990001 / 20999900019approvedapproved (inmediato)
99990002 / 20-99990002-999990002 / 20999900029approved_with_renaperapproved (inmediato)
99990011 / 20-99990011-999990011 / 20999900119approvedrejected (inmediato)
Si el mock de KYC es rejected o cancelled, no podés crear sesión biométrica (NO_KYC).

Forzar outcome en la misma entidad

En cualquier entidad mock elegible, enviá metadata.sandboxMockOutcome en el body:
POST /api/kyc/biometric/sessions
{
  "entityId": "uuid",
  "metadata": {
    "sandboxMockOutcome": "rejected"
  }
}
Valores: approved, rejected. Solo aplica si califica para mock sandbox (org sandbox + KYC mock aprobado, o KYC con metadata.sandboxMock: true).

Ejemplo: mock aprobado

  1. Crear entidad persona con taxId: 99990001.
  2. POST /api/kyc/validations → webhook kyc.validation_approved (o GET hasta approved).
  3. POST /api/kyc/biometric/sessions con { "entityId": "..." }.
Respuesta 201 con "status": "approved", hostedSessionId con prefijo sandbox-mock-bio-, webhook biometric.session_approved. No hace falta iframe.

Ejemplo: mock rechazado

Opción A — documento 99990011 (KYC aprobado, biometría rechazada por defecto). Opción B — misma entidad 99990001 con "metadata": { "sandboxMockOutcome": "rejected" }. Respuesta "status": "rejected"; webhook biometric.session_rejected.

Biometría real (no mock) en sandbox

Si el taxId no está en el mapa de prueba, o la org no es sandbox, el create sigue el flujo de producción: UI de captura hospedada, status: pending, y un hostedSessionId asignado por Gu1. Requiere retrato válido del KYC aprobado.

Reintentos y sesiones activas

  • Si la última sesión biométrica está pending o in_progress, el create devuelve 409 ACTIVE_SESSION_EXISTS con activeSessionId. Cancelala con POST /api/kyc/biometric/sessions/:id/cancel.
  • Si un create anterior persistió en Gu1 pero el cliente reintentó, Gu1 reutiliza la fila existente cuando devuelve el mismo hostedSessionId (create idempotente).
Ver también: Sesión biométrica embebida.

Datos mock personalizados

El set por defecto anterior está disponible para todas las organizaciones sandbox sin configuración.
Añadir o cambiar números de documento mock en tu sandbox:
Si necesitas documentos de prueba adicionales o resultados distintos para números concretos, contacta al equipo de Gu1. Los datos mock personalizados para sandbox los gestiona Gu1 y no pueden configurarse por el cliente.

Ver también