> ## 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.

# Validation en base de données : API de correspondance ID

> Didit : validez l'identité via 100+ sources nationales et mondiales (POST /v3/database-validation/). Correspondance 1x1 et 2x2. Paiement à l'appel.

## Services basés sur l'adresse

Pour les services qui valident une adresse résidentielle ou une adresse de fourniture d'un service public, vous pouvez envoyer une seule `address`, et Didit la découpera avant de traiter la vérification. Pour obtenir le meilleur taux de correspondance, envoyez directement les champs d'adresse structurés de Didit :

| Champ | Signification |
| - | - |
| `address_element_1` | Adresse de voie, y compris le numéro et le type de voie |
| `address_element_2` | Complément facultatif : appartement, bâtiment, étage ou ligne d'adresse supplémentaire |
| `address_element_3` | Quartier, arrondissement, localité ou secteur |
| `address_element_4` | Ville, commune, État, province ou région |
| `address_element_5` | Code postal |

Les champs structurés remplacent la valeur unique `address`. `postal_code` est accepté comme alias de `address_element_5`.

## Consentement

Certains services de base de données exigent le consentement explicite de l'utilisateur final avant que le fournisseur puisse être interrogé. Le catalogue de services marque ces lignes avec `requires_consent=true`.

Envoyez `consent=true` lorsque le consentement de l'utilisateur s'applique aux services sélectionnés.

Didit rejette la requête avant tout appel au fournisseur et tout événement de facturation si un service sélectionné exige un consentement que vous n'envoyez pas.

## Envoi de fichiers

La validation en base de données utilise `multipart/form-data`. Les services biométriques qui exigent `selfie` l'exposent sous forme de champ d'envoi de fichier dans l'interface de test de l'API, ce qui vous permet de sélectionner directement une image au lieu de coller un chemin ou une chaîne base64.

Dans votre code, envoyez le fichier avec la syntaxe multipart habituelle :

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

## Erreurs de validation

Didit valide les champs obligatoires, la structure de l'adresse et les formats propres à chaque service avant d'appeler le fournisseur. Par exemple, les services de registre chinois comme `chn_national_id` et `chn_passport_verification` attendent `full_name` dans son écriture chinoise d'origine, et `chn_national_id` exige en plus un numéro d'identité national chinois valide de 15 ou 18 caractères, avec une clé de contrôle correcte.

Si une requête ne peut pas être exécutée, l'API renvoie des erreurs de champ explicites et aucune consommation n'est facturée. Si un fournisseur échoue après la vérification préalable, la réponse contient `validation_errors`, et les requêtes API enregistrées conservent ces erreurs dans le résultat de validation en base de données.

## Données rejetées et résultats indisponibles

Lorsqu'aucun service ne renvoie de résultat exploitable, examinez chaque entrée de `validation_errors` avant de décider si vous devez réessayer.
Le statut HTTP seul ne détermine pas si une nouvelle tentative est appropriée.
Une réponse `400` avec `code: "provider_rejected_input"` et `retryable: false` signifie que chaque tentative n'ayant pas abouti à une réponse a explicitement refusé les données fournies.
Corrigez les données fournies avant de réessayer.
Ces tentatives ne sont pas facturées.

