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

# API de vérification d'identité : OCR et authenticité

> Vérifiez les documents d'identité de plus de 220 pays et 14 000 types. Authenticité, OCR, MRZ, inférence sous 2 s, sans contrat. Didit.



## OpenAPI

````yaml fr/openapi-25.json POST /v3/id-verification/
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/id-verification/:
    post:
      tags:
        - Standalone APIs
      summary: Vérification d'identité (OCR du document + contrôles de fraude)
      description: >-
        Effectuez l'OCR d'un document d'identité et exécutez des vérifications
        de fraude documentaire en un seul appel : renvoie les champs extraits du
        titulaire, la MRZ analysée, un `status` valant `Approved`/`Declined`/`In
        Review`, ainsi qu'une liste `warnings` expliquant chaque problème
        détecté. Prend en charge 14,000+ types de documents provenant de 220+
        pays et territoires.


        **Fonctionnement.** Envoyez le `front_image` (requis) du document et,
        pour les documents recto verso, le `back_image`. Téléversez des photos
        non rognées avec les quatre coins du document visibles : le service
        détecte, aligne et rogne le document lui-même, ne le pré-rognez donc
        pas. Le document est classifié automatiquement (vous ne déclarez jamais
        le pays ni le type de document), la zone visuelle est lue par OCR, et la
        MRZ ainsi que les éventuels codes-barres sont décodés. Des vérifications
        croisées valident ensuite les dates, les formats de numéros et les
        chiffres de contrôle de la MRZ, et comparent la zone visuelle à la MRZ.
        Avec `perform_document_liveness=true`, les images sont en outre
        analysées pour détecter les rediffusions d'écran, les copies imprimées
        et les manipulations du portrait.


        **Logique de décision.** Le `status` est `Approved` sauf si au moins un
        avertissement entraîne un refus. Les risques de fraude et les échecs
        bloquants entraînent toujours un refus : `DOCUMENT_EXPIRED`,
        `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`,
        `PORTRAIT_MANIPULATION_DETECTED`, `PUBLIC_DOCUMENT_IMAGE_DETECTED`,
        ainsi que les échecs d'extraction (`NAME_NOT_DETECTED`,
        `DATE_OF_BIRTH_NOT_DETECTED`, `DOCUMENT_NUMBER_NOT_DETECTED`).
        (`PORTRAIT_IMAGE_NOT_DETECTED`, `INVALID_DATE` et `MRZ_NOT_DETECTED`
        existent dans les sessions de workflow mais ne sont jamais générés par
        cet endpoint autonome. `COULD_NOT_DETECT_DOCUMENT_TYPE` est renvoyé ici
        lorsque l'image recto ne correspond pas à un modèle de document officiel
        connu avec un degré de confiance élevé, et refuse la requête.) Trois
        groupes de risques sont configurables par requête via
        `invalid_mrz_action`, `inconsistent_data_action` et
        `expiration_date_not_detected_action` (`DECLINE` ou `NO_ACTION`). Tous
        les autres avertissements (par exemple `POSSIBLE_DUPLICATED_USER`) sont
        informatifs et n'entraînent jamais de refus par eux-mêmes. Lorsque
        `perform_document_liveness=true` (la valeur par défaut) et que le
        contrôle de contrefaçon ne renvoie aucun score exploitable — le
        fournisseur a échoué, a répondu par un code non-200 ou par un HTTP 200
        avec `status="ERR"` — l'appel renvoie `200` avec `status: "In Review"`
        et un avertissement `DOCUMENT_LIVENESS_NOT_COMPUTED` (`log_type:
        "warning"`) au lieu de `Approved` : un contrôle qui n'a pas été exécuté
        ne constitue pas une preuve de l'authenticité du document. Cette
        escalade n'est pas configurable et ne prévaut jamais sur un `Declined` ;
        avec `perform_document_liveness=false`, le contrôle est ignoré et le
        statut suit les avertissements restants comme auparavant. Un document
        qui ne peut pas du tout être traité renvoie `400` avec `{"error":
        "COULD_NOT_RECOGNIZE_DOCUMENT"}` ; un document lisible mais
        problématique renvoie `200` avec `status: "Declined"` : inspectez
        toujours `id_verification.status` et `id_verification.warnings`, et pas
        seulement le code HTTP.


        **Facturation.** Chaque réponse `200` consomme un crédit d'API
        Vérification d'identité (décompté de vos crédits de forfait ou de votre
        solde de recharge). Lorsque le solde de l'organisation ne permet pas de
        couvrir l'appel, l'endpoint renvoie `403` avec l'erreur de crédits
        insuffisants avant tout traitement d'image.


        **Persistance de la session (`save_api_request`, par défaut `true`).**
        Lorsqu'il vaut `true`, l'appel est conservé sous forme de session de
        type API : il apparaît dans la Business Console, le `request_id` renvoyé
        est un véritable identifiant de session que vous pouvez transmettre à
        `GET /v3/session/{sessionId}/decision/`, les images rognées du document
        et du portrait sont stockées et renvoyées sous forme d'URL de médias
        éphémères (`https://<media-host>/ocr/...`), et un webhook
        `status.updated` est émis vers vos endpoints de webhook configurés.
        Lorsqu'il vaut `false`, rien n'est stocké, `request_id` est un UUID de
        corrélation à usage unique, et
        `portrait_image`/`front_image`/`back_image` sont renvoyés directement
        sous forme de chaînes JPEG encodées en base64.


        **Sandbox.** Les clés API sandbox ignorent l'ensemble des traitements et
        de la facturation : après validation de la requête (une entrée malformée
        renvoie toujours `400`), l'endpoint renvoie un payload fictif statique
        `Approved` (une carte d'identité américaine fictive « Sandbox User »),
        aucune session n'est conservée et aucun crédit n'est consommé.


        **Authentification.** Envoyez la clé API de votre application dans
        l'en-tête `x-api-key`. Des identifiants manquants ou invalides renvoient
        `403` (`{"detail": "You do not have permission to perform this
        action."}`) : cette API ne renvoie jamais `401`.


        **Limite de débit.** Budget d'écriture partagé de 300 requêtes/min par
        clé API sur tous les endpoints POST/PATCH/DELETE ; tout dépassement
        renvoie `429`.
      operationId: post_v3id-verification
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - front_image
              properties:
                front_image:
                  type: string
                  format: binary
                  description: >-
                    Recto du document d'identité. Extensions autorisées :
                    `tiff`, `jpg`, `jpeg`, `png`, `webp`, `pdf`. Taille maximale
                    de téléversement : **10 MB** (les fichiers plus volumineux
                    sont rejetés avec une erreur `400`). Les PDF sont convertis
                    en image avant l'OCR ; les PDF chiffrés nécessitent
                    `front_image_password`. Les images sont automatiquement
                    compressées à ~0.5 MB et l'orientation EXIF est appliquée.
                    Téléversez la capture complète, non recadrée, avec les
                    quatre coins du document visibles.
                front_image_password:
                  type: string
                  description: >-
                    Mot de passe pour déchiffrer `front_image` lorsqu'il s'agit
                    d'un PDF chiffré. L'envoi d'un PDF chiffré sans mot de passe
                    (ou avec un mot de passe incorrect) renvoie `400`.
                  writeOnly: true
                back_image:
                  type: string
                  format: binary
                  description: >-
                    Verso du document — envoyez-le chaque fois que le document
                    en comporte un (de nombreuses cartes d'identité portent la
                    MRZ ou un code-barres au verso ; l'omettre laisse simplement
                    les champs de la MRZ et du verso vides dans la réponse — cet
                    endpoint ne déclenche pas d'avertissement pour MRZ
                    manquante). Mêmes formats et limites de taille que pour
                    `front_image`. S'il est omis, `back_image` et les champs du
                    verso sont `null` dans la réponse.
                back_image_password:
                  type: string
                  description: >-
                    Mot de passe pour déchiffrer `back_image` lorsqu'il s'agit
                    d'un PDF chiffré.
                  writeOnly: true
                perform_document_liveness:
                  type: boolean
                  default: true
                  description: >-
                    Analyse les deux images à la recherche de fraude par
                    présentation : rediffusions d'écran
                    (`SCREEN_CAPTURE_DETECTED`), copies imprimées
                    (`PRINTED_COPY_DETECTED`) et manipulation de portrait
                    (`PORTRAIT_MANIPULATION_DETECTED`). L'un quelconque de ces
                    éléments entraîne un refus automatique. Activé par défaut ;
                    définissez sur `false` pour ignorer le filtrage de fraude et
                    réduire la latence. Lorsqu'il est activé et que le
                    fournisseur ne renvoie aucun score exploitable, la réponse
                    est `In Review` avec un avertissement
                    `DOCUMENT_LIVENESS_NOT_COMPUTED` plutôt que `Approved`.
                  example: true
                minimum_age:
                  type: integer
                  nullable: true
                  default: null
                  minimum: 1
                  maximum: 120
                  description: >-
                    Accepté et validé (1–120) mais **actuellement non appliqué**
                    par cet endpoint — il ne génère jamais d'avertissement
                    `MINIMUM_AGE_NOT_MET` à partir de ce champ. Appliquez les
                    règles d'âge à partir de `date_of_birth`/`age` renvoyés, ou
                    utilisez un workflow de session de vérification avec des
                    restrictions d'âge.
                expiration_date_not_detected_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Ce qu'il faut faire lorsqu'aucune date d'expiration ne peut
                    être lue (`EXPIRATION_DATE_NOT_DETECTED`). Par défaut
                    `NO_ACTION`, car de nombreux documents d'identité
                    n'affichent pas de date d'expiration. Remarque : une date
                    d'expiration *détectée et dépassée* entraîne toujours un
                    refus (`DOCUMENT_EXPIRED`), quelle que soit cette option.
                invalid_mrz_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: DECLINE
                  description: >-
                    Que faire lorsque la MRZ extraite échoue à la validation de
                    la clé de contrôle (`MRZ_VALIDATION_FAILED`). Une MRZ
                    manquante ne génère aucun avertissement sur cet endpoint.
                    Pertinent uniquement pour les documents comportant une MRZ.
                    `REVIEW` n'est pas pris en charge sur cet endpoint et
                    renvoie `400`.
                inconsistent_data_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: DECLINE
                  description: >-
                    Ce qu'il faut faire lorsque les données extraites sont
                    incohérentes en interne : `DATA_INCONSISTENT`,
                    `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` (la zone visuelle
                    ne concorde pas avec la MRZ), ou
                    `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`.
                critical_field_occlusion_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: DECLINE
                  description: >-
                    Ce qu'il faut faire lorsqu'un champ imprimé critique a été
                    physiquement masqué sur la capture
                    (`CRITICAL_FIELD_OCCLUSION_DETECTED`) - un numéro
                    d'identité, un nom, la date de naissance ou la date
                    d'expiration. Entraîne un refus par défaut, comme les autres
                    risques d'intégrité documentaire de cet endpoint : masquer
                    les numéros sur lesquels un rapport est réconcilié
                    correspond à ce à quoi ressemble un document caviardé. La
                    valeur lue pour un champ masqué est supprimée de
                    l'extraction dans tous les cas, de sorte que l'avertissement
                    `*_NOT_DETECTED` correspondant l'accompagne généralement.
                    `REVIEW` n'est pas pris en charge sur cet endpoint et
                    renvoie `400`.
                document_or_personal_number_format_mismatch_action:
                  type: string
                  enum:
                    - NO_ACTION
                    - DECLINE
                  default: NO_ACTION
                  description: >-
                    Ce qu'il faut faire lorsqu'un numéro ne correspond pas au
                    format utilisé par son autorité émettrice pour ce type de
                    document (`DOCUMENT_NUMBER_FORMAT_MISMATCH`,
                    `PERSONAL_NUMBER_FORMAT_MISMATCH`). Par défaut `NO_ACTION`,
                    ce qui signale l'avertissement sans modifier le statut.
                    `REVIEW` n'est pas pris en charge sur cet endpoint et
                    renvoie `400`.
                preferred_characters:
                  type: string
                  enum:
                    - latin
                    - non_latin
                  default: latin
                  description: >-
                    Système d'écriture préféré pour les champs de nom/adresse
                    sur les documents comportant à la fois du texte latin et non
                    latin (arabe, cyrillique, CJK, …). `latin` renvoie des
                    valeurs translittérées/latines ; `non_latin` privilégie le
                    système d'écriture natif.
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Lorsque la valeur est `true` (par défaut), conserve l'appel
                    sous la forme d'une session de type API — visible dans la
                    Business Console, récupérable via `GET
                    /v3/session/{sessionId}/decision/` à l'aide du `request_id`
                    renvoyé, notifiée via un webhook `status.updated`, et avec
                    les images du document renvoyées sous forme d'URL de médias.
                    Lorsque la valeur est `false`, rien n'est stocké,
                    `request_id` est un UUID éphémère et les images sont
                    renvoyées en ligne sous forme de chaînes JPEG en base64.
                  example: true
                vendor_data:
                  type: string
                  description: >-
                    Chaîne opaque optionnelle (votre identifiant d'utilisateur
                    interne, e-mail, UUID…) stockée sur la session persistée et
                    renvoyée dans la réponse. Utilisez-la pour corréler les
                    appels d'API avec vos propres enregistrements et pour
                    filtrer les sessions ultérieurement.
                  example: user-123
                metadata:
                  type: object
                  additionalProperties: true
                  description: >-
                    Objet JSON optionnel stocké avec la session (lorsque
                    `save_api_request=true`) et renvoyé dans la réponse. Dans
                    les requêtes multipart, envoyez-le sous forme de champ
                    textuel encodé en JSON (par ex.
                    `metadata={"flow":"onboarding"}`) — il est analysé sous
                    forme d'objet.
                  example:
                    flow: onboarding
            example:
              front_image: (binary JPEG/PNG/PDF of the document front)
              back_image: (binary JPEG/PNG/PDF of the document back)
              perform_document_liveness: true
              save_api_request: true
              vendor_data: user-123
              metadata:
                flow: onboarding
      responses:
        '200':
          description: "Document traité. `id_verification.status` est `Approved`, `Declined` ou `In Review`\_; chaque problème détecté est détaillé dans `id_verification.warnings`. `In Review` est renvoyé lorsqu'une vérification demandée de détection du vivant du document n'a produit aucun résultat exploitable (`DOCUMENT_LIVENESS_NOT_COMPUTED`). Un document problématique renvoie tout de même `200` avec `status: \"Declined\"` — inspectez le corps de la réponse, pas seulement le code HTTP. Lorsque `save_api_request=true`, `request_id` est l'identifiant de la session enregistrée et les champs d'image sont des URL de médias de courte durée\_; avec `save_api_request=false`, ce sont des chaînes JPEG en base64 intégrées."
          content:
            application/json:
              examples:
                Approved:
                  summary: >-
                    Carte d'identité recto verso lue correctement (enregistrée —
                    images sous forme d'URL de médias)
                  value:
                    request_id: 11d219ed-d59c-4b1d-8d65-9b933f12d5b8
                    id_verification:
                      status: Approved
                      document_type: Identity Card
                      document_subtype: ID_CARD_GENERIC
                      document_number: CBX164224
                      personal_number: 20446581H
                      portrait_image: >-
                        https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-portrait_image-8c2f.jpg?signature=...
                      front_image: >-
                        https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-front_image-4a1e.jpg?signature=...
                      back_image: >-
                        https://<media-host>/ocr/11d219ed-d59c-4b1d-8d65-9b933f12d5b8-back_image-77b0.jpg?signature=...
                      front_image_camera_front: null
                      back_image_camera_front: null
                      front_image_camera_front_face_match_score: null
                      back_image_camera_front_face_match_score: null
                      front_image_quality_score:
                        focus_score: 78
                        brightness_score: 83.2
                        brightness_issue: ok
                        is_document_fully_visible: true
                        resolution_score: 40.7
                        overall_score: 70.2
                      back_image_quality_score:
                        focus_score: 100
                        brightness_score: 95.6
                        brightness_issue: ok
                        is_document_fully_visible: true
                        resolution_score: 43
                        overall_score: 84.4
                      date_of_birth: '1980-01-13'
                      age: 46
                      expiration_date: '2032-03-31'
                      date_of_issue: '2022-03-31'
                      issuing_state: ESP
                      issuing_state_name: Spain
                      first_name: Julio Francisco
                      last_name: Fores Sena
                      full_name: Julio Francisco Fores Sena
                      gender: M
                      address: >-
                        Brda. Urb. El Cardonal 0052 52 Po3 B,Taco,San Cristobal
                        De La Laguna,Santa Cruz De Tenerife
                      formatted_address: >-
                        Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de
                        Tenerife, Spain
                      place_of_birth: Valencia, Valencia
                      marital_status: UNKNOWN
                      nationality: ESP
                      extra_fields:
                        first_surname: Fores
                        second_surname: Sena
                      mrz:
                        surname: FORES SENA
                        name: JULIO FRANCISCO
                        country: ESP
                        nationality: ESP
                        birth_date: '800113'
                        expiry_date: '320331'
                        sex: M
                        document_type: ID
                        document_number: CBX164224
                        optional_data: 20446581H
                        optional_data_2: ''
                        birth_date_hash: '9'
                        expiry_date_hash: '8'
                        document_number_hash: '3'
                        final_hash: '3'
                        personal_number: 20446581H
                        warnings: []
                        errors: []
                        mrz_type: TD1
                        mrz_string: |-
                          IDESPCBX164224320446581H<<<<<<
                          8001139M3203318ESP<<<<<<<<<<<3
                          FORES<SENA<<JULIO<FRANCISCO<<<
                        mrz_key: CBX164224380011393203318
                      parsed_address:
                        street_1: Avenida el Cardonal 52
                        street_2: b
                        city: La Laguna
                        region: Canarias
                        country: ES
                        postal_code: '38108'
                        address_type: Avenida
                        formatted_address: >-
                          Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz de
                          Tenerife, Spain
                        raw_results:
                          address_components:
                            - long_name: b
                              short_name: b
                              types:
                                - subpremise
                            - long_name: '52'
                              short_name: '52'
                              types:
                                - street_number
                            - long_name: Avenida el Cardonal
                              short_name: Av. el Cardonal
                              types:
                                - route
                            - long_name: La Laguna
                              short_name: La Laguna
                              types:
                                - locality
                                - political
                            - long_name: Spain
                              short_name: ES
                              types:
                                - country
                                - political
                            - long_name: '38108'
                              short_name: '38108'
                              types:
                                - postal_code
                          formatted_address: >-
                            Av. el Cardonal, 52, b, 38108 La Laguna, Santa Cruz
                            de Tenerife, Spain
                          geometry:
                            location:
                              lat: 28.4501161
                              lng: -16.3004407
                            location_type: ROOFTOP
                          types:
                            - street_address
                            - subpremise
                        document_location:
                          latitude: 28.4501161
                          longitude: -16.3004407
                        label: Spain Identity Card Address
                        is_verified: true
                        category: Residential
                      warnings: []
                      barcodes: []
                    vendor_data: user-123
                    metadata:
                      flow: onboarding
                    created_at: '2026-06-12T02:21:56.013573+00:00'
                Declined - expired document:
                  summary: Téléversement du recto seul d'une carte d'identité expirée
                  value:
                    request_id: f61681b8-9422-4378-ac3e-04c6a247fb45
                    id_verification:
                      status: Declined
                      document_type: Identity Card
                      document_subtype: ID_CARD_GENERIC
                      document_number: BNK123072
                      personal_number: 21771255F
                      portrait_image: >-
                        https://<media-host>/ocr/f61681b8-9422-4378-ac3e-04c6a247fb45-portrait_image-1d9a.jpg?signature=...
                      front_image: >-
                        https://<media-host>/ocr/f61681b8-9422-4378-ac3e-04c6a247fb45-front_image-5c2b.jpg?signature=...
                      back_image: null
                      front_image_camera_front: null
                      back_image_camera_front: null
                      front_image_camera_front_face_match_score: null
                      back_image_camera_front_face_match_score: null
                      front_image_quality_score:
                        focus_score: 100
                        brightness_score: 95.7
                        brightness_issue: ok
                        is_document_fully_visible: true
                        resolution_score: 22.2
                        overall_score: 79.3
                      back_image_quality_score: null
                      date_of_birth: '1997-01-30'
                      age: 29
                      expiration_date: '2025-11-26'
                      date_of_issue: null
                      issuing_state: ESP
                      issuing_state_name: Spain
                      first_name: Lucia
                      last_name: Marin Castro
                      full_name: Lucia Marin Castro
                      gender: F
                      address: null
                      formatted_address: null
                      place_of_birth: null
                      marital_status: UNKNOWN
                      nationality: ESP
                      extra_fields:
                        first_surname: Marin
                        second_surname: Castro
                      mrz: {}
                      parsed_address: null
                      warnings:
                        - risk: DOCUMENT_EXPIRED
                          feature: ID_VERIFICATION
                          additional_data: null
                          log_type: error
                          short_description: Document expired
                          long_description: >-
                            The document's expiration date has passed, rendering
                            it no longer valid for use.
                      barcodes: []
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T02:25:48.117204+00:00'
              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."
                  id_verification:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                          - In Review
                        description: >-
                          `Approved` lorsqu'aucun avertissement n'aboutit à un
                          refus et que la vérification de détection du vivant
                          sur le document demandée a produit un résultat
                          exploitable ; `In Review` lorsque cette vérification
                          demandée n'a produit aucun résultat exploitable
                          (`DOCUMENT_LIVENESS_NOT_COMPUTED`) ; `Declined`
                          lorsqu'un avertissement aboutit à un refus — la liste
                          `warnings` en explique la raison.
                      document_type:
                        type: string
                        nullable: true
                        description: >-
                          Nom d'affichage du type de document détecté :
                          `Identity Card`, `Passport`, `Driver's License`,
                          `Residence Permit`, `Health Insurance Card` ou `Tax
                          Card`. `null` lorsque le document n'a pas pu être
                          classé.
                        example: Identity Card
                      document_subtype:
                        type: string
                        nullable: true
                        description: >-
                          Sous-type plus détaillé lorsqu'il est disponible (par
                          ex. `ID_CARD_GENERIC`, `EPASSPORT`).
                        example: ID_CARD_GENERIC
                      document_number:
                        type: string
                        nullable: true
                        example: CBX164224
                      personal_number:
                        type: string
                        nullable: true
                        description: >-
                          Numéro personnel/national secondaire imprimé sur
                          certains documents.
                        example: 20446581H
                      portrait_image:
                        type: string
                        nullable: true
                        description: >-
                          Photo de portrait recadrée du document. Une URL de
                          média temporaire (`https://<media-host>/ocr/...`)
                          lorsque `save_api_request=true` (par défaut) ; une
                          chaîne JPEG encodée en base64 en ligne lorsque
                          `save_api_request=false`. `null` lorsqu'aucun portrait
                          n'a été détecté.
                      front_image:
                        type: string
                        nullable: true
                        description: >-
                          Recadrage aligné du recto du document. URL du média
                          lorsqu'il est enregistré, JPEG intégré encodé en
                          base64 sinon.
                      back_image:
                        type: string
                        nullable: true
                        description: >-
                          Recadrage aligné du verso du document. `null` si
                          aucune `back_image` n'a été téléversée.
                      front_image_camera_front:
                        type: string
                        nullable: true
                        description: >-
                          Toujours `null` sur cet endpoint (renseigné uniquement
                          dans les sessions de vérification par capture caméra).
                      back_image_camera_front:
                        type: string
                        nullable: true
                        description: Toujours `null` sur cet endpoint.
                      front_image_camera_front_face_match_score:
                        type: number
                        nullable: true
                        description: Toujours `null` sur cet endpoint.
                      back_image_camera_front_face_match_score:
                        type: number
                        nullable: true
                        description: Toujours `null` sur cet endpoint.
                      front_image_quality_score:
                        type: object
                        nullable: true
                        description: >-
                          Diagnostics de qualité de capture pour l'image
                          téléversée (`null` lorsque le côté n'a pas été fourni
                          ou que la notation a échoué). Tous les scores sont
                          compris entre 0 et 100.
                        properties:
                          focus_score:
                            type: number
                            format: float
                            description: >-
                              Netteté du recadrage du document (une valeur plus
                              élevée indique une plus grande netteté).
                          brightness_score:
                            type: number
                            format: float
                            description: >-
                              Qualité de l'exposition (plus elle est élevée,
                              mieux c'est).
                          brightness_issue:
                            type: string
                            nullable: true
                            description: >-
                              `ok` lorsque l'exposition est correcte, sinon le
                              problème détecté (par ex. trop sombre / trop
                              lumineux).
                          is_document_fully_visible:
                            type: boolean
                            nullable: true
                            description: >-
                              Indique si les quatre coins du document se
                              trouvent à l'intérieur du cadre.
                          resolution_score:
                            type: number
                            format: float
                            description: Résolution effective de la zone du document.
                          overall_score:
                            type: number
                            format: float
                            description: Score de qualité agrégé.
                      back_image_quality_score:
                        type: object
                        nullable: true
                        description: >-
                          Diagnostics de qualité de capture pour l'image
                          téléversée (`null` lorsque le côté n'a pas été fourni
                          ou que la notation a échoué). Tous les scores sont
                          compris entre 0 et 100.
                        properties:
                          focus_score:
                            type: number
                            format: float
                            description: >-
                              Netteté du recadrage du document (une valeur plus
                              élevée indique une plus grande netteté).
                          brightness_score:
                            type: number
                            format: float
                            description: >-
                              Qualité de l'exposition (plus elle est élevée,
                              mieux c'est).
                          brightness_issue:
                            type: string
                            nullable: true
                            description: >-
                              `ok` lorsque l'exposition est correcte, sinon le
                              problème détecté (par ex. trop sombre / trop
                              lumineux).
                          is_document_fully_visible:
                            type: boolean
                            nullable: true
                            description: >-
                              Indique si les quatre coins du document se
                              trouvent à l'intérieur du cadre.
                          resolution_score:
                            type: number
                            format: float
                            description: Résolution effective de la zone du document.
                          overall_score:
                            type: number
                            format: float
                            description: Score de qualité agrégé.
                      date_of_birth:
                        type: string
                        format: date
                        nullable: true
                        example: '1980-01-13'
                      age:
                        type: integer
                        nullable: true
                        description: >-
                          Âge du titulaire en années, calculé à partir de
                          `date_of_birth`.
                        example: 46
                      expiration_date:
                        type: string
                        format: date
                        nullable: true
                        example: '2032-03-31'
                      date_of_issue:
                        type: string
                        format: date
                        nullable: true
                        example: '2022-03-31'
                      issuing_state:
                        type: string
                        nullable: true
                        description: Pays de délivrance (ISO 3166-1 alpha-3).
                        example: ESP
                      issuing_state_name:
                        type: string
                        nullable: true
                        example: Spain
                      first_name:
                        type: string
                        nullable: true
                        example: Julio Francisco
                      last_name:
                        type: string
                        nullable: true
                        example: Fores Sena
                      full_name:
                        type: string
                        nullable: true
                        example: Julio Francisco Fores Sena
                      gender:
                        type: string
                        nullable: true
                        description: >-
                          `M`, `F` ou `null` lorsqu'il n'est pas
                          imprimé/détecté.
                        example: M
                      address:
                        type: string
                        nullable: true
                        description: >-
                          Adresse exactement telle qu'elle est imprimée sur le
                          document.
                      formatted_address:
                        type: string
                        nullable: true
                        description: Version géocodée et normalisée de `address`.
                      place_of_birth:
                        type: string
                        nullable: true
                        example: Valencia, Valencia
                      marital_status:
                        type: string
                        nullable: true
                        description: >-
                          `UNKNOWN` sauf si le document indique la situation
                          matrimoniale.
                        example: UNKNOWN
                      nationality:
                        type: string
                        nullable: true
                        description: Nationalité du titulaire (ISO 3166-1 alpha-3).
                        example: ESP
                      extra_fields:
                        type: object
                        nullable: true
                        additionalProperties: true
                        description: >-
                          Champs supplémentaires spécifiques au document ne
                          disposant pas de colonne dédiée (par ex.
                          `first_surname`/`second_surname` sur les pièces
                          d'identité espagnoles, catégories de permis sur les
                          permis de conduire).
                      mrz:
                        type: object
                        description: >-
                          Zone de lecture optique analysée. Un **objet vide**
                          (`{}`) si le document n'a pas de MRZ ou si elle n'a
                          pas pu être lue — vérifiez également la liste
                          `warnings` dans ce cas. Les dates à l'intérieur de la
                          MRZ utilisent le format brut `YYMMDD`.
                        properties:
                          surname:
                            type: string
                            example: FORES SENA
                          name:
                            type: string
                            example: JULIO FRANCISCO
                          country:
                            type: string
                            description: Pays de délivrance (ISO 3166-1 alpha-3).
                            example: ESP
                          nationality:
                            type: string
                            description: Nationalité du titulaire (ISO 3166-1 alpha-3).
                            example: ESP
                          birth_date:
                            type: string
                            description: Date de naissance MRZ brute (`YYMMDD`).
                            example: '800113'
                          expiry_date:
                            type: string
                            description: Date d'expiration MRZ brute (`YYMMDD`).
                            example: '320331'
                          sex:
                            type: string
                            example: M
                          document_type:
                            type: string
                            description: Code de type de document MRZ (par ex. `ID`, `P`).
                            example: ID
                          document_number:
                            type: string
                            example: CBX164224
                          optional_data:
                            type: string
                            nullable: true
                            example: 20446581H
                          optional_data_2:
                            type: string
                            nullable: true
                            example: ''
                          birth_date_hash:
                            type: string
                            description: Chiffre de contrôle MRZ pour la date de naissance.
                            example: '9'
                          expiry_date_hash:
                            type: string
                            description: Chiffre de contrôle MRZ pour la date d'expiration.
                            example: '8'
                          document_number_hash:
                            type: string
                            description: >-
                              Chiffre de contrôle MRZ pour le numéro de
                              document.
                            example: '3'
                          final_hash:
                            type: string
                            description: Chiffre de contrôle composite de la MRZ.
                            example: '3'
                          personal_number:
                            type: string
                            nullable: true
                            example: 20446581H
                          warnings:
                            type: array
                            items:
                              type: string
                            description: >-
                              Avertissements non fatals lors de l'analyse de la
                              MRZ.
                          errors:
                            type: array
                            items:
                              type: string
                            description: >-
                              Erreurs de chiffre de contrôle / d'analyse MRZ.
                              Les erreurs non vides apparaissent sous forme
                              d'avertissement `MRZ_VALIDATION_FAILED`.
                          mrz_type:
                            type: string
                            description: >-
                              Format MRZ : `TD1` (cartes d'identité, 3 lignes),
                              `TD2` ou `TD3` (passeports, 2 lignes).
                            example: TD1
                          mrz_string:
                            type: string
                            description: >-
                              Texte MRZ brut tel que lu, lignes séparées par
                              `\n`.
                          mrz_key:
                            type: string
                            description: >-
                              Clé composite (numéro de document + chiffres de
                              contrôle) utilisée pour les vérifications
                              croisées.
                      parsed_address:
                        type: object
                        nullable: true
                        description: >-
                          Détail structuré et géocodé de `address`. `null`
                          lorsque le document ne comporte aucune adresse ou si
                          elle n'a pas pu être analysée.
                        properties:
                          street_1:
                            type: string
                            nullable: true
                            example: Avenida el Cardonal 52
                          street_2:
                            type: string
                            nullable: true
                            example: b
                          city:
                            type: string
                            nullable: true
                            example: La Laguna
                          region:
                            type: string
                            nullable: true
                            example: Canarias
                          country:
                            type: string
                            nullable: true
                            description: Code pays ISO 3166-1 alpha-2.
                            example: ES
                          postal_code:
                            type: string
                            nullable: true
                            example: '38108'
                          address_type:
                            type: string
                            nullable: true
                            example: Avenida
                          formatted_address:
                            type: string
                            nullable: true
                            description: Chaîne d'adresse géocodée canonique.
                            example: >-
                              Av. el Cardonal, 52, b, 38108 La Laguna, Santa
                              Cruz de Tenerife, Spain
                          raw_results:
                            type: object
                            additionalProperties: true
                            description: >-
                              Payload brut de géocodage (`address_components`,
                              `geometry.location`, `place_id`, …) pour les
                              consommateurs avancés.
                          document_location:
                            type: object
                            nullable: true
                            properties:
                              latitude:
                                type: number
                              longitude:
                                type: number
                            description: >-
                              Coordonnées géocodées de l'adresse figurant sur le
                              document.
                          label:
                            type: string
                            nullable: true
                            description: Quel champ du document a permis de lire l'adresse.
                            example: Spain Identity Card Address
                          is_verified:
                            type: boolean
                            description: >-
                              Indique si le géocodage a confirmé l'existence de
                              l'adresse.
                          category:
                            type: string
                            nullable: true
                            description: >-
                              Catégorie d'adresse (par exemple `Residential`,
                              `Commercial`).
                            example: Residential
                      warnings:
                        type: array
                        description: >-
                          Vide en cas d'approbation sans réserve. Chaque entrée
                          explique un risque détecté ; les entrées avec
                          `log_type: "error"` définissent `status` sur
                          `Declined`, et `DOCUMENT_LIVENESS_NOT_COMPUTED`
                          (`log_type: "warning"`) le définit sur `In Review`.
                        items:
                          type: object
                          properties:
                            risk:
                              type: string
                              description: >-
                                Code de risque lisible par machine. Risques
                                entraînant toujours un refus :
                                `DOCUMENT_EXPIRED`, `MINIMUM_AGE_NOT_MET`,
                                `PORTRAIT_IMAGE_NOT_DETECTED`,
                                `SCREEN_CAPTURE_DETECTED`,
                                `PRINTED_COPY_DETECTED`,
                                `PORTRAIT_MANIPULATION_DETECTED`,
                                `PUBLIC_DOCUMENT_IMAGE_DETECTED`,
                                `INVALID_DATE`, `COULD_NOT_RECOGNIZE_DOCUMENT`
                                (400 uniquement, jamais un avertissement),
                                `DOCUMENT_NUMBER_NOT_DETECTED`,
                                `COULD_NOT_DETECT_DOCUMENT_TYPE`,
                                `NAME_NOT_DETECTED`,
                                `DATE_OF_BIRTH_NOT_DETECTED`. Régis par les
                                options de requête : `MRZ_NOT_DETECTED` /
                                `MRZ_VALIDATION_FAILED` (`invalid_mrz_action`),
                                `DATA_INCONSISTENT` /
                                `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` /
                                `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`
                                (`inconsistent_data_action`),
                                `EXPIRATION_DATE_NOT_DETECTED`
                                (`expiration_date_not_detected_action`). Les
                                autres risques (par ex.
                                `POSSIBLE_DUPLICATED_USER`) sont informatifs.
                                `DOCUMENT_LIVENESS_NOT_COMPUTED` est déclenché
                                lorsque `perform_document_liveness=true` mais
                                que le contrôle de contrefaçon n'a renvoyé aucun
                                score exploitable ; cela définit `status` sur
                                `In Review`. `COULD_NOT_DETECT_DOCUMENT_TYPE`
                                est également renvoyé lorsque le recto du
                                document ne correspond pas avec un niveau de
                                confiance élevé au modèle d'un document officiel
                                connu, par exemple un document modifié ou généré
                                par ordinateur, ou un modèle qui n'est pas
                                encore pris en charge.
                              example: DOCUMENT_EXPIRED
                            feature:
                              type: string
                              enum:
                                - ID_VERIFICATION
                              description: >-
                                Fonctionnalité ayant émis l'avertissement.
                                Toujours `ID_VERIFICATION` sur cet endpoint.
                            additional_data:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: >-
                                Contexte supplémentaire pour certains risques
                                (par ex. `POSSIBLE_DUPLICATED_USER` inclut
                                `duplicated_session_id`) ; `null` pour la
                                plupart.
                            log_type:
                              type: string
                              enum:
                                - error
                                - warning
                                - information
                              description: >-
                                Gravité. Les avertissements `error` font passer
                                `status` à `Declined` ; `warning` (uniquement
                                `DOCUMENT_LIVENESS_NOT_COMPUTED`, lorsque le
                                contrôle de falsification demandé n'a produit
                                aucun score utilisable) fait passer `status` à
                                `In Review` ; les entrées `information` sont
                                indicatives et ne modifient jamais le statut.
                            short_description:
                              type: string
                              description: >-
                                Résumé du risque en une ligne, lisible par
                                l'utilisateur.
                            long_description:
                              type: string
                              description: Explication lisible par l'humain du risque.
                      barcodes:
                        type: array
                        description: >-
                          Codes-barres décodés à partir du document (PDF417, QR,
                          …). Vide lorsque le document n'en comporte aucun ou
                          qu'aucun n'a pu être lu.
                        items:
                          type: object
                          properties:
                            type:
                              type: string
                              description: >-
                                Type de code-barres (par ex. `PDF417`,
                                `QR_CODE`, `UNKNOWN`).
                            position:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: >-
                                Emplacement du code-barres dans l'image,
                                lorsqu'il est disponible.
                            data:
                              type: string
                              description: Payload décodé.
                            data_raw:
                              type: string
                              description: >-
                                Payload brut (non décodé), lorsqu'il est
                                différent.
                            side:
                              type: string
                              nullable: true
                              description: '`front` ou `back`.'
                  vendor_data:
                    type: string
                    nullable: true
                    description: Écho des `vendor_data` que vous avez envoyées, ou `null`.
                  metadata:
                    type: object
                    nullable: true
                    additionalProperties: true
                    description: >-
                      Écho de l'objet `metadata` que vous avez envoyé, ou
                      `null`.
                  created_at:
                    type: string
                    format: date-time
                    description: >-
                      Horodatage ISO 8601 (UTC) du moment où la réponse a été
                      générée.
        '400':
          description: >-
            Erreur de validation ou de traitement. Les problèmes au niveau des
            champs renvoient l'enveloppe standard de DRF (un tableau de messages
            par champ concerné). Les problèmes de PDF chiffré renvoient
            `{"detail": ...}`. Une image de document dans laquelle aucun
            document ne peut être reconnu renvoie `{"error":
            "COULD_NOT_RECOGNIZE_DOCUMENT"}`. Les téléversements de PDF peuvent
            également échouer avec « Le fichier PDF soumis est corrompu ou non
            valide. » ou une erreur d'absence de pages.
          content:
            application/json:
              examples:
                Missing front image:
                  summary: >-
                    `front_image` n'est pas inclus dans les données du
                    formulaire
                  value:
                    front_image:
                      - No file was submitted.
                Unsupported file extension:
                  summary: Extension de fichier autre que tiff/jpg/jpeg/png/webp/pdf
                  value:
                    front_image:
                      - >-
                        File extension “txt” is not allowed. Allowed extensions
                        are: tiff, jpg, jpeg, png, webp, pdf.
                File too large:
                  summary: Le téléversement dépasse la limite de 10 MB
                  value:
                    front_image:
                      - File size should not exceed 10 MB
                Invalid option value:
                  summary: Les options acceptent uniquement DECLINE ou NO_ACTION
                  value:
                    invalid_mrz_action:
                      - '"REVIEW" is not a valid choice.'
                Encrypted PDF:
                  summary: PDF téléversé sans le mot de passe requis
                  value:
                    detail: >-
                      The PDF is encrypted. Please upload a decrypted PDF or a
                      photo instead.
                Wrong PDF password:
                  summary: >-
                    `front_image_password` / `back_image_password` ne
                    déchiffrent pas le PDF
                  value:
                    detail: >-
                      The PDF password is incorrect. Please provide the correct
                      password.
                Document not recognized:
                  summary: Aucun document d'identité n'a pu être détecté dans l'image
                  value:
                    error: COULD_NOT_RECOGNIZE_DOCUMENT
                PDF conversion failure:
                  summary: Le PDF téléversé n'a pas pu être converti en image
                  value:
                    error: Failed to convert front image PDF.
        '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 traitement d'image."
          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
        '503':
          $ref: '#/components/responses/DocumentProcessingBusy'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl -X POST 'https://verification.didit.me/v3/id-verification/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -F 'front_image=@./id_front.jpg' \
              -F 'back_image=@./id_back.jpg' \
              -F 'perform_document_liveness=true' \
              -F 'save_api_request=true' \
              -F 'vendor_data=user-123'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.id_verification.verify(
                front_image=open("front_image.jpg", "rb"),
                back_image=open("back_image.jpg", "rb"),
                perform_document_liveness=True,
                save_api_request=True,
                vendor_data="user-123",
                metadata={"flow": "onboarding"},
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit, { fileFromPath } from "@didit-protocol/sdk-node";

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

            const result = await didit.idVerification.verify({
              front_image: await fileFromPath("front_image.jpg"),
              back_image: await fileFromPath("back_image.jpg"),
              perform_document_liveness: true,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "onboarding" },
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.IDVerification.Verify(ctx, didit.IDVerificationVerifyParams{\n\tFrontImage:              didit.FileFromPath(\"front_image.jpg\"),\n\tBackImage:               didit.Some(didit.FileFromPath(\"back_image.jpg\")),\n\tPerformDocumentLiveness: didit.Bool(true),\n\tSaveAPIRequest:          didit.Bool(true),\n\tVendorData:              didit.String(\"user-123\"),\n\tMetadata:                didit.Some(map[string]any{\"flow\": \"onboarding\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import java.util.Map;

            import me.didit.Didit;

            import me.didit.types.IdVerificationVerifyParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.idVerification().verify(IdVerificationVerifyParams.builder()
                    .frontImage(Path.of("front_image.jpg"))
                    .backImage(Path.of("back_image.jpg"))
                    .performDocumentLiveness(true)
                    .saveApiRequest(true)
                    .vendorData("user-123")
                    .metadata(Map.of("flow", "onboarding"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;
            use Didit\File;

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

            $result = $didit->idVerification->verify([
                'front_image' => File::fromPath('front_image.jpg'),
                'back_image' => File::fromPath('back_image.jpg'),
                'perform_document_liveness' => true,
                'save_api_request' => true,
                'vendor_data' => 'user-123',
                'metadata' => ['flow' => 'onboarding'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.id_verification.verify(
              front_image: Pathname("front_image.jpg"),
              back_image: Pathname("back_image.jpg"),
              perform_document_liveness: true,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "onboarding" }
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Collections.Generic;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.IdVerification.VerifyAsync(new
            IdVerificationVerifyParams

            {
                FrontImage = FileUpload.FromPath("front_image.jpg"),
                BackImage = FileUpload.FromPath("back_image.jpg"),
                PerformDocumentLiveness = true,
                SaveApiRequest = true,
                VendorData = "user-123",
                Metadata = new Dictionary<string, object> { ["flow"] = "onboarding" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  responses:
    DocumentProcessingBusy:
      description: >-
        Un nombre trop important de documents est actuellement en cours de
        traitement, cet envoi n'a donc pas été traité : rien n'a été stocké et
        aucune tentative n'a été utilisée. Renvoyez le même fichier après le
        nombre de secondes indiqué dans `Retry-After`. Effectuez le branchement
        en fonction de `code`, et non du texte du message.
      headers:
        Retry-After:
          description: >-
            Nombre de secondes à attendre avant d'envoyer à nouveau la même
            requête.
          schema:
            type: integer
            example: 10
      content:
        application/json:
          schema:
            type: object
            required:
              - detail
              - code
            properties:
              detail:
                type: string
              code:
                type: string
                enum:
                  - document_processing_busy
          example:
            detail: We are busy processing documents. Please try again in a moment.
            code: document_processing_busy
  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.