> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# API de validación de base de datos: cotejo de ID nacional

> Didit valida datos de identidad contra 100+ fuentes nacionales y globales con POST /v3/database-validation/ y coincidencia 1x1 y 2x2. Pago por uso.

## Servicios basados en dirección

Para los servicios que validan una dirección residencial o de servicios públicos, puedes enviar un único campo `address` y Didit lo dividirá antes de procesar la comprobación. Para obtener la mejor tasa de coincidencia, envía directamente los campos de dirección estructurados de Didit:

| Campo | Significado |
| - | - |
| `address_element_1` | Dirección, incluidos el número y el tipo de vía |
| `address_element_2` | Unidad, edificio, planta o línea de dirección adicional (opcional) |
| `address_element_3` | Barrio, distrito, localidad o vecindario |
| `address_element_4` | Ciudad, pueblo, estado, provincia o región |
| `address_element_5` | Código postal |

Los campos estructurados tienen prioridad sobre el valor único de `address`. Se acepta `postal_code` como alias de `address_element_5`.

## Consentimiento

Algunos servicios de bases de datos requieren el consentimiento explícito del usuario final antes de que se pueda consultar al proveedor. El catálogo de servicios marca estas filas con `requires_consent=true`.

Envía `consent=true` cuando el usuario haya dado su consentimiento para los servicios seleccionados.

Si un servicio seleccionado requiere consentimiento y no lo envías, Didit rechaza la solicitud antes de cualquier consulta al proveedor o evento de facturación.

## Carga de archivos

La validación de base de datos usa `multipart/form-data`. Los servicios biométricos que requieren `selfie` lo exponen como un campo de carga de archivos en el playground de la API, de modo que puedes seleccionar una imagen directamente en lugar de pegar una ruta o una cadena en base64.

En el código, sube el archivo con la sintaxis multipart habitual:

```bash theme={null}
-F "selfie=@./selfie.jpg"
```

## Errores de validación

Didit valida los campos obligatorios, la estructura de la dirección y los formatos específicos de cada servicio antes de llamar al proveedor. Por ejemplo, los servicios de registros de China, como `chn_national_id` y `chn_passport_verification`, esperan `full_name` en el sistema de escritura chino original, y `chn_national_id` además requiere un número de identificación nacional chino válido de 15 o 18 caracteres con un dígito de control correcto.

Si una solicitud no se puede ejecutar, la API devuelve errores explícitos por campo y no se factura ningún uso. Si un proveedor falla después de la verificación previa, la respuesta incluye `validation_errors`, y las solicitudes de API guardadas almacenan esos errores en el resultado de validación de la base de datos.

## Entrada rechazada y resultados no disponibles

Cuando ningún servicio devuelve un resultado utilizable, revisa cada entrada de `validation_errors` antes de decidir si reintentar.
El código de estado HTTP por sí solo no determina si conviene reintentar.
Una respuesta `400` con `code: "provider_rejected_input"` y `retryable: false` significa que todos los intentos sin respuesta rechazaron explícitamente la entrada.
Corrige los datos proporcionados antes de volver a intentarlo.
Estos intentos no se facturan.

