> ## 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 UBO KYB : bénéficiaires effectifs ultimes

> Appelez POST /v3/kyb/ubo/ avec un kyb_response_id issu de la recherche au registre pour obtenir le profil, les actionnaires et les UBO via Didit.

Utilisez cet endpoint après que `POST /v3/kyb/search/` a renvoyé des entreprises candidates, lorsque vous avez besoin des **bénéficiaires effectifs ultimes** : les actionnaires ainsi que les personnes physiques et les sociétés mères identifiées à travers la chaîne de détention (`registry_data.ubo_resolution`).

Il est facturé au prix UBO du pays ([prix par pays](https://docs.didit.me/fr/getting-started/kyb-registry-pricing.md)). Le niveau livré est le plus élevé que le pays et le registre peuvent fournir, et `registry_tier_delivered` indique ce qui a été facturé : `shareholders` lorsque le rapport n'identifie aucune personne physique comme bénéficiaire effectif, `basic` lorsqu'il n'existe aucun enregistrement de détention : `registry_ownership_status` vaut alors `unavailable`, ou `not_held` lorsque la source de données sur la détention indique qu'elle ne détient pas cette entreprise ([statut de détention](https://docs.didit.me/fr/standalone-apis/kyb-registry.md#statut-de-l’actionnariat)).

Lorsque le rapport est encore en cours de préparation, ou que la section sur la détention n'a pas encore été récupérée auprès du registre, l'endpoint renvoie `202 Accepted`, `kyb_registry.fetch_status: "pending"`, `kyb_registry.registry_ownership_status: "pending"` et `registry_tier_delivered: null`.
Conservez le `request_id` renvoyé et interrogez `GET /v3/session/{request_id}/decision/` jusqu'à ce que `registry_checks[0].company.fetch_status` soit `resolved`.
Didit finalise automatiquement le rapport en attente et facture le niveau livré une fois celui-ci prêt.
Ne répétez pas la requête d'achat pendant qu'elle est en attente : chaque nouveau POST crée une requête distincte.

Disponible uniquement sur v3. `POST /v2/kyb/select/` et `POST /v3/kyb/select/` conservent leur contrat et leur prix.


## OpenAPI

````yaml fr/openapi-25.json POST /v3/kyb/ubo/
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/kyb/ubo/:
    post:
      tags:
        - Standalone APIs
      summary: >-
        Entreprise au registre KYB avec bénéficiaires effectifs finaux
        (autonome)
      description: "Récupérez le profil Lite, les actionnaires directs **et les bénéficiaires effectifs** résolus à travers la chaîne d'actionnariat (`registry_data.ubo_resolution` contient la chaîne des sociétés mères) d'un candidat renvoyé par `POST /v3/kyb/search/`.\n\n**Association avec la recherche.** Transmettez le `kyb_response_id` du candidat exactement tel qu'il a été renvoyé par une recherche de la même application. Effectuez la recherche au niveau que vous prévoyez d'acheter (`tier` sur `POST /v3/kyb/search/`), car la recherche s'exécute sur la chaîne de registres desservant ce niveau et une recherche Lite sans résultat ne prouve pas que le registre ne détient pas l'entreprise. Lorsque les données d'actionnariat du pays se trouvent dans un autre registre, Didit y retrouve l'entreprise à l'aide de son numéro d'immatriculation, sans frais supplémentaires.\n\n**Facturation.** Facturé au tarif UBO du pays - consultez [Tarifs des registres KYB](/fr/getting-started/kyb-registry-pricing). Le niveau livré est le plus élevé que le pays et le registre peuvent fournir\_: Shareholders lorsque le rapport résolu ne désigne aucune personne physique comme bénéficiaire effectif, Lite lorsqu'il n'existe aucun enregistrement d'actionnariat\_; `registry_tier_delivered` indique ce qui a été facturé. Le solde est vérifié par rapport au prix UBO avant tout appel au registre (`403` en cas de solde insuffisant).\n\n**Disponibilité.** v3 uniquement. Chaque appel crée une session d'entreprise (son identifiant est le `request_id`).\n\n**Rapports en attente.** Lorsqu'un rapport est toujours en cours de préparation, ou que la section sur l'actionnariat n'a pas encore été récupérée auprès du registre, l'endpoint renvoie 202 Accepted, kyb_registry.fetch_status=pending, kyb_registry.registry_ownership_status=pending et registry_tier_delivered=null. Conservez request_id et appelez GET /v3/session/{request_id}/decision/ jusqu'à ce que registry_checks[0].company.fetch_status soit résolu. Didit finalise le rapport automatiquement et facture le niveau livré une fois qu'il est prêt. Ne renouvelez pas l'achat pendant qu'il est en attente\_; chaque nouveau POST crée une requête distincte."
      operationId: post_v3_kyb_ubo
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KYBRegistryCandidateRequest'
            example:
              kyb_response_id: 69aeeb95febb0f1704042259
              vendor_data: company-1234
      responses:
        '200':
          description: >-
            Rapport d'entreprise renvoyé et facturé au niveau fourni. Les
            rapports d'actionnariat toujours en cours de préparation peuvent
            renvoyer 202 ; conservez request_id pour récupérer leur décision
            enregistrée.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      Identifiant de la session d'entreprise créée pour cette
                      récupération. L'enregistrement stocké (visible dans la
                      console) continue d'être mis à jour si la résolution du
                      registre intervient après la réponse.
                  registry_tier_requested:
                    type: string
                    enum:
                      - basic
                      - shareholders
                      - ubo
                    description: >-
                      Le niveau proposé par cet endpoint : `basic` (Lite) pour
                      select, `shareholders`, `ubo`.
                  registry_tier_delivered:
                    type: string
                    enum:
                      - basic
                      - shareholders
                      - ubo
                      - null
                    description: >-
                      Le niveau réellement fourni et facturé. Inférieur à celui
                      demandé lorsque les registres du pays ne contiennent
                      aucune donnée d'actionnariat, lorsque le registre n'a
                      aucun enregistrement d'actionnariat pour cette entreprise,
                      ou lorsque le rapport résolu d'une requête `ubo` ne
                      désigne aucune personne physique comme bénéficiaire
                      effectif.
                    nullable: true
                  kyb_registry:
                    type: object
                    description: Profil complet de l'entreprise issu du registre.
                    properties:
                      uuid:
                        type: string
                        format: uuid
                        description: >-
                          Identifiant Didit pour cet enregistrement
                          d'entreprise.
                      node_id:
                        type: string
                        example: feature_kyb_registry
                      status:
                        type: string
                        enum:
                          - Not Finished
                          - Approved
                          - Declined
                          - In Review
                        description: >-
                          Évaluation par Didit de la vérification au registre
                          (par exemple `In Review` lorsque l'entreprise n'est
                          pas active dans le registre ou que les données
                          d'actionnariat n'ont pas pu être dérivées).
                      registry_status:
                        type: string
                        nullable: true
                        enum:
                          - active
                          - dissolved
                          - deregistered
                          - see full details
                          - authorised
                          - appointed representative
                          - unauthorised
                          - inactive
                          - no longer authorised
                          - closed
                          - struck off
                          - null
                        description: >-
                          Statut normalisé de l'entreprise tel que déclaré par
                          le registre.
                      data_resolved:
                        type: boolean
                        description: >-
                          `true` dès que le registre a renvoyé le profil
                          complet. `false` lorsque le registre était toujours en
                          cours de traitement après interrogation —
                          l'enregistrement stocké se complète automatiquement
                          dès que le registre a terminé.
                      company_name:
                        type: string
                        example: Tesco PLC
                      registration_number:
                        type: string
                        nullable: true
                        example: '00445790'
                      country_code:
                        type: string
                        description: ISO 3166-1 alpha-2.
                        example: GB
                      region:
                        type: string
                        nullable: true
                        description: >-
                          Code de subdivision lorsque le registre est régional
                          (par exemple `CA` pour `US-CA`) ; vide dans le cas
                          contraire.
                      company_type:
                        type: string
                        nullable: true
                        example: Public Limited Company
                      incorporation_date:
                        type: string
                        format: date
                        nullable: true
                        example: '1947-11-27'
                      registered_address:
                        type: string
                        nullable: true
                        example: >-
                          Tesco House, Shire Park, Kestrel Way, Welwyn Garden
                          City, United Kingdom, AL7 1GA
                      tax_number:
                        type: string
                        nullable: true
                        example: GB412 8925 93
                      risk_level:
                        type: string
                        nullable: true
                        description: >-
                          Niveau de risque indiqué par le registre, lorsqu'il
                          est disponible.
                      verification_status:
                        type: string
                        enum:
                          - verified
                          - failed
                          - unknown
                        nullable: true
                        description: >-
                          Statut de vérification inter-juridictions : `verified`
                          lorsque le statut au registre établit la régularité
                          (`active`), `failed` lorsqu'il indique que
                          l'entreprise n'est plus en activité (par exemple
                          `dissolved`), sinon `unknown`. `null` pour une
                          entreprise qui ne provient pas d'un registre et tant
                          qu'une sélection est encore `pending`.
                      is_from_registry:
                        type: boolean
                        description: >-
                          Toujours `true` pour cet endpoint — le profil a été
                          récupéré auprès d'un registre officiel.
                      fetch_status:
                        type: string
                        enum:
                          - pending
                          - resolved
                        description: >-
                          Cycle de vie de la récupération auprès du registre.
                          Reflété par `data_resolved`.
                      alternative_names:
                        type: string
                        nullable: true
                        description: >-
                          Dénominations commerciales, alternatives, anciennes ou
                          dans la langue d'origine de l'entreprise sous forme de
                          texte, lorsqu'elles sont déclarées.
                      nature_of_business:
                        type: string
                        nullable: true
                        description: >-
                          Description de l'activité ou code de classification,
                          lorsqu'ils sont communiqués.
                      registered_capital:
                        type: string
                        nullable: true
                      registered_capital_amount:
                        type: string
                        nullable: true
                        description: >-
                          Montant décimal sous forme de chaîne, lorsqu'il est
                          renseigné.
                      registered_capital_currency:
                        type: string
                        nullable: true
                        description: Code ISO 4217, lorsqu'il est renseigné.
                      website:
                        type: string
                        nullable: true
                        example: https://www.tesco.com/
                      email:
                        type: string
                        nullable: true
                        example: customer.service@tesco.co.uk
                      phone:
                        type: string
                        nullable: true
                        example: '03301231688'
                      legal_entity_identifier:
                        type: string
                        nullable: true
                        description: LEI, lorsqu'il est déclaré.
                      location_of_registration:
                        type: string
                        nullable: true
                        description: >-
                          Registre/juridiction auprès duquel l'entreprise est
                          immatriculée, lorsqu'il est renseigné.
                      vat_number:
                        type: string
                        nullable: true
                        description: >-
                          Numéro de TVA de l'UE, lorsqu'il est recueilli lors de
                          l'étape de registre hébergée ou modifié
                          ultérieurement. Au moment de la sélection, il n'est
                          généralement pas encore défini — la validation de la
                          TVA et de l'identifiant fiscal s'exécute lorsque
                          l'utilisateur final soumet l'étape de registre dans le
                          flux hébergé.
                      vat_validation_status:
                        type: string
                        enum:
                          - valid
                          - invalid
                          - format_valid
                          - invalid_format
                          - could_not_validate
                          - not_applicable
                        description: >-
                          Résultat de la validation du numéro de TVA ou, s'il
                          n'y en a pas, du `tax_number`, lors de la soumission
                          au registre. `valid` / `invalid` : déterminé par le
                          registre officiel du pays (VIES UE, Norvège, Suisse,
                          Brésil, Colombie, Costa Rica, Équateur, Paraguay ;
                          Pologne également par son registre national de TVA).
                          `format_valid` / `invalid_format` : déterminé par les
                          règles de format et de chiffre de contrôle du pays
                          lorsqu'aucun registre ne peut être interrogé.
                          `could_not_validate` : le registre était indisponible.
                          `not_applicable` : pas de numéro, un pays sans
                          registre ni règles, ou une session sandbox.
                      vat_validated_number:
                        type: string
                        nullable: true
                        description: >-
                          Le numéro qui a été vérifié, tel que la source le
                          connaît (par exemple le numéro de TVA dérivé d'un
                          SIREN français ou d'un RSIN néerlandais). `null` si
                          aucune vérification n'a été effectuée.
                      vat_validation_source:
                        type: string
                        nullable: true
                        enum:
                          - eu_vies
                          - pl_vat_white_list
                          - no_brreg
                          - ch_uid_register
                          - br_receita_federal
                          - co_rues
                          - cr_hacienda
                          - ec_sri
                          - py_dnit
                          - format_rules
                          - null
                        description: >-
                          La source ayant déterminé `vat_validation_status` : un
                          registre officiel ou `format_rules`. Vaut `null` si
                          aucune vérification n'a été exécutée.
                      vat_validated_name:
                        type: string
                        nullable: true
                        description: >-
                          Nom enregistré auprès de la source ayant validé le
                          numéro, lorsqu'elle en communique un. Défini
                          uniquement lorsque le statut est `valid`.
                      vat_validated_address:
                        type: string
                        nullable: true
                        description: >-
                          Adresse enregistrée auprès de la source ayant validé
                          le numéro, lorsqu'elle en divulgue une. Renseigné
                          uniquement lorsque le statut est `valid`.
                      vat_checked_at:
                        type: string
                        format: date-time
                        nullable: true
                        description: >-
                          Horodatage de la vérification. `null` si aucune
                          vérification n'a été exécutée.
                      financial_summary:
                        type: object
                        nullable: true
                        description: >-
                          Détails sur les actions/le capital indiqués par le
                          registre (devise, nombre total d'actions, catégories
                          d'actions), lorsqu'ils sont disponibles.
                      officers:
                        type: array
                        items:
                          type: object
                          properties:
                            uuid:
                              type: string
                              format: uuid
                            name:
                              type: string
                              example: MELISSA BETHELL
                            designation:
                              type: string
                              nullable: true
                              description: >-
                                Désignation brute au registre (ex. `Director`,
                                `Secretary`).
                            role:
                              type: string
                              description: >-
                                Rôle normalisé dérivé de la désignation.
                                Ensemble complet du modèle à 17 valeurs ;
                                l'analyse du registre sur cet endpoint renvoie
                                généralement director, non_executive_director,
                                secretary, chairman ou company_officer.
                              enum:
                                - director
                                - non_executive_director
                                - secretary
                                - chairman
                                - ubo
                                - shareholder
                                - representative
                                - founder
                                - legal_advisor
                                - authorized_signatory
                                - trustee
                                - beneficiary
                                - company_officer
                                - settlor
                                - protector
                                - investor
                                - other
                            nationality:
                              type: string
                              nullable: true
                            is_active:
                              type: boolean
                              description: >-
                                `false` lorsque le registre indique que le
                                titulaire du mandat a démissionné.
                            kyc_status:
                              type: string
                              nullable: true
                              enum:
                                - Approved
                                - Declined
                                - Pending
                                - null
                              description: >-
                                Statut d'une session KYC associée, lorsqu'une
                                session a été démarrée pour ce dirigeant. `null`
                                sinon.
                            kyc_session_url:
                              type: string
                              nullable: true
                              description: >-
                                URL de vérification de la session KYC associée,
                                lorsqu'elle existe.
                            first_name:
                              type: string
                              nullable: true
                              description: >-
                                Prénom lorsqu'il est explicitement indiqué par
                                le registre ; non déduit du nom complet.
                            last_name:
                              type: string
                              nullable: true
                              description: >-
                                Nom de famille lorsqu'il est explicitement
                                indiqué par le registre.
                            address:
                              type: string
                              nullable: true
                              description: Adresse du dirigeant indiquée par le registre.
                            appointment_date:
                              type: string
                              nullable: true
                              description: Date à laquelle le dirigeant a été nommé.
                              format: date
                            termination_date:
                              type: string
                              nullable: true
                              description: Date de fin de mandat, lorsqu'elle est signalée.
                              format: date
                            date_of_birth:
                              type: string
                              nullable: true
                              description: >-
                                Date de naissance complète rapportée par le
                                registre. Null lorsque seuls l'année ou le mois
                                de naissance sont connus.
                              format: date
                            date_of_birth_year:
                              type: integer
                              nullable: true
                              minimum: 1
                              maximum: 9999
                              description: >-
                                Année de naissance indiquée par le registre, y
                                compris lorsque la date complète n'est pas
                                disponible.
                            date_of_birth_month:
                              type: integer
                              nullable: true
                              minimum: 1
                              maximum: 12
                              description: >-
                                Mois de naissance indiqué par le registre. Null
                                lorsque seule l'année est connue.
                        description: >-
                          Dirigeants, secrétaires et autres responsables
                          extraits du registre.
                      beneficial_owners:
                        type: array
                        items:
                          type: object
                          properties:
                            uuid:
                              type: string
                              format: uuid
                            name:
                              type: string
                            first_name:
                              type: string
                              nullable: true
                            last_name:
                              type: string
                              nullable: true
                            entity_type:
                              type: string
                              enum:
                                - person
                                - company
                              description: >-
                                Indique si le propriétaire est une personne
                                physique ou une entité morale.
                            roles:
                              type: array
                              items:
                                type: string
                              description: >-
                                Rôles normalisés (par exemple `ubo`,
                                `shareholder`).
                            ownership_min_shares:
                              type: string
                              nullable: true
                              description: >-
                                Limite inférieure de la fourchette
                                d'actionnariat déclarée par le registre (par ex.
                                `25%`).
                            ownership_max_shares:
                              type: string
                              nullable: true
                              description: >-
                                Limite supérieure de la tranche d'actionnariat
                                déclarée par le registre.
                            is_active:
                              type: boolean
                            kyc_status:
                              type: string
                              nullable: true
                              enum:
                                - Approved
                                - Declined
                                - Pending
                                - null
                            kyc_session_url:
                              type: string
                              nullable: true
                            effective_ownership_percent:
                              type: number
                              nullable: true
                              description: >-
                                Pourcentage d'actionnariat analysé (borne
                                maximale, ou à défaut borne minimale).
                            company_name:
                              type: string
                              nullable: true
                            registration_number:
                              type: string
                              nullable: true
                            country_of_birth:
                              type: string
                              nullable: true
                            email:
                              type: string
                              nullable: true
                            nationality:
                              type: string
                              nullable: true
                            designation:
                              type: string
                              nullable: true
                            voting_min_shares:
                              type: string
                              nullable: true
                            voting_max_shares:
                              type: string
                              nullable: true
                            date_of_birth:
                              type: string
                              nullable: true
                              description: >-
                                Date de naissance complète lorsqu'elle est
                                rapportée.
                              format: date
                            appointment_date:
                              type: string
                              nullable: true
                              description: Date de nomination lorsqu'elle est déclarée.
                              format: date
                            shareholding:
                              $ref: '#/components/schemas/KYBRegistryShareholding'
                        description: >-
                          Bénéficiaires effectifs / personnes exerçant un
                          contrôle significatif extraits du registre. Peut être
                          vide lorsque le registre ne divulgue pas
                          l'actionnariat.
                      addresses:
                        type: array
                        nullable: true
                        description: >-
                          Chaque adresse indiquée par le registre, sous un
                          format canonique unique. Nul lorsqu'il n'en indique
                          aucune.
                        items:
                          $ref: '#/components/schemas/KYBRegistryAddress'
                      industries:
                        type: array
                        nullable: true
                        description: >-
                          Les activités dans lesquelles le registre classe
                          l'entreprise, sous une forme canonique. Null lorsqu'il
                          n'en indique aucune.
                        items:
                          $ref: '#/components/schemas/KYBRegistryIndustry'
                      accounts:
                        type: object
                        nullable: true
                        additionalProperties: true
                        description: >-
                          Dates de dépôt au registre, lorsqu'elles sont
                          disponibles. Les déclarations annuelles et les
                          assemblées générales utilisent last_annual_return_date
                          et last_agm_date ; elles sont distinctes des comptes
                          financiers.
                      registry_data:
                        $ref: '#/components/schemas/KYBRegistryData'
                      user_provided_data:
                        type: object
                        nullable: true
                        description: >-
                          Toujours `null` sur cet endpoint (utilisé par le flux
                          KYB hébergé lorsque les utilisateurs finaux modifient
                          les données de registre).
                      confirmed_by_user_at:
                        type: string
                        format: date-time
                        nullable: true
                        description: Toujours `null` sur cet endpoint.
                      last_console_edit_at:
                        type: string
                        format: date-time
                        nullable: true
                        description: >-
                          Défini lorsqu'un réviseur de la console modifie
                          l'enregistrement ultérieurement.
                      is_editable:
                        type: boolean
                        description: >-
                          Indique si les données issues du registre peuvent
                          encore être modifiées dans le flux hébergé ou la
                          console.
                      registry_tier_delivered:
                        type: string
                        enum:
                          - basic
                          - shareholders
                          - ubo
                          - null
                        description: >-
                          Identique au `registry_tier_delivered` de premier
                          niveau.
                        nullable: true
                      registry_ownership_status:
                        type: string
                        nullable: true
                        enum:
                          - not_requested
                          - delivered
                          - not_held
                          - unavailable
                          - pending
                          - null
                        description: >-
                          `delivered` lorsque les données d'actionnariat ont été
                          reçues, `not_held` lorsque le registre d'actionnariat
                          a répondu et ne répertorie pas cette entreprise (voir
                          `registry_data.ownership_error`), `unavailable`
                          lorsqu'un niveau d'actionnariat a été demandé mais que
                          le registre n'en avait aucun pour cette entreprise ou
                          n'a pas pu être interrogé (voir
                          `registry_data.ownership_error`), `pending` lorsque la
                          section relative à l'actionnariat n'a pas encore été
                          récupérée auprès du registre et que Didit est toujours
                          en train de la compléter, `not_requested` pour le
                          niveau Lite.
                      ownership:
                        $ref: '#/components/schemas/KYBRegistryOwnership'
                      registry_tier:
                        type: string
                        nullable: true
                        description: >-
                          Le niveau de registre commandé par le workflow :
                          `basic`, `shareholders` ou `ubo`. Également dans
                          `ownership.tier_requested`.
                      registry_monitoring:
                        type: object
                        nullable: true
                        description: >-
                          Le moniteur de registre le plus récent pour
                          l'entreprise, ou `null` s'il n'en existe aucun.
                        properties:
                          uuid:
                            type: string
                            format: uuid
                          status:
                            type: string
                          unavailable_reason:
                            type: string
                            nullable: true
                          enrolled_at:
                            type: string
                            format: date-time
                            nullable: true
                          cancelled_at:
                            type: string
                            format: date-time
                            nullable: true
                          last_bill_date:
                            type: string
                            format: date
                            nullable: true
                          next_bill_date:
                            type: string
                            format: date
                            nullable: true
                          last_event_at:
                            type: string
                            format: date-time
                            nullable: true
                          events_count:
                            type: integer
                          watched_fields:
                            description: >-
                              Les champs de l'entreprise que le moniteur
                              surveille.
                  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:
                Resolved company:
                  summary: >-
                    Profil complet du registre (liste des dirigeants tronquée
                    par souci de concision)
                  value:
                    request_id: 9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e
                    kyb_registry:
                      uuid: f1e2d3c4-b5a6-4789-9c0d-1e2f3a4b5c6d
                      node_id: feature_kyb_registry
                      status: In Review
                      registry_status: active
                      data_resolved: true
                      company_name: Tesco PLC
                      registration_number: '00445790'
                      country_code: GB
                      region: ''
                      company_type: Public Limited Company
                      incorporation_date: '1947-11-27'
                      registered_address: >-
                        Tesco House, Shire Park, Kestrel Way, Welwyn Garden
                        City, United Kingdom, AL7 1GA
                      tax_number: GB412 8925 93
                      risk_level: low risk
                      verification_status: verified
                      is_from_registry: true
                      fetch_status: resolved
                      alternative_names: TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY
                      nature_of_business: null
                      registered_capital: null
                      registered_capital_amount: null
                      registered_capital_currency: null
                      website: https://www.tesco.com/
                      email: customer.service@tesco.co.uk
                      phone: '03301231688'
                      legal_entity_identifier: null
                      location_of_registration: null
                      financial_summary:
                        currency: Pound (£)
                        total_number_of_shares: '8174378721'
                        meta_detail:
                          Class_Of_Share: Ordinary
                      officers:
                        - uuid: a1b2c3d4-e5f6-4789-9a0b-1c2d3e4f5a6b
                          name: CHRISTOPHER JON TAYLOR
                          designation: Secretary
                          role: secretary
                          nationality: null
                          is_active: true
                          kyc_status: null
                          kyc_session_url: null
                        - uuid: b2c3d4e5-f6a7-4890-8b1c-2d3e4f5a6b7c
                          name: MELISSA BETHELL
                          designation: Director
                          role: director
                          nationality: British
                          is_active: true
                          kyc_status: null
                          kyc_session_url: null
                      beneficial_owners: []
                      addresses:
                        - address: >-
                            Tesco House, Shire Park, Kestrel Way, Welwyn Garden
                            City, United Kingdom, AL7 1GA
                          type: legal_entity_registry_address
                          description: registered office address
                      industries: null
                      accounts:
                        last_account: 26 February 2025
                        next_account: 26 February 2026
                        due_by_date: 26 August 2026
                      registry_data:
                        ubo_resolution:
                          parent_chain: []
                          subsidiaries: []
                          unresolved: []
                      user_provided_data: null
                      confirmed_by_user_at: null
                      last_console_edit_at: null
                      is_editable: true
                    vendor_data: company-1234
                    metadata: null
                    created_at: '2026-06-11T10:45:00.000000+00:00'
        '202':
          description: >-
            Rapport accepté et toujours en cours de traitement. Lorsqu'un
            rapport est encore en préparation, l'endpoint renvoie 202 Accepted,
            kyb_registry.fetch_status=pending et registry_tier_delivered=null.
            Conservez request_id et interrogez GET
            /v3/session/{request_id}/decision/ jusqu'à ce que
            registry_checks[0].company.fetch_status soit résolu. Didit finalise
            le rapport automatiquement et facture le niveau livré une fois qu'il
            est prêt. Ne répétez pas l'achat pendant qu'il est en attente ;
            chaque nouveau POST crée une requête distincte.
          content:
            application/json:
              schema:
                $ref: 72789f92-1357-4dea-a1c5-1652823d5684
              examples:
                Pending (registry still resolving):
                  summary: >-
                    Le rapport d'actionnariat est toujours en cours de
                    traitement ; récupérer la décision enregistrée
                  value:
                    request_id: 9d4f2c7a-1b3e-4a5c-8d6f-0e9a8b7c6d5e
                    kyb_registry:
                      uuid: 7c0a4f7e-2b1d-4f6a-9c3e-8d5b2a1f0e9d
                      node_id: feature_kyb_registry
                      status: Not Finished
                      registry_status: null
                      data_resolved: false
                      company_name: Example Holdings Limited
                      registration_number: '12345678'
                      country_code: HK
                      region: null
                      company_type: null
                      incorporation_date: null
                      registered_address: null
                      tax_number: null
                      risk_level: null
                      verification_status: null
                      is_from_registry: true
                      fetch_status: pending
                      alternative_names: null
                      nature_of_business: null
                      registered_capital: null
                      registered_capital_amount: null
                      registered_capital_currency: null
                      website: null
                      email: null
                      phone: null
                      legal_entity_identifier: null
                      location_of_registration: null
                      financial_summary: {}
                      officers: []
                      beneficial_owners: []
                      addresses: null
                      industries: null
                      accounts: null
                      registry_data: {}
                      user_provided_data: null
                      confirmed_by_user_at: null
                      last_console_edit_at: null
                      is_editable: true
                      registry_tier_delivered: null
                      registry_ownership_status: pending
                    vendor_data: company-1234
                    metadata: null
                    created_at: '2026-06-11T10:45:00.000000+00:00'
                    registry_tier_delivered: null
                    registry_tier_requested: ubo
        '400':
          description: >-
            Erreur de validation. Les problèmes au niveau des champs utilisent
            l'enveloppe standard de DRF.
          content:
            application/json:
              examples:
                Missing kyb_response_id:
                  summary: '`kyb_response_id` est requis'
                  value:
                    kyb_response_id:
                      - This field is required.
                save_api_request=false rejected:
                  summary: Les sélections sont toujours enregistrées
                  value:
                    save_api_request:
                      - >-
                        KYB registry select must be saved so billing and
                        retrieval can be tracked.
        '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
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/kyb/ubo/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "kyb_response_id": "69aeeb95febb0f1704042259",
                "vendor_data": "company-1234"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.kyb.list_ubos(
                kyb_response_id="69aeeb95febb0f1704042259",
                vendor_data="company-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.kyb.listUbos({
              kyb_response_id: "69aeeb95febb0f1704042259",
              vendor_data: "company-1234",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.KYB.ListUBOs(ctx, didit.KYBRegistryCandidateRequest{\n\tKYBResponseID: \"69aeeb95febb0f1704042259\",\n\tVendorData:    didit.String(\"company-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.KYBRegistryCandidateRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.kyb().listUbos(KYBRegistryCandidateRequest.builder()
                    .kybResponseId("69aeeb95febb0f1704042259")
                    .vendorData("company-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->kyb->listUbos([
                'kyb_response_id' => '69aeeb95febb0f1704042259',
                'vendor_data' => 'company-1234',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.kyb.list_ubos(
              kyb_response_id: "69aeeb95febb0f1704042259",
              vendor_data: "company-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.Kyb.ListUbosAsync(new
            KYBRegistryCandidateRequest

            {
                KybResponseId = "69aeeb95febb0f1704042259",
                VendorData = "company-1234",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    KYBRegistryCandidateRequest:
      type: object
      required:
        - kyb_response_id
      properties:
        kyb_response_id:
          type: string
          maxLength: 1024
          description: "Identifiant de candidat issu de `POST /v3/kyb/search/` (`kyb_registry.companies[].kyb_response_id`). Éphémère\_: utilisez-le peu de temps après la recherche qui l'a produit. Les identifiants peuvent être longs, stockez et envoyez donc la valeur exactement telle qu'elle a été renvoyée, sans supprimer les espaces superflus ni présumer de sa longueur."
          example: 69aeeb95febb0f1704042259
        vendor_data:
          type: string
          description: >-
            Votre identifiant pour cette entreprise ; renvoyé en écho et
            conservé avec la session d'entreprise.
        metadata:
          type: object
          nullable: true
          description: JSON libre stocké avec la session d'entreprise et renvoyé en écho.
        save_api_request:
          type: boolean
          default: true
          description: >-
            Doit être `true` (valeur par défaut). Les sélections du registre KYB
            sont toujours conservées afin que la facturation et la récupération
            puissent être suivies ; `false` renvoie `400`.
    KYBRegistryShareholding:
      type: object
      nullable: true
      description: >-
        Ce qu'un propriétaire détient, sous le même format pour chaque pays et
        chaque source de registre. Null lorsque le registre ne mentionne aucune
        détention. Une fourchette (par exemple les 25-50% d'un PSC britannique)
        n'est pas une participation : `percentage` est null et la fourchette
        reste dans `ownership_min_shares` / `ownership_max_shares`.
      properties:
        share_class:
          type: string
          nullable: true
          description: Catégorie ou type d'actions selon la dénomination du registre.
        number_of_shares:
          type: number
          nullable: true
          description: Nombre d'actions détenues.
        currency:
          type: string
          nullable: true
          description: Devise ISO 4217 des valeurs ci-dessous.
        nominal_value:
          type: number
          nullable: true
          description: Valeur nominale par action.
        total_value:
          type: number
          nullable: true
          description: Valeur totale de la participation.
        percentage:
          type: number
          nullable: true
          description: Participation exacte en pourcentage, à quatre décimales.
      required:
        - share_class
        - number_of_shares
        - currency
        - nominal_value
        - total_value
        - percentage
    KYBRegistryAddress:
      type: object
      description: >-
        Une adresse indiquée par le registre, sous le même format pour chaque
        pays et source de registre. Chaque clé est toujours présente ; une
        partie que le registre ne publie pas est null.
      properties:
        type:
          type: string
          nullable: true
          description: >-
            Type d'adresse en minuscules : `registered` pour le siège social ;
            les autres types selon la désignation du registre (par exemple
            `postal`, `office`). `null` lorsque le registre ne précise pas la
            nature de l'adresse.
        address:
          type: string
          description: >-
            L'adresse complète sur une seule ligne. Toujours présente sur chaque
            adresse.
        street:
          type: string
          nullable: true
          description: Rue et numéro.
        city:
          type: string
          nullable: true
          description: Ville ou localité.
        postal_code:
          type: string
          nullable: true
          description: Code postal.
        region:
          type: string
          nullable: true
          description: Région, État ou province.
        country_code:
          type: string
          nullable: true
          description: Code pays ISO 3166-1 alpha-2.
        description:
          type: string
          nullable: true
          description: >-
            Le libellé propre au registre pour l'adresse, lorsqu'il en fournit
            un.
      required:
        - type
        - address
        - street
        - city
        - postal_code
        - region
        - country_code
        - description
    KYBRegistryIndustry:
      type: object
      description: >-
        Une activité sous laquelle le registre classe l'entreprise, sous le même
        format pour chaque pays et source de registre.
      properties:
        code:
          type: string
          nullable: true
          description: >-
            Code d'activité tel qu'il figure sur le registre (par exemple
            `73110`).
        description:
          type: string
          nullable: true
          description: Libellé de l'activité, lorsque le registre en publie un.
        scheme:
          type: string
          nullable: true
          description: >-
            Système de classification, un nom par système quelle que soit la
            source l'ayant signalé : `UK SIC 2007`, `US SIC`, `NACE Rev. 2`,
            `NACE Rev. 2.1`, `NAF Rev. 2`, `CNAE`, `SBI`, `NOGA 2008`, `CAE Rev.
            4`, `Canada SIC 1977` ; les autres systèmes nationaux conservent le
            nom propre du registre. Null lorsque le registre ne nomme pas le
            système.
        is_primary:
          type: boolean
          description: >-
            Vrai pour l'activité principale de l'entreprise. Exactement une
            entrée est principale lorsque la liste n'est pas vide.
      required:
        - code
        - description
        - scheme
        - is_primary
    KYBRegistryData:
      type: object
      nullable: true
      description: "Détails normalisés du registre Didit pour l'entreprise\_: le résultat sur l'actionnariat (`ownership_error`, `section_errors`, `ubo_resolution`, `lite_enrichment`), les corrections apportées avec update-data et les faits du registre qui n'ont pas de champ propre. Ils ne comportent jamais l'enregistrement propre de la source du registre. Chaque clé est facultative et présente uniquement lorsque l'entreprise a une valeur pour celle-ci\_; de nouvelles clés peuvent être ajoutées. Consultez les champs canoniques (`addresses`, `industries`, `ownership`, `beneficial_owners[].shareholding`) pour tout ce qu'ils couvrent."
      properties:
        company_name:
          type: string
          description: Nom de l'entreprise tel que corrigé dans la console.
        registration_number:
          type: string
          description: >-
            Numéro d'immatriculation tel qu'indiqué par le registre ou par une
            correction dans la console.
        country_code:
          type: string
          description: >-
            Pays de l'immatriculation tel qu'indiqué par le registre ou par une
            correction dans la console.
        region:
          type: string
          description: Région ou État de l'immatriculation.
        incorporation_date:
          type: string
          description: Date de constitution (ISO 8601).
        registration_date:
          type: string
          description: >-
            Date d'immatriculation (ISO 8601) lorsque le registre en indique une
            distincte de la date de constitution.
        dissolution_date:
          type: string
          description: Date de dissolution (ISO 8601) lorsque le registre en indique une.
        tax_number:
          type: string
          description: Identifiant fiscal.
        vat_number:
          type: string
          description: Numéro de TVA.
        legal_address:
          type: string
          description: Adresse légale telle que corrigée dans la console.
        registered_address:
          type: string
          description: Adresse enregistrée telle qu'indiquée par le registre.
        company_type:
          type: string
          description: Forme juridique.
        registry_status:
          type: string
          description: Statut de l'entreprise auprès du registre.
        verification_status:
          type: string
          description: Statut de vérification.
        alternative_names:
          type: string
          description: >-
            Autres noms sous lesquels l'entreprise exerce ou a exercé ses
            activités commerciales.
        nature_of_business:
          type: string
          description: Description de l'activité.
        registered_capital:
          type: string
          description: Capital social tel qu'indiqué.
        registered_capital_amount:
          type: string
          description: Montant du capital social, sous forme de chaîne décimale.
        registered_capital_currency:
          type: string
          description: Devise du capital social (ISO 4217).
        website:
          type: string
          description: Site web.
        email:
          type: string
          description: E-mail de contact.
        phone:
          type: string
          description: Téléphone de contact.
        legal_entity_identifier:
          type: string
          description: Identifiant d'entité juridique (LEI).
        location_of_registration:
          type: string
          description: Lieu d'enregistrement.
        control_scheme:
          type: string
          description: Régime de gouvernance lorsque le registre l'indique.
        ownership_error:
          type: string
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
          description: >-
            Raison pour laquelle un niveau d'actionnariat demandé n'a pas été
            fourni, selon les mêmes codes que `ownership.unavailable_reason`.
            `no_owners_on_record` (le registre a répondu et ne mentionne aucun
            propriétaire) et `ownership_section_unavailable` (le registre n'a
            pas renvoyé la section relative à l'actionnariat) constituent des
            constats différents.
        section_errors:
          type: object
          description: >-
            Sections non renvoyées par le registre, indexées par section
            (`officers`, `shareholders`, `group_structure`). Une section
            répertoriée ici n'a jamais été transmise : une liste vide à côté de
            celle-ci n'indique rien sur l'entreprise.
          additionalProperties:
            $ref: '#/components/schemas/KYBRegistrySectionError'
        ubo_resolution:
          $ref: '#/components/schemas/KYBRegistryUboResolution'
        lite_enrichment:
          $ref: '#/components/schemas/KYBRegistryLiteEnrichment'
        registry_metadata:
          type: object
          additionalProperties:
            oneOf:
              - type: string
              - type: number
              - type: boolean
          description: >-
            Les champs propres au registre pour l'entreprise, indexés comme le
            registre les nomme, sous forme de valeurs brutes (enregistrements
            hérités). Seuls les champs examinés en tant que faits du registre
            sont inclus.
        registry_sources:
          type: array
          description: >-
            Les registres officiels depuis lesquels l'enregistrement a été lu
            (anciens enregistrements). Les autres sources ne sont pas nommées.
          items:
            $ref: '#/components/schemas/KYBRegistrySource'
        previous_names:
          type: array
          items:
            type: string
          description: >-
            Noms sous lesquels l'entreprise était précédemment immatriculée
            (enregistrements historiques).
        parent_companies:
          type: array
          items:
            type: string
          description: >-
            Sociétés mères mentionnées par le registre (enregistrements
            historiques).
        documents_available:
          type: integer
          description: >-
            Nombre de dépôts proposés par le registre pour l'entreprise (anciens
            enregistrements).
    KYBRegistryOwnership:
      type: object
      description: >-
        Le résultat du niveau de l'actionnariat (Actionnaires / UBO), sous le
        même format pour chaque pays et source de registre.
      properties:
        status:
          type: string
          nullable: true
          enum:
            - not_requested
            - pending
            - delivered
            - not_held
            - unavailable
            - null
          description: >-
            `delivered` lorsque le registre a publié l'actionnariat ; `not_held`
            lorsque le registre d'actionnariat a répondu et ne répertorie pas du
            tout l'entreprise (voir `unavailable_reason`) ; `unavailable`
            lorsqu'il n'a pas fourni les données d'actionnariat pour toute autre
            raison (voir `unavailable_reason`) ; `pending` pendant que le
            registre les récupère encore ; `not_requested` pour le niveau Basic.
        tier_requested:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: Le niveau commandé par le workflow.
        tier_delivered:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: >-
            Le niveau fourni par le registre (et qui est facturé). Une requête
            UBO dont la réponse ne contient que des actionnaires directs est
            `shareholders`.
        unavailable_reason:
          type: string
          nullable: true
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
            - null
          description: >-
            Raison pour laquelle un niveau d'actionnariat demandé n'a pas été
            fourni. Nul sauf si `status` est `unavailable` ou `pending`.
        direct_ownership_complete:
          type: boolean
          nullable: true
          description: >-
            Vrai lorsque la somme des participations déclarées des actionnaires
            directs atteint 100 % (à un point de pourcentage près pour
            l'arrondi) ; faux dans le cas contraire ; null lorsque
            l'actionnariat n'a pas été fourni ou qu'une participation n'est pas
            déclarée.
        unresolved:
          type: array
          description: >-
            Parties de la chaîne d'actionnariat que le registre n'a pas pu
            résoudre, par exemple aucune structure de groupe enregistrée
            au-dessus des propriétaires directs.
          items:
            type: object
            properties:
              reason:
                type: string
              section:
                type: string
                nullable: true
      required:
        - status
        - tier_requested
        - tier_delivered
        - unavailable_reason
        - direct_ownership_complete
        - unresolved
    KYBRegistrySectionError:
      type: object
      description: Une section que le registre n'a pas renvoyée.
      properties:
        status_code:
          type: integer
          nullable: true
          description: Le statut renvoyé par le registre pour la section.
      required:
        - status_code
    KYBRegistryUboResolution:
      type: object
      description: >-
        Manière dont le niveau UBO a parcouru la chaîne de détention au-dessus
        de l'entreprise.
      properties:
        parent_chain:
          type: array
          description: Sociétés mères, de la société mère ultime jusqu'à l'entreprise.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        subsidiaries:
          type: array
          description: Filiales directes de l'entreprise au sein de son groupe.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        unresolved:
          type: array
          description: >-
            Parties de la chaîne que le registre n'a pas pu résoudre (les mêmes
            entrées que `ownership.unresolved`).
          items:
            type: object
            properties:
              reason:
                type: string
                description: >-
                  Raison, par exemple `no_group_structure_on_record`,
                  `selected_company_not_in_group_structure` ou `section_error`.
              section:
                type: string
                nullable: true
                description: La section concernée, par exemple `group_structure`.
            required:
              - reason
              - section
      required:
        - parent_chain
        - subsidiaries
        - unresolved
    KYBRegistryLiteEnrichment:
      type: object
      description: >-
        Champs de profil Lite vides qu'une autre source du registre du pays a
        complétés. La source n'est pas nommée.
      properties:
        fields:
          type: array
          items:
            type: string
          description: Les champs de l'entreprise qui ont été renseignés.
        people_added:
          type: integer
          description: Nombre de dirigeants ou de propriétaires ajoutés.
      required:
        - fields
        - people_added
    KYBRegistrySource:
      type: object
      description: >-
        Un registre officiel à partir duquel l'enregistrement a été lu. Seuls
        les registres officiels d'État, les régulateurs et le système officiel
        d'identifiants sont mentionnés ; toute autre source est exclue.
      properties:
        name:
          type: string
          description: Nom du registre, par exemple `UK Companies House`.
        source_type:
          type: string
          enum:
            - official
          description: Toujours `official`.
      required:
        - name
        - source_type
    KYBRegistryGroupCompany:
      type: object
      description: Une société du groupe d'entreprises, selon son identité au registre.
      properties:
        name:
          type: string
          nullable: true
          description: Nom de l'entreprise.
        country_code:
          type: string
          nullable: true
          description: Pays d'immatriculation.
        registration_number:
          type: string
          nullable: true
          description: Numéro d'immatriculation.
      required:
        - name
        - country_code
        - registration_number
  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.