Une réponse `502` avec `code: "empty_provider_response"` et `retryable: true` signifie que le service n'a pas pu produire de résultat exploitable pour une autre raison.
Cela inclut une donnée refusée suivie d'un repli indisponible, ou d'un repli qui ne fournit aucune explication.
Réessayez plus tard ; la réponse n'établit pas que la donnée est erronée.
Si une base de données continue d'échouer, Didit envoie un e-mail aux organisations qui l'ont utilisée récemment lorsque l'interruption se prolonge, puis de nouveau lorsque des vérifications réelles confirment qu'elle répond à nouveau, voir [Notifications de disponibilité](https://docs.didit.me/fr/core-technology/database-validation/overview.md#notifications-de-disponibilité).

Lorsque seuls certains services sélectionnés échouent, la requête aboutit malgré tout : la réponse est `200` et les services en échec sont listés sous `database_validation.errors[]`, chacun avec les mêmes champs `code` et `retryable`.
`database_validation.status` reflète alors les services qui ont répondu et peut valoir `Approved`. Consultez donc `errors[]` sur chaque réponse, et pas seulement en cas de `4xx` ou `5xx`.
Un service signalé à cet endroit est absent de `validations` et de `services_used`, et n'est pas facturé ; réessayez ce service seul.

D'autres erreurs `502` peuvent nécessiter une donnée corrigée. Par exemple, `provider_invalid_input` et `provider_validation_error` indiquent que les données ont été rejetées par la source ; la requête ne doit pas être réessayée sans modification, même lorsque l'ancienne réponse omet `retryable`.
Les consignes de nouvelle tentative pour `empty_provider_response` ne s'appliquent pas à ces codes.
Un résultat définitif indiquant une absence de correspondance est une vérification terminée, et non une panne de disponibilité.


## OpenAPI

````yaml fr/openapi-25.json POST /v3/database-validation/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/database-validation/:
    post:
      tags:
        - Standalone APIs
      summary: Validation en base de données (autonome)
      description: >-
        Validez les données d'identité d'une personne auprès de sources
        gouvernementales et de registres officiels — CPF au Brésil, RENAPER en
        Argentine, registres DNI en Espagne et au Pérou, INE au Mexique, et 100+
        autres services dans 60+ pays.


        **Sélection des services.** Chaque pays propose un ou plusieurs services
        du catalogue identifiés par un `service_id` (par exemple `bra_cpf`,
        `arg_renaper`, `pan_cedula_sib`). Spécifiez les services souhaités avec
        le tableau `services` — si vous l'omettez, exactement **un** service par
        défaut est exécuté (le service de production établi depuis le plus
        longtemps pour ce pays). L'envoi de `services` fait également passer la
        réponse au format étendu avec `services_used` et `match_score`.
        Découvrez les services, leurs champs requis et leurs prix via `GET
        /v1/organization/database-validation-countries/` (un endpoint du
        catalogue non documenté dans cette spécification) ou dans l'éditeur de
        workflow de la Business Console. Certains services sont signalés par
        `requires_consent=true` dans le catalogue et exigent `consent=true` ;
        d'autres nécessitent un onboarding pour votre organisation avant de
        pouvoir être appelés.


        **Champs d'entrée.** `identification_number` est un champ universel
        associé automatiquement au champ spécifique correspondant du pays (voir
        sa description). Les règles de format par pays sont appliquées avant
        tout appel à un fournisseur (par exemple, le CPF brésilien doit
        comporter exactement 11 chiffres) et les erreurs de format ne sont
        jamais facturées. Les services biométriques nécessitent le téléversement
        d'un `selfie` (multipart uniquement) ; le RENAPER argentin exige en
        outre `gender`.


        **Résultats.** Chaque service renvoie une structure de `validation`
        champ par champ ainsi qu'un `outcome_code` neutre vis-à-vis des
        fournisseurs (`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`). Notez les distinctions :
        `NO_MATCH` correspond à une discordance définitive, `INCONCLUSIVE`
        signifie que le registre n'a pu confirmer dans un sens ou dans l'autre
        (à examiner, sans refuser), et `BIOMETRIC_IMAGE_UNUSABLE` correspond à
        un problème technique de selfie (à reprendre), contrairement au résultat
        définitif `BIOMETRIC_NO_MATCH`. Le `match_type` global effectue une
        agrégation sur l'ensemble des services (au moins une correspondance
        totale → `full_match`, sinon au moins une correspondance partielle →
        `partial_match`, sinon `no_match`) et
        `no_match_action`/`partial_match_action` le traduisent en `status`
        final. `validation_type` est dérivé : `two_by_two` lorsque deux services
        distincts ou plus ont produit une correspondance totale (sur le numéro
        d'identification, sur les nom complet + date de naissance combinés, ou
        sur l'adresse sans contradiction), sinon `one_by_one`.


        **Persistance.** `save_api_request` est défini par défaut sur **true** :
        le résultat est stocké sous forme de session (`request_id` fonctionne
        avec `GET /v3/session/{sessionId}/decision/`), apparaît dans la console
        et déclenche un webhook `status.updated`. Il contrôle également le
        format de `validations` — des objets par service lorsqu'il est
        enregistré, une structure fusionnée `{field: match}` dans le cas
        contraire.


        **Facturation.** Par service : chaque service renvoyant un résultat
        facturable est débité à son propre prix du catalogue. Les services en
        échec ou ignorés ne sont pas facturés, et les requêtes rejetées avec un
        code `400` ne coûtent rien. La vérification préalable du solde couvre la
        somme des prix des services sélectionnés (`403` en cas de solde
        insuffisant).


        **Échecs.** Si aucun service sélectionné ne renvoie de résultat
        exploitable, l'API renvoie une erreur `400` avec `validation_errors` si
        chaque tentative non aboutie a explicitement refusé les données saisies
        (`provider_rejected_input`, `retryable: false`). Corrigez les données
        d'entrée avant de réessayer. Sinon, elle renvoie une erreur `502` avec
        `validation_errors` (`empty_provider_response`, `retryable: true`), y
        compris pour les cas mixtes de refus d'entrée et de tentatives de
        secours indisponibles ; rien n'est facturé (une session reste
        enregistrée avec le statut `Not Finished` lorsque
        `save_api_request=true`). Lorsque seuls certains services échouent, la
        réponse `200` contient leurs échecs dans `database_validation.errors`.


        **Sandbox.** Les clés des applications sandbox ignorent les appels aux
        registres ainsi que la facturation et renvoient une réponse statique
        `full_match` — le payload de sandbox inclut toujours `services_used` et
        `match_score: 100`, quelle que soit la manière dont `services` a été
        envoyé ; ne vérifiez donc pas l'activation conditionnelle du format
        étendu en production ni la fraction de 0.0–1.0 de `match_score` sur les
        réponses du sandbox.


        Envoyez la requête sous forme de `application/json`, ou de
        `multipart/form-data` lors du téléversement d'un `selfie`.
      operationId: post_v3database-validation
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - issuing_state
              properties:
                issuing_state:
                  type: string
                  description: >-
                    Code pays ISO 3166-1 **alpha-3** du registre auprès duquel
                    effectuer la validation (par exemple `BRA`, `ESP`, `COL`).
                    Détermine les services disponibles. Les codes non pris en
                    charge renvoient `400` avec la liste complète des options
                    valides.
                  example: BRA
                services:
                  type: array
                  items:
                    type: string
                  description: >-
                    `service_id` du catalogue à exécuter pour ce pays (par
                    exemple `["bra_cpf"]`). Accepte également une chaîne unique
                    ou une chaîne séparée par des virgules/encodée en JSON.
                    **S'il est omis ou vide, exactement un service par défaut
                    est exécuté** — le service en production le plus
                    anciennement établi pour le pays ; les services plus
                    récents, biométriques et à l'usage doivent être nommés
                    explicitement. Envoyer `services` fait basculer la réponse
                    vers le format étendu (ajoute `services_used` et
                    `match_score`). Chaque identifiant doit exister et être
                    actif pour l'`issuing_state` ; les services nécessitant un
                    onboarding renvoient `400` jusqu'à leur activation pour
                    votre organisation. Découvrez les services disponibles par
                    pays via `GET
                    /v1/organization/database-validation-countries/` (un
                    endpoint du catalogue non documenté dans cette
                    spécification) ou dans l'éditeur de workflow de la Business
                    Console.
                  example:
                    - bra_cpf
                validation_type:
                  type: string
                  deprecated: true
                  description: >-
                    OBSOLÈTE. Accepté pour des raisons de rétrocompatibilité
                    mais ignoré — le champ `validation_type` de la réponse est
                    désormais déterminé par le nombre de services ayant obtenu
                    une correspondance complète. Utilisez `services` pour cibler
                    des services spécifiques.
                consent:
                  type: boolean
                  default: false
                  description: >-
                    Définir sur `true` lorsque l'utilisateur final a
                    explicitement consenti aux services de validation
                    sélectionnés. Requis pour les services marqués avec
                    `requires_consent=true` dans le catalogue — sans lui, ces
                    services renvoient une erreur `400` avec
                    `services_requiring_consent`.
                identification_number:
                  type: string
                  description: >-
                    Numéro d'identification universel — mappé automatiquement au
                    champ propre au pays approprié, ce qui vous permet de
                    l'utiliser à la place de
                    `personal_number`/`tax_number`/`document_number` :
                    ARG→document_number (DNI), BOL→document_number (CI),
                    BRA→tax_number (CPF, 11 chiffres), CHL→personal_number
                    (RUT), COL→personal_number (Cédula), CRI→personal_number
                    (Cédula), DOM→personal_number (Cédula, 11 chiffres),
                    ECU→personal_number (Cédula, 10 chiffres),
                    ESP→personal_number (DNI/NIE), GTM→document_number (DPI),
                    HND→document_number (DNI), MEX→personal_number (CURP, 18
                    caractères), PAN→personal_number (Cédula),
                    PER→personal_number (DNI, 8 chiffres), PRY→document_number
                    (CI), SLV→document_number (DUI), URY→personal_number (CI),
                    VEN→document_number (Cédula). Il n'écrase jamais un champ
                    propre au pays explicitement fourni.
                first_name:
                  type: string
                  description: Le prénom de l'individu. Requis par certains services/pays.
                  example: John
                last_name:
                  type: string
                  description: >-
                    Le nom de famille de l'individu. Requis par certains
                    services/pays.
                  example: Doe
                middle_name:
                  type: string
                  description: >-
                    Deuxième prénom, utilisé par les services de certains pays
                    (AUS, NZL, …).
                full_name:
                  type: string
                  description: >-
                    Nom complet — certains services l'acceptent à la place du
                    prénom/nom (par ex. les services CHN, qui comparent le nom
                    dans le système d'écriture natif).
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Date de naissance, `YYYY-MM-DD`. Requise par de nombreux
                    services.
                  example: '1980-01-01'
                personal_number:
                  type: string
                  description: >-
                    Identifiant personnel unique émis par le gouvernement.
                    Utilisé par : CHL (RUT), COL (Cédula), CRI, DOM, ECU, ESP
                    (DNI/NIE), MEX (CURP), PAN (Cédula), PER (DNI), URY.
                    Envisagez d'utiliser plutôt `identification_number`.
                tax_number:
                  type: string
                  description: >-
                    Identifiant fiscal. Utilisé par : BRA (CPF, 11 chiffres).
                    Envisagez d'utiliser `identification_number` à la place.
                document_number:
                  type: string
                  description: >-
                    Numéro de document. Utilisé par : ARG (DNI), BOL (CI), GTM
                    (DPI), HND (DNI), PRY (CI), SLV (DUI), VEN (Cédula).
                    Envisagez d'utiliser `identification_number` à la place.
                document_type:
                  type: string
                  enum:
                    - P
                    - DL
                    - ID
                    - RP
                    - SSC
                    - HIC
                    - WP
                    - TC
                    - VISA
                    - PSC
                    - BC
                    - OTHER
                  description: >-
                    Type de document en cours de validation : `P` passeport,
                    `DL` permis de conduire, `ID` pièce d'identité nationale,
                    `RP` titre de séjour (plus `SSC`, `HIC`, `WP`, `TC`, `VISA`,
                    `PSC`, `BC`, `OTHER`). Requis par certains services (ex.
                    ESP).
                expiration_date:
                  type: string
                  format: date
                  description: >-
                    Date d'expiration du document, `YYYY-MM-DD`. Requise pour la
                    validation ESP (Espagne).
                  example: '2030-01-15'
                date_of_issue:
                  type: string
                  format: date
                  description: >-
                    Date de délivrance du document, `YYYY-MM-DD` (fecha de
                    expedición). Requise pour la validation de la cédula COL
                    (Colombie).
                  example: '2015-06-20'
                nationality:
                  type: string
                  description: >-
                    Nationalité au format ISO 3166-1 alpha-3. Requise par
                    certains services.
                gender:
                  type: string
                  enum:
                    - M
                    - F
                    - X
                  description: >-
                    Genre : `M`, `F`, ou `X` (autre/inconnu). Requis pour la
                    validation RENAPER de l'Argentine (`arg_renaper`).
                address:
                  description: >-
                    Adresse résidentielle. Privilégiez l'objet structuré
                    `{"street_1":"123 Main St","street_2":"Apt
                    4B","city":"Springfield","region":"IL","postal_code":"62701","country":"US"}`
                    ; une chaîne complète sur une seule ligne est toujours
                    acceptée. Requis par les services de vérification d'adresse
                    ; lorsqu'un service définit des exigences d'adresse, les
                    éléments manquants renvoient `400` avec
                    `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: Adresse complète sur une seule ligne (héritée).
                address_element_1:
                  type: string
                  description: >-
                    Adresse postale comprenant le numéro et le type de voie. En
                    cas d'omission, dérivée de `address`.
                address_element_2:
                  type: string
                  description: >-
                    Appartement, unité, bâtiment, étage ou ligne d'adresse
                    supplémentaire. À envoyer uniquement lorsque vous disposez
                    explicitement de cette information.
                address_element_3:
                  type: string
                  description: >-
                    Ville, banlieue, district, localité ou quartier. Si elle est
                    omise, dérivée de `address`.
                address_element_4:
                  type: string
                  description: >-
                    État, province, région ou ville. Si omis, dérivé de
                    `address`.
                address_element_5:
                  type: string
                  description: Code postal. `postal_code` est accepté comme alias.
                postal_code:
                  type: string
                  description: >-
                    Code postal pour les services basés sur l'adresse (alias de
                    `address_element_5`).
                driver_license_number:
                  type: string
                  description: >-
                    Numéro de permis de conduire pour les services
                    gouvernementaux de vérification de documents (AUS, NZL,
                    IND).
                driver_license_card_number:
                  type: string
                  description: >-
                    Numéro de carte physique du permis de conduire, lorsqu'il
                    est requis séparément du numéro de permis (AUS).
                driver_license_state:
                  type: string
                  description: >-
                    État ou territoire de délivrance du permis de conduire
                    (AUS).
                driver_license_version:
                  type: string
                  description: Code de version du permis de conduire (NZL).
                passport_number:
                  type: string
                  description: >-
                    Numéro de passeport pour les services gouvernementaux de
                    vérification de passeport (AUS, NZL, IND, CHN).
                passport_expiration_date:
                  type: string
                  format: date
                  description: >-
                    Date d'expiration du passeport, `YYYY-MM-DD`, pour les
                    services de vérification de passeport.
                passport_file_number:
                  type: string
                  description: Numéro de dossier de passeport (IND).
                passport_issue_country:
                  type: string
                  description: >-
                    Pays de délivrance du passeport (ISO 3166-1 alpha-3) pour
                    les services de vérification de passeport.
                medicare_card_number:
                  type: string
                  description: Numéro de carte Medicare (AUS).
                immi_card_number:
                  type: string
                  description: Numéro de l'ImmiCard australienne.
                immi_card_expiry_date:
                  type: string
                  format: date
                  description: Date d'expiration de l'ImmiCard australienne.
                citizenship_certificate_number:
                  type: string
                  description: Numéro de certificat de citoyenneté (AUS).
                birth_registration_number:
                  type: string
                  description: Numéro d'enregistrement de l'acte de naissance (AUS).
                birth_registration_date:
                  type: string
                  format: date
                  description: Date d'enregistrement de l'acte de naissance (AUS).
                birth_registration_state:
                  type: string
                  description: État d'enregistrement de l'acte de naissance (AUS).
                marriage_certificate_number:
                  type: string
                  description: Numéro de certificat de mariage (AUS).
                change_of_name_certificate_number:
                  type: string
                  description: Numéro de certificat de changement de nom (AUS).
                first_partner_name:
                  type: string
                  description: Prénom du partenaire sur un acte de mariage (AUS).
                last_partner_name:
                  type: string
                  description: >-
                    Nom de famille du conjoint sur un certificat de mariage
                    (AUS).
                voter_id:
                  type: string
                  description: Numéro d'électeur (IND EPIC, IRL).
                epic_card:
                  type: string
                  description: Numéro de carte d'électeur EPIC (Inde).
                pan:
                  type: string
                  description: PAN (Permanent Account Number) pour l'Inde.
                national_id:
                  type: string
                  description: >-
                    Numéro national d'identité (CHN, MYS, KEN, KHM, NGA, ZAF,
                    …).
                cic:
                  type: string
                  description: >-
                    Código de Identificación de Credencial (CIC) INE/IFE
                    mexicain, 9 chiffres. Utilisé par le service de validité de
                    la carte MEX INE (`mex_ine_vigencia`).
                identificador_ciudadano:
                  type: string
                  description: >-
                    Identificador del Ciudadano INE mexicain (9 chiffres).
                    Utilisé avec `cic` pour les modèles INE modernes (E/F/G/H)
                    dans `mex_ine_vigencia`.
                ocr:
                  type: string
                  description: >-
                    Numéro OCR INE mexicain (13 chiffres, au verso de la carte).
                    Utilisé avec `cic` pour le modèle D dans `mex_ine_vigencia`.
                voter_number:
                  type: string
                  description: >-
                    Clave de Elector INE mexicaine (18 caractères). Utilisée
                    avec `emission_number` pour les anciens modèles IFE (A/B/C)
                    dans `mex_ine_vigencia`.
                emission_number:
                  type: string
                  description: >-
                    Número de Emisión INE mexicain. Utilisé avec `voter_number`
                    pour les anciens modèles IFE (A/B/C) dans
                    `mex_ine_vigencia`.
                bvn:
                  type: string
                  description: Numéro de vérification bancaire nigérian.
                bank_card_number:
                  type: string
                  description: >-
                    Numéro de carte bancaire (vérification de carte bancaire
                    CHN).
                company_registration_number:
                  type: string
                  description: >-
                    Numéro d'immatriculation de l'entreprise tel que délivré par
                    le registre des sociétés : le CNPJ au Brésil (par ex.
                    `11222333000181`), le numéro d'immatriculation en Afrique du
                    Sud (par ex. `1936/007721/06`). Requis par les services de
                    registre des sociétés et de dirigeants d'entreprise
                    (`bra_company_registry`, `bra_company_directors`,
                    `zaf_company_registry`, `zaf_company_directors`).
                company_name:
                  type: string
                  description: >-
                    Raison sociale enregistrée, recoupée avec l'entrée du
                    registre. Facultatif pour `zaf_company_registry`.
                initials:
                  type: string
                  description: >-
                    Les initiales de la personne telles qu'imprimées sur le
                    document. Requises par `zaf_drivers_license` ; acceptées par
                    `zaf_bank_account_holder`.
                licence_number:
                  type: string
                  description: >-
                    Numéro de permis de conduire tel qu'imprimé sur la carte,
                    pour `zaf_drivers_license`. Lorsqu'il est omis,
                    `document_number` est utilisé.
                refugee_file_number:
                  type: string
                  description: >-
                    Numéro de dossier de réfugié délivré par le Department of
                    Home Affairs d'Afrique du Sud. Requis par `zaf_refugee`.
                bank_name:
                  type: string
                  description: >-
                    Nom de la banque détenant le compte. Requis par
                    `zaf_bank_account_holder`.
                bank_account_number:
                  type: string
                  description: >-
                    Numéro de compte bancaire. Requis par
                    `zaf_bank_account_holder` ; accepté par
                    `zaf_fraud_prevention`.
                account_type:
                  type: string
                  description: >-
                    Type de compte bancaire pour `zaf_bank_account_holder` :
                    `current`, `savings`, `transmission`, `subscriptionShare` ou
                    `notKnown`, insensible à la casse. Toute autre valeur
                    renvoie `400`. Omettez-le si vous ne connaissez pas le type
                    : la vérification croisée du type de compte est alors
                    indiquée comme non confirmée.
                phone_number:
                  type: string
                  description: >-
                    Numéro de téléphone mobile de contact, pour les services
                    effectuant des vérifications croisées de joignabilité
                    (`zaf_bank_account_holder`, `zaf_fraud_prevention`,
                    `zaf_refugee`).
                right_thumb:
                  type: string
                  description: >-
                    Empreinte du pouce droit encodée en Base64 pour
                    `zaf_dha_fingerprint_match`, avec `left_thumb` ou seule.
                left_thumb:
                  type: string
                  description: >-
                    Empreinte du pouce gauche encodée en Base64 pour
                    `zaf_dha_fingerprint_match`, avec `right_thumb` ou seule.
                score_level:
                  type: integer
                  description: >-
                    Niveau de score biométrique minimum pour
                    `zaf_criminal_face_screening`. La valeur par défaut est `3`.
                max_matches:
                  type: integer
                  description: >-
                    Nombre maximal de correspondances candidates renvoyées par
                    `zaf_criminal_face_screening`. Vaut par défaut `1`.
                vehicle_register_number:
                  type: string
                  description: >-
                    Numéro d'immatriculation du véhicule. Requis, avec
                    `vehicle_licence_plate` et `vin`, par
                    `zaf_vehicle_ownership`.
                vehicle_licence_plate:
                  type: string
                  description: >-
                    Numéro de plaque d'immatriculation du véhicule. Requis, avec
                    `vehicle_register_number` et `vin`, par
                    `zaf_vehicle_ownership`.
                vin:
                  type: string
                  description: >-
                    Numéro d'identification du véhicule (VIN ou numéro de
                    châssis). Requis, avec `vehicle_register_number` et
                    `vehicle_licence_plate`, par `zaf_vehicle_ownership`.
                ssn:
                  type: string
                  description: Numéro de sécurité sociale (États-Unis).
                phone:
                  type: string
                  description: >-
                    Numéro de téléphone pour les services de Vérification du
                    téléphone.
                landline:
                  type: string
                  description: >-
                    Numéro de ligne fixe pour les services de vérification de
                    téléphone.
                email:
                  type: string
                  format: email
                  description: Adresse e-mail pour les services de vérification d'identité.
                country_of_residence:
                  type: string
                  description: >-
                    Pays de résidence au format ISO 3166-1 alpha-2. Utilisé par
                    les services mondiaux d'enrichissement d'identité (par ex.
                    `glb_identity_enrichment`) pour cibler la recherche.
                  example: US
                partial_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: NO_ACTION
                  description: >-
                    Action effectuée par un `partial_match` sur
                    `database_validation.status`. Par défaut : `NO_ACTION` (le
                    statut reste `Approved`, avec un avertissement).
                no_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: DECLINE
                  description: >-
                    Action effectuée par un `no_match` sur
                    `database_validation.status`. Par défaut : `DECLINE`.
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Conserver la validation en tant que session (visibilité dans
                    la console, endpoint de décision, webhook `status.updated`).
                    Modifie également le format de réponse de `validations` :
                    des objets par service lorsque `true` (par défaut), une
                    table de champs fusionnée lorsque `false`.
                vendor_data:
                  type: string
                  description: >-
                    Votre identifiant pour l'utilisateur validé ; renvoyé en
                    écho et conservé avec la session.
                metadata:
                  type: object
                  nullable: true
                  description: JSON libre stocké avec la requête et renvoyé en écho.
            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: >-
                    Code pays ISO 3166-1 **alpha-3** du registre auprès duquel
                    effectuer la validation (par exemple `BRA`, `ESP`, `COL`).
                    Détermine les services disponibles. Les codes non pris en
                    charge renvoient `400` avec la liste complète des options
                    valides.
                  example: BRA
                services:
                  type: array
                  items:
                    type: string
                  description: >-
                    `service_id` du catalogue à exécuter pour ce pays (par
                    exemple `["bra_cpf"]`). Accepte également une chaîne unique
                    ou une chaîne séparée par des virgules/encodée en JSON.
                    **S'il est omis ou vide, exactement un service par défaut
                    est exécuté** — le service en production le plus
                    anciennement établi pour le pays ; les services plus
                    récents, biométriques et à l'usage doivent être nommés
                    explicitement. Envoyer `services` fait basculer la réponse
                    vers le format étendu (ajoute `services_used` et
                    `match_score`). Chaque identifiant doit exister et être
                    actif pour l'`issuing_state` ; les services nécessitant un
                    onboarding renvoient `400` jusqu'à leur activation pour
                    votre organisation. Découvrez les services disponibles par
                    pays via `GET
                    /v1/organization/database-validation-countries/` (un
                    endpoint du catalogue non documenté dans cette
                    spécification) ou dans l'éditeur de workflow de la Business
                    Console.
                  example:
                    - bra_cpf
                validation_type:
                  type: string
                  deprecated: true
                  description: >-
                    OBSOLÈTE. Accepté pour des raisons de rétrocompatibilité
                    mais ignoré — le champ `validation_type` de la réponse est
                    désormais déterminé par le nombre de services ayant obtenu
                    une correspondance complète. Utilisez `services` pour cibler
                    des services spécifiques.
                consent:
                  type: boolean
                  default: false
                  description: >-
                    Définir sur `true` lorsque l'utilisateur final a
                    explicitement consenti aux services de validation
                    sélectionnés. Requis pour les services marqués avec
                    `requires_consent=true` dans le catalogue — sans lui, ces
                    services renvoient une erreur `400` avec
                    `services_requiring_consent`.
                identification_number:
                  type: string
                  description: >-
                    Numéro d'identification universel — mappé automatiquement au
                    champ propre au pays approprié, ce qui vous permet de
                    l'utiliser à la place de
                    `personal_number`/`tax_number`/`document_number` :
                    ARG→document_number (DNI), BOL→document_number (CI),
                    BRA→tax_number (CPF, 11 chiffres), CHL→personal_number
                    (RUT), COL→personal_number (Cédula), CRI→personal_number
                    (Cédula), DOM→personal_number (Cédula, 11 chiffres),
                    ECU→personal_number (Cédula, 10 chiffres),
                    ESP→personal_number (DNI/NIE), GTM→document_number (DPI),
                    HND→document_number (DNI), MEX→personal_number (CURP, 18
                    caractères), PAN→personal_number (Cédula),
                    PER→personal_number (DNI, 8 chiffres), PRY→document_number
                    (CI), SLV→document_number (DUI), URY→personal_number (CI),
                    VEN→document_number (Cédula). Il n'écrase jamais un champ
                    propre au pays explicitement fourni.
                first_name:
                  type: string
                  description: Le prénom de l'individu. Requis par certains services/pays.
                  example: John
                last_name:
                  type: string
                  description: >-
                    Le nom de famille de l'individu. Requis par certains
                    services/pays.
                  example: Doe
                middle_name:
                  type: string
                  description: >-
                    Deuxième prénom, utilisé par les services de certains pays
                    (AUS, NZL, …).
                full_name:
                  type: string
                  description: >-
                    Nom complet — certains services l'acceptent à la place du
                    prénom/nom (par ex. les services CHN, qui comparent le nom
                    dans le système d'écriture natif).
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Date de naissance, `YYYY-MM-DD`. Requise par de nombreux
                    services.
                  example: '1980-01-01'
                personal_number:
                  type: string
                  description: >-
                    Identifiant personnel unique émis par le gouvernement.
                    Utilisé par : CHL (RUT), COL (Cédula), CRI, DOM, ECU, ESP
                    (DNI/NIE), MEX (CURP), PAN (Cédula), PER (DNI), URY.
                    Envisagez d'utiliser plutôt `identification_number`.
                tax_number:
                  type: string
                  description: >-
                    Identifiant fiscal. Utilisé par : BRA (CPF, 11 chiffres).
                    Envisagez d'utiliser `identification_number` à la place.
                document_number:
                  type: string
                  description: >-
                    Numéro de document. Utilisé par : ARG (DNI), BOL (CI), GTM
                    (DPI), HND (DNI), PRY (CI), SLV (DUI), VEN (Cédula).
                    Envisagez d'utiliser `identification_number` à la place.
                document_type:
                  type: string
                  enum:
                    - P
                    - DL
                    - ID
                    - RP
                    - SSC
                    - HIC
                    - WP
                    - TC
                    - VISA
                    - PSC
                    - BC
                    - OTHER
                  description: >-
                    Type de document en cours de validation : `P` passeport,
                    `DL` permis de conduire, `ID` pièce d'identité nationale,
                    `RP` titre de séjour (plus `SSC`, `HIC`, `WP`, `TC`, `VISA`,
                    `PSC`, `BC`, `OTHER`). Requis par certains services (ex.
                    ESP).
                expiration_date:
                  type: string
                  format: date
                  description: >-
                    Date d'expiration du document, `YYYY-MM-DD`. Requise pour la
                    validation ESP (Espagne).
                  example: '2030-01-15'
                date_of_issue:
                  type: string
                  format: date
                  description: >-
                    Date de délivrance du document, `YYYY-MM-DD` (fecha de
                    expedición). Requise pour la validation de la cédula COL
                    (Colombie).
                  example: '2015-06-20'
                nationality:
                  type: string
                  description: >-
                    Nationalité au format ISO 3166-1 alpha-3. Requise par
                    certains services.
                gender:
                  type: string
                  enum:
                    - M
                    - F
                    - X
                  description: >-
                    Genre : `M`, `F`, ou `X` (autre/inconnu). Requis pour la
                    validation RENAPER de l'Argentine (`arg_renaper`).
                address:
                  description: >-
                    Adresse résidentielle. Privilégiez l'objet structuré
                    `{"street_1":"123 Main St","street_2":"Apt
                    4B","city":"Springfield","region":"IL","postal_code":"62701","country":"US"}`
                    ; une chaîne complète sur une seule ligne est toujours
                    acceptée. Requis par les services de vérification d'adresse
                    ; lorsqu'un service définit des exigences d'adresse, les
                    éléments manquants renvoient `400` avec
                    `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: Adresse complète sur une seule ligne (héritée).
                address_element_1:
                  type: string
                  description: >-
                    Adresse postale comprenant le numéro et le type de voie. En
                    cas d'omission, dérivée de `address`.
                address_element_2:
                  type: string
                  description: >-
                    Appartement, unité, bâtiment, étage ou ligne d'adresse
                    supplémentaire. À envoyer uniquement lorsque vous disposez
                    explicitement de cette information.
                address_element_3:
                  type: string
                  description: >-
                    Ville, banlieue, district, localité ou quartier. Si elle est
                    omise, dérivée de `address`.
                address_element_4:
                  type: string
                  description: >-
                    État, province, région ou ville. Si omis, dérivé de
                    `address`.
                address_element_5:
                  type: string
                  description: Code postal. `postal_code` est accepté comme alias.
                postal_code:
                  type: string
                  description: >-
                    Code postal pour les services basés sur l'adresse (alias de
                    `address_element_5`).
                driver_license_number:
                  type: string
                  description: >-
                    Numéro de permis de conduire pour les services
                    gouvernementaux de vérification de documents (AUS, NZL,
                    IND).
                driver_license_card_number:
                  type: string
                  description: >-
                    Numéro de carte physique du permis de conduire, lorsqu'il
                    est requis séparément du numéro de permis (AUS).
                driver_license_state:
                  type: string
                  description: >-
                    État ou territoire de délivrance du permis de conduire
                    (AUS).
                driver_license_version:
                  type: string
                  description: Code de version du permis de conduire (NZL).
                passport_number:
                  type: string
                  description: >-
                    Numéro de passeport pour les services gouvernementaux de
                    vérification de passeport (AUS, NZL, IND, CHN).
                passport_expiration_date:
                  type: string
                  format: date
                  description: >-
                    Date d'expiration du passeport, `YYYY-MM-DD`, pour les
                    services de vérification de passeport.
                passport_file_number:
                  type: string
                  description: Numéro de dossier de passeport (IND).
                passport_issue_country:
                  type: string
                  description: >-
                    Pays de délivrance du passeport (ISO 3166-1 alpha-3) pour
                    les services de vérification de passeport.
                medicare_card_number:
                  type: string
                  description: Numéro de carte Medicare (AUS).
                immi_card_number:
                  type: string
                  description: Numéro de l'ImmiCard australienne.
                immi_card_expiry_date:
                  type: string
                  format: date
                  description: Date d'expiration de l'ImmiCard australienne.
                citizenship_certificate_number:
                  type: string
                  description: Numéro de certificat de citoyenneté (AUS).
                birth_registration_number:
                  type: string
                  description: Numéro d'enregistrement de l'acte de naissance (AUS).
                birth_registration_date:
                  type: string
                  format: date
                  description: Date d'enregistrement de l'acte de naissance (AUS).
                birth_registration_state:
                  type: string
                  description: État d'enregistrement de l'acte de naissance (AUS).
                marriage_certificate_number:
                  type: string
                  description: Numéro de certificat de mariage (AUS).
                change_of_name_certificate_number:
                  type: string
                  description: Numéro de certificat de changement de nom (AUS).
                first_partner_name:
                  type: string
                  description: Prénom du partenaire sur un acte de mariage (AUS).
                last_partner_name:
                  type: string
                  description: >-
                    Nom de famille du conjoint sur un certificat de mariage
                    (AUS).
                voter_id:
                  type: string
                  description: Numéro d'électeur (IND EPIC, IRL).
                epic_card:
                  type: string
                  description: Numéro de carte d'électeur EPIC (Inde).
                pan:
                  type: string
                  description: PAN (Permanent Account Number) pour l'Inde.
                national_id:
                  type: string
                  description: >-
                    Numéro national d'identité (CHN, MYS, KEN, KHM, NGA, ZAF,
                    …).
                cic:
                  type: string
                  description: >-
                    Código de Identificación de Credencial (CIC) INE/IFE
                    mexicain, 9 chiffres. Utilisé par le service de validité de
                    la carte MEX INE (`mex_ine_vigencia`).
                identificador_ciudadano:
                  type: string
                  description: >-
                    Identificador del Ciudadano INE mexicain (9 chiffres).
                    Utilisé avec `cic` pour les modèles INE modernes (E/F/G/H)
                    dans `mex_ine_vigencia`.
                ocr:
                  type: string
                  description: >-
                    Numéro OCR INE mexicain (13 chiffres, au verso de la carte).
                    Utilisé avec `cic` pour le modèle D dans `mex_ine_vigencia`.
                voter_number:
                  type: string
                  description: >-
                    Clave de Elector INE mexicaine (18 caractères). Utilisée
                    avec `emission_number` pour les anciens modèles IFE (A/B/C)
                    dans `mex_ine_vigencia`.
                emission_number:
                  type: string
                  description: >-
                    Número de Emisión INE mexicain. Utilisé avec `voter_number`
                    pour les anciens modèles IFE (A/B/C) dans
                    `mex_ine_vigencia`.
                bvn:
                  type: string
                  description: Numéro de vérification bancaire nigérian.
                bank_card_number:
                  type: string
                  description: >-
                    Numéro de carte bancaire (vérification de carte bancaire
                    CHN).
                company_registration_number:
                  type: string
                  description: >-
                    Numéro d'immatriculation de l'entreprise tel que délivré par
                    le registre des sociétés : le CNPJ au Brésil (par ex.
                    `11222333000181`), le numéro d'immatriculation en Afrique du
                    Sud (par ex. `1936/007721/06`). Requis par les services de
                    registre des sociétés et de dirigeants d'entreprise
                    (`bra_company_registry`, `bra_company_directors`,
                    `zaf_company_registry`, `zaf_company_directors`).
                company_name:
                  type: string
                  description: >-
                    Raison sociale enregistrée, recoupée avec l'entrée du
                    registre. Facultatif pour `zaf_company_registry`.
                initials:
                  type: string
                  description: >-
                    Les initiales de la personne telles qu'imprimées sur le
                    document. Requises par `zaf_drivers_license` ; acceptées par
                    `zaf_bank_account_holder`.
                licence_number:
                  type: string
                  description: >-
                    Numéro de permis de conduire tel qu'imprimé sur la carte,
                    pour `zaf_drivers_license`. Lorsqu'il est omis,
                    `document_number` est utilisé.
                refugee_file_number:
                  type: string
                  description: >-
                    Numéro de dossier de réfugié délivré par le Department of
                    Home Affairs d'Afrique du Sud. Requis par `zaf_refugee`.
                bank_name:
                  type: string
                  description: >-
                    Nom de la banque détenant le compte. Requis par
                    `zaf_bank_account_holder`.
                bank_account_number:
                  type: string
                  description: >-
                    Numéro de compte bancaire. Requis par
                    `zaf_bank_account_holder` ; accepté par
                    `zaf_fraud_prevention`.
                account_type:
                  type: string
                  description: >-
                    Type de compte bancaire pour `zaf_bank_account_holder` :
                    `current`, `savings`, `transmission`, `subscriptionShare` ou
                    `notKnown`, insensible à la casse. Toute autre valeur
                    renvoie `400`. Omettez-le si vous ne connaissez pas le type
                    : la vérification croisée du type de compte est alors
                    indiquée comme non confirmée.
                phone_number:
                  type: string
                  description: >-
                    Numéro de téléphone mobile de contact, pour les services
                    effectuant des vérifications croisées de joignabilité
                    (`zaf_bank_account_holder`, `zaf_fraud_prevention`,
                    `zaf_refugee`).
                right_thumb:
                  type: string
                  description: >-
                    Empreinte du pouce droit encodée en Base64 pour
                    `zaf_dha_fingerprint_match`, avec `left_thumb` ou seule.
                left_thumb:
                  type: string
                  description: >-
                    Empreinte du pouce gauche encodée en Base64 pour
                    `zaf_dha_fingerprint_match`, avec `right_thumb` ou seule.
                score_level:
                  type: integer
                  description: >-
                    Niveau de score biométrique minimum pour
                    `zaf_criminal_face_screening`. La valeur par défaut est `3`.
                max_matches:
                  type: integer
                  description: >-
                    Nombre maximal de correspondances candidates renvoyées par
                    `zaf_criminal_face_screening`. Vaut par défaut `1`.
                vehicle_register_number:
                  type: string
                  description: >-
                    Numéro d'immatriculation du véhicule. Requis, avec
                    `vehicle_licence_plate` et `vin`, par
                    `zaf_vehicle_ownership`.
                vehicle_licence_plate:
                  type: string
                  description: >-
                    Numéro de plaque d'immatriculation du véhicule. Requis, avec
                    `vehicle_register_number` et `vin`, par
                    `zaf_vehicle_ownership`.
                vin:
                  type: string
                  description: >-
                    Numéro d'identification du véhicule (VIN ou numéro de
                    châssis). Requis, avec `vehicle_register_number` et
                    `vehicle_licence_plate`, par `zaf_vehicle_ownership`.
                ssn:
                  type: string
                  description: Numéro de sécurité sociale (États-Unis).
                phone:
                  type: string
                  description: >-
                    Numéro de téléphone pour les services de Vérification du
                    téléphone.
                landline:
                  type: string
                  description: >-
                    Numéro de ligne fixe pour les services de vérification de
                    téléphone.
                email:
                  type: string
                  format: email
                  description: Adresse e-mail pour les services de vérification d'identité.
                country_of_residence:
                  type: string
                  description: >-
                    Pays de résidence au format ISO 3166-1 alpha-2. Utilisé par
                    les services mondiaux d'enrichissement d'identité (par ex.
                    `glb_identity_enrichment`) pour cibler la recherche.
                  example: US
                partial_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: NO_ACTION
                  description: >-
                    Action effectuée par un `partial_match` sur
                    `database_validation.status`. Par défaut : `NO_ACTION` (le
                    statut reste `Approved`, avec un avertissement).
                no_match_action:
                  type: string
                  enum:
                    - DECLINE
                    - NO_ACTION
                  default: DECLINE
                  description: >-
                    Action effectuée par un `no_match` sur
                    `database_validation.status`. Par défaut : `DECLINE`.
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Conserver la validation en tant que session (visibilité dans
                    la console, endpoint de décision, webhook `status.updated`).
                    Modifie également le format de réponse de `validations` :
                    des objets par service lorsque `true` (par défaut), une
                    table de champs fusionnée lorsque `false`.
                vendor_data:
                  type: string
                  description: >-
                    Votre identifiant pour l'utilisateur validé ; renvoyé en
                    écho et conservé avec la session.
                metadata:
                  type: object
                  nullable: true
                  description: JSON libre stocké avec la requête et renvoyé en écho.
                selfie:
                  type: string
                  format: binary
                  description: >-
                    Image de selfie (`jpg`, `jpeg`, `png`, `webp` ; 2 Mo max —
                    les images sont compressées à ~1.5 Mo avant le téléversement
                    vers le registre) pour les services de validation
                    biométrique, par exemple RENAPER en Argentine
                    (`arg_renaper`) et SIB au Panama (`pan_cedula_sib`,
                    `pan_cedula_sib_plus`). Requis dès lors qu'un service
                    sélectionné l'indique comme champ obligatoire. Uniquement
                    disponible via `multipart/form-data`.
      responses:
        '200':
          description: >-
            Validation terminée — au moins un service sélectionné a renvoyé un
            résultat exploitable. Inspectez `database_validation.match_type`
            pour le résultat global, `validations` pour les comparaisons de
            champs par service et les `outcome_code`s, et `errors` (le cas
            échéant) pour les services en échec.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: "Identifiant de session persistante lorsque `save_api_request=true` (utilisable avec `GET /v3/session/{sessionId}/decision/`)\_; sinon un UUID de corrélation temporaire."
                  database_validation:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                          - In Review
                        description: >-
                          `Declined` lorsque le `match_type` global déclenche
                          une action `DECLINE` (`no_match_action` est défini par
                          défaut sur `DECLINE`, `partial_match_action` sur
                          `NO_ACTION`) ; `In Review` lorsqu'aucun service n'a
                          produit de comparaison exploitable, par exemple
                          lorsque le seul service sélectionné a renvoyé
                          `REGISTRY_UNAVAILABLE` ou `INCONCLUSIVE` ; `Approved`
                          dans les autres cas. Une requête ayant sélectionné
                          plusieurs services peut être `Approved` sur la
                          correspondance d'un service alors qu'un autre était
                          indisponible, vérifiez donc également `errors` et les
                          `outcome_code`s de chaque service.
                      issuing_state:
                        type: string
                        description: >-
                          Écho du pays ISO 3166-1 alpha-3 par rapport auquel la
                          validation a été effectuée.
                        example: BRA
                      validation_type:
                        type: string
                        enum:
                          - one_by_one
                          - two_by_two
                        description: >-
                          Dérivé des résultats : `two_by_two` lorsque ≥ 2
                          services distincts ont produit une correspondance
                          complète (sur le numéro d'identification, sur le nom
                          complet et la date de naissance combinés, ou sur
                          l'adresse sans contradiction) ; `one_by_one` dans le
                          cas contraire. (Le champ de requête du même nom est
                          obsolète et ignoré.)
                      screened_data:
                        type: object
                        description: >-
                          Champs d'entrée renvoyés, tels qu'ils ont été envoyés
                          aux services sélectionnés (dates normalisées au format
                          `YYYY-MM-DD` ; un `selfie`, lorsqu'il est envoyé, est
                          renvoyé sous la forme d'une URL pré-signée ;
                          `consent_obtained: true` est ajouté lorsque le
                          consentement a été donné).
                      match_type:
                        type: string
                        nullable: true
                        enum:
                          - full_match
                          - partial_match
                          - no_match
                        description: >-
                          Résultat global agrégé à travers les services avec des
                          comparaisons au niveau des champs : tout `full_match`
                          → `full_match` ; sinon tout `partial_match` →
                          `partial_match` ; sinon `no_match`. Les services sans
                          comparaison détaillée (résultat uniquement), comme le
                          filtrage biométrique des antécédents judiciaires,
                          peuvent renvoyer `null` ; examinez chaque élément dans
                          `validations` pour connaître son `outcome_code`.
                      validations:
                        description: >-
                          La structure dépend de `save_api_request`. **`true`
                          (par défaut) :** un tableau d'objets par service
                          (`service_id`, `service_name`, `validation`,
                          `outcome_code`, `outcome_detail`, `source_data`).
                          **`false` :** un objet plat unique fusionnant les
                          résultats au niveau des champs de tous les services
                          (`{"full_name": "full_match", ...}`).
                        oneOf:
                          - type: array
                            items:
                              type: object
                              description: >-
                                Résultat de validation par service (renvoyé
                                lorsque `save_api_request=true`, valeur par
                                défaut).
                              properties:
                                service_id:
                                  type: string
                                  description: >-
                                    Identifiant de catalogue du service ayant
                                    produit ce résultat (par exemple `bra_cpf`).
                                  example: bra_cpf
                                service_name:
                                  type: string
                                  description: >-
                                    Nom de catalogue lisible par l'humain du
                                    service.
                                  example: Brazil - CPF status check
                                validation:
                                  type: object
                                  description: >-
                                    Comparaison champ par champ entre votre
                                    entrée et l'enregistrement du registre. Les
                                    clés sont les noms canoniques des champs
                                    (`full_name`, `date_of_birth`,
                                    `identification_number`, `address`, …) ; les
                                    valeurs sont `full_match`, `partial_match`
                                    ou `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: >-
                                    Résultat indépendant du fournisseur de la
                                    consultation du registre.
                                    `MATCH`/`PARTIAL_MATCH`/`NO_MATCH` décrivent
                                    la comparaison ; `DOCUMENT_NOT_FOUND`
                                    signifie que l'identifiant n'est pas dans le
                                    registre ; `INCONCLUSIVE` signifie que le
                                    registre n'a pu confirmer ni dans un sens ni
                                    dans l'autre (acheminé vers un examen — PAS
                                    une absence de correspondance) ;
                                    `BIOMETRIC_NO_MATCH` est une non-concordance
                                    faciale définitive tandis que
                                    `BIOMETRIC_IMAGE_UNUSABLE` est un problème
                                    technique d'image (reprendre le selfie) ;
                                    `DECEASED`/`MINOR_BLOCKED` sont des
                                    résultats liés aux politiques du registre ;
                                    `DOCUMENT_SUPERSEDED` signifie que
                                    l'identité correspond mais que l'édition du
                                    document présenté n'est pas celle
                                    enregistrée (une édition plus récente a été
                                    délivrée) ;
                                    `INVALID_DOCUMENT_FORMAT`/`INVALID_INPUT`
                                    signifient que le registre lui-même a rejeté
                                    les données qui lui ont été envoyées ;
                                    `REGISTRY_UNAVAILABLE`/`REGISTRY_ERROR`
                                    indiquent des défaillances en amont.
                                outcome_detail:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Détail brut du statut en amont étayant le
                                    code de résultat (ex. un code de statut HTTP
                                    ou du registre).
                                source_data:
                                  type: object
                                  nullable: true
                                  description: >-
                                    Vue nettoyée et normalisée de
                                    l'enregistrement du registre utilisant des
                                    noms de champs canoniques
                                    (`identification_number`, `first_name`,
                                    `last_name`, `date_of_birth`, ainsi que des
                                    indicateurs spécifiques au registre). Les
                                    champs d'image, lorsqu'ils sont présents,
                                    sont renvoyés sous forme d'URL pré-signées.
                          - type: object
                            additionalProperties:
                              type: string
                              enum:
                                - full_match
                                - partial_match
                                - no_match
                            description: >-
                              Résultats fusionnés au niveau des champs (format
                              sans état `save_api_request=false`).
                      warnings:
                        type: array
                        items:
                          type: object
                          properties:
                            feature:
                              type: string
                              description: Fonctionnalité ayant émis l'avertissement.
                            risk:
                              type: string
                              description: Identifiant de risque lisible par machine.
                            additional_data:
                              type: object
                              nullable: true
                              description: >-
                                Contexte supplémentaire pour l'avertissement,
                                lorsqu'il est disponible.
                            log_type:
                              type: string
                              description: >-
                                `warning`, `information` ou `error` — manière
                                dont le risque a affecté le résultat.
                            short_description:
                              type: string
                              description: Résumé lisible par un humain sur une ligne.
                            long_description:
                              type: string
                              description: Explication complète lisible par un humain.
                        description: >-
                          `DATABASE_VALIDATION_NO_MATCH` ou
                          `DATABASE_VALIDATION_PARTIAL_MATCH` le cas échéant ;
                          vide en cas de correspondance complète.
                      errors:
                        type: array
                        description: >-
                          Présent uniquement lorsque certains (mais pas tous)
                          des services sélectionnés ont échoué. Chaque entrée
                          comporte `service_id`, `code`, `message` et
                          `retryable`. Un service signalé ici est absent de
                          `validations` et `services_used`, et n'est pas
                          facturé. Ce tableau est le seul endroit où il
                          apparaît, inspectez-le donc même lorsque `status` est
                          `Approved`.
                        items:
                          type: object
                          properties:
                            service_id:
                              type: string
                            code:
                              type: string
                              example: empty_provider_response
                            message:
                              type: string
                            retryable:
                              type: boolean
                              description: >-
                                `true` lorsque le service n'a produit aucune
                                réponse et qu'une nouvelle tentative ultérieure
                                peut réussir ; `false` lorsque la source a
                                refusé les données envoyées et que la saisie
                                doit d'abord être corrigée.
                              example: true
                      services_used:
                        type: array
                        items:
                          type: string
                        description: >-
                          Identifiants de catalogue des services ayant retourné
                          un résultat facturable. **Présent uniquement lorsque
                          la requête a explicitement envoyé `services`.**
                      match_score:
                        type: number
                        description: >-
                          Fraction (0,0–1,0) des services tentés ayant produit
                          une correspondance complète (sur le numéro
                          d'identification, sur le nom complet + la date de
                          naissance combinés, ou sur l'adresse sans
                          contradiction). **Présent uniquement lorsque la
                          requête a explicitement envoyé `services`.**
                  vendor_data:
                    type: string
                    nullable: true
                    description: Valeur renvoyée de `vendor_data` que vous avez envoyé.
                  metadata:
                    type: object
                    nullable: true
                    description: Écho des `metadata` que vous avez envoyées.
                  created_at:
                    type: string
                    format: date-time
              examples:
                Full match (Approved):
                  summary: >-
                    Par défaut save_api_request=true — objets `validations` par
                    service
                  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: >-
                    Requête envoyée avec `services` — la réponse ajoute
                    `services_used` et `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: >-
                    L'enregistrement du registre ne correspond pas — valeur par
                    défaut `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 réduit à un mappage de champs fusionné ;
                    rien n'est stocké
                  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: >-
            Erreur de validation - rien n'est facturé. Les erreurs de champ
            préalables surviennent avant tout appel externe. Si chaque tentative
            restée sans réponse refuse explicitement la saisie, la réponse
            inclut plutôt `validation_errors` avec `code:
            provider_rejected_input` et `retryable: false` ; corrigez la saisie
            avant de réessayer. Les problèmes au niveau des champs utilisent
            l'enveloppe standard de DRF ; les problèmes de catalogue renvoient
            un tableau `services` (ainsi que `requires_onboarding` ou
            `services_requiring_consent` le cas échéant) ; les erreurs de champs
            manquants incluent `fields_required_by` associant chaque champ
            manquant aux services qui l'exigent ; les services qui nécessitent
            au moins un identifiant supplémentaire (par ex.
            `usa_states_credit_bureau`, qui ne peut pas vérifier un nom seul)
            renvoient `any_field_required_by` associant chaque service aux
            champs dont au moins un doit être présent ; les problèmes de format
            vérifiés par service renvoient `invalid_fields_by_service`.
          content:
            application/json:
              examples:
                Invalid issuing_state:
                  summary: >-
                    Pays non pris en charge — le message liste chaque code
                    alpha-3 valide
                  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: >-
                    Union des champs requis pour l'ensemble des services
                    sélectionnés, avec l'indication de champ universel
                  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` contient un identifiant qui ne figure pas dans le
                    catalogue
                  value:
                    services:
                      - 'Unknown service_id(s): [''bogus_service'']'
                Service not live for country:
                  summary: >-
                    `services` mentionne un service d'un autre pays (ou une
                    entrée fictive)
                  value:
                    services:
                      - >-
                        Services not currently live for PER: ['bra_cpf'].
                        Available services: ['per_dni', 'per_residential',
                        'per_tax_registration']
                Service requires onboarding:
                  summary: >-
                    Le service existe mais n'est pas encore activé pour votre
                    organisation
                  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 service sélectionné est marqué avec requires_consent=true
                    et `consent` n'était pas `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: >-
                    L'identifiant ne respecte pas la règle de format du pays
                    (longueur/chiffres/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 champ ne respecte pas les exigences de format propres au
                    service sélectionné
                  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: Corrigez les données saisies avant de réessayer
                  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: >-
                      Explication au niveau de la requête ou erreurs de champ de
                      prévalidation.
                    oneOf:
                      - type: string
                      - type: array
                        items:
                          type: string
                  validation_errors:
                    type: array
                    description: >-
                      Présent lorsque chaque tentative restée sans réponse a
                      rejeté la saisie après le preflight.
                    items:
                      type: object
                      properties:
                        service_id:
                          type: string
                        code:
                          type: string
                        message:
                          type: string
                        retryable:
                          type: boolean
                          description: >-
                            Indique si réessayer plus tard peut résoudre cette
                            défaillance de service. False signifie qu'il faut
                            d'abord corriger l'entrée fournie.
        '403':
          description: "Permission refusée. Renvoyé lorsque l'en-tête `x-api-key` est manquant, ainsi que lorsque le solde de l'organisation appelante ne permet pas de couvrir l'appel\_; une clé incorrecte, révoquée ou expirée renvoie `401`. Une clé manquante renvoie `403` avec `{\"detail\": ...}`\_; une clé incorrecte, révoquée ou expirée renvoie `401`. Les crédits insuffisants renvoient `403` avec `{\"error\": ...}` avant tout filtrage ou appel à un fournisseur."
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: Aucun en-tête `x-api-key`, ou la clé est non valide/révoquée
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: Le solde de l'organisation ne peut pas couvrir l'appel
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            Limite de débit dépassée. Les endpoints POST/PATCH/DELETE partagent
            un budget de 300 requêtes d'écriture par minute par clé API (la
            création de transactions et l'ingestion d'événements ont un budget
            distinct de 600). La réponse comporte les en-têtes
            `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` et
            `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: >-
                    Plus de 300 requêtes d'écriture au cours de la minute
                    actuelle
                  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: >-
            Aucun service sélectionné n'a renvoyé de résultat exploitable.
            Examinez chaque entrée validation_errors avant de réessayer ;
            l'erreur HTTP 502 seule n'établit pas un échec temporaire. Une
            entrée empty_provider_response avec retryable: true indique des
            résultats indisponibles ou inexpliqués, y compris un fournisseur
            principal refusé suivi d'un repli indisponible. Les entrées héritées
            provider_invalid_input et provider_validation_error nécessitent
            plutôt une saisie corrigée et peuvent omettre retryable. Rien n'est
            facturé. Lorsque save_api_request=true, la tentative échouée est
            enregistrée sous forme de session avec le statut Not Finished. Les
            échecs partiels renvoient 200 avec 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: >-
                            Indique si réessayer plus tard peut résoudre cette
                            défaillance de service. False signifie qu'il faut
                            d'abord corriger l'entrée fournie.
              examples:
                Provider returned no result:
                  summary: Tous les services sélectionnés ont échoué
                  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 clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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