Una respuesta `502` con `code: "empty_provider_response"` y `retryable: true` significa que el servicio no pudo producir un resultado utilizable por otro motivo.
Esto incluye una entrada rechazada seguida de un servicio de respaldo no disponible o de un servicio de respaldo que no ofrece ninguna explicación.
Vuelve a intentarlo más tarde; la respuesta no establece que la entrada sea incorrecta.
Si una base de datos sigue fallando, Didit envía un correo electrónico a las organizaciones que la han usado recientemente una vez que la interrupción se prolonga, y de nuevo cuando comprobaciones reales confirman que vuelve a responder. Consulta [Notificaciones de disponibilidad](https://docs.didit.me/es/core-technology/database-validation/overview.md#notificaciones-de-disponibilidad).

Cuando solo fallan algunos de los servicios seleccionados, la solicitud se completa correctamente: la respuesta es `200` y los servicios fallidos se enumeran en `database_validation.errors[]`, cada uno con los mismos campos `code` y `retryable`.
En ese caso, `database_validation.status` refleja los servicios que sí respondieron y puede ser `Approved`, así que revisa `errors[]` en cada respuesta y no solo en las `4xx` o `5xx`.
Un servicio que aparece ahí no figura en `validations` ni en `services_used`, y no se factura; reintenta ese servicio por separado.

Otros errores `502` pueden requerir que corrijas la entrada.
Por ejemplo, `provider_invalid_input` y `provider_validation_error` describen una entrada que la fuente rechazó y no deben reintentarse sin cambios, aunque la respuesta de versiones anteriores omita `retryable`.
Las indicaciones de reintento de `empty_provider_response` no se aplican a estos códigos.
Un resultado concluyente sin coincidencia es una comprobación completada, no un fallo de disponibilidad.


## OpenAPI

````yaml es/openapi-25.json POST /v3/database-validation/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificación de identidad. Autentícate con el encabezado x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/database-validation/:
    post:
      tags:
        - Standalone APIs
      summary: Validación de base de datos (independiente)
      description: >-
        Valida los datos de identidad de una persona contra fuentes oficiales
        gubernamentales y registrales: CPF en Brasil, RENAPER en Argentina,
        registros de DNI en España y Perú, INE en México y más de 100+ servicios
        adicionales en más de 60+ países.


        **Selección de servicios.** Cada país ofrece uno o más servicios del
        catálogo, identificados por un `service_id` (por ejemplo, `bra_cpf`,
        `arg_renaper`, `pan_cedula_sib`). Fija los servicios que quieres con el
        array `services`. Si lo omites, se ejecuta exactamente **un** servicio
        predeterminado (el servicio activo con más trayectoria para el país).
        Enviar `services` también cambia la respuesta al formato extendido con
        `services_used` y `match_score`. Consulta los servicios, sus campos
        obligatorios y sus precios mediante `GET
        /v1/organization/database-validation-countries/` (un endpoint de
        catálogo no documentado en esta especificación) o en el editor de flujos
        de la Business Console. Algunos servicios están marcados con
        `requires_consent=true` en el catálogo y exigen `consent=true`. Otros
        requieren un onboarding para tu organización antes de poder llamarlos.


        **Campos de entrada.** `identification_number` es un campo universal que
        se asigna automáticamente al campo específico del país que corresponda
        (consulta su descripción). Las reglas de formato de cada país se aplican
        antes de llamar a cualquier proveedor (por ejemplo, el CPF de BRA debe
        tener exactamente 11 dígitos), y los errores de formato nunca se
        facturan. Los servicios biométricos necesitan subir una `selfie` (solo
        multipart). RENAPER de Argentina además requiere `gender`.


        **Resultados.** Cada servicio devuelve un mapa `validation` campo por
        campo, además de un `outcome_code` independiente del proveedor (`MATCH`,
        `PARTIAL_MATCH`, `NO_MATCH`, `DOCUMENT_NOT_FOUND`,
        `INVALID_DOCUMENT_FORMAT`, `INVALID_INPUT`, `MINOR_BLOCKED`, `DECEASED`,
        `BIOMETRIC_NO_MATCH`, `BIOMETRIC_IMAGE_UNUSABLE`, `INCONCLUSIVE`,
        `DOCUMENT_SUPERSEDED`, `REGISTRY_UNAVAILABLE`, `REGISTRY_ERROR`). Ten en
        cuenta las diferencias: `NO_MATCH` es una no coincidencia definitiva;
        `INCONCLUSIVE` significa que el registro no pudo confirmar en ningún
        sentido (revisar, no rechazar), y `BIOMETRIC_IMAGE_UNUSABLE` es un
        problema técnico de la selfie (repetirla), a diferencia del definitivo
        `BIOMETRIC_NO_MATCH`. El `match_type` global agrega los resultados de
        todos los servicios (cualquier coincidencia total → `full_match`; si no,
        cualquier coincidencia parcial → `partial_match`; si no, `no_match`), y
        `no_match_action`/`partial_match_action` lo traducen al `status` final.
        `validation_type` se deriva: `two_by_two` cuando dos o más servicios
        distintos produjeron una coincidencia total (en el número de
        identificación, en el nombre completo y la fecha de nacimiento juntos, o
        en la dirección sin contradicciones); en caso contrario, `one_by_one`.


        **Persistencia.** `save_api_request` es **true** de forma
        predeterminada: el resultado se almacena como una sesión (`request_id`
        funciona con `GET /v3/session/{sessionId}/decision/`), aparece en la
        consola y dispara un webhook `status.updated`. También controla el
        formato de `validations`: objetos por servicio cuando se guarda, y un
        mapa combinado `{field: match}` cuando no.


        **Facturación.** Por servicio: cada servicio que devuelve un resultado
        facturable se cobra a su propio precio de catálogo. Los servicios
        fallidos u omitidos no se facturan, y las solicitudes rechazadas con
        `400` no cuestan nada. La comprobación previa del saldo cubre la suma de
        los precios de los servicios seleccionados (`403` si no alcanza).


        **Errores.** Cuando ningún servicio seleccionado devuelve un resultado
        utilizable, la API devuelve `400` con `validation_errors` si todos los
        intentos sin respuesta rechazaron explícitamente la entrada
        (`provider_rejected_input`, `retryable: false`). Corrige la entrada
        antes de volver a intentarlo. En caso contrario, devuelve `502` con
        `validation_errors` (`empty_provider_response`, `retryable: true`), lo
        que incluye casos mixtos de entrada rechazada e intentos alternativos no
        disponibles; no se factura nada (aun así, se registra una sesión con el
        estado `Not Finished` cuando `save_api_request=true`). Cuando solo
        fallan algunos servicios, la respuesta `200` incluye sus errores en
        `database_validation.errors`.


        **Sandbox.** Las claves de aplicaciones de sandbox omiten las llamadas a
        los registros y la facturación, y devuelven una respuesta estática
        `full_match`. El payload de sandbox siempre incluye `services_used` y
        `match_score: 100`, independientemente de cómo se haya enviado
        `services`, así que no valides con respuestas de sandbox la activación
        condicional del formato extendido ni la fracción 0.0–1.0 de
        `match_score` del entorno de producción.


        Envía la solicitud como `application/json`, o como `multipart/form-data`
        cuando subas una `selfie`.
      operationId: post_v3database-validation
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - issuing_state
              properties:
                issuing_state:
                  type: string
                  description: >-
                    Código de país ISO 3166-1 **alfa-3** del registro contra el
                    que se valida (p. ej. `BRA`, `ESP`, `COL`). Determina qué
                    servicios están disponibles. Los códigos no admitidos
                    devuelven `400` con la lista completa de opciones válidas.
                  example: BRA
                services:
                  type: array
                  items:
                    type: string
                  description: >-
                    `service_id` del catálogo que se ejecutarán para este país
                    (p. ej., `["bra_cpf"]`). También acepta una sola cadena o
                    una cadena separada por comas o codificada en JSON. **Si se
                    omite o está vacío, se ejecuta exactamente un servicio
                    predeterminado**: el servicio activo más consolidado del
                    país; los servicios más recientes, biométricos y de pago por
                    uso deben indicarse explícitamente. Enviar `services` cambia
                    la respuesta al formato extendido (añade `services_used` y
                    `match_score`). Cada id debe existir y estar activo para el
                    `issuing_state`; los servicios que requieren onboarding
                    devuelven `400` hasta que se activen para tu organización.
                    Consulta los servicios disponibles por país mediante `GET
                    /v1/organization/database-validation-countries/` (un
                    endpoint de catálogo no documentado en esta especificación)
                    o el editor de flujos de la Business Console.
                  example:
                    - bra_cpf
                validation_type:
                  type: string
                  deprecated: true
                  description: >-
                    OBSOLETO. Se acepta por compatibilidad con versiones
                    anteriores, pero se ignora: el `validation_type` de la
                    respuesta ahora se deriva de cuántos servicios obtuvieron
                    una coincidencia total. Usa `services` para fijar servicios
                    concretos.
                consent:
                  type: boolean
                  default: false
                  description: >-
                    Establécelo en `true` cuando el usuario final haya dado su
                    consentimiento explícito para los servicios de validación
                    seleccionados. Obligatorio para los servicios marcados con
                    `requires_consent=true` en el catálogo: sin él, esos
                    servicios devuelven `400` con `services_requiring_consent`.
                identification_number:
                  type: string
                  description: >-
                    Número de identificación universal: se asigna
                    automáticamente al campo específico del país correcto, por
                    lo que puedes usarlo en lugar de
                    `personal_number`/`tax_number`/`document_number`:
                    ARG→document_number (DNI), BOL→document_number (CI),
                    BRA→tax_number (CPF, 11 dígitos), CHL→personal_number (RUT),
                    COL→personal_number (Cédula), CRI→personal_number (Cédula),
                    DOM→personal_number (Cédula, 11 dígitos),
                    ECU→personal_number (Cédula, 10 dígitos),
                    ESP→personal_number (DNI/NIE), GTM→document_number (DPI),
                    HND→document_number (DNI), MEX→personal_number (CURP, 18
                    caracteres), PAN→personal_number (Cédula),
                    PER→personal_number (DNI, 8 dígitos), PRY→document_number
                    (CI), SLV→document_number (DUI), URY→personal_number (CI),
                    VEN→document_number (Cédula). Nunca sobrescribe un campo
                    específico del país proporcionado explícitamente.
                first_name:
                  type: string
                  description: >-
                    El nombre de pila de la persona. Obligatorio en algunos
                    servicios o países.
                  example: John
                last_name:
                  type: string
                  description: >-
                    El apellido de la persona. Obligatorio en algunos servicios
                    o países.
                  example: Doe
                middle_name:
                  type: string
                  description: >-
                    Segundo nombre, utilizado por algunos servicios nacionales
                    (AUS, NZL, …).
                full_name:
                  type: string
                  description: >-
                    Nombre completo: algunos servicios lo aceptan en lugar del
                    nombre y el apellido (p. ej., los servicios de CHN, que
                    comparan el nombre en escritura nativa).
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Fecha de nacimiento, `YYYY-MM-DD`. Muchos servicios la
                    exigen.
                  example: '1980-01-01'
                personal_number:
                  type: string
                  description: >-
                    Identificador personal único emitido por el gobierno. Lo
                    usan: CHL (RUT), COL (Cédula), CRI, DOM, ECU, ESP (DNI/NIE),
                    MEX (CURP), PAN (Cédula), PER (DNI), URY. Considera usar
                    `identification_number` en su lugar.
                tax_number:
                  type: string
                  description: >-
                    Número de identificación fiscal. Lo usa: BRA (CPF, 11
                    dígitos). Considera usar `identification_number` en su
                    lugar.
                document_number:
                  type: string
                  description: >-
                    Número de documento. Lo usan: ARG (DNI), BOL (CI), GTM
                    (DPI), HND (DNI), PRY (CI), SLV (DUI), VEN (Cédula).
                    Considera usar `identification_number` en su lugar.
                document_type:
                  type: string
                  enum:
                    - P
                    - DL
                    - ID
                    - RP
                    - SSC
                    - HIC
                    - WP
                    - TC
                    - VISA
                    - PSC
                    - BC
                    - OTHER
                  description: >-
                    Tipo de documento que se valida: `P` pasaporte, `DL`
                    licencia de conducir, `ID` documento nacional de identidad,
                    `RP` permiso de residencia (además de `SSC`, `HIC`, `WP`,
                    `TC`, `VISA`, `PSC`, `BC`, `OTHER`). Lo exigen algunos
                    servicios (p. ej., ESP).
                expiration_date:
                  type: string
                  format: date
                  description: >-
                    Fecha de caducidad del documento, `YYYY-MM-DD`. Obligatoria
                    para la validación de ESP (España).
                  example: '2030-01-15'
                date_of_issue:
                  type: string
                  format: date
                  description: >-
                    Fecha de expedición del documento, `YYYY-MM-DD` (fecha de
                    expedición). Obligatoria para la validación de la cédula de
                    COL (Colombia).
                  example: '2015-06-20'
                nationality:
                  type: string
                  description: >-
                    Nacionalidad en formato ISO 3166-1 alfa-3. Algunos servicios
                    la exigen.
                gender:
                  type: string
                  enum:
                    - M
                    - F
                    - X
                  description: >-
                    Género: `M`, `F` o `X` (otro/desconocido). Obligatorio para
                    la validación RENAPER de Argentina (`arg_renaper`).
                address:
                  description: >-
                    Dirección de residencia. Es preferible el objeto
                    estructurado `{"street_1":"123 Main St","street_2":"Apt
                    4B","city":"Springfield","region":"IL","postal_code":"62701","country":"US"}`;
                    se sigue aceptando una cadena completa en una sola línea.
                    Obligatoria para los servicios de verificación de dirección;
                    cuando un servicio define requisitos de dirección, las
                    partes que falten devuelven `400` con
                    `address_fields_required_by`.
                  oneOf:
                    - type: object
                      properties:
                        street_1:
                          type: string
                        street_2:
                          type: string
                        city:
                          type: string
                        region:
                          type: string
                        postal_code:
                          type: string
                        country:
                          type: string
                    - type: string
                      description: Dirección completa en una sola línea (formato heredado).
                address_element_1:
                  type: string
                  description: >-
                    Dirección de la calle, incluidos el número y el tipo de vía.
                    Si se omite, se deriva de `address`.
                address_element_2:
                  type: string
                  description: >-
                    Apartamento, unidad, edificio, planta o línea adicional de
                    la dirección. Envíalo solo cuando lo tengas de forma
                    explícita.
                address_element_3:
                  type: string
                  description: >-
                    Ciudad, barrio, distrito, localidad o vecindario. Si se
                    omite, se obtiene de `address`.
                address_element_4:
                  type: string
                  description: >-
                    Estado, provincia, región o localidad. Si se omite, se
                    deriva de `address`.
                address_element_5:
                  type: string
                  description: Código postal. Se acepta `postal_code` como alias.
                postal_code:
                  type: string
                  description: >-
                    Código postal para servicios basados en la dirección (alias
                    de `address_element_5`).
                driver_license_number:
                  type: string
                  description: >-
                    Número de licencia de conducir para los servicios
                    gubernamentales de verificación de documentos (AUS, NZL,
                    IND).
                driver_license_card_number:
                  type: string
                  description: >-
                    Número de la tarjeta física de la licencia de conducir,
                    cuando se exige por separado del número de licencia (AUS).
                driver_license_state:
                  type: string
                  description: >-
                    Estado o territorio de expedición de la licencia de conducir
                    (AUS).
                driver_license_version:
                  type: string
                  description: Código de versión de la licencia de conducir (NZL).
                passport_number:
                  type: string
                  description: >-
                    Número de pasaporte para los servicios gubernamentales de
                    verificación de pasaportes (AUS, NZL, IND, CHN).
                passport_expiration_date:
                  type: string
                  format: date
                  description: >-
                    Fecha de caducidad del pasaporte, `YYYY-MM-DD`, para los
                    servicios de verificación de pasaportes.
                passport_file_number:
                  type: string
                  description: Número de expediente del pasaporte (IND).
                passport_issue_country:
                  type: string
                  description: >-
                    País emisor del pasaporte (ISO 3166-1 alpha-3) para los
                    servicios de verificación de pasaportes.
                medicare_card_number:
                  type: string
                  description: Número de tarjeta Medicare (AUS).
                immi_card_number:
                  type: string
                  description: Número de la ImmiCard australiana.
                immi_card_expiry_date:
                  type: string
                  format: date
                  description: Fecha de caducidad de la ImmiCard australiana.
                citizenship_certificate_number:
                  type: string
                  description: Número del certificado de ciudadanía (AUS).
                birth_registration_number:
                  type: string
                  description: Número de registro del certificado de nacimiento (AUS).
                birth_registration_date:
                  type: string
                  format: date
                  description: Fecha de registro del certificado de nacimiento (AUS).
                birth_registration_state:
                  type: string
                  description: Estado de registro del certificado de nacimiento (AUS).
                marriage_certificate_number:
                  type: string
                  description: Número del certificado de matrimonio (AUS).
                change_of_name_certificate_number:
                  type: string
                  description: Número de certificado de cambio de nombre (AUS).
                first_partner_name:
                  type: string
                  description: Nombre de la pareja en un certificado de matrimonio (AUS).
                last_partner_name:
                  type: string
                  description: Apellido de la pareja en un certificado de matrimonio (AUS).
                voter_id:
                  type: string
                  description: Número de registro electoral (IND EPIC, IRL).
                epic_card:
                  type: string
                  description: Número de la tarjeta electoral EPIC de India.
                pan:
                  type: string
                  description: PAN (Permanent Account Number) de India.
                national_id:
                  type: string
                  description: >-
                    Número de documento nacional de identidad (CHN, MYS, KEN,
                    KHM, NGA, ZAF, …).
                cic:
                  type: string
                  description: >-
                    Código de Identificación de Credencial (CIC) del INE/IFE de
                    México, de 9 dígitos. Lo utiliza el servicio de vigencia de
                    la credencial del INE de México (`mex_ine_vigencia`).
                identificador_ciudadano:
                  type: string
                  description: >-
                    Identificador del Ciudadano del INE de México (9 dígitos).
                    Se usa con `cic` para los modelos modernos del INE (E/F/G/H)
                    en `mex_ine_vigencia`.
                ocr:
                  type: string
                  description: >-
                    Número OCR del INE de México (13 dígitos, en el reverso de
                    la credencial). Se usa con `cic` para el Modelo D en
                    `mex_ine_vigencia`.
                voter_number:
                  type: string
                  description: >-
                    Clave de Elector del INE de México (18 caracteres). Se usa
                    con `emission_number` para los modelos antiguos del IFE
                    (A/B/C) en `mex_ine_vigencia`.
                emission_number:
                  type: string
                  description: >-
                    Número de Emisión del INE de México. Se usa con
                    `voter_number` para los modelos antiguos del IFE (A/B/C) en
                    `mex_ine_vigencia`.
                bvn:
                  type: string
                  description: Número de Verificación Bancaria (BVN) de Nigeria.
                bank_card_number:
                  type: string
                  description: >-
                    Número de tarjeta bancaria (verificación de tarjeta bancaria
                    de CHN).
                company_registration_number:
                  type: string
                  description: >-
                    Número de registro de la empresa tal como lo emite el
                    registro mercantil: el CNPJ en Brasil (p. ej.,
                    `11222333000181`) y el número de registro en Sudáfrica (p.
                    ej., `1936/007721/06`). Lo requieren los servicios de
                    registro de empresas y de directores de empresas
                    (`bra_company_registry`, `bra_company_directors`,
                    `zaf_company_registry`, `zaf_company_directors`).
                company_name:
                  type: string
                  description: >-
                    Razón social registrada, cotejada con la inscripción en el
                    registro. Opcional para `zaf_company_registry`.
                initials:
                  type: string
                  description: >-
                    Las iniciales de la persona tal como aparecen impresas en el
                    documento. Obligatorio para `zaf_drivers_license`; se acepta
                    para `zaf_bank_account_holder`.
                licence_number:
                  type: string
                  description: >-
                    Número de licencia de conducir tal como figura impreso en la
                    tarjeta, para `zaf_drivers_license`. Si se omite, se usa
                    `document_number`.
                refugee_file_number:
                  type: string
                  description: >-
                    Número de expediente de refugiado emitido por el Department
                    of Home Affairs de Sudáfrica. Obligatorio para
                    `zaf_refugee`.
                bank_name:
                  type: string
                  description: >-
                    Nombre del banco donde está la cuenta. Obligatorio para
                    `zaf_bank_account_holder`.
                bank_account_number:
                  type: string
                  description: >-
                    Número de cuenta bancaria. Obligatorio para
                    `zaf_bank_account_holder`; aceptado por
                    `zaf_fraud_prevention`.
                account_type:
                  type: string
                  description: >-
                    Tipo de cuenta bancaria para `zaf_bank_account_holder`:
                    `current`, `savings`, `transmission`, `subscriptionShare` o
                    `notKnown`, sin distinguir entre mayúsculas y minúsculas.
                    Cualquier otro valor devuelve `400`. Omítelo cuando no
                    conozcas el tipo: en ese caso, la comprobación cruzada del
                    tipo de cuenta se indica como no confirmada.
                phone_number:
                  type: string
                  description: >-
                    Número de móvil de contacto, para los servicios que
                    verifican la posibilidad de contacto
                    (`zaf_bank_account_holder`, `zaf_fraud_prevention`,
                    `zaf_refugee`).
                right_thumb:
                  type: string
                  description: >-
                    Huella dactilar del pulgar derecho codificada en base64 para
                    `zaf_dha_fingerprint_match`, junto con `left_thumb` o por sí
                    sola.
                left_thumb:
                  type: string
                  description: >-
                    Huella dactilar del pulgar izquierdo codificada en base64
                    para `zaf_dha_fingerprint_match`, junto con `right_thumb` o
                    por sí sola.
                score_level:
                  type: integer
                  description: >-
                    Nivel mínimo de puntuación biométrica para
                    `zaf_criminal_face_screening`. El valor predeterminado es
                    `3`.
                max_matches:
                  type: integer
                  description: >-
                    Número máximo de coincidencias candidatas que devuelve
                    `zaf_criminal_face_screening`. El valor predeterminado es
                    `1`.
                vehicle_register_number:
                  type: string
                  description: >-
                    Número de registro del vehículo. Obligatorio, junto con
                    `vehicle_licence_plate` y `vin`, para
                    `zaf_vehicle_ownership`.
                vehicle_licence_plate:
                  type: string
                  description: >-
                    Número de matrícula (placa) del vehículo. Obligatorio, junto
                    con `vehicle_register_number` y `vin`, para
                    `zaf_vehicle_ownership`.
                vin:
                  type: string
                  description: >-
                    Número de identificación del vehículo (VIN o número de
                    chasis). Obligatorio, junto con `vehicle_register_number` y
                    `vehicle_licence_plate`, para `zaf_vehicle_ownership`.
                ssn:
                  type: string
                  description: Número de la Seguridad Social (EE. UU.).
                phone:
                  type: string
                  description: >-
                    Número de teléfono para los servicios de verificación de
                    teléfono.
                landline:
                  type: string
                  description: >-
                    Número de teléfono fijo para los servicios de verificación
                    de teléfono.
                email:
                  type: string
                  format: email
                  description: >-
                    Dirección de correo electrónico para los servicios de
                    verificación de identidad.
                country_of_residence:
                  type: string
                  description: >-
                    País de residencia en formato ISO 3166-1 alfa-2. Lo usan los
                    servicios globales de enriquecimiento de identidad (p. ej.
                    `glb_identity_enrichment`) para acotar la consulta.
                  example: US
                partial_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: NO_ACTION
                  description: >-
                    Qué efecto tiene un `partial_match` en
                    `database_validation.status`. Por defecto, `NO_ACTION` (el
                    estado sigue siendo `Approved`, con una advertencia).
                no_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: DECLINE
                  description: >-
                    Qué efecto tiene un `no_match` en
                    `database_validation.status`. Por defecto, `DECLINE`.
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Guarda la validación como una sesión (visible en la consola,
                    en el endpoint de decisión y en el webhook
                    `status.updated`). También cambia la forma de `validations`
                    en la respuesta: objetos por servicio cuando es `true`
                    (valor predeterminado) y un mapa de campos combinado cuando
                    es `false`.
                vendor_data:
                  type: string
                  description: >-
                    Tu identificador del usuario validado; se devuelve en la
                    respuesta y se almacena con la sesión.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    JSON libre que se guarda con la solicitud y se devuelve en
                    la respuesta.
            example:
              issuing_state: BRA
              services:
                - bra_cpf
              identification_number: '12345678900'
              first_name: John
              last_name: Doe
              date_of_birth: '1980-01-01'
              vendor_data: user-1234
          multipart/form-data:
            schema:
              type: object
              required:
                - issuing_state
              properties:
                issuing_state:
                  type: string
                  description: >-
                    Código de país ISO 3166-1 **alfa-3** del registro contra el
                    que se valida (p. ej. `BRA`, `ESP`, `COL`). Determina qué
                    servicios están disponibles. Los códigos no admitidos
                    devuelven `400` con la lista completa de opciones válidas.
                  example: BRA
                services:
                  type: array
                  items:
                    type: string
                  description: >-
                    `service_id` del catálogo que se ejecutarán para este país
                    (p. ej., `["bra_cpf"]`). También acepta una sola cadena o
                    una cadena separada por comas o codificada en JSON. **Si se
                    omite o está vacío, se ejecuta exactamente un servicio
                    predeterminado**: el servicio activo más consolidado del
                    país; los servicios más recientes, biométricos y de pago por
                    uso deben indicarse explícitamente. Enviar `services` cambia
                    la respuesta al formato extendido (añade `services_used` y
                    `match_score`). Cada id debe existir y estar activo para el
                    `issuing_state`; los servicios que requieren onboarding
                    devuelven `400` hasta que se activen para tu organización.
                    Consulta los servicios disponibles por país mediante `GET
                    /v1/organization/database-validation-countries/` (un
                    endpoint de catálogo no documentado en esta especificación)
                    o el editor de flujos de la Business Console.
                  example:
                    - bra_cpf
                validation_type:
                  type: string
                  deprecated: true
                  description: >-
                    OBSOLETO. Se acepta por compatibilidad con versiones
                    anteriores, pero se ignora: el `validation_type` de la
                    respuesta ahora se deriva de cuántos servicios obtuvieron
                    una coincidencia total. Usa `services` para fijar servicios
                    concretos.
                consent:
                  type: boolean
                  default: false
                  description: >-
                    Establécelo en `true` cuando el usuario final haya dado su
                    consentimiento explícito para los servicios de validación
                    seleccionados. Obligatorio para los servicios marcados con
                    `requires_consent=true` en el catálogo: sin él, esos
                    servicios devuelven `400` con `services_requiring_consent`.
                identification_number:
                  type: string
                  description: >-
                    Número de identificación universal: se asigna
                    automáticamente al campo específico del país correcto, por
                    lo que puedes usarlo en lugar de
                    `personal_number`/`tax_number`/`document_number`:
                    ARG→document_number (DNI), BOL→document_number (CI),
                    BRA→tax_number (CPF, 11 dígitos), CHL→personal_number (RUT),
                    COL→personal_number (Cédula), CRI→personal_number (Cédula),
                    DOM→personal_number (Cédula, 11 dígitos),
                    ECU→personal_number (Cédula, 10 dígitos),
                    ESP→personal_number (DNI/NIE), GTM→document_number (DPI),
                    HND→document_number (DNI), MEX→personal_number (CURP, 18
                    caracteres), PAN→personal_number (Cédula),
                    PER→personal_number (DNI, 8 dígitos), PRY→document_number
                    (CI), SLV→document_number (DUI), URY→personal_number (CI),
                    VEN→document_number (Cédula). Nunca sobrescribe un campo
                    específico del país proporcionado explícitamente.
                first_name:
                  type: string
                  description: >-
                    El nombre de pila de la persona. Obligatorio en algunos
                    servicios o países.
                  example: John
                last_name:
                  type: string
                  description: >-
                    El apellido de la persona. Obligatorio en algunos servicios
                    o países.
                  example: Doe
                middle_name:
                  type: string
                  description: >-
                    Segundo nombre, utilizado por algunos servicios nacionales
                    (AUS, NZL, …).
                full_name:
                  type: string
                  description: >-
                    Nombre completo: algunos servicios lo aceptan en lugar del
                    nombre y el apellido (p. ej., los servicios de CHN, que
                    comparan el nombre en escritura nativa).
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Fecha de nacimiento, `YYYY-MM-DD`. Muchos servicios la
                    exigen.
                  example: '1980-01-01'
                personal_number:
                  type: string
                  description: >-
                    Identificador personal único emitido por el gobierno. Lo
                    usan: CHL (RUT), COL (Cédula), CRI, DOM, ECU, ESP (DNI/NIE),
                    MEX (CURP), PAN (Cédula), PER (DNI), URY. Considera usar
                    `identification_number` en su lugar.
                tax_number:
                  type: string
                  description: >-
                    Número de identificación fiscal. Lo usa: BRA (CPF, 11
                    dígitos). Considera usar `identification_number` en su
                    lugar.
                document_number:
                  type: string
                  description: >-
                    Número de documento. Lo usan: ARG (DNI), BOL (CI), GTM
                    (DPI), HND (DNI), PRY (CI), SLV (DUI), VEN (Cédula).
                    Considera usar `identification_number` en su lugar.
                document_type:
                  type: string
                  enum:
                    - P
                    - DL
                    - ID
                    - RP
                    - SSC
                    - HIC
                    - WP
                    - TC
                    - VISA
                    - PSC
                    - BC
                    - OTHER
                  description: >-
                    Tipo de documento que se valida: `P` pasaporte, `DL`
                    licencia de conducir, `ID` documento nacional de identidad,
                    `RP` permiso de residencia (además de `SSC`, `HIC`, `WP`,
                    `TC`, `VISA`, `PSC`, `BC`, `OTHER`). Lo exigen algunos
                    servicios (p. ej., ESP).
                expiration_date:
                  type: string
                  format: date
                  description: >-
                    Fecha de caducidad del documento, `YYYY-MM-DD`. Obligatoria
                    para la validación de ESP (España).
                  example: '2030-01-15'
                date_of_issue:
                  type: string
                  format: date
                  description: >-
                    Fecha de expedición del documento, `YYYY-MM-DD` (fecha de
                    expedición). Obligatoria para la validación de la cédula de
                    COL (Colombia).
                  example: '2015-06-20'
                nationality:
                  type: string
                  description: >-
                    Nacionalidad en formato ISO 3166-1 alfa-3. Algunos servicios
                    la exigen.
                gender:
                  type: string
                  enum:
                    - M
                    - F
                    - X
                  description: >-
                    Género: `M`, `F` o `X` (otro/desconocido). Obligatorio para
                    la validación RENAPER de Argentina (`arg_renaper`).
                address:
                  description: >-
                    Dirección de residencia. Es preferible el objeto
                    estructurado `{"street_1":"123 Main St","street_2":"Apt
                    4B","city":"Springfield","region":"IL","postal_code":"62701","country":"US"}`;
                    se sigue aceptando una cadena completa en una sola línea.
                    Obligatoria para los servicios de verificación de dirección;
                    cuando un servicio define requisitos de dirección, las
                    partes que falten devuelven `400` con
                    `address_fields_required_by`.
                  oneOf:
                    - type: object
                      properties:
                        street_1:
                          type: string
                        street_2:
                          type: string
                        city:
                          type: string
                        region:
                          type: string
                        postal_code:
                          type: string
                        country:
                          type: string
                    - type: string
                      description: Dirección completa en una sola línea (formato heredado).
                address_element_1:
                  type: string
                  description: >-
                    Dirección de la calle, incluidos el número y el tipo de vía.
                    Si se omite, se deriva de `address`.
                address_element_2:
                  type: string
                  description: >-
                    Apartamento, unidad, edificio, planta o línea adicional de
                    la dirección. Envíalo solo cuando lo tengas de forma
                    explícita.
                address_element_3:
                  type: string
                  description: >-
                    Ciudad, barrio, distrito, localidad o vecindario. Si se
                    omite, se obtiene de `address`.
                address_element_4:
                  type: string
                  description: >-
                    Estado, provincia, región o localidad. Si se omite, se
                    deriva de `address`.
                address_element_5:
                  type: string
                  description: Código postal. Se acepta `postal_code` como alias.
                postal_code:
                  type: string
                  description: >-
                    Código postal para servicios basados en la dirección (alias
                    de `address_element_5`).
                driver_license_number:
                  type: string
                  description: >-
                    Número de licencia de conducir para los servicios
                    gubernamentales de verificación de documentos (AUS, NZL,
                    IND).
                driver_license_card_number:
                  type: string
                  description: >-
                    Número de la tarjeta física de la licencia de conducir,
                    cuando se exige por separado del número de licencia (AUS).
                driver_license_state:
                  type: string
                  description: >-
                    Estado o territorio de expedición de la licencia de conducir
                    (AUS).
                driver_license_version:
                  type: string
                  description: Código de versión de la licencia de conducir (NZL).
                passport_number:
                  type: string
                  description: >-
                    Número de pasaporte para los servicios gubernamentales de
                    verificación de pasaportes (AUS, NZL, IND, CHN).
                passport_expiration_date:
                  type: string
                  format: date
                  description: >-
                    Fecha de caducidad del pasaporte, `YYYY-MM-DD`, para los
                    servicios de verificación de pasaportes.
                passport_file_number:
                  type: string
                  description: Número de expediente del pasaporte (IND).
                passport_issue_country:
                  type: string
                  description: >-
                    País emisor del pasaporte (ISO 3166-1 alpha-3) para los
                    servicios de verificación de pasaportes.
                medicare_card_number:
                  type: string
                  description: Número de tarjeta Medicare (AUS).
                immi_card_number:
                  type: string
                  description: Número de la ImmiCard australiana.
                immi_card_expiry_date:
                  type: string
                  format: date
                  description: Fecha de caducidad de la ImmiCard australiana.
                citizenship_certificate_number:
                  type: string
                  description: Número del certificado de ciudadanía (AUS).
                birth_registration_number:
                  type: string
                  description: Número de registro del certificado de nacimiento (AUS).
                birth_registration_date:
                  type: string
                  format: date
                  description: Fecha de registro del certificado de nacimiento (AUS).
                birth_registration_state:
                  type: string
                  description: Estado de registro del certificado de nacimiento (AUS).
                marriage_certificate_number:
                  type: string
                  description: Número del certificado de matrimonio (AUS).
                change_of_name_certificate_number:
                  type: string
                  description: Número de certificado de cambio de nombre (AUS).
                first_partner_name:
                  type: string
                  description: Nombre de la pareja en un certificado de matrimonio (AUS).
                last_partner_name:
                  type: string
                  description: Apellido de la pareja en un certificado de matrimonio (AUS).
                voter_id:
                  type: string
                  description: Número de registro electoral (IND EPIC, IRL).
                epic_card:
                  type: string
                  description: Número de la tarjeta electoral EPIC de India.
                pan:
                  type: string
                  description: PAN (Permanent Account Number) de India.
                national_id:
                  type: string
                  description: >-
                    Número de documento nacional de identidad (CHN, MYS, KEN,
                    KHM, NGA, ZAF, …).
                cic:
                  type: string
                  description: >-
                    Código de Identificación de Credencial (CIC) del INE/IFE de
                    México, de 9 dígitos. Lo utiliza el servicio de vigencia de
                    la credencial del INE de México (`mex_ine_vigencia`).
                identificador_ciudadano:
                  type: string
                  description: >-
                    Identificador del Ciudadano del INE de México (9 dígitos).
                    Se usa con `cic` para los modelos modernos del INE (E/F/G/H)
                    en `mex_ine_vigencia`.
                ocr:
                  type: string
                  description: >-
                    Número OCR del INE de México (13 dígitos, en el reverso de
                    la credencial). Se usa con `cic` para el Modelo D en
                    `mex_ine_vigencia`.
                voter_number:
                  type: string
                  description: >-
                    Clave de Elector del INE de México (18 caracteres). Se usa
                    con `emission_number` para los modelos antiguos del IFE
                    (A/B/C) en `mex_ine_vigencia`.
                emission_number:
                  type: string
                  description: >-
                    Número de Emisión del INE de México. Se usa con
                    `voter_number` para los modelos antiguos del IFE (A/B/C) en
                    `mex_ine_vigencia`.
                bvn:
                  type: string
                  description: Número de Verificación Bancaria (BVN) de Nigeria.
                bank_card_number:
                  type: string
                  description: >-
                    Número de tarjeta bancaria (verificación de tarjeta bancaria
                    de CHN).
                company_registration_number:
                  type: string
                  description: >-
                    Número de registro de la empresa tal como lo emite el
                    registro mercantil: el CNPJ en Brasil (p. ej.,
                    `11222333000181`) y el número de registro en Sudáfrica (p.
                    ej., `1936/007721/06`). Lo requieren los servicios de
                    registro de empresas y de directores de empresas
                    (`bra_company_registry`, `bra_company_directors`,
                    `zaf_company_registry`, `zaf_company_directors`).
                company_name:
                  type: string
                  description: >-
                    Razón social registrada, cotejada con la inscripción en el
                    registro. Opcional para `zaf_company_registry`.
                initials:
                  type: string
                  description: >-
                    Las iniciales de la persona tal como aparecen impresas en el
                    documento. Obligatorio para `zaf_drivers_license`; se acepta
                    para `zaf_bank_account_holder`.
                licence_number:
                  type: string
                  description: >-
                    Número de licencia de conducir tal como figura impreso en la
                    tarjeta, para `zaf_drivers_license`. Si se omite, se usa
                    `document_number`.
                refugee_file_number:
                  type: string
                  description: >-
                    Número de expediente de refugiado emitido por el Department
                    of Home Affairs de Sudáfrica. Obligatorio para
                    `zaf_refugee`.
                bank_name:
                  type: string
                  description: >-
                    Nombre del banco donde está la cuenta. Obligatorio para
                    `zaf_bank_account_holder`.
                bank_account_number:
                  type: string
                  description: >-
                    Número de cuenta bancaria. Obligatorio para
                    `zaf_bank_account_holder`; aceptado por
                    `zaf_fraud_prevention`.
                account_type:
                  type: string
                  description: >-
                    Tipo de cuenta bancaria para `zaf_bank_account_holder`:
                    `current`, `savings`, `transmission`, `subscriptionShare` o
                    `notKnown`, sin distinguir entre mayúsculas y minúsculas.
                    Cualquier otro valor devuelve `400`. Omítelo cuando no
                    conozcas el tipo: en ese caso, la comprobación cruzada del
                    tipo de cuenta se indica como no confirmada.
                phone_number:
                  type: string
                  description: >-
                    Número de móvil de contacto, para los servicios que
                    verifican la posibilidad de contacto
                    (`zaf_bank_account_holder`, `zaf_fraud_prevention`,
                    `zaf_refugee`).
                right_thumb:
                  type: string
                  description: >-
                    Huella dactilar del pulgar derecho codificada en base64 para
                    `zaf_dha_fingerprint_match`, junto con `left_thumb` o por sí
                    sola.
                left_thumb:
                  type: string
                  description: >-
                    Huella dactilar del pulgar izquierdo codificada en base64
                    para `zaf_dha_fingerprint_match`, junto con `right_thumb` o
                    por sí sola.
                score_level:
                  type: integer
                  description: >-
                    Nivel mínimo de puntuación biométrica para
                    `zaf_criminal_face_screening`. El valor predeterminado es
                    `3`.
                max_matches:
                  type: integer
                  description: >-
                    Número máximo de coincidencias candidatas que devuelve
                    `zaf_criminal_face_screening`. El valor predeterminado es
                    `1`.
                vehicle_register_number:
                  type: string
                  description: >-
                    Número de registro del vehículo. Obligatorio, junto con
                    `vehicle_licence_plate` y `vin`, para
                    `zaf_vehicle_ownership`.
                vehicle_licence_plate:
                  type: string
                  description: >-
                    Número de matrícula (placa) del vehículo. Obligatorio, junto
                    con `vehicle_register_number` y `vin`, para
                    `zaf_vehicle_ownership`.
                vin:
                  type: string
                  description: >-
                    Número de identificación del vehículo (VIN o número de
                    chasis). Obligatorio, junto con `vehicle_register_number` y
                    `vehicle_licence_plate`, para `zaf_vehicle_ownership`.
                ssn:
                  type: string
                  description: Número de la Seguridad Social (EE. UU.).
                phone:
                  type: string
                  description: >-
                    Número de teléfono para los servicios de verificación de
                    teléfono.
                landline:
                  type: string
                  description: >-
                    Número de teléfono fijo para los servicios de verificación
                    de teléfono.
                email:
                  type: string
                  format: email
                  description: >-
                    Dirección de correo electrónico para los servicios de
                    verificación de identidad.
                country_of_residence:
                  type: string
                  description: >-
                    País de residencia en formato ISO 3166-1 alfa-2. Lo usan los
                    servicios globales de enriquecimiento de identidad (p. ej.
                    `glb_identity_enrichment`) para acotar la consulta.
                  example: US
                partial_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: NO_ACTION
                  description: >-
                    Qué efecto tiene un `partial_match` en
                    `database_validation.status`. Por defecto, `NO_ACTION` (el
                    estado sigue siendo `Approved`, con una advertencia).
                no_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: DECLINE
                  description: >-
                    Qué efecto tiene un `no_match` en
                    `database_validation.status`. Por defecto, `DECLINE`.
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Guarda la validación como una sesión (visible en la consola,
                    en el endpoint de decisión y en el webhook
                    `status.updated`). También cambia la forma de `validations`
                    en la respuesta: objetos por servicio cuando es `true`
                    (valor predeterminado) y un mapa de campos combinado cuando
                    es `false`.
                vendor_data:
                  type: string
                  description: >-
                    Tu identificador del usuario validado; se devuelve en la
                    respuesta y se almacena con la sesión.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    JSON libre que se guarda con la solicitud y se devuelve en
                    la respuesta.
                selfie:
                  type: string
                  format: binary
                  description: >-
                    Imagen de selfie (`jpg`, `jpeg`, `png`, `webp`; máximo 2 MB:
                    las imágenes se comprimen a ~1.5 MB antes de enviarse al
                    registro) para servicios de validación biométrica, por
                    ejemplo RENAPER de Argentina (`arg_renaper`) y SIB de Panamá
                    (`pan_cedula_sib`, `pan_cedula_sib_plus`). Es obligatoria
                    siempre que un servicio seleccionado la incluya como campo
                    obligatorio. Solo disponible mediante `multipart/form-data`.
      responses:
        '200':
          description: >-
            Validación completada: al menos uno de los servicios seleccionados
            devolvió un resultado utilizable. Consulta
            `database_validation.match_type` para ver el resultado agregado,
            `validations` para ver las comparaciones de campos por servicio y
            los `outcome_code`, y `errors` (cuando está presente) para ver los
            servicios que fallaron.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      ID de la sesión guardada cuando `save_api_request=true`
                      (se puede usar con `GET
                      /v3/session/{sessionId}/decision/`); en caso contrario, un
                      UUID de correlación temporal.
                  database_validation:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                          - In Review
                        description: >-
                          `Declined` cuando el `match_type` global activa una
                          acción `DECLINE` (`no_match_action` es `DECLINE` de
                          forma predeterminada y `partial_match_action`,
                          `NO_ACTION`); `In Review` cuando ningún servicio
                          produjo una comparación utilizable, por ejemplo cuando
                          el único servicio seleccionado devolvió
                          `REGISTRY_UNAVAILABLE` o `INCONCLUSIVE`; `Approved` en
                          caso contrario. Una solicitud que seleccionó varios
                          servicios puede quedar en `Approved` por la
                          coincidencia de un servicio aunque otro no estuviera
                          disponible, así que revisa también `errors` y los
                          `outcome_code` de cada servicio.
                      issuing_state:
                        type: string
                        description: >-
                          Devuelve el país ISO 3166-1 alfa-3 con el que se
                          validó.
                        example: BRA
                      validation_type:
                        type: string
                        enum:
                          - one_by_one
                          - two_by_two
                        description: >-
                          Se deriva de los resultados: `two_by_two` cuando ≥2
                          servicios distintos produjeron una coincidencia
                          completa (en el número de identificación, en el nombre
                          completo y la fecha de nacimiento juntos, o en la
                          dirección sin contradicciones); `one_by_one` en caso
                          contrario. (El campo de la solicitud con el mismo
                          nombre está obsoleto y se ignora).
                      screened_data:
                        type: object
                        description: >-
                          Devuelve los campos de entrada que se enviaron a los
                          servicios seleccionados (las fechas se normalizan a
                          `YYYY-MM-DD`; una `selfie`, si se envía, se devuelve
                          como URL prefirmada; se añade `consent_obtained: true`
                          cuando se dio el consentimiento).
                      match_type:
                        type: string
                        nullable: true
                        enum:
                          - full_match
                          - partial_match
                          - no_match
                        description: >-
                          Resultado global agregado entre los servicios con
                          comparaciones a nivel de campo: si alguno es
                          `full_match` → `full_match`; si no, si alguno es
                          `partial_match` → `partial_match`; si no, `no_match`.
                          Los servicios que solo devuelven un resultado, como el
                          análisis biométrico de antecedentes penales, pueden
                          devolver `null`; consulta cada elemento de
                          `validations` para ver su `outcome_code`.
                      validations:
                        description: >-
                          La estructura depende de `save_api_request`. **`true`
                          (predeterminado):** un array de objetos por servicio
                          (`service_id`, `service_name`, `validation`,
                          `outcome_code`, `outcome_detail`, `source_data`).
                          **`false`:** un único objeto plano que combina los
                          resultados por campo de todos los servicios
                          (`{"full_name": "full_match", ...}`).
                        oneOf:
                          - type: array
                            items:
                              type: object
                              description: >-
                                Resultado de validación por servicio (se
                                devuelve cuando `save_api_request=true`, el
                                valor predeterminado).
                              properties:
                                service_id:
                                  type: string
                                  description: >-
                                    Id de catálogo del servicio que produjo este
                                    resultado (p. ej., `bra_cpf`).
                                  example: bra_cpf
                                service_name:
                                  type: string
                                  description: Nombre legible del servicio en el catálogo.
                                  example: Brazil - CPF status check
                                validation:
                                  type: object
                                  description: >-
                                    Comparación campo a campo entre tus datos de
                                    entrada y el registro que consta en el
                                    registro oficial. Las claves son nombres de
                                    campo canónicos (`full_name`,
                                    `date_of_birth`, `identification_number`,
                                    `address`, …); los valores son `full_match`,
                                    `partial_match` o `no_match`.
                                  additionalProperties:
                                    type: string
                                    enum:
                                      - full_match
                                      - partial_match
                                      - no_match
                                outcome_code:
                                  type: string
                                  enum:
                                    - MATCH
                                    - PARTIAL_MATCH
                                    - NO_MATCH
                                    - DOCUMENT_NOT_FOUND
                                    - INVALID_DOCUMENT_FORMAT
                                    - INVALID_INPUT
                                    - MINOR_BLOCKED
                                    - DECEASED
                                    - BIOMETRIC_NO_MATCH
                                    - BIOMETRIC_IMAGE_UNUSABLE
                                    - INCONCLUSIVE
                                    - DOCUMENT_SUPERSEDED
                                    - REGISTRY_UNAVAILABLE
                                    - REGISTRY_ERROR
                                  description: >-
                                    Resultado de la consulta al registro,
                                    independiente del proveedor.
                                    `MATCH`/`PARTIAL_MATCH`/`NO_MATCH` describen
                                    la comparación; `DOCUMENT_NOT_FOUND`
                                    significa que el identificador no está en el
                                    registro; `INCONCLUSIVE` significa que el
                                    registro no pudo confirmar en ningún sentido
                                    (se envía a revisión; NO es una no
                                    coincidencia); `BIOMETRIC_NO_MATCH` es una
                                    discrepancia facial definitiva, mientras que
                                    `BIOMETRIC_IMAGE_UNUSABLE` es un problema
                                    técnico de la imagen (vuelve a tomar la
                                    selfie); `DECEASED`/`MINOR_BLOCKED` son
                                    resultados derivados de la política del
                                    registro; `DOCUMENT_SUPERSEDED` significa
                                    que la identidad coincidió, pero la edición
                                    del documento presentado no es la que consta
                                    en el registro (se ha emitido una edición
                                    más reciente);
                                    `INVALID_DOCUMENT_FORMAT`/`INVALID_INPUT`
                                    significan que el propio registro rechazó
                                    los datos que se le enviaron;
                                    `REGISTRY_UNAVAILABLE`/`REGISTRY_ERROR`
                                    indican fallos en el servicio de origen.
                                outcome_detail:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Detalle sin procesar del estado del servicio
                                    de origen que respalda el código de
                                    resultado (p. ej., un código de estado HTTP
                                    o del registro).
                                source_data:
                                  type: object
                                  nullable: true
                                  description: >-
                                    Vista depurada y normalizada del registro,
                                    con nombres de campo canónicos
                                    (`identification_number`, `first_name`,
                                    `last_name`, `date_of_birth`, además de
                                    indicadores específicos del registro). Los
                                    campos de imagen, cuando existen, se
                                    devuelven como URL prefirmadas.
                          - type: object
                            additionalProperties:
                              type: string
                              enum:
                                - full_match
                                - partial_match
                                - no_match
                            description: >-
                              Resultados combinados a nivel de campo (formato
                              sin estado de `save_api_request=false`).
                      warnings:
                        type: array
                        items:
                          type: object
                          properties:
                            feature:
                              type: string
                              description: Función que emitió la advertencia.
                            risk:
                              type: string
                              description: Identificador de riesgo legible por máquina.
                            additional_data:
                              type: object
                              nullable: true
                              description: >-
                                Contexto adicional de la advertencia, cuando
                                está disponible.
                            log_type:
                              type: string
                              description: >-
                                `warning`, `information` o `error`: cómo afectó
                                el riesgo al resultado.
                            short_description:
                              type: string
                              description: Resumen de una línea legible para personas.
                            long_description:
                              type: string
                              description: Explicación completa y legible para personas.
                        description: >-
                          `DATABASE_VALIDATION_NO_MATCH` o
                          `DATABASE_VALIDATION_PARTIAL_MATCH` cuando
                          corresponda; vacío cuando la coincidencia es total.
                      errors:
                        type: array
                        description: >-
                          Presente solo cuando algunos (pero no todos) de los
                          servicios seleccionados fallaron. Cada entrada incluye
                          `service_id`, `code`, `message` y `retryable`. Un
                          servicio indicado aquí no aparece en `validations` ni
                          en `services_used`, y no se factura. Este array es el
                          único lugar donde aparece, así que revísalo incluso
                          cuando `status` sea `Approved`.
                        items:
                          type: object
                          properties:
                            service_id:
                              type: string
                            code:
                              type: string
                              example: empty_provider_response
                            message:
                              type: string
                            retryable:
                              type: boolean
                              description: >-
                                `true` cuando el servicio no produjo respuesta y
                                reintentarlo más tarde puede funcionar; `false`
                                cuando la fuente rechazó los datos que se le
                                enviaron y primero hay que corregir la entrada.
                              example: true
                      services_used:
                        type: array
                        items:
                          type: string
                        description: >-
                          Ids de catálogo de los servicios que devolvieron un
                          resultado facturable. **Solo está presente cuando la
                          solicitud envió `services` explícitamente.**
                      match_score:
                        type: number
                        description: >-
                          Fracción (0.0–1.0) de los servicios consultados que
                          produjeron una coincidencia completa (en el número de
                          identificación, en el nombre completo y la fecha de
                          nacimiento juntos, o en la dirección sin
                          contradicciones). **Solo está presente cuando la
                          solicitud envió `services` de forma explícita.**
                  vendor_data:
                    type: string
                    nullable: true
                    description: Devuelve el `vendor_data` que enviaste.
                  metadata:
                    type: object
                    nullable: true
                    description: Devuelve el `metadata` que enviaste.
                  created_at:
                    type: string
                    format: date-time
              examples:
                Full match (Approved):
                  summary: >-
                    save_api_request=true predeterminado: objetos `validations`
                    por servicio
                  value:
                    request_id: 7f9a1c0e-1f2b-4f6e-9d3a-2b1c0e7f9a1c
                    database_validation:
                      status: Approved
                      issuing_state: BRA
                      validation_type: one_by_one
                      screened_data:
                        tax_number: '12345678900'
                        first_name: John
                        last_name: Doe
                        date_of_birth: '1980-01-01'
                      match_type: full_match
                      validations:
                        - validation:
                            full_name: full_match
                            date_of_birth: full_match
                            identification_number: full_match
                          outcome_code: MATCH
                          outcome_detail: '200'
                          service_id: bra_cpf
                          service_name: Brazil - CPF status check
                          source_data:
                            identification_number: '12345678900'
                            first_name: JOHN
                            last_name: DOE
                            date_of_birth: '1980-01-01'
                            lgpd_minor: false
                            minor_under_16: false
                            minor_under_18: false
                      warnings: []
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-11T10:30:00.000000+00:00'
                Explicit services (extended shape):
                  summary: >-
                    La solicitud envió `services`: la respuesta añade
                    `services_used` y `match_score`
                  value:
                    request_id: b3e7c1a2-9d4f-4f0b-8a6c-5e2d1f0a9b3e
                    database_validation:
                      status: Approved
                      issuing_state: BRA
                      validation_type: one_by_one
                      screened_data:
                        tax_number: '12345678900'
                        first_name: John
                        last_name: Doe
                        date_of_birth: '1980-01-01'
                      match_type: full_match
                      validations:
                        - validation:
                            full_name: full_match
                            date_of_birth: full_match
                            identification_number: full_match
                          outcome_code: MATCH
                          outcome_detail: '200'
                          service_id: bra_cpf
                          service_name: Brazil - CPF status check
                          source_data:
                            identification_number: '12345678900'
                            first_name: JOHN
                            last_name: DOE
                            date_of_birth: '1980-01-01'
                            lgpd_minor: false
                            minor_under_16: false
                            minor_under_18: false
                      warnings: []
                      services_used:
                        - bra_cpf
                      match_score: 1
                    vendor_data: user-1234
                    metadata: null
                    created_at: '2026-06-11T10:30:00.000000+00:00'
                No match (Declined):
                  summary: >-
                    El registro no coincide: valor predeterminado
                    `no_match_action=DECLINE`
                  value:
                    request_id: 0a1b2c3d-4e5f-6789-abcd-ef0123456789
                    database_validation:
                      status: Declined
                      issuing_state: BRA
                      validation_type: one_by_one
                      screened_data:
                        tax_number: '12345678900'
                        first_name: John
                        last_name: Doe
                        date_of_birth: '1980-01-01'
                      match_type: no_match
                      validations:
                        - validation:
                            full_name: no_match
                            date_of_birth: no_match
                            identification_number: no_match
                          outcome_code: NO_MATCH
                          outcome_detail: '200'
                          service_id: bra_cpf
                          service_name: Brazil - CPF status check
                          source_data:
                            identification_number: '00987654321'
                            first_name: TOTALLY
                            last_name: DIFFERENT NAME
                            date_of_birth: '1999-01-01'
                            lgpd_minor: false
                            minor_under_16: false
                            minor_under_18: false
                      warnings:
                        - feature: DATABASE_VALIDATION
                          risk: DATABASE_VALIDATION_NO_MATCH
                          additional_data: null
                          log_type: error
                          short_description: Database validation no match
                          long_description: >-
                            The system identified a no match in the database
                            validation, requiring further investigation.
                    vendor_data: null
                    metadata: null
                    created_at: '2026-06-11T10:31:00.000000+00:00'
                Stateless (save_api_request=false):
                  summary: >-
                    `validations` se condensa en un mapa de campos combinado; no
                    se almacena nada
                  value:
                    request_id: c4d5e6f7-8901-2345-6789-abcdef012345
                    database_validation:
                      status: Approved
                      issuing_state: BRA
                      validation_type: one_by_one
                      screened_data:
                        tax_number: '12345678900'
                        first_name: John
                        last_name: Doe
                        date_of_birth: '1980-01-01'
                      match_type: full_match
                      validations:
                        full_name: full_match
                        date_of_birth: full_match
                        identification_number: full_match
                      warnings: []
                    vendor_data: null
                    metadata: null
                    created_at: '2026-06-11T10:32:00.000000+00:00'
        '400':
          description: >-
            Error de validación: no se factura nada. Los errores de campo de la
            comprobación previa se producen antes de cualquier llamada externa.
            Si todos los intentos sin respuesta rechazan explícitamente la
            entrada, la respuesta incluye en su lugar `validation_errors` con
            `code: provider_rejected_input` y `retryable: false`; corrige la
            entrada antes de reintentar. Los problemas a nivel de campo usan el
            formato estándar de DRF; los problemas del catálogo devuelven un
            array `services` (además de `requires_onboarding` o
            `services_requiring_consent` cuando corresponde); los errores por
            campos que faltan incluyen `fields_required_by`, que asocia cada
            campo que falta con los servicios que lo exigen; los servicios que
            necesitan al menos un identificador adicional (por ejemplo,
            `usa_states_credit_bureau`, que no puede verificar solo un nombre)
            devuelven `any_field_required_by`, que asocia cada servicio con los
            campos de los que al menos uno debe estar presente; los problemas de
            formato que se comprueban por servicio devuelven
            `invalid_fields_by_service`.
          content:
            application/json:
              examples:
                Invalid issuing_state:
                  summary: >-
                    País no admitido: el mensaje enumera todos los códigos
                    alfa-3 válidos
                  value:
                    error:
                      - >-
                        Invalid issuing state. Valid options are: ARE, ARG, AUS,
                        AUT, BEL, BGD, BOL, BRA, CAN, CHE, CHL, CHN, CIV, COL,
                        CRI, CZE, DEU, DNK, DOM, ECU, ESP, FIN, FRA, GBR, GHA,
                        GLB, GRC, GTM, HKG, HND, IDN, IND, IRL, ITA, KEN, KHM,
                        MAR, MEX, MYS, NGA, NLD, NOR, NZL, OMN, PAN, PER, PHL,
                        POL, PRT, PRY, QAT, SGP, SLV, SVK, SWE, THA, UGA, URY,
                        USA, VEN, ZAF, ZMB, ZWE
                Missing required fields:
                  summary: >-
                    Unión de los campos obligatorios de los servicios
                    seleccionados, con la indicación de campos universales
                  value:
                    error:
                      - >-
                        Missing required fields: tax_number (or use
                        'identification_number' which maps to 'tax_number' for
                        BRA)
                    fields_required_by:
                      tax_number:
                        - bra_cpf
                Unknown service id:
                  summary: '`services` contiene un id que no está en el catálogo'
                  value:
                    services:
                      - 'Unknown service_id(s): [''bogus_service'']'
                Service not live for country:
                  summary: >-
                    `services` nombra un servicio de otro país (o una entrada
                    provisional)
                  value:
                    services:
                      - >-
                        Services not currently live for PER: ['bra_cpf'].
                        Available services: ['per_dni', 'per_residential',
                        'per_tax_registration']
                Service requires onboarding:
                  summary: >-
                    El servicio existe, pero aún no está activado para tu
                    organización
                  value:
                    services:
                      - >-
                        Services require onboarding before they can be enabled
                        for AUS: ['aus_australia_driver_licence']. Contact Didit
                        support to activate them.
                    requires_onboarding:
                      - aus_australia_driver_licence
                Consent missing:
                  summary: >-
                    Un servicio seleccionado está marcado con
                    requires_consent=true y `consent` no era `true`
                  value:
                    consent:
                      - >-
                        Explicit end-user consent is required for these database
                        validation services: ['chn_national_id']. Send
                        `consent=true`.
                    services_requiring_consent:
                      - chn_national_id
                Country format rule violation:
                  summary: >-
                    El identificador no cumple la regla de formato del país
                    (longitud/dígitos/regex)
                  value:
                    tax_number:
                      - >-
                        Invalid tax number for BRA: Brazilian CPF (exactly 11
                        digits). Must be exactly 11 characters long (got 10).
                Service-specific format violation:
                  summary: >-
                    Un campo no cumple los requisitos de formato propios del
                    servicio seleccionado
                  value:
                    error:
                      - >-
                        One or more fields do not match the format required by
                        the selected service.
                    invalid_fields_by_service:
                      chn_national_id:
                        - national_id_format
                Input refused by every attempt:
                  summary: Corrige los datos de entrada antes de reintentar
                  value:
                    error: >-
                      The source refused to run this query with the supplied
                      input.
                    validation_errors:
                      - service_id: bra_cpf
                        code: provider_rejected_input
                        message: >-
                          The source refused to run this query with the supplied
                          input.
                        retryable: false
              schema:
                type: object
                additionalProperties: true
                properties:
                  error:
                    description: >-
                      Explicación a nivel de solicitud o errores de campo de la
                      comprobación previa.
                    oneOf:
                      - type: string
                      - type: array
                        items:
                          type: string
                  validation_errors:
                    type: array
                    description: >-
                      Presente cuando todos los intentos sin respuesta
                      rechazaron la entrada tras la comprobación previa.
                    items:
                      type: object
                      properties:
                        service_id:
                          type: string
                        code:
                          type: string
                        message:
                          type: string
                        retryable:
                          type: boolean
                          description: >-
                            Indica si reintentar más tarde puede resolver este
                            fallo del servicio. False significa que primero
                            debes corregir los datos proporcionados.
        '403':
          description: >-
            Permiso denegado. Se devuelve cuando falta el encabezado `x-api-key`
            y también cuando el saldo de la organización que realiza la llamada
            no la cubre; una clave incorrecta, revocada o expirada devuelve
            `401`. Si falta la clave, se devuelve `403` con `{"detail": ...}`;
            una clave incorrecta, revocada o expirada devuelve `401`. La falta
            de créditos devuelve `403` con `{"error": ...}` antes de que se
            realice cualquier análisis o llamada a un proveedor.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: >-
                    Falta el encabezado `x-api-key`, o la clave no es válida o
                    está revocada
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: El saldo de la organización no cubre la llamada
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            Límite de solicitudes superado. Todos los endpoints
            POST/PATCH/DELETE comparten un presupuesto de 300 solicitudes de
            escritura por minuto por clave de API. La respuesta incluye los
            encabezados `X-RateLimit-Limit`, `X-RateLimit-Remaining`,
            `X-RateLimit-Reset` y `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Más de 300 solicitudes de escritura en el minuto actual
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
              schema:
                type: object
                properties:
                  detail:
                    type: string
        '502':
          description: >-
            Ningún servicio seleccionado devolvió un resultado utilizable.
            Revisa cada entrada de validation_errors antes de reintentar; un
            HTTP 502 por sí solo no indica que el fallo sea transitorio. Una
            entrada empty_provider_response con retryable: true indica
            resultados no disponibles o sin explicación, incluido el caso de un
            proveedor principal que rechaza la solicitud seguido de un proveedor
            de respaldo no disponible. Las entradas heredadas
            provider_invalid_input y provider_validation_error, en cambio,
            requieren corregir los datos de entrada y pueden omitir retryable.
            No se factura nada. Cuando save_api_request=true, el intento fallido
            se registra como una sesión con estado Not Finished. Los fallos
            parciales devuelven 200 con database_validation.errors.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  validation_errors:
                    type: array
                    items:
                      type: object
                      properties:
                        service_id:
                          type: string
                        code:
                          type: string
                        message:
                          type: string
                        retryable:
                          type: boolean
                          description: >-
                            Indica si reintentar más tarde puede resolver este
                            fallo del servicio. False significa que primero
                            debes corregir los datos proporcionados.
              examples:
                Provider returned no result:
                  summary: Fallaron todos los servicios seleccionados
                  value:
                    error: >-
                      Database validation could not be performed. The external
                      validation service did not return a result. Please try
                      again later.
                    validation_errors:
                      - service_id: bra_cpf
                        code: empty_provider_response
                        message: >-
                          The provider did not return a database validation
                          result.
                        retryable: true
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/database-validation/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "issuing_state": "BRA",
                "services": ["bra_cpf"],
                "identification_number": "12345678900",
                "first_name": "John",
                "last_name": "Doe",
                "date_of_birth": "1980-01-01",
                "vendor_data": "user-1234"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.database_validation.validate(
                issuing_state="BRA",
                services=["bra_cpf"],
                identification_number="12345678900",
                first_name="John",
                last_name="Doe",
                date_of_birth="1980-01-01",
                vendor_data="user-1234",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.databaseValidation.validate({
              issuing_state: "BRA",
              services: ["bra_cpf"],
              identification_number: "12345678900",
              first_name: "John",
              last_name: "Doe",
              date_of_birth: "1980-01-01",
              vendor_data: "user-1234",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{\n\tIssuingState:         \"BRA\",\n\tServices:             didit.Some([]string{\"bra_cpf\"}),\n\tIdentificationNumber: didit.String(\"12345678900\"),\n\tFirstName:            didit.String(\"John\"),\n\tLastName:             didit.String(\"Doe\"),\n\tDateOfBirth:          didit.String(\"1980-01-01\"),\n\tVendorData:           didit.String(\"user-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.time.LocalDate;

            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.DatabaseValidationValidateParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
                    .issuingState("BRA")
                    .services(List.of("bra_cpf"))
                    .identificationNumber("12345678900")
                    .firstName("John")
                    .lastName("Doe")
                    .dateOfBirth(LocalDate.parse("1980-01-01"))
                    .vendorData("user-1234")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->databaseValidation->validate([
                'issuing_state' => 'BRA',
                'services' => ['bra_cpf'],
                'identification_number' => '12345678900',
                'first_name' => 'John',
                'last_name' => 'Doe',
                'date_of_birth' => '1980-01-01',
                'vendor_data' => 'user-1234',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.database_validation.validate(
              issuing_state: "BRA",
              services: ["bra_cpf"],
              identification_number: "12345678900",
              first_name: "John",
              last_name: "Doe",
              date_of_birth: "1980-01-01",
              vendor_data: "user-1234"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.DatabaseValidation.ValidateAsync(new
            DatabaseValidationValidateParams

            {
                IssuingState = "BRA",
                Services = new string[] { "bra_cpf" },
                IdentificationNumber = "12345678900",
                FirstName = "John",
                LastName = "Doe",
                DateOfBirth = "1980-01-01",
                VendorData = "user-1234",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clave de API de tu aplicación, que encontrarás en Developers -> API
        keys en la Business Console. La clave principal tiene acceso completo.
        Una clave con nombre puede tener un alcance limitado: ninguno, lectura o
        escritura por recurso, limitada a algunos flujos o a sesiones aprobadas,
        a una lista de direcciones IP y a una fecha de caducidad. 401 significa
        que la clave es incorrecta, se revocó o expiró; 403 significa que no se
        envió ninguna clave, que la clave no tiene acceso a este recurso o
        acción, o que la solicitud provino de una dirección fuera de su lista de
        IP; 404 en una ruta de sesión significa que la sesión está fuera de los
        flujos o estados de la clave. Una clave sin acceso a contenido
        multimedia recibe las URL de imágenes, videos y PDF como null, y una
        clave sin permiso de escritura en sesiones recibe los enlaces y tokens
        de sesión como null. Consulta https://docs.didit.me/console/api-keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.