> ## 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 récupération de session : décisions KYC et KYB

> Récupérez les décisions KYC ou KYB complètes avec Didit : identité, vivacité, AML, registre et OCR en une réponse, en 2s. Paiement à l'appel.



Prompt de récupération de la décision de session
        Copier le prompt dans le presse-papiers



      
      

\<pre>

\``Fetch the full decision for a Didit verification session.

Endpoint:
GET https://verification.didit.me/v3/session/{session_id}/decision/

Authentication:
Use the x-api-key header with your Didit API key. The key must hold the read:sessions privilege.

Path parameter:
\- session_id (UUID) — returned by POST /v3/session/. Didit resolves it as a User Verification session first, then as a Business Verification session — you do not need to know the kind in advance.

curl example:
curl https://verification.didit.me/v3/session/<SESSION_ID>/decision/ \
-H "x-api-key: <API_KEY>"

Response — top-level keys (both kinds share these):
\- session_id (UUID)
\- session_kind ("user" | "business") — discriminator, ALWAYS branch on this.
\- session_number (int)
\- session_url (string) — hosted URL.
\- status (string) — "Approved", "Declined", "In Review", "In Progress", "Not Started", "Expired", "Abandoned", "Kyc Expired", "Resubmitted", "Awaiting User".
\- workflow_id (workflow_version, workflow_type and workflow_version_id come only with ?include=events)
\- vendor_data, metadata, callback
\- features (string or array) — feature list the workflow runs.
\- expected_details — what you sent on create, if any.
\- created_at, expires_at (ISO 8601).
\- contact_details — { email, email_lang, send_notification_emails, phone }.
\- reviews — array of manual-review activity.
\- status_override ({ overridden_at, automatic_status } | null) — set when a reviewer changed the status by hand.
\- decision_trace — how the status was reached: status, decided_by (manual | automatic | investigator), decided_at, automatic_status, terminal_node_id, actor, warning_counts, status_warnings.
\- linked_records — same_face, earlier_verifications and networks summaries, or null.
\- biometric_retention ({ jurisdictions, deletes_at }) — the date the live biometric data of the session is deleted.
\- assignee, waiting_since, sla_due_at — the Console reviewer holding the session and its review clock; null unless the session is In Review.
\- database_validation_not_performed_reason — why a configured database validation produced no result, when database_validations is null.
\- geolocation_checks, geolocation_attempts — Location verification results and every attempt (see /core-technology/location-verification/report-location-verification).
\- shared_from_session, shared_from_session_number, sandbox_scenario, fraud_check — set only for imported sessions, sandbox scenarios and Fraud Check sessions.
\- full_session_video, full_session_video_recorded_at — only when your organization records full-session video.

Feature arrays — KYC only (session_kind: "user"):
\- id_verifications, liveness_checks, face_matches, nfc_verifications, poa_verifications, database_validations
\- `id_verifications[].barcodes` is always an array. Each entry preserves the reader output, including `type`, `position`, `data`, `data_raw`, and `side`; documents without barcode output return `[]`.
\- nfc_verifications[] items carry is_nfc_skipped (boolean) and skip_reason (string | null) alongside status/chip_data/authenticity — read the reason from the report when one exists. chip_protocol is "icao" or "jpki"; a Japan My Number Card read ("jpki") has its evidence under jpki (chain_valid, signature_valid, revocation_status, attributes, attributes_match_ocr) and null ICAO fields.
\- nfc_skip_reason (string | null), top level — why NFC did not run (USER_SKIPPED, DOCUMENT_WITHOUT_CHIP, CHIP_CERTIFICATE_UNAVAILABLE, DEVICE_WITHOUT_NFC, INTEGRATION_WITHOUT_NFC_ACCESS, MRZ_KEY_UNAVAILABLE, JPKI_UNAVAILABLE), including when the step was bypassed and nfc_verifications stays null.

Feature arrays — KYB only (session_kind: "business"):
\- registry_checks (includes company + officers + beneficial_owners + ownership_structure)
\- document_verifications
\- key_people_checks (officers + beneficial_owners + submitted parties + ubo_kyc_summary)

Shared by both kinds:
\- aml_screenings, phone_verifications, email_verifications, questionnaire_responses, ip_analyses, document_ai_documents
\- bank_verifications: Bank Verification results, one item per Bank Verification step. Read method: "open_banking" (bank sign-in) or "account_lookup" (account check), or a "microdeposits" or "statement" fallback; null until an account is evaluated. "none" when the person chose Continue without your bank before any attempt was evaluated. continued_without_bank: true when the person chose Continue without your bank, also after an evaluated attempt, whose verdict stands; continuation.reason says why (no_route, institution_unsupported, attempts_exhausted, person_choice). financial_data.not_collected lists the data an account check could not collect. See /core-technology/bank-verification/verification-methods and /core-technology/bank-verification/fallbacks.
\- signatures: E-signature results, one item per signer. Present only when the workflow has an E-signature step. Read status ("signed" means signed), verdict, signer, confirmation, certificate, timestamp, documents[] (sha256_original, sha256_signed, signed_file, fields[]) and evidence_file. See /core-technology/electronic-signature/report-electronic-signature.

V3 contract: feature arrays are ALWAYS plural arrays. If a feature was not run on the session, the field is absent or null — never a placeholder.

See /reference/data-models for the full schema (every nested field).

Handler pattern:
const decision = await (await fetch(url, { headers: { "x-api-key": API_KEY } })).json();
switch (decision.session_kind) {
case "user": return handleUserDecision(decision);
case "business": return handleBusinessDecision(decision);
}

Failure modes:
\- 404 — { "detail": "Not found." } when the session does not exist (both session types are checked) or belongs to a different application.
\- 403 — { "detail": "You do not have permission to perform this action." } when the key lacks read:sessions.
\- 401 — invalid API key.

When to call:
\- Eagerly after receiving a status.updated webhook (recommended pattern — see /integration/webhooks).
\- On-demand when your support agent or analyst opens the session in your dashboard.

Caching:
Decision payloads are mutable until the session reaches a terminal status. Cache only if you also subscribe to data.updated and status.updated webhooks.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.``

\</pre>



      
      

Coller dans

## Prise en charge KYC et KYBCet endpoint fonctionne pour les sessions de **Vérification des utilisateurs (KYC)** et de **Vérification d'entreprise (KYB)**. La réponse contient toujours un champ de premier niveau `session_kind` :- `"user"` : session de Vérification des utilisateurs (KYC). La réponse contient `id_verifications`, `liveness_checks`, `face_matches`, `nfc_verifications`, `poa_verifications`, `database_validations`.
- `"business"` : session de Vérification d'entreprise (KYB). La réponse contient `registry_checks`, `document_verifications`, `key_people_checks`.Les deux types partagent `aml_screenings`, `phone_verifications`, `email_verifications`, `questionnaire_responses`, `ip_analyses`, `document_ai_documents`, `bank_verifications`, `reviews`, `contact_details`, ainsi que les champs communs de premier niveau (`session_id`, `session_number`, `session_url`, `status`, `workflow_id`, `vendor_data`, `metadata`, `callback`, `features`, `expected_details`, `created_at`, `expires_at`).Didit résout le `session_id` pour les deux types de session (Vérification des utilisateurs d'abord, Vérification d'entreprise ensuite) et renvoie celle qui correspond. Les UUID sont uniques par application : il n'y a donc aucune ambiguïté.Consultez l'[aperçu des sessions](https://docs.didit.me/fr/sessions-api/overview.md) pour le tableau complet des fonctionnalités propres à chaque type.## Exemples> [tab] Vérification des utilisateurs (KYC)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/4c5c7f3a-1f82-4f3b-8d8e-1a8d2d2f9b7a/decision/ \
>   -H "x-api-key: YOUR_API_KEY"
> ```
>
> **Réponse (tronquée) :**
>
> ```json theme={null}
> {
>   "session_id": "4c5c7f3a-1f82-4f3b-8d8e-1a8d2d2f9b7a",
>   "session_kind": "user",
>   "session_number": 1024,
>   "session_url": "https://verify.didit.me/...",
>   "status": "APPROVED",
>   "workflow_id": "wf_kyc_standard",
>   "vendor_data": "user-42",
>   "features": "ID_VERIFICATION,LIVENESS,FACE_MATCH,AML",
>   "id_verifications": [
>     { "node_id": "feature_ocr_1", "status": "Approved", "document_type": "Passport", "full_name": "John Doe", "barcodes": [], "...": "..." }
>   ],
>   "liveness_checks": [
>     { "node_id": "feature_liveness_1", "status": "Approved", "score": 0.98 }
>   ],
>   "face_matches": [
>     { "node_id": "feature_face_match_1", "status": "Approved", "score": 0.94 }
>   ],
>   "aml_screenings": [
>     { "node_id": "feature_aml_1", "status": "Approved", "total_hits": 0, "score": 0 }
>   ],
>   "phone_verifications": [],
>   "email_verifications": [],
>   "questionnaire_responses": [],
>   "ip_analyses": [],
>   "reviews": [],
>   "contact_details": { "email": "alex.sample@example.com", "phone": null },
>   "expected_details": null,
>   "metadata": {},
>   "callback": null,
>   "created_at": "2026-04-16T10:00:00Z",
>   "expires_at": "2026-04-23T10:00:00Z"
> }
> ```> [tab] Vérification d'entreprise (KYB)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/bs-01HJX1.../decision/ \
>   -H "x-api-key: YOUR_API_KEY"
> ```
>
> **Réponse (tronquée) :**
>
> ```json theme={null}
> {
>   "session_id": "bs-01HJX1...",
>   "session_kind": "business",
>   "session_number": 89,
>   "session_url": "https://verify.didit.me/...",
>   "status": "APPROVED",
>   "workflow_id": "wf_kyb_standard",
>   "vendor_data": "biz-acme-001",
>   "features": ["KYB_REGISTRY", "KYB_COMPANY_AML", "KYB_DOCUMENTS", "KYB_KEY_PEOPLE"],
>   "registry_checks": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_registry",
>       "data_resolved": true,
>       "company": {
>         "uuid": "...",
>         "node_id": "feature_kyb_registry",
>         "status": "Approved",
>         "registry_status": "active",
>         "company_name": "Acme Corporation Limited",
>         "registration_number": "12345678",
>         "country_code": "GBR",
>         "company_type": "Private Limited",
>         "incorporation_date": "2010-05-14",
>         "registered_address": "1 Main Street, London EC1A 1AA, United Kingdom",
>         "tax_number": "SAMPLE-TAX-12345",
>         "risk_level": "LOW",
>         "verification_status": "verified",
>         "is_from_registry": true,
>         "fetch_status": "resolved",
>         "alternative_names": ["Acme Ltd"],
>         "nature_of_business": "Software publishing",
>         "registered_capital": "100000 GBP",
>         "website": "https://acme.example",
>         "email": "alex.sample@example.com",
>         "phone": "+15550101000",
>         "legal_entity_identifier": "529900XXXXXXXXXXXXX",
>         "financial_summary": {},
>         "officers": [
>           { "uuid": "...", "name": "Jane Doe", "role": "director", "nationality": "USA", "is_active": true, "kyc_status": "Approved", "kyc_session_url": "https://verify.didit.me/..." }
>         ],
>         "beneficial_owners": [
>           { "uuid": "...", "name": "John Smith", "entity_type": "person", "roles": ["ubo"], "ownership_min_shares": 40, "ownership_max_shares": 40, "kyc_status": "Pending", "effective_ownership_percent": 40.0 }
>         ],
>         "addresses": [],
>         "industries": [],
>         "accounts": [],
>         "registry_data": { },
>         "user_provided_data": { },
>         "confirmed_by_user_at": "2026-04-16T10:10:00Z",
>         "is_editable": false
>       },
>       "ownership_structure": { },
>       "warnings": []
>     }
>   ],
>   "aml_screenings": [
>     {
>       "node_id": "feature_kyb_company_aml",
>       "status": "Approved",
>       "total_hits": 0,
>       "score": 0,
>       "entity_type": "COMPANY",
>       "hits": []
>     }
>   ],
>   "document_verifications": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_documents",
>       "items": [
>         { "uuid": "...", "document_type": "certificate_of_incorporation", "status": "Approved", "file_url": "https://...", "ocr_data": { } }
>       ],
>       "groups": { "legal_presence": { "approved": 1, "pending": 0, "missing": 0 } },
>       "required_groups": ["legal_presence", "ownership_structure"],
>       "warnings": []
>     }
>   ],
>   "key_people_checks": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_key_people",
>       "officers": [
>         { "uuid": "...", "name": "Jane Doe", "role": "director", "kyc_status": "Approved", "kyc_session_url": "..." }
>       ],
>       "beneficial_owners": [
>         { "uuid": "...", "name": "John Smith", "roles": ["ubo"], "ownership_min_shares": 40, "ownership_max_shares": 40, "kyc_status": "Pending" }
>       ],
>       "registry": {
>         "officers": [
>           { "uuid": "...", "name": "Jane Doe", "role": "director", "kyc_status": "Approved" }
>         ],
>         "beneficial_owners": [
>           { "uuid": "...", "name": "John Smith", "roles": ["ubo"], "ownership_min_shares": 40, "kyc_status": "Pending" }
>         ]
>       },
>       "submitted": {
>         "parties": [
>           { "uuid": "...", "entity_type": "person", "name": "Alice Chen", "role": "ubo", "ownership_percent": 35.0, "requires_verification": true, "kyc_session_status": "Not Started", "kyc_session_url": "https://verify.didit.me/..." }
>         ]
>       },
>       "ubo_kyc_summary": {
>         "total": 2,
>         "approved": 1,
>         "flagged": 0,
>         "pending": 1
>       },
>       "warnings": []
>     }
>   ],
>   "phone_verifications": null,
>   "email_verifications": null,
>   "questionnaire_responses": null,
>   "ip_analyses": null,
>   "reviews": [],
>   "contact_details": { "email": "alex.sample@example.com", "email_lang": "en", "send_notification_emails": true, "phone": null },
>   "expected_details": null,
>   "metadata": {},
>   "callback": null,
>   "created_at": "2026-04-16T10:00:00Z",
>   "expires_at": "2026-04-23T10:00:00Z"
> }
> ```## Traitement de la réponse de votre côté```typescript theme={null}
const res = await fetch(`${BASE}/v3/session/${sessionId}/decision/`, {
  headers: { "x-api-key": API_KEY },
});
const decision = await res.json();

switch (decision.session_kind) {
  case "user":
    handleUserDecision(decision);
    break;
  case "business":
    handleBusinessDecision(decision);
    break;
}
```## Statut, trace de décision et champs d’examenChaque décision indique comment son `status` a été déterminé.| Champ | Ce qu'il faut lire |
| - | - |
| `status_override` | `null` lorsque le statut est celui calculé automatiquement. Lorsqu'un réviseur a défini le statut manuellement, il vaut `{ overridden_at, automatic_status }`, où `automatic_status` correspond au résultat des contrôles. Utilisez-le pour distinguer une approbation manuelle d'une approbation automatique. |
| `decision_trace` | `status`, `decided_by` (`manual`, `automatic` ou `investigator` ; `null` tant que la session n'est pas décidée), `decided_at`, `automatic_status`, `terminal_node_id`, `actor` (le réviseur à l'origine d'une décision manuelle), `warning_counts` par `log_type` plus `total`, et `status_warnings`, les avertissements qui ont fixé un statut `Declined` ou `In Review`. |
| `linked_records` | Un résumé des autres éléments auxquels la vérification est liée : `same_face` (les autres personnes dont le visage correspond, et la correspondance la plus proche), `earlier_verifications` (le nombre de vérifications antérieures pour la même personne) et `networks`. `null` lorsqu'il n'y a rien à afficher. |
| `assignee`, `waiting_since`, `sla_due_at` | Le réviseur de la Console chargé de la session, depuis quand elle est en attente et l’échéance de l’examen. `waiting_since` et `sla_due_at` valent `null` sauf si la session est `In Review` et que votre application définit une échéance de revue. |
| `database_validation_not_performed_reason` | `{ code, message }` expliquant pourquoi une Validation en base de données configurée n'a produit aucun résultat. Il permet de distinguer « le registre a confirmé » de « rien n'a été exécuté » lorsque `database_validations` vaut `null`. |
| `shared_from_session`, `shared_from_session_number` | La session source lorsque celle-ci a été importée avec `POST /v3/session/import-shared/` ; `null` sinon. |
| `sandbox_scenario` | Le scénario avec lequel une session sandbox a été créée. |
| `full_session_video`, `full_session_video_recorded_at` | Une URL temporaire de l'enregistrement et la date de sa création. Renvoyés uniquement si votre organisation enregistre la vidéo de la session complète. |## Conservation des données biométriques`biometric_retention` est toujours présent. `deletes_at` correspond à la date à laquelle les données biométriques actives de la session sont supprimées, et `jurisdictions` liste les États américains dont les règles biométriques fixent une limite de suppression pour la personne (`US` lorsque l'État est inconnu). `deletes_at` vaut `null` lorsqu'aucune date ne s'applique encore.## Vérification de la localisationLorsque le workflow comporte une étape de [Vérification de la localisation](https://docs.didit.me/fr/core-technology/location-verification/overview.md), la décision contient deux tableaux. `geolocation_checks[]` contient un élément par étape : sa tentative acceptée, avec le résultat, les coordonnées et leur précision, les contrôles par rapport à la localisation IP et à l'adresse enregistrée, et les `warnings` de l'étape. `geolocation_attempts[]` liste chaque tentative de chaque étape, de la plus ancienne à la plus récente, avec la date de réception de chacune. Les workflows sans cette étape renvoient `null` pour les deux. Chaque champ et chaque résultat figure dans le [rapport de vérification de la localisation](https://docs.didit.me/fr/core-technology/location-verification/report-location-verification.md).## Événements de routage du workflow`?include=events` ajoute la chronologie des événements de la session. En plus des changements d'étape et de statut, un workflow qui passe par des nœuds de branchement enregistre un événement pour chaque décision de routage. Une intégration (ou la chronologie de la Console) peut ainsi expliquer pourquoi une session s'est terminée sur un résultat donné, sans reconstituer le graphe du workflow à la main.| `event_type` | Moment d'écriture | `details` |
| - | - | - |
| `WORKFLOW_BRANCH_EVALUATED` | Un nœud doté de conditions de branchement a été évalué pendant la progression de la session (nœuds de branchement, ainsi que nœuds de fonctionnalité ou de webhook dotés de branches) | `node_id`, `node_label`, `node_type`, `matched_branch_id` (la branche retenue, ou `null` si aucune ne l'a été), `fallback` (`true` lorsqu'aucune condition n'a été remplie et que la transition par défaut du nœud a été empruntée), `next_node_id`, `next_node_label` |
| `WORKFLOW_STATUS_NODE_REACHED` | Un nœud de statut a été exécuté | `node_id`, `node_label`, `session_status` (la valeur configurée, y compris `Determine`), `resolved_session_status` (la valeur obtenue), `feature_statuses` (`[{target, status}]`) |Les deux événements portent `sent_at` en millisecondes, comme tous les autres événements, et n'ont ni `component`, ni `feature_step`, ni `step` : ils proviennent du moteur de workflow et non de l'appareil de l'utilisateur. Une branche « else » (une branche sans condition) compte comme une branche retenue ; `fallback` n'est `true` que si aucune branche n'a été retenue. Les nœuds qui ne disposent que d'une seule transition sortante ne prennent aucune décision et n'écrivent aucun événement.La même structure renvoie aussi `workflow_terminal_node_id` : le `node_id` du dernier nœud de statut du workflow enregistré qui a défini un statut de session, ou `null` si aucun identifiant de nœud de ce type n'a été enregistré. Il s'agit d'une trace historique de l'origine du workflow. Les approbations, refus et nouvelles soumissions effectués manuellement ne l'effacent pas ; un nœud de statut de workflow ultérieur le remplace. Par exemple, si un workflow envoie une session vers un nœud *En cours d'examen*, puis qu'un réviseur l'approuve plus tard, le `status` actuel est `Approved`, tandis que `workflow_terminal_node_id` identifie toujours le nœud *En cours d'examen*. Il peut aussi rester renseigné pendant qu'une nouvelle soumission est en cours. Pour distinguer les résultats du workflow des décisions manuelles ultérieures, lisez le `status` actuel, la chronologie des événements et celle de `activity_reviews`.```json theme={null}
{
  "event_type": "WORKFLOW_BRANCH_EVALUATED",
  "sent_at": 1789336414007,
  "details": {
    "node_id": "branch-d57da8aa",
    "node_label": "Credential required?",
    "node_type": "branch",
    "matched_branch_id": null,
    "fallback": true,
    "next_node_id": "status-6ba0bd0d",
    "next_node_label": "In Review"
  }
}
```## Soumissions antérieures (`?include=resubmissions`)Une nouvelle soumission renvoie l'utilisateur vers les étapes que vous sélectionnez et conserve ce que ces étapes ont renvoyé auparavant.
`?include=resubmissions` ajoute un tableau `resubmissions`, du plus ancien au plus récent, avec une entrée par demande de nouvelle soumission.
Chaque entrée contient les résultats que cette demande a remplacés, afin que vous puissiez toujours consulter ce que l'utilisateur a soumis précédemment.
Cela fonctionne pour les sessions utilisateur (KYC) et entreprise (KYB), et vous pouvez le combiner avec les événements (`?include=events,resubmissions`).
Sans ce paramètre, la réponse ne change pas.| Champ | Description |
| - | - |
| `number` | 1 pour la première nouvelle soumission de la session, 2 pour la deuxième, et ainsi de suite. |
| `created_at` | Moment où la nouvelle soumission a été demandée. |
| `previous_status` | Statut de la session juste avant la demande. |
| `nodes` | Les étapes du workflow renvoyées à l'utilisateur (`[{node_id, feature}]`). |
| `reasons` | Le motif donné pour chaque étape, indexé par `node_id`, ou `null`. |
| `requested_by` | La personne qui a fait la demande (`name`, `email`, `type`), ou `null`. |
| `results` | Ce que ces étapes ont renvoyé avant la demande, sous les mêmes clés et dans la même forme que les résultats actuels (`id_verifications`, `nfc_verifications`, `liveness_checks`, `face_matches`, `poa_verifications`, `phone_verifications`, `email_verifications`, `aml_screenings`, `ip_analyses`, `database_validations`, `questionnaire_responses`, `document_ai_documents`, `geolocation_checks` ; pour les sessions entreprise, également `document_verifications`). Seules apparaissent les clés des étapes qui ont été renvoyées. |Les résultats actuels (`id_verifications` et les autres au premier niveau) décrivent toujours la dernière soumission.
Les étapes qui n'ont pas été renvoyées conservent un seul résultat à cet endroit.```json theme={null}
{
  "status": "In Review",
  "id_verifications": [{ "node_id": "feature_ocr", "status": "Approved" }],
  "resubmissions": [
    {
      "number": 1,
      "created_at": "2026-10-01T08:31:04.512Z",
      "previous_status": "In Review",
      "nodes": [{ "node_id": "feature_ocr", "feature": "OCR" }],
      "reasons": { "feature_ocr": "Passport photo too blurry" },
      "requested_by": { "name": "<reviewer name>", "email": "<reviewer email>", "type": "USER" },
      "results": {
        "id_verifications": [
          {
            "node_id": "feature_ocr",
            "status": "Declined",
            "warnings": [{ "risk": "IMAGE_TOO_BLURRY", "log_type": "error" }]
          }
        ]
      }
    }
  ]
}
```La suppression d'une session supprime les résultats de toutes les soumissions qui lui sont liées.## Méthodes de vérification d'identitéChaque élément de `id_verifications[]` indique laquelle des trois [méthodes de vérification d'identité](https://docs.didit.me/fr/core-technology/id-verification/verification-methods.md) l'a produit. Vous pouvez ainsi distinguer une lecture de document d'une consultation de registre ou d'une connexion par portefeuille, sans deviner à partir des champs qui se trouvent être renseignés :| Champ | Valeur |
| - | - |
| `verification_method` | `document`, `id_lookup` ou `wallet` |
| `assurance` | `documentary`, `data_match` ou `cryptographic` |
| `wallet_provider` | Identifiant du portefeuille du catalogue lorsqu'un portefeuille a produit le résultat, sinon `null` |
| `id_lookup` | Preuves issues du registre (source, tentatives, comparaison champ par champ, portrait du registre), ou `null` |
| `wallet_verification` | Preuves de l'identifiant numérique (fournisseur, autorité émettrice, niveau d'assurance, validité de la signature, attributs partagés), ou `null` |
| `fallback_from` | Raison pour laquelle une méthode autre que le document n'a pas mis fin à l'étape d'identité : la méthode, le motif, et si l'utilisateur a basculé vers la capture de document ou a été refusé |Une session documentaire renvoie `document` et `documentary` et laisse les autres champs à `null`, de sorte que les intégrations existantes n'ont aucune modification à faire. Le type de chaque champ est détaillé dans [Modèles de données](https://docs.didit.me/fr/reference/data-models.md#vérification-d’identité).## Consentement biométriqueLes décisions de vérification des utilisateurs contiennent un objet `biometric_consent` : il indique si la session exigeait un consentement biométrique explicite, le `trigger` qui l'a exigé, le `status` de la réponse et ses preuves. Deux valeurs indiquent que le consentement n'a pas été recueilli :| Champ | Valeur | Signification |
| - | - | - |
| `status` + `reason` | `pending` + `BIOMETRIC_CONSENT_UNSUPPORTED_SDK` | Un SDK natif antérieur à 4.10.0, ou un SDK qui n'a pas signalé sa version, a capturé un visage sans l'étape de consentement. La session s'est déroulée comme auparavant. |
| `status` + `reason` | `declined` + `BIOMETRIC_CONSENT_DECLINED` | Un refus a été enregistré. La session est `Declined` et ses données faciales ont été supprimées. Aucun écran de Didit ne propose de refus aujourd'hui. |Le moment où l'étape apparaît et la signification de chaque valeur sont décrits dans [Consentement biométrique](https://docs.didit.me/fr/getting-started/biometric-consent.md) ; chaque champ figure dans [Modèles de données](https://docs.didit.me/fr/reference/data-models.md#consentement-biométrique).## Vérification bancaireLorsque le workflow comprend une étape [Vérification bancaire](https://docs.didit.me/fr/core-technology/bank-verification/verification-methods.md), la décision contient `bank_verifications[]`, pour les deux types de session : un élément par étape, `null` tant qu'aucune étape n'en a produit un.| Champ | Ce qu'il faut lire |
| - | - |
| `status` | Le verdict de l'étape : `Approved`, `In Review`, `Declined`, `Not Finished` ou `Expired`. |
| `method` | Mode de vérification du compte : `open_banking` (connexion bancaire), `account_lookup` (vérification du compte), `microdeposits` ou `statement`. `null` tant qu'aucun compte n'a été évalué, et `none` lorsque la personne a continué sans banque avant qu'une tentative ait été évaluée. |
| `continued_without_bank`, `continuation` | Indique si la personne a choisi **Continue without your bank**, et pourquoi : `continuation.reason` vaut `no_route`, `institution_unsupported`, `attempts_exhausted` ou `person_choice`. Pour `institution_unsupported`, `continuation.institution_name` indique la banque que la personne n'a pas pu utiliser. |
| `ownership` | Comparaison entre le titulaire du compte et l'identité vérifiée : `result` vaut `match`, `partial_match` (correspondance proche), `no_match`, `not_verifiable` ou `unknown`. |
| `account` | Le compte vérifié, masqué. |
| `financial_data` | Soldes, transactions et revenus, lus uniquement par connexion bancaire. `not_collected` liste les données demandées par l'étape que la méthode n'a pas collectées, par exemple après une vérification de compte. |
| `connection` | La tentative la plus récente : son statut, la banque, le nombre de tentatives effectuées et un `reason_code`. |Pour distinguer la connexion bancaire de la vérification de compte, lisez `method` et non `ownership.method` : `ownership.method` correspond à la comparaison de noms qui a produit le score. Tous les champs figurent dans le schéma `BankVerificationResult` de la réponse de cet endpoint.## Signature électroniqueLorsque le workflow comprend une étape [Signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/overview.md), la décision contient `signatures[]`, pour les deux types de session. Elle contient un élément par signataire : un pour une Vérification des utilisateurs, un par personne clé qui signe pour une Vérification d'entreprise (KYB). Les workflows sans cette étape ne renvoient pas la clé.| Champ | Ce qu'il faut lire |
| - | - |
| `status` | `signed` une fois les documents signés. Toute autre valeur signifie qu'il n'y a pas encore de signature. |
| `verdict` | `Approved`, `In Review`, `Declined` ou `Not Finished`, défini par les règles de l'étape. |
| `signer`, `identity_used` | Le signataire et l'identité vérifiée qui le représente. |
| `confirmation`, `certificate`, `timestamp` | La confirmation par code à usage unique et les preuves cryptographiques. |
| `documents[]` | Les empreintes de chaque document, son statut, son chemin `signed_file` et ses `fields[]` avec leurs valeurs. |
| `evidence_file` | Chemin du PDF contenant les preuves du signataire. |Téléchargez les fichiers à partir des chemins avec votre clé API. Consultez le [rapport de signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/report-electronic-signature.md) pour la description de chaque champ.## Erreurs| Statut | Motif |
| - | - |
| `404` | Aucune session avec ce `session_id` n'existe pour cette application (les deux types de session sont vérifiés). |
| `403` | Privilège `read:sessions` manquant. |
| `401` | Clé API invalide. |## Liens connexes- [Vue d'ensemble des sessions](https://docs.didit.me/fr/sessions-api/overview.md) : distinction des types de session et matrice des fonctionnalités.
- [Schéma de réponse KYB](https://docs.didit.me/fr/business-verification/response-schema.md) : référence champ par champ de la décision pour les entreprises.
- [Statuts de vérification](https://docs.didit.me/fr/integration/verification-statuses.md) : machine à états commune aux deux types.
- [Webhooks](https://docs.didit.me/fr/integration/webhooks.md) : abonnez-vous à `status.updated` pour les sessions de Vérification des utilisateurs et de Vérification d'entreprise (filtrez sur `session_kind`).
- [Méthodes de vérification d'identité](https://docs.didit.me/fr/core-technology/id-verification/verification-methods.md) : capture de document, recherche sans document et portefeuilles d'identité numériques, et ce que chacune ajoute à la session.
- [Consentement biométrique](https://docs.didit.me/fr/getting-started/biometric-consent.md) : quand le parcours demande un consentement biométrique explicite, et l'objet `biometric_consent`.
- [Rapport de signature électronique](https://docs.didit.me/fr/core-technology/electronic-signature/report-electronic-signature.md) : `signatures[]`, les PDF signés et les preuves.
- [Méthodes de vérification bancaire](https://docs.didit.me/fr/core-technology/bank-verification/verification-methods.md) : `bank_verifications[]` et son `method`.
- [Lorsque la personne ne peut pas vérifier sa banque](https://docs.didit.me/fr/core-technology/bank-verification/fallbacks.md) : `continued_without_bank`, `continuation` et le résultat de chaque motif.


## OpenAPI

````yaml fr/openapi-25.json GET /v3/session/{sessionId}/decision/
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/session/{sessionId}/decision/:
    get:
      tags:
        - Sessions
      summary: Récupérer la décision complète d'une session de vérification
      description: >-
        Récupérez le rapport de décision complet pour une session de
        vérification — le `status` consolidé de la session ainsi qu'un rapport
        par fonctionnalité de vérification exécutée par le workflow. Il s'agit
        de l'endpoint de lecture canonique pour les sessions de Vérification des
        utilisateurs (KYC) et de Vérification d'entreprise (KYB) : le même
        chemin dessert les deux, et le discriminateur de premier niveau
        `session_kind` vous indique le format reçu (`"user"` ou `"business"`).


        **Chaque rapport de fonctionnalité est un tableau au pluriel.** Les
        workflows V3 sont des graphes pouvant exécuter la même fonctionnalité
        plusieurs fois, de sorte que chaque bloc (`id_verifications`,
        `nfc_verifications`, `liveness_checks`, `face_matches`,
        `poa_verifications`, `document_ai_documents`, `phone_verifications`,
        `email_verifications`, `aml_screenings`, `ip_analyses`,
        `database_validations`, `questionnaire_responses`) est un tableau JSON
        dont chaque élément comporte un `node_id` identifiant le nœud du graphe
        de workflow qui l'a produit. Lisez le NFC via
        `response.nfc_verifications[0]` — jamais sous un champ au singulier
        `nfc`. Un bloc est à `null` tant que le workflow n'a pas exécuté cette
        fonctionnalité au moins une fois ; les fonctionnalités non incluses dans
        le workflow n'apparaissent jamais avec des données. Les résultats de
        Signature électronique se trouvent dans `signatures`, qui n'est présent
        que si le workflow comporte une étape de Signature électronique.


        **Quand appeler cet endpoint.** Le modèle recommandé est piloté par les
        événements : attendez le webhook `status.updated` émis lorsque la
        session parvient à une décision (`Approved`, `Declined`, `In Review`),
        puis appelez cet endpoint une seule fois pour récupérer le rapport
        complet. Le sondage fonctionne également — l'endpoint peut être appelé à
        tout moment du cycle de vie de la session et renvoie les données
        produites jusqu'alors — mais l'approche webhook puis récupération est
        plus économique et plus rapide. Les URL des médias dans la réponse
        (images de documents, vidéos, PDF) sont des liens pré-signés à courte
        durée de vie : récupérez-les rapidement ou renouvelez la requête de
        décision pour en obtenir de nouvelles, et ne les conservez pas comme
        références à long terme.


        **Statuts.** Le `status` de premier niveau correspond au statut du cycle
        de vie de la session (`Not Started`, `In Progress`, `Awaiting User`, `In
        Review`, `Approved`, `Declined`, `Resubmitted`, `Expired`, `Kyc
        Expired`, `Abandoned`). Chaque élément de fonctionnalité comporte
        également son propre `status` de fonctionnalité (`Not Finished`,
        `Approved`, `Declined`, `In Review`, ...). Une session peut être
        `Approved` dans son ensemble alors qu'une fonctionnalité individuelle
        est `In Review`, selon les règles de décision du workflow.


        **Authentification et visibilité.** Authentifiez-vous avec la clé API de
        l'application dans l'en-tête `x-api-key` (un token Bearer d'utilisateur
        de la console doté de l'autorisation `read:sessions` fonctionne
        également). Seules les sessions appartenant à l'application authentifiée
        sont visibles. Si votre workflow restreint les attributs de la réponse,
        les champs non autorisés dans les éléments de fonctionnalité sont
        renvoyés à `null`, tandis que `status`, `warnings` et `node_id` sont
        toujours conservés.


        **Limites de débit.** Les requêtes GET sont limitées à 600 par minute
        par clé API. Tout dépassement de cette limite renvoie une réponse `429`
        accompagnée des en-têtes `Retry-After` et `X-RateLimit-*`.
      operationId: get_v3_session_decision
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID de la session de vérification dont vous souhaitez récupérer la
            décision. Il s'agit du `session_id` renvoyé par `POST /v3/session/`.
            Le même chemin fonctionne pour les sessions de Vérification des
            utilisateurs (KYC) et de Vérification d'entreprise (KYB) — le
            serveur résout l'identifiant pour les deux types de session.


            **Doit être un UUID valide.** La route ne correspond qu'aux UUID
            bien formés ; une valeur malformée est donc rejetée par le routeur
            d'URL avant l'exécution de tout code d'application et la réponse est
            une page **HTML** `404` plutôt que l'enveloppe JSON `{"detail":
            ...}` illustrée ci-dessous. Validez le format de l'UUID côté client
            afin de distinguer une erreur de saisie d'un véritable `404` pour
            session introuvable.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: include
          in: query
          required: false
          description: >-
            Liste séparée par des virgules de sections de payload
            supplémentaires. Valeurs prises en charge : `events` et
            `resubmissions`, seules ou combinées (`events,resubmissions`).
            Lorsque `include=events` est transmis, la réponse contient en plus
            la chronologie des événements de session (`events`, y compris les
            événements de routage `WORKFLOW_BRANCH_EVALUATED` /
            `WORKFLOW_STATUS_NODE_REACHED` décrits sur la page Récupérer une
            session), le journal d'activité complet (`activity_reviews`), les
            indicateurs de liste de blocage (`blocklisted`), un détail des coûts
            par session (`cost_breakdown`), les métadonnées de workflow
            (`workflow_type`, `workflow_version`, `workflow_version_id` et
            `workflow_terminal_node_id` - le dernier nœud de statut de workflow
            enregistré ayant défini un statut de session, ou `null` si aucun n'a
            été enregistré ; provenance historique qui n'est pas effacée par les
            approbations, refus ou nouvelles soumissions manuels, et qui est
            remplacée par un nœud de statut de workflow ultérieur), ainsi que
            les métadonnées de session (`api_service` — chaîne ou `null`, défini
            uniquement pour les sessions d'API autonome ; `session_type` —
            `API`, `HOSTED` ou `MIGRATED` ; `has_device_nfc_support` — booléen).
            Deux champs changent par rapport à la structure standard : le
            discriminateur de niveau supérieur `session_kind` est **omis** (la
            structure avec événements n'existe que pour les sessions
            utilisateur), et le tableau `features` passe de chaînes simples à
            des objets `{feature, node_id}` — où la fonctionnalité d'e-mail est
            indiquée comme `EMAIL` au lieu de `EMAIL_VERIFICATION`. Cette
            structure enrichie est principalement utilisée par la console Didit
            ; la plupart des intégrations d'API doivent omettre ce paramètre.
            **Limitation KYB :** `include=events` ne s'applique qu'aux sessions
            utilisateur (KYC). Les sessions d'entreprise (`session_kind =
            "business"`) renvoient toujours la structure de décision
            d'entreprise standard — `events`, `activity_reviews`, `blocklisted`,
            `cost_breakdown` et les métadonnées supplémentaires
            `workflow_*`/session ne sont jamais renvoyés pour les sessions
            d'entreprise, et leur tableau `features` reste un tableau de chaînes
            simples. Avec `include=resubmissions` (sessions utilisateur comme
            entreprise), la réponse contient également `resubmissions` : une
            entrée par demande de nouvelle soumission, de la plus ancienne à la
            plus récente, chacune avec `number`, `created_at`,
            `previous_status`, `nodes`, `reasons`, `requested_by` et `results`
            (ce que les étapes soumises à nouveau ont renvoyé avant la demande,
            sous les mêmes clés et dans la même structure que les résultats
            actuels). Chaque élément de `cost_breakdown` comporte `usage_type`,
            `price`, `details` et `created_at` : une étape soumise à nouveau qui
            est exécutée une seconde fois est facturée comme un nouvel élément.
          schema:
            type: string
            enum:
              - events
              - resubmissions
              - events,resubmissions
            example: events
      responses:
        '200':
          description: >-
            Rapport de décision complet. `session_kind` distingue les deux
            structures : les sessions `user` contiennent les tableaux de
            fonctionnalités KYC présentés ci-dessous ; les sessions `business`
            contiennent quant à elles `registry_checks`,
            `document_verifications` et `key_people_checks` aux côtés des
            tableaux partagés. Les tableaux de fonctionnalités sont `null` tant
            que le workflow n'a pas exécuté cette fonctionnalité ; les URL de
            médias sont des liens présignés à courte durée de validité.
          content:
            application/json:
              examples:
                Example:
                  summary: Exemple complet
                  value:
                    session_id: 11111111-2222-3333-4444-555555555555
                    session_kind: user
                    session_number: 43762
                    session_url: >-
                      https://verify.didit.me/session/11111111-2222-3333-4444-555555555555
                    status: In Review
                    environment: live
                    workflow_id: 11111111-2222-3333-4444-555555555555
                    features:
                      - ID_VERIFICATION
                      - NFC
                      - LIVENESS
                      - FACE_MATCH
                      - POA
                      - PHONE
                      - DATABASE_VALIDATION
                      - AML
                      - IP_ANALYSIS
                    vendor_data: 11111111-1111-1111-1111-111111111111
                    metadata:
                      user_type: premium
                      account_id: ABC123
                    expected_details:
                      first_name: Carmen
                      last_name: Española Española
                    contact_details:
                      email: carmen@example.com
                      email_lang: es
                      send_notification_emails: false
                      phone: null
                    callback: https://verify.didit.me/
                    id_verifications:
                      - node_id: feature_ocr_1
                        status: Approved
                        document_type: Identity Card
                        document_subtype: ID_CARD_GENERIC
                        document_number: CAA000000
                        personal_number: 99999999R
                        portrait_image: https://<media-host>/portrait.jpg
                        front_image: https://<media-host>/front.jpg
                        front_video: https://<media-host>/front.mp4
                        back_image: https://<media-host>/back.jpg
                        back_video: https://<media-host>/back.mp4
                        full_front_image: https://<media-host>/full_front.jpg
                        full_back_image: https://<media-host>/full_back.jpg
                        front_image_camera_front: https://<media-host>/front_camera_front.jpg
                        back_image_camera_front: https://<media-host>/back_camera_front.jpg
                        date_of_birth: '1980-01-01'
                        age: 45
                        expiration_date: '2031-06-02'
                        date_of_issue: '2021-06-02'
                        issuing_state: ESP
                        issuing_state_name: Spain
                        first_name: Carmen
                        last_name: Española Española
                        full_name: Carmen Española Española
                        gender: F
                        address: Avda de Madrid 34, Madrid, Madrid
                        formatted_address: Avda de Madrid 34, Madrid, Madrid 28822, Spain
                        place_of_birth: Madrid
                        marital_status: Single
                        nationality: ESP
                        extra_fields:
                          dl_categories: []
                          blood_group: null
                        mrz:
                          surname: ESPANOLA ESPANOLA
                          name: CARMEN
                          country: ESP
                          nationality: ESP
                          birth_date: '800101'
                          expiry_date: '310602'
                          sex: F
                          document_type: ID
                          document_number: CAA000000
                          optional_data: 99999999R
                          optional_data_2: ''
                          birth_date_hash: '4'
                          expiry_date_hash: '8'
                          document_number_hash: '4'
                          final_hash: '1'
                          personal_number: 99999999R
                          warnings: []
                          errors: []
                          mrz_type: TD1
                          mrz_string: |-
                            IDESPCAA000000499999999R<<<<<<
                            8001014F3106028ESP<<<<<<<<<<<1
                            ESPANOLA<ESPANOLA<<CARMEN<<<<<
                          mrz_key: CAA000000480010143106028
                        parsed_address:
                          city: Madrid
                          label: Spain ID Card Address
                          region: Madrid
                          country: ES
                          category: Residential
                          street_1: Avda de Madrid 34
                          street_2: null
                          is_verified: true
                          postal_code: '28822'
                          raw_results:
                            types:
                              - street_address
                            geometry:
                              location:
                                lat: 37.4222804
                                lng: -122.0843428
                              viewport:
                                northeast:
                                  lat: 37.4237349802915
                                  lng: -122.083183169709
                                southwest:
                                  lat: 37.4210370197085
                                  lng: -122.085881130292
                              location_type: ROOFTOP
                            place_id: ChIJN1t_tDeuEmsRUsoyG83frY4
                            formatted_address: Avda de Madrid 34, 28822 Madrid, Spain
                            navigation_points:
                              - location:
                                  latitude: 37.4222804
                                  longitude: -122.0843428
                            address_components:
                              - types:
                                  - street_number
                                long_name: '34'
                                short_name: '34'
                              - types:
                                  - route
                                long_name: Avda de Madrid
                                short_name: Avda de Madrid
                              - types:
                                  - locality
                                  - political
                                long_name: Madrid
                                short_name: Madrid
                              - types:
                                  - country
                                  - political
                                long_name: Spain
                                short_name: ES
                              - types:
                                  - postal_code
                                long_name: '28822'
                                short_name: '28822'
                          address_type: Avda
                          document_location:
                            latitude: 37.4222804
                            longitude: -122.0843428
                          formatted_address: Avda de Madrid 34, 28822 Madrid, Spain
                        front_image_camera_front_face_match_score: 95.5
                        back_image_camera_front_face_match_score: 93.2
                        document_selfie_face_matches:
                          - session_id: 3f0c9a52-7b1e-4d68-a2c4-5e9d8b7f1a20
                            session_number: 1180
                            similarity_percentage: 97.4
                            vendor_data: user_ref_001
                            vendor_user_id: null
                            biometric_template_id: null
                            verification_date: '2026-09-02T09:15:00Z'
                            user_details:
                              full_name: Jane Doe
                            match_image_url: https://<media-host>/match_face.jpg
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: null
                            source: session
                        front_image_quality_score:
                          focus_score: 85.3
                          brightness_score: 92.1
                          brightness_issue: ok
                          is_document_fully_visible: true
                          resolution_score: 72.4
                          overall_score: 88.7
                        back_image_quality_score:
                          focus_score: 79.1
                          brightness_score: 90.5
                          brightness_issue: ok
                          is_document_fully_visible: true
                          resolution_score: 72.4
                          overall_score: 85.2
                        extra_files:
                          - https://<media-host>/extra_id_verification.jpg
                        matches:
                          - session_id: 7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f
                            session_number: 1234
                            vendor_data: user_ref_001
                            verification_date: '2024-06-15T10:30:00Z'
                            user_details:
                              name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Approved
                            is_blocklisted: false
                            api_service: null
                            front_image_url: https://<media-host>/document_front.jpg
                          - session_id: b2c8e4d1-6a3f-4e7b-95c0-1d8f2a6b4c9e
                            session_number: 1235
                            vendor_data: null
                            verification_date: '2024-05-20T14:45:00Z'
                            user_details:
                              name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Declined
                            is_blocklisted: true
                            api_service: ID_VERIFICATION
                            front_image_url: https://<media-host>/document_front_2.jpg
                        warnings:
                          - feature: ID_VERIFICATION
                            risk: QR_NOT_DETECTED
                            additional_data: null
                            log_type: information
                            short_description: QR not detected
                            long_description: >-
                              The system couldn't find or read the QR code on
                              the document, which is necessary for document
                              verification. This could be due to poor image
                              quality or an unsupported document type.
                            node_id: feature_ocr_1
                        verification_method: document
                        assurance: documentary
                        wallet_provider: null
                        fallback_from: null
                        id_lookup: null
                        wallet_verification: null
                        document_liveness:
                          portrait_replace:
                            score: 96.46
                            front: 96.46
                            back: 98.2
                            decline_threshold: 35
                            review_threshold: 70
                            bucket: approve
                          printed_copy:
                            score: 91.2
                            front: 91.2
                            back: 93.7
                            decline_threshold: 35
                            review_threshold: 77
                            bucket: approve
                          screen_replay:
                            score: 99.9
                            front: 99.9
                            back: 99.5
                            decline_threshold: 30
                            review_threshold: 70
                            bucket: approve
                      - node_id: feature_ocr_2
                        status: Approved
                        issuing_state: ZAF
                        issuing_state_name: South Africa
                        first_name: Thabo
                        last_name: Mokoena
                        full_name: Thabo Mokoena
                        date_of_birth: '1991-06-15'
                        personal_number: '9106155043088'
                        verification_method: id_lookup
                        assurance: data_match
                        wallet_provider: null
                        fallback_from: null
                        id_lookup:
                          source: Department of Home Affairs
                          checked_at: '2026-09-04T09:12:44Z'
                          attempts: 1
                          max_attempts: 2
                          outcome: match
                          comparison:
                            - field: identification_number
                              label: ID number
                              provided: '9106155043088'
                              record: '9106155043088'
                              result: match
                            - field: full_name
                              label: Full name
                              provided: Thabo Mokoena
                              record: Thabo Mokoena
                              result: match
                            - field: date_of_birth
                              label: Date of birth
                              provided: '1991-06-15'
                              record: '1991-06-15'
                              result: match
                          registry_portrait: https://<media-host>/registry_portrait.jpg
                          face_match_score: 96.4
                          source_errors: []
                        wallet_verification: null
                        warnings: []
                      - node_id: feature_ocr_3
                        status: Approved
                        issuing_state: DNK
                        issuing_state_name: Denmark
                        first_name: Freja
                        last_name: Nielsen
                        full_name: Freja Nielsen
                        date_of_birth: '1988-03-02'
                        verification_method: wallet
                        assurance: cryptographic
                        wallet_provider: mitid
                        fallback_from: null
                        id_lookup: null
                        wallet_verification:
                          provider: mitid
                          provider_name: MitID
                          issuing_authority: Danish Agency for Digital Government
                          issuing_country: DNK
                          credential_type: person_identification
                          level_of_assurance: substantial
                          verified_at: '2026-09-04T09:12:44Z'
                          signature_valid: true
                          attributes:
                            full_name: Freja Nielsen
                            date_of_birth: '1988-03-02'
                            cpr_alias: b0f1c2d3-e4f5-4678-9abc-def012345678
                          portrait: null
                          face_match_score: null
                        warnings: []
                    nfc_verifications:
                      - node_id: feature_nfc_1
                        status: In Review
                        is_nfc_skipped: false
                        skip_reason: null
                        chip_protocol: icao
                        jpki: null
                        portrait_image: https://<media-host>/portrait.jpg
                        signature_image: https://<media-host>/signature.jpg
                        chip_data:
                          document_type: ID
                          issuing_country: ESP
                          document_number: '123456789'
                          expiration_date: '2030-01-01'
                          first_name: John
                          last_name: Smith
                          birth_date: '1990-05-15'
                          gender: M
                          nationality: ESP
                          address: CALLE MAYOR 123 4B, MADRID, MADRID
                          place_of_birth: MADRID, MADRID
                        authenticity:
                          sod_integrity: true
                          dg_integrity: true
                        certificate_summary:
                          issuer: >-
                            Common Name: CSCA SPAIN, Serial Number: 3,
                            Organization: DIRECCION GENERAL DE LA POLICIA,
                            Country: ES
                          subject: >-
                            Common Name: DS n-eID SPAIN 2, Organizational Unit:
                            PASSPORT, Organization: DIRECCION GENERAL DE LA
                            POLICIA, Country: ES
                          serial_number: '118120836164494130086420187336801405660'
                          not_valid_after: '2031-02-18 10:21:11'
                          not_valid_before: '2020-11-18 10:21:11'
                        warnings:
                          - feature: NFC
                            risk: DATA_INCONSISTENT
                            additional_data: null
                            log_type: warning
                            short_description: OCR and NFC mrz code extracted are not the same
                            long_description: >-
                              The Optical Character Recognition (OCR) data and
                              the NFC chip data don't match, indicating
                              potential document tampering or data
                              inconsistency.
                            node_id: feature_nfc_1
                    liveness_checks:
                      - node_id: feature_liveness_1
                        status: Approved
                        method: ACTIVE_3D
                        score: 89.92
                        reference_image: https://<media-host>/reference.jpg
                        video_url: https://<media-host>/video.mp4
                        age_estimation: 24.3
                        matches:
                          - session_id: 7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f
                            session_number: 1234
                            vendor_data: user_ref_001
                            verification_date: '2024-06-15T10:30:00Z'
                            user_details:
                              full_name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: null
                            source: session
                            match_image_url: https://<media-host>/face_match.jpg
                            similarity_percentage: 98.5
                          - session_id: 3e9a7c21-5b48-4f0e-9c6a-8d2f4b1e0a35
                            session_number: 1100
                            vendor_data: customer_xyz
                            verification_date: '2024-04-10T09:15:00Z'
                            user_details:
                              full_name: John Smith
                              document_type: P
                              document_number: DZ8375806
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: PASSIVE_LIVENESS
                            source: session
                            match_image_url: https://<media-host>/face_match_2.jpg
                            similarity_percentage: 95.2
                        warnings:
                          - feature: LIVENESS
                            risk: LOW_LIVENESS_SCORE
                            additional_data: null
                            log_type: information
                            short_description: Low liveness score
                            long_description: >-
                              The liveness check resulted in a low score,
                              indicating potential use of non-live facial
                              representations or poor-quality biometric data.
                            node_id: feature_liveness_1
                        face_quality: null
                        face_luminance: null
                    face_matches:
                      - node_id: feature_face_match_1
                        status: In Review
                        score: 65.43
                        source_image_session_id: null
                        source_image: https://<media-host>/source-image.jpg
                        target_image: https://<media-host>/target-image.jpg
                        warnings:
                          - feature: FACEMATCH
                            risk: LOW_FACE_MATCH_SIMILARITY
                            additional_data: null
                            log_type: warning
                            short_description: Low face match similarity
                            long_description: >-
                              The facial features of the provided image don't
                              closely match the reference image, suggesting a
                              potential identity mismatch.
                            node_id: feature_face_match_1
                    phone_verifications:
                      - node_id: feature_phone_1
                        status: Approved
                        phone_number_prefix: '+34'
                        phone_number: '600600600'
                        full_number: '+34600600600'
                        country_code: ES
                        country_name: Spain
                        carrier:
                          name: Orange
                          type: mobile
                        is_disposable: false
                        is_virtual: false
                        verification_method: sms
                        verification_attempts: 1
                        verified_at: '2024-07-28T06:47:35.654321Z'
                        lifecycle:
                          - type: PHONE_VERIFICATION_MESSAGE_SENT
                            timestamp: '2025-08-24T09:12:39.580554+00:00'
                            details:
                              status: Success
                              reason: null
                              channel: sms
                              actual_channel: sms
                            fee: 0.1
                          - type: VALID_CODE_ENTERED
                            timestamp: '2025-08-24T09:12:39.662157+00:00'
                            details:
                              code_tried: '123456'
                              status: Approved
                            fee: 0
                          - type: PHONE_VERIFICATION_APPROVED
                            timestamp: '2025-08-24T09:12:39.684292+00:00'
                            details: null
                            fee: 0
                        warnings: []
                        matches:
                          - session_id: null
                            session_number: null
                            vendor_data: null
                            verification_date: null
                            phone_number: '+34600000000'
                            status: null
                            is_blocklisted: true
                            api_service: null
                            source: list_entry
                    email_verifications:
                      - node_id: feature_email_1
                        status: Approved
                        email: test@example.com
                        is_breached: true
                        breaches:
                          - name: TAPAirPortugal
                            domain: flytap.com
                            logo_path: https://logos.example.com/TAPAirPortugal.png
                            breach_date: '2022-08-25'
                            description: >-
                              In August 2022, the Portuguese airline <a
                              href="https://www.bleepingcomputer.com/news/security/ragnar-locker-ransomware-claims-attack-on-portugals-flag-airline/"
                              target="_blank" rel="noopener">TAP Air Portugal
                              was the target of a ransomware attack perpetrated
                              by the Ragnar Locker gang</a> who later leaked the
                              compromised data via a public dark web site. Over
                              5M unique email addresses were exposed alongside
                              other personal data including names, genders,
                              DoBs, phone numbers and physical addresses.
                            is_verified: true
                            data_classes:
                              - dates_of_birth
                              - email_addresses
                              - genders
                              - names
                              - nationalities
                              - phone_numbers
                              - physical_addresses
                              - salutations
                              - spoken_languages
                            breach_emails_count: 6083479
                        is_disposable: false
                        is_undeliverable: false
                        verification_attempts: 1
                        verified_at: '2025-09-15T17:36:19.963451Z'
                        warnings:
                          - feature: EMAIL
                            risk: BREACHED_EMAIL_DETECTED
                            additional_data: null
                            log_type: information
                            short_description: Breached email detected
                            long_description: >-
                              This email address was found in one or more known
                              data breaches.
                            node_id: feature_email_1
                        lifecycle:
                          - type: EMAIL_VERIFICATION_MESSAGE_SENT
                            timestamp: '2025-09-15T17:36:19.792684+00:00'
                            details:
                              status: Success
                              reason: null
                            fee: 0.02
                          - type: VALID_CODE_ENTERED
                            timestamp: '2025-09-15T17:36:19.963427+00:00'
                            details:
                              code_tried: '123456'
                              status: Approved
                            fee: 0
                          - type: EMAIL_VERIFICATION_DECLINED
                            timestamp: '2025-09-15T17:36:20.081471+00:00'
                            details:
                              reason: BREACHED_EMAIL_DETECTED
                            fee: 0
                        matches:
                          - session_id: null
                            session_number: null
                            vendor_data: null
                            verification_date: null
                            email: test@example.com
                            status: null
                            is_blocklisted: true
                            api_service: null
                            source: list_entry
                    poa_verifications:
                      - node_id: feature_poa_1
                        status: Declined
                        document_file: https://<media-host>/poa_document.pdf
                        issuing_state: AR
                        document_type: UTILITY_BILL
                        document_subtype: null
                        document_language: es
                        document_metadata:
                          file_size: 1000
                          content_type: application/pdf
                          creation_date: '2021-01-01'
                          modified_date: '2021-01-01'
                          overlay_manipulation: null
                          creator: null
                          producer: PDF Generator
                          software: null
                          encryption: null
                          is_signed: false
                          is_tampered: false
                          signature_info: null
                          exif_original_date: null
                          exif_digitized_date: null
                          processed_by_known_editor: false
                          has_different_creation_mod_date: true
                        issuer: Aguas del Norte
                        issue_date: '2021-02-01'
                        expiration_date: null
                        poa_address: AVDA. MONSEÑOR TAVELLA N° 3396, SALTA
                        poa_formatted_address: Av. Monseñor Tavella 3396, A4400 Salta, Argentina
                        poa_parsed_address:
                          address_type: Avenida
                          street_1: Avenida Monseñor Tavella 3396
                          street_2: null
                          city: Salta
                          region: Salta
                          country: AR
                          postal_code: A4400
                          document_location:
                            latitude: -24.8208664
                            longitude: -65.4131
                        name_on_document: Fernando De Lima
                        name_match_score_expected_details: null
                        name_match_score_id_verification: 38.5
                        expected_details_address: null
                        expected_details_formatted_address: null
                        expected_details_parsed_address: {}
                        extra_fields:
                          bank_account_number: '1234567890'
                          bank_iban: null
                          bank_sort_code: null
                          bank_routing_number: null
                          bank_swift_bic: null
                          bank_branch_name: null
                          bank_branch_address: null
                          document_phone_number: '+5491112345678'
                          additional_names: []
                        extra_files:
                          - https://<media-host>/extra_poa.pdf
                        detected_codes:
                          - type: QR_CODE
                            page_number: 1
                            position:
                              - - 820
                                - 1120
                              - - 1002
                                - 1120
                              - - 1002
                                - 1302
                              - - 820
                                - 1302
                            x: 820
                            'y': 1120
                            width: 182
                            height: 182
                            page_width: 1190
                            page_height: 1684
                            raw_payload: >-
                              aHR0cHM6Ly9hZ3Vhc2RlbG5vcnRlLmNvbS9mYWN0dXJhLzk5ODgxMQ==
                            parsed_payload: https://aguasdelnorte.com/factura/998811
                          - type: CODE_128
                            page_number: 1
                            position:
                              - - 112
                                - 1480
                              - - 560
                                - 1480
                              - - 560
                                - 1540
                              - - 112
                                - 1540
                            x: 112
                            'y': 1480
                            width: 448
                            height: 60
                            page_width: 1190
                            page_height: 1684
                            raw_payload: MDA5OTg4MTEwMDA0Mg==
                            parsed_payload: '0099881100042'
                        warnings: []
                    document_ai_documents:
                      - status: Approved
                        node_id: feature_document_ai_1
                        items:
                          - uuid: c1a2b3c4-d5e6-7f80-9a1b-2c3d4e5f6071
                            node_id: feature_document_ai_1
                            document_key: proof_of_funds
                            original_filename: bank_statement.pdf
                            file_size: 184320
                            file_url: >-
                              https://<media-host>/document_ai/proof_of_funds.pdf
                            status: Approved
                            extracted_data:
                              account_holder: John Doe
                              balance: 15230.55
                              currency: EUR
                              statement_date: '2026-05-31'
                            detected_codes:
                              - type: QR_CODE
                                page_number: 2
                                position:
                                  - - 124
                                    - 86
                                  - - 306
                                    - 86
                                  - - 306
                                    - 268
                                  - - 124
                                    - 268
                                x: 124
                                'y': 86
                                width: 182
                                height: 182
                                page_width: 1190
                                page_height: 1684
                                raw_payload: SU5WLTIwMjYtMDA0Mg==
                                parsed_payload: INV-2026-0042
                            fields:
                              - key: account_holder
                                name: Account holder
                                instruction: Extract the full name of the account holder.
                                type: text
                                required: true
                              - key: balance
                                name: Closing balance
                                instruction: Extract the closing balance amount.
                                type: number
                                required: true
                            document_metadata:
                              is_tampered: false
                            cross_check_result: null
                            created_at: '2026-06-01T12:34:56Z'
                        warnings: []
                    questionnaire_responses:
                      - node_id: feature_questionnaire_1
                        questionnaire_id: 9f7485e0-b00b-4d56-9d3e-7859b68d1213
                        title: Source of Funds
                        description: >-
                          Reply to this questionnaire to help us understand the
                          source of funds.
                        languages:
                          - en
                        default_language: en
                        is_active: true
                        is_simple_questionnaire: true
                        questionnaire_group_id: 2b6a9d40-13a8-4b1e-9a6c-3f1d2e4b5a60
                        version: 1
                        published_at: '2025-11-02T09:14:55.000000Z'
                        sections:
                          - title: null
                            description: null
                            items:
                              - uuid: 618636d9-7d5c-41ce-b8d0-1ab2a4be20db
                                value: question_1
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your primary source of funds?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Salary
                                    value: salary
                                  - label: Business Income
                                    value: business_income
                                  - label: Savings
                                    value: savings
                                  - label: Investments
                                    value: investments
                                  - label: Sale of Asset
                                    value: sale_of_asset
                                  - label: Inheritance/Gift
                                    value: inheritance_gift
                                  - label: Pension
                                    value: pension
                                  - label: Crypto Proceeds
                                    value: crypto_proceeds
                                  - label: Other
                                    value: other
                                    requires_text_input: true
                                max_files: 1
                                answer:
                                  value: salary
                                required_if: null
                                repeatable_config: null
                              - uuid: 2d16b527-72be-42e0-8e96-b164b818386c
                                value: question_2
                                element_type: LONG_TEXT
                                is_required: true
                                title: Provide details of the primary source.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: a9239b7c-fbfb-4ea7-b7e4-c835cd4016e0
                                value: question_3
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your annual income range (pre-tax)?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Less than $25,000
                                    value: <25k
                                  - label: $25,000 - $50,000
                                    value: 25k-50k
                                  - label: $50,001 - $100,000
                                    value: 50k-100k
                                  - label: $100,001 - $250,000
                                    value: 100k-250k
                                  - label: More than $250,000
                                    value: '>250k'
                                max_files: 1
                                answer:
                                  value: <25k
                                required_if: null
                                repeatable_config: null
                              - uuid: 93dede62-6d0c-4a7f-934d-42175eb94011
                                value: question_4
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your approximate net worth (range)?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Less than $50,000
                                    value: <50k
                                  - label: $50,000 - $250,000
                                    value: 50k-250k
                                  - label: $250,001 - $1,000,000
                                    value: 250k-1m
                                  - label: $1,000,001 - $5,000,000
                                    value: 1m-5m
                                  - label: More than $5,000,000
                                    value: '>5m'
                                max_files: 1
                                answer:
                                  value: <50k
                                required_if: null
                                repeatable_config: null
                              - uuid: 2af60d6f-6961-4692-9ee7-24b3033610a6
                                value: question_5
                                element_type: LONG_TEXT
                                is_required: true
                                title: >-
                                  For your initial deposit/funding, indicate the
                                  exact source and amount.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: 0ad9d1aa-736f-46cf-947b-9e1241b53e40
                                value: question_6
                                element_type: LONG_TEXT
                                is_required: true
                                title: Breakdown of sources by percentage.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: 1bf8a2a3-14ee-48a8-bb3d-175481aae4aa
                                value: question_7
                                element_type: SINGLE_CHOICE
                                is_required: true
                                title: >-
                                  Will any funds originate from third parties?
                                  If yes, please provide details.
                                description: null
                                placeholder: null
                                choices:
                                  - label: 'Yes'
                                    value: 'yes'
                                    requires_text_input: true
                                  - label: 'No'
                                    value: 'no'
                                max_files: 1
                                answer:
                                  text: Additional details
                                  value: 'yes'
                                required_if: null
                                repeatable_config: null
                              - uuid: e18d4dd3-b7bf-4883-ba18-d6046adbe313
                                value: question_8
                                element_type: SINGLE_CHOICE
                                is_required: true
                                title: >-
                                  Do you hold or plan to use virtual assets
                                  (e.g., crypto) to fund this account? If yes,
                                  please provide details.
                                description: null
                                placeholder: null
                                choices:
                                  - label: 'Yes'
                                    value: 'yes'
                                    requires_text_input: true
                                  - label: 'No'
                                    value: 'no'
                                max_files: 1
                                answer:
                                  text: Additional details
                                  value: 'yes'
                                required_if: null
                                repeatable_config: null
                              - uuid: a90a073d-e098-404c-bbce-5130d8b12a13
                                value: question_9
                                element_type: FILE_UPLOAD
                                is_required: true
                                title: Upload a proof of funds document
                                description: >-
                                  You can upload your three (3) most recent bank
                                  statements, three (3) most recent payslips,
                                  your most recent tax return, proof of company
                                  ownership, trading exchange statement, sale of
                                  property, or proof of inheritance.
                                placeholder: null
                                choices: null
                                max_files: 3
                                answer:
                                  files:
                                    - /media/ocr/
                                    - /media/ocr/
                                required_if: null
                                repeatable_config: null
                              - uuid: 9503b486-7cb8-4c3b-a97d-4b64926a5a47
                                value: question_10
                                element_type: LONG_TEXT
                                is_required: false
                                title: >-
                                  Would you like to add any details to help us
                                  expedite our review of the documents you
                                  submitted?
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                        status: Approved
                    aml_screenings:
                      - node_id: feature_aml_1
                        status: In Review
                        total_hits: 1
                        entity_type: person
                        hits:
                          - id: hit_7c1e9a40b2d35f86e0a4c912
                            url: https://news.example.org/articles/sample
                            match: false
                            score: 0.73
                            target: null
                            caption: Javier Ejemplo Modelo
                            datasets:
                              - PEP
                            features: null
                            rca_name: ''
                            last_seen: '2025-06-13T00:00:00'
                            risk_view:
                              crimes:
                                score: 0
                                weightage: 20
                                risk_level: Low
                                risk_scores: {}
                              countries:
                                score: 0
                                weightage: 30
                                risk_level: Low
                                risk_scores: {}
                              categories:
                                score: 100
                                weightage: 50
                                risk_level: High
                                risk_scores:
                                  PEP: 100
                              custom_list: {}
                            first_seen: '2025-01-18T00:00:00'
                            properties:
                              name:
                                - Javier Ejemplo Modelo
                              alias:
                                - Javier Ejemplo Modelo
                                - David Azagra
                              notes:
                                - Spanish orchestra conductor
                              title: null
                              gender:
                                - male
                              height: null
                              topics: null
                              weight: null
                              address: null
                              country: null
                              website: null
                              eyeColor: null
                              keywords: null
                              lastName:
                                - Ejemplo
                                - Modelo
                              position: null
                              religion: null
                              birthDate:
                                - '1974'
                              education:
                                - Tokyo Arts and Space (2012-2012)
                                - Saint Petersburg Conservatory (-2010)
                                - Comillas Pontifical University
                              ethnicity: null
                              firstName:
                                - David
                              hairColor: null
                              weakAlias: null
                              birthPlace:
                                - Madrid
                              modifiedAt: null
                              wikidataId: null
                              citizenship: null
                              nationality: null
                            match_score: 98
                            risk_score: 73
                            review_status: Unreviewed
                            score_breakdown:
                              name_score: 95
                              name_weight: 60
                              name_weight_normalized: 70.59
                              name_contribution: 67.06
                              dob_score: 100
                              dob_weight: 25
                              dob_weight_normalized: 29.41
                              dob_contribution: 29.41
                              country_score: 0
                              country_weight: 15
                              country_weight_normalized: 0
                              country_contribution: 0
                              document_number_match_type: NEUTRAL
                              document_number_effect: No document number provided for screening
                              total_score: 98
                            pep_matches:
                              - aliases:
                                  - Javier Ejemplo Modelo
                                  - David Azagra
                                education:
                                  - Tokyo Arts and Space (2012-2012)
                                  - Saint Petersburg Conservatory (-2010)
                                  - Comillas Pontifical University
                                list_name: Wikidata
                                publisher: Wikidata
                                source_url: https://news.example.org/articles/sample
                                description: >-
                                  Wikidata is the structured data project of the
                                  Wikipedia community, providing fact-based
                                  information edited by humans and machines
                                matched_name: Javier Ejemplo Modelo
                                pep_position: ''
                                date_of_birth: '1974'
                                other_sources: []
                                place_of_birth: Madrid
                            linked_entities:
                              - name:
                                  - Antonio Ejemplo
                                active: []
                                status: []
                                details: []
                                relation: []
                            warning_matches: []
                            sanction_matches: []
                            adverse_media_details:
                              sentiment: Moderately Negative
                              entity_type: person
                              sentiment_score: -2
                              adverse_keywords:
                                fraud: 3
                                juicio: 1
                                delitos: 2
                                imputado: 1
                                impunidad: 1
                                corruption: 2
                                favoritism: 2
                                privilegio: 1
                                corrupción: 1
                                persecution: 2
                                desconfianza: 1
                                desprestigio: 1
                                fraude de ley: 2
                                manipulación: 1
                                investigación: 3
                                prevaricación: 8
                                trato de favor: 1
                                irregularidades: 2
                                crisis de confianza: 1
                                tráfico de influencias: 8
                            adverse_media_matches:
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in legal
                                  violations related to favoritism and influence
                                  trafficking, leading to a negative portrayal
                                  in the article.
                                headline: >-
                                  La Diputación de Villaejemplo consolida la
                                  plaza a medida para el ex asesor de Moncloa
                                  amigo del "hermanito" de Ejemplo
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - prevaricación
                                  - tráfico de influencias
                                  - irregularidades
                                  - imputado
                                sentiment_score: -2
                                publication_date: '2025-06-10T20:46:38'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in legal issues
                                  regarding favoritism and corruption, leading
                                  to a negative portrayal in the article.
                                headline: >-
                                  La Diputación de Villaejemplo consolida la
                                  plaza a medida para el ex asesor de Moncloa
                                  amigo del "hermanito" de Ejemplo
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - prevaricación
                                  - tráfico de influencias
                                  - irregularidades
                                  - trato de favor
                                sentiment_score: -2
                                publication_date: '2025-06-10T20:46:38'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is mentioned in
                                  connection with Carlos Ficticio's corruption
                                  case, indicating his involvement in alleged
                                  influence peddling.
                                headline: España, paraíso del aforado
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - corrupción
                                  - impunidad
                                  - privilegio
                                  - desconfianza
                                  - manipulación
                                  - fraude de ley
                                sentiment_score: -2
                                publication_date: '2025-06-10T05:05:34'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, which raises
                                  questions about his conduct and political
                                  ethics.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                  - juicio
                                  - fraude de ley
                                  - desprestigio
                                  - crisis de confianza
                                  - delitos
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:01:00'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a legal
                                  investigation regarding irregularities in his
                                  hiring, which raises serious concerns about
                                  his conduct.
                                headline: >-
                                  La jueza del 'caso Javier Ejemplo' denuncia un
                                  «fraude de ley» en el aforamiento de Ficticio
                                  (Partido Ejemplo)
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - irregularities
                                  - prevaricación
                                  - tráfico de influencias
                                sentiment_score: -2
                                publication_date: '2025-06-09T10:19:10'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is mentioned in
                                  connection with legal allegations of
                                  corruption, contributing to a negative
                                  perception.
                                headline: >-
                                  'Caso aforamiento': la letrada mayor de la
                                  Asamblea certifica a la juez que Ficticio es
                                  diputado desde antes de prometer su cargo en
                                  el Pleno
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                sentiment_score: -2
                                publication_date: '2025-06-09T08:08:30'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, raising
                                  concerns about political corruption and
                                  influence.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:01:00'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, which raises
                                  concerns about political misconduct.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                  - delitos
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:00:59'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a case of
                                  favoritism and corruption, which casts a
                                  negative light on his character and actions.
                                headline: >-
                                  'Caso Javier Ejemplo': las asociaciones
                                  judiciales salen en defensa de la juez Luisa
                                  Inventada ante las "presiones externas" que
                                  sufre
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - favoritism
                                  - corruption
                                  - persecution
                                sentiment_score: -2
                                publication_date: '2025-06-06T10:08:15'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a case of
                                  alleged favoritism and corruption, which casts
                                  a negative light on his character and actions.
                                headline: >-
                                  'Caso Javier Ejemplo': las asociaciones
                                  judiciales salen en defensa de la juez Luisa
                                  Inventada ante las "presiones externas" que
                                  sufre
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - favoritism
                                  - corruption
                                  - persecution
                                sentiment_score: -2
                                publication_date: '2025-06-06T08:08:15'
                            additional_information: {}
                        score: 80
                        screened_data:
                          full_name: Javier Ejemplo Modelo
                          nationality: ES
                          date_of_birth: '1974-01-01'
                          document_number: null
                        is_ongoing_monitoring_enabled: true
                        next_ongoing_monitoring_bill_date: '2026-07-24'
                        last_ongoing_screening_at: '2026-09-12T04:03:11Z'
                        last_ongoing_screening_datasets_updated_at: '2026-09-11T06:00:00Z'
                        warnings:
                          - feature: AML
                            risk: POSSIBLE_MATCH_FOUND
                            additional_data: null
                            log_type: warning
                            short_description: Possible match found in AML screening
                            long_description: >-
                              The Anti-Money Laundering (AML) screening process
                              identified potential matches with watchlists or
                              high-risk databases, requiring further review.
                            node_id: feature_aml_1
                    ip_analyses:
                      - node_id: feature_ip_1
                        status: Approved
                        device_brand: Apple
                        device_model: iPhone
                        browser_family: Mobile Safari
                        os_family: iOS
                        platform: mobile
                        device_fingerprint: didit-fp-a1b2c3d4e5f6g7h8
                        ip_country: Spain
                        ip_country_code: ES
                        ip_state: Barcelona
                        ip_city: Barcelona
                        latitude: 41.4022
                        longitude: 2.1407
                        ip_address: 83.50.226.71
                        isp: null
                        organization: null
                        is_vpn_or_tor: false
                        is_data_center: false
                        time_zone: Europe/Madrid
                        time_zone_offset: '+0100'
                        ip:
                          location:
                            latitude: 40.2206327
                            longitude: 1.5770097
                          distance_from_id_document: 23.4
                          distance_from_poa_document: 12.3
                        id_document:
                          location:
                            latitude: 41.2706327
                            longitude: 1.9770097
                          distance_from_ip: 23.4
                          distance_from_poa_document: 18.7
                        poa_document:
                          location:
                            latitude: 41.2706327
                            longitude: 1.9770097
                          distance_from_ip: 12.3
                          distance_from_id_document: 18.7
                        warnings: []
                        matches:
                          - session_id: 99999999-8888-7777-6666-555555555555
                            session_number: 41205
                            vendor_data: 22222222-2222-2222-2222-222222222222
                            verification_date: '2024-07-20T10:15:30Z'
                            match_type: ip_address
                            match_source: ip_address
                            matched_value: 83.50.226.71
                            status: Approved
                            is_blocklisted: false
                            api_service: null
                            source: session
                            device_info:
                              device_brand: Apple
                              device_model: iPhone
                              browser_family: Mobile Safari
                              os_family: iOS
                              platform: mobile
                              device_fingerprint: didit-fp-f9e8d7c6b5a40312
                            location_info:
                              ip_address: 83.50.226.71
                              ip_country: Spain
                              ip_country_code: ES
                              ip_state: Barcelona
                              ip_city: Barcelona
                              is_vpn_or_tor: false
                              is_data_center: false
                            confidence: 0
                            match_mode: co_occurrence
                          - session_id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                            session_number: 42830
                            vendor_data: 33333333-3333-3333-3333-333333333333
                            verification_date: '2024-06-30T18:22:05Z'
                            match_type: device_fingerprint
                            match_source: recovered_high
                            matched_value: f47ac10b-58cc-4372-a567-0e02b2c3d479
                            status: Declined
                            is_blocklisted: false
                            api_service: null
                            source: session
                            device_info:
                              device_brand: Samsung
                              device_model: SM-G991B
                              browser_family: Chrome Mobile
                              os_family: Android
                              platform: mobile
                              device_fingerprint: null
                            location_info:
                              ip_address: 83.50.231.18
                              ip_country: Spain
                              ip_country_code: ES
                              ip_state: Madrid
                              ip_city: Madrid
                              is_vpn_or_tor: false
                              is_data_center: false
                            confidence: 1
                            match_mode: deterministic
                            recovery_similarity: 0.9874
                            tls_ja4_corroborated: true
                            recovery_gate_reason: hardware_root_match
                    database_validations:
                      - node_id: feature_db_validation_1
                        issuing_state: BRA
                        validation_type: one_by_one
                        screened_data:
                          last_name: De Lima
                          first_name: Fernando
                          tax_number: '01234567890'
                          date_of_birth: '1980-01-01'
                          document_type: ID
                          expiration_date: '2030-01-01'
                        validations:
                          - service_id: bra_cpf
                            service_name: Brazil - CPF status check
                            outcome_code: MATCH
                            validation:
                              full_name: full_match
                              date_of_birth: full_match
                              identification_number: full_match
                            source_data:
                              identification_number: '01234567890'
                              first_name: FERNANDO
                              last_name: DE LIMA
                              date_of_birth: '1980-01-01'
                              gender: M
                              nationality: BRA
                        match_type: full_match
                        status: Approved
                        warnings: []
                    reviews:
                      - user: compliance@example.com
                        new_status: Declined
                        comment: Possible match found in AML screening
                        created_at: '2024-07-18T13:29:00.366811Z'
                    created_at: '2024-07-24T08:54:25.443172Z'
                    expires_at: '2025-07-24T08:54:25.443172Z'
                    biometric_consent:
                      required: false
                      trigger: null
                      status: not_required
                      given_at: null
                      declined_at: null
                      text_version: null
                      text_hash: null
                      locale: null
                      policy_url: null
                      step: null
                      node_id: null
                      ip_address: null
                      ip_country_code: null
                      ip_state: null
                      ip_city: null
                      user_agent: null
                      detected_ip_address: 83.50.226.71
                      detected_country_code: ES
                      detected_state: ES-B
                      detected_city: Barcelona
                      declared_state: null
                      document_state: null
                      jurisdictions: []
                      retention_months: null
                      reason: null
                      decline_reason: null
                      face_data_deleted_at: null
                BusinessExample:
                  summary: Exemple de session entreprise (KYB)
                  description: "Une décision avec `session_kind = \"business\"`\_: les sessions KYB remplacent les tableaux de fonctionnalités KYC par `registry_checks`, `document_verifications` et `key_people_checks`, tout en partageant `aml_screenings`, `phone_verifications`, `email_verifications`, `questionnaire_responses`, `ip_analyses`, `reviews` et l'enveloppe de session."
                  value:
                    session_id: 66666666-7777-8888-9999-000000000000
                    session_kind: business
                    session_number: 31415
                    session_url: https://verify.didit.me/session/business123
                    status: In Review
                    environment: live
                    workflow_id: abababab-cdcd-efef-0101-232323232323
                    features:
                      - KYB_REGISTRY
                      - KYB_DOCUMENTS
                      - KYB_KEY_PEOPLE
                    vendor_data: merchant-001234
                    metadata: null
                    callback: https://example.com/verification/callback
                    registry_checks:
                      - status: Approved
                        node_id: feature_kyb_registry_1
                        data_resolved: true
                        company:
                          uuid: dddd4444-eeee-5555-ffff-666677778888
                          node_id: feature_kyb_registry_1
                          status: Approved
                          registry_status: active
                          data_resolved: true
                          company_name: ACME HOLDINGS LTD
                          registration_number: '12345678'
                          country_code: GB
                          region: null
                          company_type: Private Limited Company
                          incorporation_date: '2015-03-12'
                          registered_address: 1 Example Street, London, EC1A 1AA
                          tax_number: null
                          risk_level: null
                          verification_status: verified
                          is_from_registry: true
                          fetch_status: resolved
                          alternative_names: null
                          nature_of_business: 62012 - Business and domestic software development
                          registered_capital: 100 GBP
                          registered_capital_amount: '100.00'
                          registered_capital_currency: GBP
                          website: null
                          email: null
                          phone: null
                          legal_entity_identifier: null
                          location_of_registration: England and Wales
                          financial_summary: null
                          officers:
                            - uuid: aaaa1111-bbbb-2222-cccc-333344445555
                              name: Jane Smith
                              designation: Director
                              role: director
                              nationality: British
                              is_active: true
                              kyc_status: Approved
                              kyc_session_url: https://verify.didit.me/session/abc123def456
                          beneficial_owners:
                            - uuid: bbbb2222-cccc-3333-dddd-444455556666
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              entity_type: person
                              roles:
                                - ubo
                                - shareholder
                              ownership_min_shares: '50'
                              ownership_max_shares: '75'
                              is_active: true
                              kyc_status: Pending
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              effective_ownership_percent: 75
                          addresses:
                            - type: registered
                              address: 1 Example Street, London, EC1A 1AA
                              country: GB
                          industries:
                            - code: '62012'
                              description: Business and domestic software development
                          accounts: null
                          registry_data: {}
                          user_provided_data:
                            company_name: ACME HOLDINGS
                            registration_number: '12345678'
                          confirmed_by_user_at: '2026-06-10T12:01:30.000000Z'
                          last_console_edit_at: null
                          is_editable: false
                        ownership_structure:
                          shareholders:
                            - name: John Doe
                              first_name: John
                              last_name: Doe
                              date_of_birth: null
                              country_of_birth: null
                              company_name: null
                              registration_number: null
                              entity_type: person
                              nationality: null
                              designation: null
                              roles:
                                - shareholder
                              ownership_min_shares: '75'
                              ownership_max_shares: '75'
                              voting_min_shares: null
                              voting_max_shares: null
                              appointment_date: null
                              is_active: true
                              shareholding:
                                share_class: ORDINARY
                                number_of_shares: 750
                                currency: GBP
                                nominal_value: 1
                                total_value: null
                                percentage: 75
                          beneficial_owners: []
                        warnings: []
                    aml_screenings: null
                    document_verifications:
                      - status: In Review
                        node_id: feature_kyb_documents_1
                        items:
                          - uuid: eeee5555-ffff-6666-0000-777788889999
                            document_type: LEGAL_PRESENCE
                            document_subtype: CERTIFICATE_OF_INCORPORATION
                            document_group: LEGAL_PRESENCE
                            file_url: >-
                              https://<media-host>/kyb/certificate-of-incorporation.pdf
                            original_filename: certificate_of_incorporation.pdf
                            file_size: 482133
                            status: Approved
                            created_at: '2026-06-10T12:03:11.000000Z'
                            cross_check_result:
                              critical:
                                company_name:
                                  document: ACME HOLDINGS LTD
                                  registry: ACME HOLDINGS LTD
                                  score: 1
                                  match: true
                                registration_number:
                                  document: '12345678'
                                  registry: '12345678'
                                  match: true
                              non_critical: {}
                              people: {}
                            document_metadata:
                              file_size: 482133
                              content_type: application/pdf
                              creation_date: '2015-03-12T09:00:00'
                              modified_date: '2015-03-12T09:00:00'
                              creator: null
                              producer: null
                              software: null
                              encryption: null
                              is_signed: true
                              is_tampered: false
                              signature_info: null
                              exif_original_date: null
                              exif_digitized_date: null
                              processed_by_known_editor: false
                              has_different_creation_mod_date: false
                              overlay_manipulation: null
                            description: null
                            is_requested: false
                            ocr_data:
                              company_name: ACME HOLDINGS LTD
                              registration_number: '12345678'
                              incorporation_date: '2015-03-12'
                            is_console_upload: false
                            is_confirmed: true
                          - uuid: ffff6666-0000-7777-1111-888899990000
                            document_type: OWNERSHIP_STRUCTURE
                            document_subtype: null
                            document_group: OWNERSHIP_STRUCTURE
                            file_url: null
                            original_filename: null
                            file_size: null
                            status: Not Finished
                            created_at: '2026-06-10T15:40:02.000000Z'
                            cross_check_result: null
                            document_metadata: null
                            description: Please upload an up-to-date shareholder registry
                            is_requested: true
                            ocr_data: null
                            is_console_upload: false
                            is_confirmed: true
                        groups:
                          LEGAL_PRESENCE:
                            total: 1
                            approved: 1
                            pending: 0
                            declined: 0
                            in_review: 0
                            other: 0
                            missing: 0
                          OWNERSHIP_STRUCTURE:
                            total: 1
                            approved: 0
                            pending: 0
                            declined: 0
                            in_review: 0
                            other: 0
                            missing: 1
                        required_groups:
                          - LEGAL_PRESENCE
                          - OWNERSHIP_STRUCTURE
                        warnings: []
                    key_people_checks:
                      - status: In Review
                        node_id: feature_kyb_key_people_1
                        registry:
                          officers:
                            - uuid: aaaa1111-bbbb-2222-cccc-333344445555
                              name: Jane Smith
                              designation: Director
                              role: director
                              nationality: British
                              appointment_date: '2015-03-12'
                              termination_date: null
                              is_active: true
                              address: 1 Example Street, London, EC1A 1AA
                              aml_status: Approved
                              kyc_status: Approved
                              kyc_session_url: https://verify.didit.me/session/abc123def456
                              kyc_session_id: 77777777-8888-9999-aaaa-bbbbbbbbbbbb
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Approved
                                - feature: LIVENESS
                                  status: Approved
                                - feature: AML
                                  status: Approved
                              didit_internal_id: 99999999-0000-1111-2222-333333333333
                              kyc_document_type: P
                              kyc_nationality: GBR
                              kyc_liveness_passed: true
                              kyc_verified_at: '2026-06-10T14:22:31.123456Z'
                              kyc_aml_categories:
                                sanctions: clear
                                pep: clear
                                adverse_media: clear
                                warnings: clear
                              kyc_notification_sent_at: '2026-06-09T09:00:00.000000Z'
                          beneficial_owners:
                            - uuid: bbbb2222-cccc-3333-dddd-444455556666
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              date_of_birth: '1980-05-04'
                              country_of_birth: null
                              email: null
                              company_name: null
                              registration_number: null
                              entity_type: person
                              nationality: British
                              designation: null
                              roles:
                                - ubo
                                - shareholder
                              ownership_min_shares: '50'
                              ownership_max_shares: '75'
                              is_active: true
                              aml_status: null
                              kyc_status: In Progress
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              kyc_session_id: 88888888-9999-aaaa-bbbb-cccccccccccc
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Not Finished
                                - feature: LIVENESS
                                  status: Not Finished
                                - feature: AML
                                  status: Not Finished
                              didit_internal_id: null
                              kyc_document_type: null
                              kyc_nationality: null
                              kyc_liveness_passed: null
                              kyc_verified_at: null
                              kyc_aml_categories: null
                              kyc_notification_sent_at: null
                              child_beneficial_owners: []
                              effective_ownership_percent: 75
                        submitted:
                          parties:
                            - uuid: cccc3333-dddd-4444-eeee-555566667777
                              entity_type: person
                              source: USER
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              company_name: null
                              registration_number: null
                              email: john.doe@example.com
                              nationality: GBR
                              phone_number: '+447700900123'
                              date_of_birth: '1980-05-04'
                              position: Chief Executive Officer
                              custom_fields: {}
                              is_active: true
                              is_skipped: false
                              requires_verification: true
                              roles:
                                - role: ubo
                                  ownership_percent: 75
                                  voting_percent: 75
                                - role: director
                                  ownership_percent: null
                                  voting_percent: null
                              kyc_session_id: 88888888-9999-aaaa-bbbb-cccccccccccc
                              kyc_session_status: In Progress
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              kyb_sub_session_id: null
                              kyb_sub_session_status: null
                              kyb_sub_session_url: null
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Not Finished
                                - feature: LIVENESS
                                  status: Not Finished
                                - feature: AML
                                  status: Not Finished
                              didit_internal_id: null
                        ubo_kyc_summary:
                          total: 1
                          approved: 0
                          flagged: 0
                          pending: 1
                        warnings: []
                    phone_verifications: null
                    email_verifications: null
                    questionnaire_responses: null
                    ip_analyses: null
                    reviews: []
                    contact_details: null
                    expected_details:
                      company_name: Tesco PLC
                      registry_country: GB
                      registration_number: '00445790'
                    created_at: '2026-06-10T11:58:04.000000Z'
                    expires_at: '2026-06-24T11:58:04.000000Z'
              schema:
                $ref: '#/components/schemas/SessionDecision'
        '403':
          description: "Échec de l'authentification ou de l'autorisation. Une clé manquante renvoie `403`\_; une clé incorrecte, révoquée ou expirée renvoie `401`. Deux chaînes `detail` distinguent les modes d'échec\_:\n\n- `\"Authentication credentials were not provided or are invalid.\"` — aucun en-tête `x-api-key` (et aucun token `Authorization: Bearer`), ou l'identifiant fourni a échoué à l'introspection (révoqué, expiré ou malformé).\n- `\"You do not have permission to perform this action.\"` — l'identifiant est valide mais n'a pas l'autorisation de lire cette session\_: un token Bearer d'utilisateur de la console n'a pas l'autorisation `read:sessions` ou ne peut pas accéder à l'application propriétaire, ou une clé API appartient à une autre organisation que la session.\n\nNotez que pour un `sessionId` totalement inconnu, l'endpoint résout l'application propriétaire avant de valider les identifiants, de sorte qu'une session manquante renvoie `404` même lorsque l'identifiant est manquant ou invalide."
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: >-
                      Authentication credentials were not provided or are
                      invalid.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Aucun en-tête x-api-key, ou l'introspection de la clé a
                    échoué
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Insufficient permissions:
                  summary: >-
                    Identifiant valide ne disposant pas de read:sessions ou d'un
                    accès à l'application propriétaire
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            Session introuvable. Renvoyé lorsqu'aucune session active ne
            correspond au `sessionId` fourni, qu'il s'agisse d'une session de
            vérification des utilisateurs (KYC) ou de vérification d'entreprise
            (KYB) — une session ayant été supprimée aboutit également ici. Le
            corps est l'enveloppe standard `{"detail": ...}`.


            **Deux chaînes `detail` distinctes.** Si le `sessionId` est inconnu
            à la fois en tant que session KYC et KYB, la recherche de
            propriétaire préalable à l'authentification échoue et vous recevez
            `{"detail": "Not found."}` — cela se produit avant la validation des
            identifiants, c'est donc renvoyé même pour les appels non
            authentifiés. Si la session existe mais ne peut pas être récupérée
            sous l'application authentifiée (par exemple un enregistrement
            obsolète ou venant d'être supprimé), la vue renvoie `{"detail":
            "Session not found."}`. Les deux indiquent le même résultat — la
            session n'est pas accessible — basez-vous donc sur le code de statut
            `404` plutôt que sur la chaîne.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Not found.
              examples:
                Unknown session id:
                  summary: sessionId est inconnu pour cette application
                  value:
                    detail: Not found.
                Session not retrievable:
                  summary: >-
                    La session existe mais ne peut pas être récupérée pour cette
                    application
                  value:
                    detail: Session not found.
        '429':
          description: >-
            Limite de débit dépassée. Les requêtes GET sont limitées à **600 par
            minute par identifiant d'authentification** (clé API, token Bearer
            ou IP source en cas de requête non authentifiée). Examinez
            `Retry-After` / `X-RateLimit-Reset` et temporisez avant de
            réessayer. Si vous atteignez cette limite en effectuant du polling
            pour obtenir les décisions, passez au webhook `status.updated` et
            récupérez la décision une seule fois par changement de statut.
          headers:
            Retry-After:
              description: Secondes à attendre avant de réessayer la requête.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: >-
                Nombre maximal de requêtes autorisées dans la fenêtre actuelle
                (600 pour les requêtes GET).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: Requêtes restantes dans la fenêtre actuelle.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: >-
                Horodatage Unix (en secondes) auquel la fenêtre actuelle se
                réinitialise.
              schema:
                type: integer
                example: 1750000000
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: >-
                      Explication lisible par l'humain du dépassement de la
                      limite de débit.
                    example: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
              examples:
                Throttled:
                  summary: >-
                    Plus de 600 requêtes GET en une minute avec le même
                    identifiant
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/decision/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Accept: application/json'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.retrieve_decision(
                "11111111-2222-3333-4444-555555555555",
            )
            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.sessions.retrieveDecision("11111111-2222-3333-4444-555555555555");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.RetrieveDecision(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsRetrieveDecisionParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().retrieveDecision("11111111-2222-3333-4444-555555555555");

            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->sessions->retrieveDecision('11111111-2222-3333-4444-555555555555');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")

            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.Sessions.RetrieveDecisionAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SessionDecision:
      type: object
      properties:
        session_id:
          type: string
          format: uuid
          description: L'identifiant unique de la session.
        session_kind:
          type: string
          enum:
            - user
            - business
          description: >-
            Discriminateur indiquant s'il s'agit d'une session de Vérification
            des utilisateurs (KYC) ou de Vérification d'entreprise (KYB).
            Lorsque la valeur est `user`, les tableaux de fonctionnalités KYC
            (`id_verifications`, `nfc_verifications`, `liveness_checks`,
            `face_matches`, `poa_verifications`, `document_ai_documents`,
            `database_validations`, ...) s'appliquent et les tableaux
            d'entreprise sont absents. Lorsque la valeur est `business`, le
            payload contient à la place `registry_checks`,
            `document_verifications`, `key_people_checks` ainsi que les tableaux
            partagés (`aml_screenings`, `phone_verifications`,
            `email_verifications`, `ip_analyses`, `questionnaire_responses`).
            **Omis lorsque `include=events` est transmis** — le format des
            événements n'existe que pour les sessions utilisateur, le
            discriminateur est donc supprimé de cette variante.
        shared_from_session:
          type: string
          format: uuid
          nullable: true
          description: >-
            Pour une session clonée avec `POST /v3/session/import-shared/` : le
            `session_id` de la session d'origine dans l'application source.
            `null` pour toute autre session. Omis lorsque `include=events` est
            transmis.
        shared_from_session_number:
          type: integer
          nullable: true
          description: >-
            `session_number` de la session source lorsque cette session a été
            importée depuis une autre application de votre organisation. `null`
            sinon.
        session_number:
          type: integer
          description: Le numéro de la session.
          nullable: true
        session_url:
          type: string
          format: uri
          description: L'URL de la session.
          nullable: true
        status:
          type: string
          enum:
            - Not Started
            - In Progress
            - Awaiting User
            - In Review
            - Approved
            - Declined
            - Resubmitted
            - Expired
            - Kyc Expired
            - Abandoned
          description: >-
            Statut global du cycle de vie de la session — le résultat consolidé
            du workflow. Les valeurs finales sont `Approved`, `Declined`, `In
            Review`, `Expired`, `Kyc Expired` et `Abandoned` ; `Not Started`,
            `In Progress`, `Awaiting User` et `Resubmitted` indiquent que la
            session progresse toujours dans le workflow.
        status_override:
          type: object
          nullable: true
          description: >-
            Présent lorsqu'un réviseur a défini manuellement `status`. `null`
            lorsque le statut est le résultat automatique. Utilisez-le pour
            distinguer une approbation manuelle d'une approbation automatique.
          properties:
            overridden_at:
              type: string
              format: date-time
              nullable: true
            automatic_status:
              type: string
              nullable: true
              description: Le statut conclu par les propres vérifications de la plateforme.
        decision_trace:
          type: object
          description: >-
            Manière dont le statut a été atteint : qui l'a défini et quels
            avertissements l'ont provoqué.
          properties:
            status:
              type: string
              description: Le statut de la session.
            decided_by:
              type: string
              nullable: true
              enum:
                - manual
                - automatic
                - investigator
                - null
              description: >-
                Qui a défini le statut. `null` tant que la session n'est pas
                décidée.
            decided_at:
              type: string
              format: date-time
              nullable: true
            automatic_status:
              type: string
              nullable: true
              description: >-
                Ce que concluent les propres vérifications de la plateforme, ce
                qui diffère de `status` après une décision manuelle.
            terminal_node_id:
              type: string
              nullable: true
              description: >-
                Le nœud d'état du workflow qui a mis fin à la session, le cas
                échéant.
            actor:
              type: object
              nullable: true
              description: Le réviseur à l'origine d'une décision manuelle.
              properties:
                user:
                  type: string
                  nullable: true
                actor_type:
                  type: string
                  nullable: true
            warning_counts:
              type: object
              description: >-
                Avertissements par `log_type` (`error`, `warning`,
                `information`) et `total`.
              additionalProperties:
                type: integer
            status_warnings:
              type: array
              description: >-
                Les avertissements qui définissent un statut `Declined` ou `In
                Review`.
              items:
                type: object
                properties:
                  risk:
                    type: string
                  feature:
                    type: string
                    nullable: true
                  node_id:
                    type: string
                    nullable: true
                  log_type:
                    type: string
                    nullable: true
                  check_status:
                    type: string
                    nullable: true
                  source:
                    type: string
                    description: >-
                      La liste du payload d'où provient l'avertissement, par
                      exemple `id_verifications`.
                  short_description:
                    type: string
                    nullable: true
        linked_records:
          type: object
          nullable: true
          description: >-
            Un résumé des autres enregistrements liés à la session. `null`
            lorsqu'il n'y a rien à afficher, ainsi que pour les workflows
            déclarant une norme d'assurance de l'âge.
          properties:
            same_face:
              type: object
              nullable: true
              description: >-
                Autres personnes dont le visage correspondait à l'une des
                recherches faciales de cette session.
              properties:
                count:
                  type: integer
                best_match:
                  type: object
                  nullable: true
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                    similarity_percentage:
                      type: number
                      nullable: true
            earlier_verifications:
              type: object
              nullable: true
              properties:
                count:
                  type: integer
                vendor_user_id:
                  type: string
                  format: uuid
                  nullable: true
            networks:
              type: object
              nullable: true
              properties:
                count:
                  type: integer
                open:
                  type: integer
                dismissed:
                  type: integer
                items:
                  type: array
                  items:
                    type: object
                    properties:
                      network_id:
                        type: string
                        format: uuid
                      display_number:
                        type: integer
                        nullable: true
                      name:
                        type: string
                      status:
                        type: string
                      risk_score:
                        type: number
                        nullable: true
        workflow_id:
          type: string
          format: uuid
          description: >-
            Identifiant stable du groupe de workflows qui a généré cette
            session. Les workflows sont versionnés — cette valeur identifie le
            workflow lui-même, et non la version spécifique.
          nullable: true
        features:
          type: array
          items:
            type: string
            description: La fonctionnalité de la session.
          description: "Liste des fonctionnalités de vérification configurées pour cette session, sous forme de noms d'affichage\_: `ID_VERIFICATION`, `NFC`, `LIVENESS`, `FACE_MATCH`, `POA`, `PHONE`, `EMAIL_VERIFICATION`, `AML`, `IP_ANALYSIS`, `DATABASE_VALIDATION`, `QUESTIONNAIRE`, `AGE_ESTIMATION`, `FACE_SEARCH`, `GEOLOCATION` (vérification de la localisation) (les sessions de Vérification d'entreprise (KYB) utilisent l'ensemble de fonctionnalités KYB\_: `KYB_REGISTRY`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`, `AML`, `PHONE`, `EMAIL_VERIFICATION`, `IP_ANALYSIS`, `QUESTIONNAIRE`). Avec `include=events`, chaque entrée devient un objet `{feature, node_id}` au lieu d'une simple chaîne, et la fonctionnalité d'e-mail est renommée\_: elle apparaît sous la forme `EMAIL` en mode événements au lieu de `EMAIL_VERIFICATION` utilisé ici."
        vendor_data:
          type: string
          description: Les données du fournisseur (vendor data) de la session.
          nullable: true
        metadata:
          type: object
          description: Les métadonnées de la session.
          nullable: true
        expected_details:
          type: object
          description: >-
            Informations attendues fournies lors de la création de la session —
            utilisées pour la validation croisée avec les données extraites
            (KYC) ou pour préremplir la recherche dans le registre des sociétés
            (KYB). Renvoie exactement les clés fournies ; `null` si aucune n'a
            été fournie. Les sessions KYC contiennent les champs relatifs à la
            personne ; les sessions de Vérification d'entreprise (KYB)
            contiennent `company_name`, `registry_country` et
            `registration_number`.
          properties:
            first_name:
              type: string
              description: Prénom de l'utilisateur. Par exemple, `John`.
            last_name:
              type: string
              description: Nom de famille de l'utilisateur. Par exemple, `Doe`.
            date_of_birth:
              type: string
              format: date
              description: "Date de naissance de l'utilisateur au format\_: YYYY-MM-DD. Par exemple, `1990-05-15`."
            gender:
              type: string
              nullable: true
              enum:
                - M
                - F
              default: null
              description: Genre de l'utilisateur. Doit être 'M', 'F' ou null.
            nationality:
              type: string
              description: >-
                Code pays ISO 3166-1 alpha-3 représentant le pays d'origine du
                candidat. Par exemple, `USA`.
            country:
              type: string
              description: >-
                Code pays ISO 3166-1 alpha-3 représentant le pays du document de
                Justificatif de domicile, ou le pays du document d'identité du
                candidat, qui peut différer de la nationalité. Par exemple,
                `GBR`.
            address:
              type: string
              description: >-
                L'adresse dans un format lisible par un humain, comprenant
                autant d'informations que possible. Par exemple, `123 Main St,
                San Francisco, CA 94105, USA`.
            identification_number:
              type: string
              description: >-
                Le numéro de document, le numéro personnel ou l'identifiant
                fiscal de l'utilisateur. Par exemple, `123456789`.
            ip_address:
              type: string
              format: ipv4
              description: >-
                Adresse IP attendue pour la session. Si l'adresse IP réelle
                diffère de cette valeur, un avertissement sera consigné. Par
                exemple, `192.168.1.100`.
            expected_document_types:
              type: array
              description: >-
                Types de documents auxquels l'étape de vérification d'identité a
                été restreinte lors de la création de la session. Vide/non
                défini signifie aucune restriction. Codes : `P` (passeport),
                `ID` (carte nationale d'identité), `DL` (permis de conduire),
                `RP` (titre de séjour), `HIC` (carte d'assurance maladie), `TC`
                (carte fiscale), `SSC` (carte de sécurité sociale).
              items:
                type: string
                enum:
                  - P
                  - ID
                  - DL
                  - RP
                  - HIC
                  - TC
                  - SSC
            id_country:
              type: string
              nullable: true
              description: >-
                Pays de délivrance attendu de la pièce d'identité (ISO 3166-1
                alpha-3), lorsqu'il est restreint au moment de la création.
              example: ESP
            poa_country:
              type: string
              nullable: true
              description: >-
                Pays attendu du justificatif de domicile (ISO 3166-1 alpha-3),
                lorsqu'il est restreint au moment de la création.
              example: ESP
            company_name:
              type: string
              description: >-
                Raison sociale attendue de l'entreprise. Sessions de
                Vérification d'entreprise (KYB) uniquement.
            registry_country:
              type: string
              description: >-
                Pays du registre attendu au format `XX` ou `XX-YY` (ISO 3166-1
                alpha-2, éventuellement avec une subdivision ISO 3166-2 pour les
                registres au niveau de l'État, par ex. `US-CA`). Sessions de
                vérification d'entreprise (KYB) uniquement.
            registration_number:
              type: string
              description: >-
                Numéro d'immatriculation de l'entreprise attendu. Sessions
                d'entreprise (KYB) uniquement.
          nullable: true
        contact_details:
          type: object
          description: >-
            Coordonnées fournies lors de la création de la session (utilisées
            pour les e-mails de notification, la vérification préremplie du
            téléphone/de l'e-mail et la langue de communication). `null` si
            aucun e-mail ni numéro de téléphone n'a été fourni.
          properties:
            email:
              type: string
              description: >-
                Adresse e-mail de l'utilisateur (par exemple, «
                john.doe@example.com ») qui sera utilisée lors de l'étape de
                Vérification de l'e-mail. Si elle n'est pas fournie,
                l'utilisateur doit la renseigner pendant le flux de
                vérification.
            email_lang:
              type: string
              description: >-
                Code de langue (ISO 639-1) pour les notifications par e-mail.
                Contrôle la langue de toutes les communications par e-mail (par
                exemple, "en", "es", "fr").
            send_notification_emails:
              type: boolean
              default: false
              description: >-
                Si la valeur est true et qu'un e-mail est fourni, Didit envoie
                l'e-mail initial « Vérifiez votre identité » de manière
                asynchrone lors de la création de la session de vérification des
                utilisateurs (KYC) ou de vérification d'entreprise (KYB). Didit
                envoie également les notifications de statut de vérification
                pour les sessions nécessitant un examen manuel à l'adresse
                e-mail fournie.
            phone:
              type: string
              nullable: true
              description: >-
                Numéro de téléphone de l'utilisateur au format E.164 s'il est
                disponible (par ex. +14155552671). `null` si seul un e-mail a
                été fourni lors de la création de la session. Remarque : ce
                champ renvoie le numéro de téléphone d'origine fourni lors de la
                création de la session. Si le numéro était invalide, il se peut
                qu'il ne soit pas au format E.164.
          nullable: true
        callback:
          type: string
          format: uri
          description: L'URL de rappel de la session.
          nullable: true
        id_verifications:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de Vérification d'identité (OCR)** produits
            par les étapes de document d'identité dans le graphe du workflow.
            Toujours un tableau JSON — lisez `id_verifications[0]` et itérez si
            votre workflow peut exécuter plusieurs vérifications d'identité (par
            exemple une vérification principale plus un contrôle renforcé).
            `null` jusqu'à ce qu'au moins une étape d'identité ait produit des
            données. Chaque élément est le rapport complet, comprenant
            `node_id`, le `status` au niveau de la fonctionnalité, les champs de
            document extraits, les URL des images, les scores de qualité, la
            MRZ, l'analyse d'adresse, les correspondances entre sessions et
            `warnings[]`.
          items:
            type: object
            description: >-
              Un rapport de vérification d'identité - le rapport complet pour
              une seule étape de Vérification d'identité. `verification_method`
              indique laquelle des trois méthodes l'a produit (capture de
              document, recherche sans document ou connexion par portefeuille)
              et le bloc de preuves spécifique à la méthode est renseigné en
              conséquence.
            properties:
              node_id:
                type: string
                description: >-
                  ID de nœud du graphe de workflow de l'étape OCR ayant produit
                  ce rapport.
              verification_method:
                type: string
                enum:
                  - document
                  - id_lookup
                  - wallet
                description: >-
                  Quelle méthode de Vérification d'identité a généré ce rapport.
                  `document` - l'utilisateur a photographié une pièce d'identité
                  physique (valeur par défaut, et valeur de chaque session créée
                  avant l'existence des autres méthodes). `id_lookup` -
                  l'utilisateur a saisi son numéro d'identité national, qui a
                  été vérifié auprès d'un registre gouvernemental ou d'une autre
                  source faisant autorité pour ce pays (`id_lookup.source` en
                  indique le nom). `wallet` - l'utilisateur s'est connecté à
                  l'aide d'une identité numérique gouvernementale ou bancaire.
              assurance:
                type: string
                enum:
                  - documentary
                  - data_match
                  - cryptographic
                description: >-
                  Niveau d'assurance dérivé de `verification_method` :
                  `documentary` pour un document qui a été capturé et vérifié,
                  `data_match` pour des informations qui correspondaient à un
                  enregistrement détenu par la source interrogée,
                  `cryptographic` pour des attributs qu'un fournisseur
                  d'identité a authentifiés et signés.
              wallet_provider:
                type: string
                nullable: true
                description: >-
                  Identifiant de portefeuille du catalogue lorsque
                  `verification_method` est `wallet` (`mitid`, `bankid_se`,
                  `itsme`, ...). `null` sinon.
              fallback_from:
                type: object
                nullable: true
                description: "Raison pour laquelle une méthode sans document n'a pas finalisé l'étape d'identité. Défini lorsqu'une recherche ou une connexion par portefeuille a échoué\_: sur la vérification de document que l'utilisateur a poursuivie lorsque le mécanisme de repli du pays était `fallback_to_document` (`action` est `fallback_to_document`), ou sur le rapport refusé lorsqu'il s'agissait de `decline`. `null` dans le cas contraire."
                properties:
                  method:
                    type: string
                    enum:
                      - id_lookup
                      - wallet
                    description: La méthode ayant échoué.
                  reason:
                    type: string
                    description: >-
                      L'issue qui y a mis fin, par ex. `no_match`,
                      `provider_error`, `cancelled`, `timeout`.
                  action:
                    type: string
                    enum:
                      - fallback_to_document
                      - decline
                    description: >-
                      L'action configurée qui a été effectuée :
                      `fallback_to_document` ou `decline`.
              id_lookup:
                type: object
                nullable: true
                description: >-
                  Preuve du registre. Présente uniquement lorsque
                  `verification_method` est `id_lookup` ; `null` dans le cas
                  contraire.
                properties:
                  source:
                    type: string
                    description: >-
                      Nom côté client de la source interrogée, par ex.
                      `Department of Home Affairs` (un registre gouvernemental)
                      ou `UK credit bureau and financial services records` (pas
                      un registre gouvernemental). Il s'agit de la seule
                      indication de la provenance de la recherche ; ne supposez
                      pas qu'il s'agisse d'une source gouvernementale.
                  checked_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: Moment où le registre a répondu.
                  attempts:
                    type: integer
                    description: >-
                      Numéro de tentative (à partir de 1) dont provient ce
                      rapport.
                  max_attempts:
                    type: integer
                    description: "Budget de tentatives configuré pour le pays (1 à 5, valeur par défaut\_: 1)."
                  outcome:
                    type: string
                    enum:
                      - match
                      - partial_match
                      - no_match
                      - provider_error
                      - format_rejected
                    nullable: true
                    description: >-
                      Ce que le registre a répondu. Seuls `match`,
                      `partial_match` et `no_match` sont décomptés du budget de
                      tentatives et facturés.
                  comparison:
                    type: array
                    description: >-
                      Une ligne par champ comparable pour lequel la source a
                      fourni une réponse, plus une ligne par erreur de source.
                      Les lignes de comparaison utilisent les noms de champs
                      normalisés ci-dessous plutôt que les clés de champs de
                      requête spécifiques au pays, car plusieurs champs de
                      requête (prénom et nom, ou n'importe quel alias
                      d'identifiant) sont regroupés en une seule comparaison.
                      Une source ayant échoué ajoute une ligne avec `field:
                      "provider"` et `result: "error"` ; lisez donc `result`
                      avant de considérer une ligne comme le verdict d'un champ.
                    items:
                      type: object
                      required:
                        - field
                        - label
                        - provided
                        - record
                        - result
                      properties:
                        field:
                          type: string
                          enum:
                            - identification_number
                            - full_name
                            - date_of_birth
                            - address
                            - provider
                          description: "Champ de comparaison normalisé. `provider` n'est pas un champ utilisateur\_: il signale une ligne d'erreur provenant de la source."
                        label:
                          type: string
                          description: >-
                            Libellé d'affichage pour la ligne, par ex. `ID
                            number`, `Full name`, `Provider`.
                        provided:
                          type: string
                          nullable: true
                          description: >-
                            Ce que l'utilisateur a saisi. `null` sur une ligne
                            d'erreur `provider`.
                        record:
                          type: string
                          nullable: true
                          description: >-
                            Ce que contenait la source. Sur une ligne d'erreur
                            `provider`, ceci contient le message d'erreur à la
                            place.
                        result:
                          type: string
                          enum:
                            - match
                            - partial
                            - no_match
                            - error
                          description: >-
                            Résultat de comparaison par champ. `error` apparaît
                            uniquement sur une ligne `provider` et signifie que
                            cette source n'a pas répondu ; traitez-le comme un
                            constat sur la requête, jamais comme une
                            non-correspondance de champ.
                  registry_portrait:
                    type: string
                    format: uri
                    nullable: true
                    description: >-
                      URL pré-signée de courte durée vers le portrait renvoyé
                      par la source. Uniquement les quatre registres
                      gouvernementaux qui en renvoient un (Afrique du Sud,
                      Nigéria, Argentine, Panama).
                  face_match_score:
                    type: number
                    nullable: true
                    description: >-
                      Selfie comparé au portrait du registre, 0-100. Uniquement
                      lorsque le registre renvoie un portrait.
              wallet_verification:
                type: object
                nullable: true
                description: >-
                  Preuve de l'attestation. Présent uniquement lorsque
                  `verification_method` est `wallet` ; `null` dans le cas
                  contraire.
                properties:
                  provider:
                    type: string
                    description: >-
                      Identifiant de portefeuille du catalogue, par exemple
                      `mitid`.
                  provider_name:
                    type: string
                    nullable: true
                    description: >-
                      Nom du portefeuille tel que l'utilisateur final le
                      connaît, par exemple `MitID`.
                  issuing_authority:
                    type: string
                    nullable: true
                    description: >-
                      L'autorité derrière le portefeuille, par exemple `Danish
                      Agency for Digital Government`.
                  issuing_country:
                    type: string
                    description: >-
                      Pays ISO 3166-1 alpha-3 dans lequel le portefeuille a été
                      proposé.
                  credential_type:
                    type: string
                    nullable: true
                    description: >-
                      Attestation présentée par le portefeuille, par exemple
                      `person_identification`.
                  level_of_assurance:
                    type: string
                    enum:
                      - low
                      - substantial
                      - high
                    nullable: true
                    description: >-
                      Le niveau d'assurance revendiqué par le portefeuille. Une
                      connexion qui revendique un niveau inférieur à celui
                      demandé échoue au lieu d'être rétrogradée.
                  verified_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: L'instant d'authentification du portefeuille.
                  signature_valid:
                    type: boolean
                    nullable: true
                    description: >-
                      Indique si l'assertion signée retournée par le
                      portefeuille a été validée.
                  attributes:
                    type: object
                    additionalProperties: true
                    description: >-
                      Les attributs partagés par le portefeuille, avec pour clés
                      celles indiquées dans l'entrée du catalogue du
                      portefeuille.
                  portrait:
                    type: string
                    format: uri
                    nullable: true
                    description: >-
                      URL pré-signée de courte durée vers le portrait partagé
                      par le portefeuille, lorsqu'il en partage un.
                  face_match_score:
                    type: number
                    nullable: true
                    description: >-
                      Selfie comparé au portrait du portefeuille, 0-100, lorsque
                      le portefeuille en partage un.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
                description: >-
                  Statut au niveau de la fonctionnalité de cette étape de
                  vérification d'identité. Indépendant du `status` de la session
                  de niveau supérieur — une session peut atteindre sa décision
                  globale tandis qu'une fonctionnalité individuelle reste `In
                  Review`.
              document_type:
                type: string
                description: Type de document d'identité
              document_subtype:
                type: string
                nullable: true
                description: >-
                  Code de sous-type de document accepté issu des paramètres de
                  document du workflow, incluant la région du document le cas
                  échéant. Exemples : `ID_CARD_GENERIC`,
                  `QUEENSLAND_DRIVER_LICENSE_GENERIC`.
              document_number:
                type: string
                description: Numéro d'identification du document
              personal_number:
                type: string
                description: Numéro d'identification personnel
              portrait_image:
                type: string
                format: uri
                description: URL de l'image du portrait
              front_image:
                type: string
                format: uri
                description: URL de l'image du recto du document
              front_video:
                type: string
                format: uri
                description: URL de la vidéo du recto du document
              back_image:
                type: string
                format: uri
                description: URL de l'image du verso du document
              back_video:
                type: string
                format: uri
                description: URL de la vidéo du verso du document
              full_front_image:
                type: string
                format: uri
                description: URL de l'image complète du recto du document
              full_back_image:
                type: string
                format: uri
                description: URL de l'image complète du verso du document
              front_image_camera_front:
                type: string
                format: uri
                description: >-
                  URL de l'image du recto du document capturée depuis la caméra
                  frontale
              back_image_camera_front:
                type: string
                format: uri
                description: >-
                  URL de l'image du verso du document capturée depuis la caméra
                  frontale
              date_of_birth:
                type: string
                format: date
                description: Date de naissance issue du document
              age:
                type: integer
                description: Âge calculé à partir de la date de naissance
              expiration_date:
                type: string
                format: date
                description: Date d'expiration du document
              date_of_issue:
                type: string
                format: date
                description: Date de délivrance du document
              issuing_state:
                type: string
                description: Code ISO de l'État émetteur
              issuing_state_name:
                type: string
                description: Nom complet de l'État de délivrance
              first_name:
                type: string
                description: Prénom issu du document
              last_name:
                type: string
                description: Nom de famille extrait du document
              full_name:
                type: string
                description: Nom complet figurant sur le document
              gender:
                type: string
                description: Genre figurant sur le document
              address:
                type: string
                description: Adresse brute extraite du document
              formatted_address:
                type: string
                description: Adresse complète formatée
              place_of_birth:
                type: string
                description: Lieu de naissance issu du document
              marital_status:
                type: string
                description: État civil d'après le document
              nationality:
                type: string
                description: Code ISO de nationalité
              extra_fields:
                type: object
                description: >-
                  Champs de document supplémentaires. Comprend des attributs
                  spécifiques au document (par exemple `dl_categories`,
                  `blood_group`, `sponsor`, `employer`, `dl_class_code_b_from`,
                  `dl_class_code_b_to`). Les dates de validité des catégories de
                  permis de conduire sont renvoyées sous la forme
                  `dl_class_code_<class>_from` et `dl_class_code_<class>_to`, et
                  les codes de restriction/information par catégorie (par
                  exemple la colonne 12 des permis britanniques) sous la forme
                  `dl_class_code_<class>_notes`. Lorsque le document comporte
                  des noms, une adresse ou un lieu de naissance dans plusieurs
                  systèmes d'écriture, cet objet inclut également les versions
                  de ces champs dans les autres systèmes d'écriture. Le
                  paramètre de workflow `preferred_characters` (`latin` ou
                  `non_latin`) détermine quel système d'écriture renseigne les
                  champs de premier niveau (`first_name`, `last_name`,
                  `full_name`, `address`, `place_of_birth`) ; le système
                  d'écriture opposé apparaît ici sous la forme
                  `first_name_non_latin` / `last_name_non_latin` /
                  `full_name_non_latin` / `middle_name_non_latin` /
                  `address_non_latin` / `place_of_birth_non_latin` (lorsque
                  `preferred_characters` est `latin`) ou avec un suffixe
                  `_latin` (lorsque `preferred_characters` est `non_latin`). Les
                  clés n'apparaissent que lorsque l'OCR extrait réellement une
                  valeur dans un autre système d'écriture — un champ dont la
                  valeur alternative utilise le même système d'écriture que le
                  jeu préféré (par exemple, un champ étiqueté en cyrillique dont
                  la valeur OCR a renvoyé des homoglyphes latins) est ignoré.
                  Lorsque `preferred_characters` est `latin` mais que le
                  document ne comporte que du texte non latin, Didit
                  translittère les valeurs extraites et expose
                  `first_name_latin` / `last_name_latin` / etc. en guise de
                  solution de repli.
                additionalProperties: true
                properties:
                  dl_categories:
                    type: array
                    items:
                      type: string
                  blood_group:
                    type: string
                    nullable: true
                  first_name_non_latin:
                    type: string
                    description: >-
                      Prénom dans le système d'écriture non latin lorsque
                      `preferred_characters=latin` et qu'une version non latine
                      est présente sur le document (par exemple `Айна` pour une
                      pièce d'identité kirghize).
                  last_name_non_latin:
                    type: string
                    description: >-
                      Nom de famille dans le système d'écriture non latin
                      lorsque `preferred_characters=latin` et qu'une version non
                      latine est présente sur le document.
                  middle_name_non_latin:
                    type: string
                    description: >-
                      Deuxième prénom / patronyme dans le système d'écriture non
                      latin lorsque `preferred_characters=latin` et qu'une
                      version non latine est présente sur le document.
                  full_name_non_latin:
                    type: string
                    description: >-
                      Nom complet composé dans le système d'écriture non latin.
                      Reconstruit à partir des composants individuels lorsque le
                      prénom et le nom de famille sont tous deux disponibles.
                  address_non_latin:
                    type: string
                    description: >-
                      Adresse dans le système d'écriture non latin lorsque
                      `preferred_characters=latin` et qu'une version non latine
                      est présente sur le document.
                  place_of_birth_non_latin:
                    type: string
                    description: >-
                      Lieu de naissance dans le système d'écriture non latin
                      lorsque `preferred_characters=latin` et qu'une version non
                      latine figure sur le document.
                  first_name_latin:
                    type: string
                    description: >-
                      Prénom en alphabet latin. Renseigné lorsque
                      `preferred_characters=non_latin` et qu'une version latine
                      figure sur le document, ou — en tant qu'alternative de
                      translittération — lorsque `preferred_characters=latin`
                      mais que le document ne comporte que du texte non latin.
                  last_name_latin:
                    type: string
                    description: >-
                      Nom de famille en système d'écriture latin. Mêmes règles
                      que pour `first_name_latin`.
                  middle_name_latin:
                    type: string
                    description: >-
                      Deuxième prénom / patronyme en système d'écriture latin.
                      Mêmes règles que `first_name_latin`.
                  full_name_latin:
                    type: string
                    description: >-
                      Nom complet composé en système d'écriture latin. Toujours
                      reconstruit à partir des composants individuels lorsque le
                      prénom et le nom de famille sont tous deux disponibles.
                  address_latin:
                    type: string
                    description: >-
                      Adresse dans le système d'écriture latin. Mêmes règles que
                      pour `first_name_latin`.
                  place_of_birth_latin:
                    type: string
                    description: >-
                      Lieu de naissance en alphabet latin. Mêmes règles que
                      `first_name_latin`.
              mrz:
                type: object
                nullable: true
                description: >-
                  Champs de la zone de lecture optique (MRZ) extraits du
                  document. `null` si aucune MRZ n'a été détectée.
                properties:
                  surname:
                    type: string
                    example: MARTINEZ<SANCHEZ
                  name:
                    type: string
                    example: ELENA
                  country:
                    type: string
                    example: ESP
                  nationality:
                    type: string
                    example: ESP
                  birth_date:
                    type: string
                    example: '850315'
                  expiry_date:
                    type: string
                    example: '220821'
                  sex:
                    type: string
                    example: F
                  document_type:
                    type: string
                    example: ID
                  document_number:
                    type: string
                    example: YZA123456
                  optional_data:
                    type: string
                    example: X9876543L
                  optional_data_2:
                    type: string
                    example: ''
                  birth_date_hash:
                    type: string
                    example: '7'
                  expiry_date_hash:
                    type: string
                    example: '4'
                  document_number_hash:
                    type: string
                    example: '9'
                  final_hash:
                    type: string
                    example: '2'
                  personal_number:
                    type: string
                    example: X9876543L
                  warnings:
                    type: array
                    items:
                      type: string
                  errors:
                    type: array
                    items:
                      type: string
                  mrz_type:
                    type: string
                    example: TD1
                  mrz_string:
                    type: string
                    example: |-
                      IDESPMARTINEZ<SANCHEZ<<<<<<<<<<
                      YZA123456<9ESP8503157F3208214<X9876543L<<<<<<<2
                      MARTINEZ<SANCHEZ<<ELENA<<<<<<<<<<
                  mrz_key:
                    type: string
                    example: YZA123456985031573208214
              parsed_address:
                type: object
                description: Détails de l'adresse structurée
                properties:
                  city:
                    type: string
                  label:
                    type: string
                  region:
                    type: string
                  country:
                    type: string
                    description: Code pays à deux lettres
                  category:
                    type: string
                    description: >-
                      Catégorie d'adresse (par exemple, résidentielle,
                      commerciale)
                  street_1:
                    type: string
                  street_2:
                    type: string
                    nullable: true
                  is_verified:
                    type: boolean
                    description: Indique si l'adresse a été vérifiée
                  postal_code:
                    type: string
                  raw_results:
                    type: object
                    properties:
                      types:
                        type: array
                        items:
                          type: string
                      geometry:
                        type: object
                        properties:
                          location:
                            type: object
                            properties:
                              lat:
                                type: number
                              lng:
                                type: number
                          viewport:
                            type: object
                            properties:
                              northeast:
                                type: object
                                properties:
                                  lat:
                                    type: number
                                  lng:
                                    type: number
                              southwest:
                                type: object
                                properties:
                                  lat:
                                    type: number
                                  lng:
                                    type: number
                          location_type:
                            type: string
                      place_id:
                        type: string
                      formatted_address:
                        type: string
                      navigation_points:
                        type: array
                        items:
                          type: object
                          properties:
                            location:
                              type: object
                              properties:
                                latitude:
                                  type: number
                                longitude:
                                  type: number
                      address_components:
                        type: array
                        items:
                          type: object
                          properties:
                            types:
                              type: array
                              items:
                                type: string
                            long_name:
                              type: string
                            short_name:
                              type: string
                  address_type:
                    type: string
                  document_location:
                    type: object
                    properties:
                      latitude:
                        type: number
                      longitude:
                        type: number
                  formatted_address:
                    type: string
              extra_files:
                type: array
                items:
                  type: string
                  format: uri
                description: Fichiers supplémentaires de vérification des documents
              front_image_camera_front_face_match_score:
                type: number
                nullable: true
                description: >-
                  Score de correspondance faciale entre le portrait extrait de
                  l'image du recto du document et l'image de la caméra frontale
              back_image_camera_front_face_match_score:
                type: number
                nullable: true
                description: >-
                  Score de correspondance faciale entre le portrait extrait de
                  l'image du verso du document et l'image de la caméra frontale
              document_selfie_face_matches:
                type: array
                description: >-
                  Sessions précédentes ou entrées de liste de blocage de visages
                  dont le visage correspondait au selfie pris par la caméra
                  avant lors de la capture du document (Silent Capture Face
                  Search). Même format d'entrée que `liveness_checks[].matches`.
                  `null` pour les sessions créées avant l'existence de ce champ
                  ou lorsque la recherche n'a pas été exécutée ; un tableau vide
                  lorsqu'elle a été exécutée et n'a rien trouvé.
                  `match_image_url` est une URL pré-signée qui expire.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID de session du visage correspondant. `null` lorsque
                        `source` vaut `imported`, `list_entry` ou
                        `retained_template`.
                    session_number:
                      type: integer
                      nullable: true
                    similarity_percentage:
                      type: number
                      description: >-
                        Similarité faciale entre les deux images, bornée entre 0
                        et 100.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` de la session correspondante ou de
                        l'utilisateur lié pour les visages importés et les
                        gabarits conservés.
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        Identifiant de l'utilisateur associé pour les
                        correspondances de type `imported` et
                        `retained_template`, et pour les correspondances de
                        session associées à un utilisateur. `null` pour les
                        entrées de liste et les sessions sans utilisateur.
                    biometric_template_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        Identifiant du gabarit biométrique conservé. Renseigné
                        uniquement lorsque `source` vaut `retained_template` ;
                        `null` sinon.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        Moment où le visage correspondant a été capturé, ou
                        lorsqu'un gabarit conservé a été créé. `null` pour les
                        entrées de liste.
                    user_details:
                      type: object
                      nullable: true
                      description: >-
                        Données d'identité provenant de la session
                        correspondante ou du profil utilisateur importé.
                        Toujours `null` pour les correspondances
                        `retained_template` et `list_entry`.
                      properties:
                        full_name:
                          type: string
                          nullable: true
                        document_type:
                          type: string
                          nullable: true
                        document_number:
                          type: string
                          nullable: true
                    match_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Image de référence pour les correspondances basées sur
                        une image. Toujours `null` pour les correspondances
                        `retained_template`, car les gabarits conservés ne
                        contiennent aucune image.
                    status:
                      type: string
                      nullable: true
                      description: >-
                        Statut de cycle de vie de la session correspondante.
                        `null` pour les sources qui ne sont pas des sessions.
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indique si le visage correspondant figure sur une liste
                        de blocage.
                    is_allowlisted:
                      type: boolean
                      description: >-
                        Indique si le visage correspondant figure sur une liste
                        d'autorisation.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        Service d'API autonome de la session correspondante (par
                        exemple `PASSIVE_LIVENESS`, `FACE_MATCH`) ; `null` pour
                        les sessions de workflow et les sources extérieures aux
                        sessions.
                    source:
                      type: string
                      enum:
                        - session
                        - imported
                        - list_entry
                        - retained_template
                      description: >-
                        Origine du visage correspondant : `session`, `imported`
                        (téléversement de visage d'un utilisateur), `list_entry`
                        (liste d'autorisation/blocage) ou `retained_template`
                        (un gabarit biométrique sans image stocké sur un
                        utilisateur, répertorié sous
                        `/v3/biometric-templates/`).
                nullable: true
              front_image_quality_score:
                type: object
                nullable: true
                description: >-
                  Métriques de qualité pour l'image du recto du document. Chaque
                  sous-score est compris entre 0 et 100.
                properties:
                  focus_score:
                    type: number
                    description: >-
                      Netteté de l'image mesurée via la variance laplacienne
                      locale des 10 % supérieurs. Robuste face aux documents
                      présentant de vastes arrière-plans uniformes. Des valeurs
                      plus élevées indiquent une image plus nette et moins
                      floue.
                  brightness_score:
                    type: number
                    description: >-
                      Qualité de l'éclairage de l'image. Pénalise les images
                      trop sombres ou surexposées, la luminosité idéale se
                      situant en milieu de plage.
                  brightness_issue:
                    type: string
                    enum:
                      - ok
                      - too_dark
                      - too_bright
                    description: >-
                      Indique le sens du problème de luminosité lorsque le
                      brightness_score est bas. 'ok' signifie que la luminosité
                      est acceptable, 'too_dark' signifie que l'image est
                      sous-exposée, 'too_bright' signifie que l'image est
                      surexposée.
                  is_document_fully_visible:
                    type: boolean
                    nullable: true
                    description: >-
                      true si les quatre coins du document sont entièrement
                      visibles dans le cadre de l'image, false si un coin est
                      coupé. Null lorsque les coordonnées des coins sont
                      indisponibles.
                  resolution_score:
                    type: number
                    description: >-
                      Résolution effective de l'image basée sur le nombre total
                      de pixels.
                  overall_score:
                    type: number
                    description: >-
                      Score composite pondéré des sous-scores (mise au point
                      45%, luminosité 30%, résolution 25%).
              back_image_quality_score:
                type: object
                nullable: true
                description: >-
                  Métriques de qualité pour l'image du verso du document. Même
                  structure que front_image_quality_score.
                properties:
                  focus_score:
                    type: number
                    description: >-
                      Netteté de l'image mesurée via la variance laplacienne
                      locale des 10 % supérieurs. Robuste face aux documents
                      présentant de vastes arrière-plans uniformes. Des valeurs
                      plus élevées indiquent une image plus nette et moins
                      floue.
                  brightness_score:
                    type: number
                    description: >-
                      Qualité de l'éclairage de l'image. Pénalise les images
                      trop sombres ou surexposées, la luminosité idéale se
                      situant en milieu de plage.
                  brightness_issue:
                    type: string
                    enum:
                      - ok
                      - too_dark
                      - too_bright
                    description: >-
                      Indique le sens du problème de luminosité lorsque le
                      brightness_score est bas. 'ok' signifie que la luminosité
                      est acceptable, 'too_dark' signifie que l'image est
                      sous-exposée, 'too_bright' signifie que l'image est
                      surexposée.
                  is_document_fully_visible:
                    type: boolean
                    nullable: true
                    description: >-
                      true si les quatre coins du document sont entièrement
                      visibles dans le cadre de l'image, false si un coin est
                      coupé. Null lorsque les coordonnées des coins sont
                      indisponibles.
                  resolution_score:
                    type: number
                    description: >-
                      Résolution effective de l'image basée sur le nombre total
                      de pixels.
                  overall_score:
                    type: number
                    description: >-
                      Score composite pondéré des sous-scores (mise au point
                      45%, luminosité 30%, résolution 25%).
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement (par
                        ex., `ID_VERIFICATION`, `NFC`, `LIVENESS`). La valeur
                        identifie le bloc de fonctionnalités auquel appartient
                        l'avertissement. Le tableau d'avertissements de chaque
                        module utilise généralement la valeur correspondant à
                        son module, mais l'énumération ci-dessus fait foi pour
                        tous les avertissements de fonctionnalités sur le
                        payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                      description: >-
                        Données contextuelles supplémentaires sur
                        l'avertissement
                    log_type:
                      type: string
                      description: 'Type de journal : information, avertissement ou erreur'
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement (pour les workflows basés sur un
                        graphe)
                description: Avertissements liés à la vérification des documents
              matches:
                type: array
                description: >-
                  Documents correspondants trouvés lors de la détection de
                  doublons/liste de blocage (jusqu'à 5 correspondances)
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      description: ID de session du document correspondant
                    session_number:
                      type: integer
                      description: Numéro de session du document correspondant
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        Données fournisseur associées à la session
                        correspondante
                    verification_date:
                      type: string
                      format: date-time
                      description: Date à laquelle la session correspondante a été vérifiée
                    user_details:
                      type: object
                      properties:
                        name:
                          type: string
                          description: Nom complet extrait du document correspondant
                        document_type:
                          type: string
                          description: Type du document correspondant
                        document_number:
                          type: string
                          description: Numéro de document du document correspondant
                    status:
                      type: string
                      description: Statut de la session correspondante
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indique si le document correspondant figure sur une
                        liste de blocage
                    api_service:
                      type: string
                      nullable: true
                      description: Type de service d'API de la session correspondante
                    front_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: URL de l'image du recto du document correspondant
              document_liveness:
                type: object
                nullable: true
                description: >-
                  Scores de détection du vivant du document par type de fraude,
                  signalés, qu'un avertissement se soit déclenché ou non, afin
                  qu'un document approuvé puisse toujours faire l'objet d'un
                  audit. `null` lorsque la vérification n'a pas été exécutée.
                properties:
                  portrait_replace:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Probabilité que le document soit authentique pour ce
                          type de fraude, 0-100 (plus le score est élevé, plus
                          le document est probablement authentique). La valeur
                          la plus basse des deux faces : celle utilisée pour la
                          décision. `null` lorsqu'aucune des faces n'a produit
                          de score utilisable.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          Score pour le recto ; `null` s'il n'a pas été capturé
                          ou si le score a été supprimé.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          Score pour le verso ; `null` s'il n'a pas été capturé
                          ou si le score a été supprimé.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          Le seuil de refus enregistré lors de l'évaluation de
                          ce document. Les modifications ultérieures du workflow
                          ne le changent pas. Null lorsqu'aucun élément probant
                          de l'évaluation historique n'est disponible.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          Le seuil d'examen enregistré lors de l'évaluation de
                          ce document. Les modifications ultérieures du workflow
                          ne le changent pas. Null lorsque les preuves
                          d'évaluation historiques ne sont pas disponibles.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          La catégorie de type de fraude enregistrée au moment
                          de l'évaluation. Null lorsqu'il n'y a aucun score
                          utilisable, que la vérification n'a pas été appliquée
                          ou que les éléments de preuve d'évaluation historiques
                          sont indisponibles. Les modifications ultérieures du
                          workflow ne la changent pas.
                  printed_copy:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Probabilité que le document soit authentique pour ce
                          type de fraude, 0-100 (plus le score est élevé, plus
                          le document est probablement authentique). La valeur
                          la plus basse des deux faces : celle utilisée pour la
                          décision. `null` lorsqu'aucune des faces n'a produit
                          de score utilisable.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          Score pour le recto ; `null` s'il n'a pas été capturé
                          ou si le score a été supprimé.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          Score pour le verso ; `null` s'il n'a pas été capturé
                          ou si le score a été supprimé.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          Le seuil de refus enregistré lors de l'évaluation de
                          ce document. Les modifications ultérieures du workflow
                          ne le changent pas. Null lorsqu'aucun élément probant
                          de l'évaluation historique n'est disponible.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          Le seuil d'examen enregistré lors de l'évaluation de
                          ce document. Les modifications ultérieures du workflow
                          ne le changent pas. Null lorsque les preuves
                          d'évaluation historiques ne sont pas disponibles.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          La catégorie de type de fraude enregistrée au moment
                          de l'évaluation. Null lorsqu'il n'y a aucun score
                          utilisable, que la vérification n'a pas été appliquée
                          ou que les éléments de preuve d'évaluation historiques
                          sont indisponibles. Les modifications ultérieures du
                          workflow ne la changent pas.
                  screen_replay:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Probabilité que le document soit authentique pour ce
                          type de fraude, 0-100 (plus le score est élevé, plus
                          le document est probablement authentique). La valeur
                          la plus basse des deux faces : celle utilisée pour la
                          décision. `null` lorsqu'aucune des faces n'a produit
                          de score utilisable.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          Score pour le recto ; `null` s'il n'a pas été capturé
                          ou si le score a été supprimé.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          Score pour le verso ; `null` s'il n'a pas été capturé
                          ou si le score a été supprimé.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          Le seuil de refus enregistré lors de l'évaluation de
                          ce document. Les modifications ultérieures du workflow
                          ne le changent pas. Null lorsqu'aucun élément probant
                          de l'évaluation historique n'est disponible.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          Le seuil d'examen enregistré lors de l'évaluation de
                          ce document. Les modifications ultérieures du workflow
                          ne le changent pas. Null lorsque les preuves
                          d'évaluation historiques ne sont pas disponibles.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          La catégorie de type de fraude enregistrée au moment
                          de l'évaluation. Null lorsqu'il n'y a aucun score
                          utilisable, que la vérification n'a pas été appliquée
                          ou que les éléments de preuve d'évaluation historiques
                          sont indisponibles. Les modifications ultérieures du
                          workflow ne la changent pas.
              address_validation:
                allOf:
                  - $ref: '#/components/schemas/AddressValidationResult'
                nullable: true
                description: >-
                  Validation de l'adresse imprimée sur ce document : indique si
                  elle existe et sa forme normalisée, telle que lue sur le
                  document (une correction ultérieure de `address` ne relance
                  pas la validation). Présent lorsque cette étape de
                  vérification d'identité a activé le module complémentaire
                  Validation d'adresse ; `null` dans le cas contraire.
              region:
                type: string
                nullable: true
                description: >-
                  Région ou État du pays de délivrance du document, lorsque le
                  document en mentionne un.
              extracted_data:
                type: object
                nullable: true
                additionalProperties: true
                description: >-
                  Instantané des données extraites du document qui ont été
                  présentées à la personne pour vérification, conservées aux
                  côtés des valeurs confirmées afin que vous puissiez comparer
                  ce qui a été lu avec ce que la personne a confirmé. `null`
                  lorsque la personne n'a pas été invitée à vérifier.
              barcodes:
                type: array
                items:
                  type: object
                  additionalProperties: true
                description: >-
                  Données lues à partir des codes-barres du document. Vide
                  lorsque le document n'en comporte aucun ou qu'aucun n'a pu
                  être lu.
        nfc_skip_reason:
          type: string
          nullable: true
          enum:
            - USER_SKIPPED
            - DOCUMENT_WITHOUT_CHIP
            - CHIP_CERTIFICATE_UNAVAILABLE
            - DEVICE_WITHOUT_NFC
            - INTEGRATION_WITHOUT_NFC_ACCESS
            - MRZ_KEY_UNAVAILABLE
            - JPKI_UNAVAILABLE
          description: "Raison pour laquelle la vérification de la puce NFC n'a pas été exécutée, renseignée chaque fois que le workflow comprend une étape NFC. `null` tant que le NFC est en attente ou lorsque la puce a effectivement été lue. Valeurs\_: `USER_SKIPPED` - l'utilisateur a choisi d'ignorer l'étape sur un appareil compatible NFC (autorisé par `allow_nfc_skip`)\_; `DOCUMENT_WITHOUT_CHIP` - le document ne possède pas de puce NFC lisible (il ne s'agit pas d'un document électronique ICAO 9303)\_; `CHIP_CERTIFICATE_UNAVAILABLE` - le certificat de signature du pays de délivrance (CSCA) couvrant la période d'émission du document n'est pas disponible, la signature de la puce ne peut donc pas être vérifiée\_; `DEVICE_WITHOUT_NFC` - l'appareil a signalé l'absence de lecteur NFC\_; `INTEGRATION_WITHOUT_NFC_ACCESS` - la vérification s'est exécutée sans SDK natif (par exemple dans un navigateur web), qui n'a pas accès au lecteur NFC du téléphone\_; `MRZ_KEY_UNAVAILABLE` - la clé d'accès à la puce n'a pas pu être dérivée de la MRZ du document\_; `JPKI_UNAVAILABLE` - le document est une carte My Number japonaise, dont la puce est lue via JPKI, et JPKI n'était pas disponible pour cette vérification\_: il n'est pas activé, ou le SDK natif de l'application ne peut pas lire les cartes My Number."
        nfc_verifications:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports NFC / passeport électronique** produits par
            les étapes NFC dans le graphe du workflow. **Il s'agit toujours d'un
            tableau JSON, jamais d'un objet `nfc` singulier** — lisez
            `nfc_verifications[0]` et itérez si votre workflow peut effectuer
            une vérification NFC plus d'une fois. `null` jusqu'à ce qu'au moins
            une étape NFC ait produit des données. Chaque élément est le rapport
            complet, comprenant `node_id`, le `status` au niveau de la
            fonctionnalité, `chip_protocol`, `chip_data`, `authenticity`
            (intégrité SOD + DG), `certificate_summary` et `warnings[]`. Une
            carte My Number japonaise est lue via JPKI au lieu de l'OACI 9303 :
            son élément a `chip_protocol: "jpki"`, contient ses preuves sous
            `jpki`, et laisse les champs OACI à `null`. Lorsque l'étape NFC a
            été ignorée avant même d'avoir pu être proposée (document sans puce,
            certificat manquant, aucune capacité NFC signalée, clé MRZ
            illisible, JPKI indisponible pour une carte My Number), cela reste
            `null` et `nfc_skip_reason` en explique la raison ; un contournement
            au niveau de l'étape elle-même (l'utilisateur a appuyé sur ignorer,
            ou le lecteur s'est révélé indisponible au moment de la lecture)
            produit tout de même un rapport avec `is_nfc_skipped: true`.
          items:
            type: object
            description: >-
              Un rapport NFC : le rapport complet pour une seule lecture de puce
              (une puce de passeport électronique ou d'eID OACI 9303, ou une My
              Number Card japonaise lue via JPKI).
            properties:
              node_id:
                type: string
                description: >-
                  ID de nœud du graphe de workflow de l'étape NFC ayant produit
                  ce rapport. Utilisez-le pour corréler le rapport avec la
                  définition du workflow.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  Statut au niveau de la fonctionnalité de cette étape NFC.
                  Indépendant du `status` de la session de niveau supérieur —
                  une session peut atteindre sa décision globale tandis qu'une
                  fonctionnalité individuelle reste `In Review`.
              is_nfc_skipped:
                type: boolean
                description: >-
                  `true` lorsque cette étape NFC a été explicitement ignorée au
                  lieu d'être lue ; `skip_reason` en indique la raison.
              skip_reason:
                type: string
                nullable: true
                enum:
                  - USER_SKIPPED
                  - DOCUMENT_WITHOUT_CHIP
                  - CHIP_CERTIFICATE_UNAVAILABLE
                  - DEVICE_WITHOUT_NFC
                  - INTEGRATION_WITHOUT_NFC_ACCESS
                  - MRZ_KEY_UNAVAILABLE
                  - JPKI_UNAVAILABLE
                description: >-
                  Raison pour laquelle cette étape NFC a été ignorée. Défini
                  uniquement lorsque `is_nfc_skipped` est `true`. Même taxonomie
                  que le `nfc_skip_reason` au niveau de la session, qui couvre
                  en plus les cas où le NFC n'a généré aucun rapport.
              chip_protocol:
                type: string
                enum:
                  - icao
                  - jpki
                description: >-
                  Manière dont l'étape NFC lit la puce. `icao` : puce de
                  passeport électronique ou de carte d'identité électronique
                  ICAO 9303, ouverte avec la clé d'accès issue de la MRZ. `jpki`
                  : Japan My Number Card, où la carte signe un défi à usage
                  unique après la saisie par le titulaire du code PIN de sa
                  carte dans un SDK natif ; le résultat se trouve sous `jpki`.
                  Également défini pour les étapes ignorées, afin de pouvoir
                  distinguer une lecture de My Number Card ignorée.
              jpki:
                type: object
                nullable: true
                description: >-
                  Ce qu'une lecture de carte My Number japonaise via JPKI a
                  prouvé. Présent lorsque `chip_protocol` vaut `jpki` et que la
                  carte a été lue. `null` pour les puces ICAO, pour les étapes
                  ignorées, et lorsque l'étape NFC s'est terminée sans qu'aucune
                  carte ne soit lue (ce cas génère `JPKI_SIGNATURE_INVALID`). Ne
                  contient jamais les certificats, leurs numéros de série, les
                  signatures ou le numéro My Number à 12 chiffres.
                properties:
                  certificate_types:
                    type: array
                    items:
                      type: string
                      enum:
                        - user_authentication
                        - signature
                    description: >-
                      Les certificats de carte lus. `user_authentication` (code
                      PIN à 4 chiffres) est toujours lu ; `signature` (code PIN
                      de signature) est lu lorsque le paramètre
                      `jpki_request_attributes` du nœud NFC est activé.
                  chain_valid:
                    type: boolean
                    description: >-
                      `true` lorsque chaque certificat lu remonte jusqu'à
                      l'autorité de certification JPKI, se situe dans sa période
                      de validité et est un certificat My Number Card de son
                      type respectif.
                  signature_valid:
                    type: boolean
                    description: >-
                      `true` lorsque chaque signature effectuée par la carte sur
                      le challenge à usage unique est vérifiée. La carte ne
                      signe qu'après la saisie de son code PIN, ce qui prouve la
                      possession de la carte et la connaissance du code PIN.
                  revocation_status:
                    type: string
                    enum:
                      - good
                      - revoked
                      - unchecked
                    description: >-
                      `good` lorsque la vérification de révocation a confirmé
                      que chaque certificat est valide, `revoked` lorsqu'au
                      moins un certificat est révoqué (par exemple une carte
                      signalée perdue), `unchecked` lorsqu'aucune réponse de
                      révocation n'était disponible. `unchecked` n'est jamais
                      traité comme `good` : le paramètre
                      `jpki_revocation_unchecked_action` du nœud NFC détermine
                      le résultat (`REVIEW` par défaut).
                  ca_generation:
                    type: string
                    nullable: true
                    description: >-
                      Génération de l'autorité de certification JPKI ayant émis
                      les certificats, par exemple `2023`. `null` si aucun
                      certificat ne remonte à l'une d'elles.
                  certificate_expires_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      La date d'expiration la plus proche parmi les certificats
                      lus.
                  certificates:
                    type: array
                    items:
                      type: object
                      description: >-
                        Ce qu'un certificat lu sur la carte a prouvé. Jamais le
                        certificat lui-même ni son numéro de série.
                      properties:
                        type:
                          type: string
                          enum:
                            - user_authentication
                            - signature
                          description: Quel certificat de carte cette entrée décrit.
                        chain_valid:
                          type: boolean
                          description: >-
                            `true` lorsque le certificat remonte jusqu'à
                            l'autorité de certification JPKI de son type, se
                            situe dans sa période de validité et est un
                            certificat My Number Card de ce type.
                        signature_valid:
                          type: boolean
                          description: >-
                            `true` lorsque la signature de la carte sur le
                            challenge à usage unique est vérifiée par rapport à
                            ce certificat.
                        ca_generation:
                          type: string
                          nullable: true
                          description: >-
                            Génération de l'autorité de certification JPKI ayant
                            émis le certificat, par exemple `2023`. `null` si
                            aucun émetteur de confiance n'a été trouvé.
                        not_valid_before:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Début de la période de validité du certificat.
                            `null` lorsque le certificat n'a pas pu être lu.
                        not_valid_after:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Fin de la période de validité du certificat. `null`
                            lorsque le certificat n'a pas pu être lu.
                        failure:
                          type: string
                          nullable: true
                          enum:
                            - unreadable_certificate
                            - untrusted_issuer
                            - expired
                            - not_yet_valid
                            - wrong_policy
                            - key_usage
                            - null
                          description: "Raison pour laquelle `chain_valid` est `false`\_: `unreadable_certificate`, `untrusted_issuer` (non émis par l'autorité de certification JPKI de ce type), `expired`, `not_yet_valid`, `wrong_policy` (il ne s'agit pas d'un certificat de carte My Number de ce type) ou `key_usage` (la clé ne peut pas signer). `null` lorsque la chaîne est valide."
                    description: Résultats par certificat, une entrée par certificat lu.
                  attributes:
                    type: object
                    nullable: true
                    description: >-
                      Les données du titulaire issues du certificat de
                      signature, une fois sa chaîne valide. `null` lorsque le
                      certificat de signature n'a pas été demandé ou ne s'est
                      pas rattaché à l'autorité de certification JPKI.
                    properties:
                      full_name:
                        type: string
                        nullable: true
                        description: >-
                          Nom tel qu'enregistré, généralement en système
                          d'écriture japonais.
                      date_of_birth:
                        type: string
                        format: date
                        nullable: true
                        description: >-
                          Date de naissance, `YYYY-MM-DD`. `null` lorsque la
                          date enregistrée est incomplète.
                      gender:
                        type: string
                        nullable: true
                        enum:
                          - M
                          - F
                          - null
                        description: '`M`, `F` ou `null` lorsqu''il n''est pas enregistré.'
                      address:
                        type: string
                        nullable: true
                        description: Adresse enregistrée.
                      name_substitute_characters:
                        type: string
                        nullable: true
                        description: >-
                          Chaîne de positions indiquant les caractères de
                          `full_name` qui ont été remplacés par un substitut
                          parce que le caractère d'origine ne fait pas partie du
                          jeu de caractères standard. `null` si aucun n'a été
                          remplacé.
                      address_substitute_characters:
                        type: string
                        nullable: true
                        description: >-
                          Chaîne de positions indiquant les caractères de
                          substitution dans `address`, comme pour
                          `name_substitute_characters`.
                  attributes_match_ocr:
                    type: boolean
                    nullable: true
                    description: >-
                      `true` lorsque les attributs correspondent aux données
                      lues à partir de la photo de la même carte, `false`
                      lorsqu'un attribut diffère (`JPKI_AND_OCR_DATA_NOT_SAME`),
                      `null` lorsque rien n'a pu être comparé, y compris dès
                      lors que `attributes` est `null`.
                  mismatched_attributes:
                    type: array
                    items:
                      type: string
                      enum:
                        - full_name
                        - date_of_birth
                        - gender
                        - address
                    description: >-
                      Noms des attributs qui diffèrent des données de la photo,
                      jamais leurs valeurs. Vide lorsque tout ce qui est comparé
                      correspond.
              portrait_image:
                type: string
                format: uri
                nullable: true
                description: >-
                  URL pré-signée vers le portrait lu depuis la puce (ICAO DG2).
                  `null` pour une lecture JPKI (`chip_protocol: "jpki"`) et pour
                  les étapes ignorées.
              signature_image:
                type: string
                format: uri
                nullable: true
                description: >-
                  URL pré-signée vers l'image de la signature du titulaire lue
                  depuis la puce (ICAO DG7), lorsque la puce en contient une.
                  `null` pour une lecture JPKI (`chip_protocol: "jpki"`) et pour
                  les étapes ignorées.
              chip_data:
                type: object
                nullable: true
                description: >-
                  Données personnelles analysées à partir des Data Groups de la
                  puce OACI. `null` pour une lecture JPKI (`chip_protocol:
                  "jpki"`) et pour les étapes ignorées.
                properties:
                  document_type:
                    type: string
                  issuing_country:
                    type: string
                  document_number:
                    type: string
                  expiration_date:
                    type: string
                    format: date
                  first_name:
                    type: string
                  last_name:
                    type: string
                  birth_date:
                    type: string
                    format: date
                  gender:
                    type: string
                  nationality:
                    type: string
                  address:
                    type: string
                  place_of_birth:
                    type: string
              authenticity:
                type: object
                nullable: true
                description: >-
                  Authentification passive OACI : signature SOD
                  (`sod_integrity`) et hachages Data Group (`dg_integrity`).
                  `null` pour une lecture JPKI, qui renvoie sa preuve sous
                  `jpki`.
                properties:
                  sod_integrity:
                    type: boolean
                  dg_integrity:
                    type: boolean
              certificate_summary:
                type: object
                nullable: true
                description: >-
                  Résumé du certificat du signataire de document (Document
                  Signer Certificate) OACI. `null` pour une lecture JPKI
                  (`chip_protocol: "jpki"`) et pour les étapes ignorées.
                properties:
                  issuer:
                    type: string
                  subject:
                    type: string
                  serial_number:
                    type: string
                  not_valid_after:
                    type: string
                    format: date-time
                  not_valid_before:
                    type: string
                    format: date-time
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
        liveness_checks:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de détection du vivant** produits par les
            étapes de détection du vivant dans le graphe du workflow. Toujours
            un tableau JSON — jamais un objet `liveness` singulier. `null`
            jusqu'à ce qu'au moins une étape de détection du vivant ait produit
            des données. Chaque élément est le rapport complet, comprenant
            `node_id`, le `status` au niveau de la fonctionnalité, `method`,
            `score`, `reference_image`, `video_url`, l'`age_estimation`
            facultative, les `matches[]` entre sessions et `warnings[]`.
          items:
            type: object
            description: >-
              Un rapport de détection du vivant — le rapport complet pour un
              seul passage de détection du vivant.
            properties:
              node_id:
                type: string
                description: >-
                  ID de nœud du graphe de workflow de l'étape de détection du
                  vivant ayant produit ce rapport.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  Statut au niveau de la fonctionnalité de cette étape de
                  détection du vivant. Indépendant du `status` de la session de
                  niveau supérieur — une session peut atteindre sa décision
                  globale tandis qu'une fonctionnalité individuelle reste `In
                  Review`.
              method:
                type: string
                description: Méthode utilisée pour la détection du vivant
              score:
                type: number
                description: Score de confiance du contrôle de détection du vivant
              reference_image:
                type: string
                format: uri
                description: URL de l'image de référence utilisée
              video_url:
                type: string
                format: uri
                description: URL de la vidéo de détection du vivant
              age_estimation:
                type: number
                description: Âge estimé de la personne
              matches:
                type: array
                description: "Visages similaires trouvés par la recherche de visages en doublon (meilleures correspondances, entrées sur liste de blocage/liste autorisée en premier). La propriété `source` de chaque entrée indique la provenance du visage correspondant\_: `session` (une autre session de vérification), `imported` (un visage téléversé pour un utilisateur du fournisseur), `list_entry` (un visage issu d'une liste de blocage/liste autorisée gérée par l'organisation) ou `retained_template` (un gabarit biométrique sans image stocké sur un utilisateur, listé sous `/v3/biometric-templates/`). `session_id`, `session_number`, `status` et `api_service` sont `null` pour les sources autres que les sessions. Les correspondances `imported` renseignent tout de même `vendor_data`, `verification_date` et — si l'utilisateur du fournisseur a un nom enregistré — `user_details` (avec `full_name` uniquement) à partir de la fiche de l'utilisateur du fournisseur\_; les correspondances `retained_template` renseignent `vendor_user_id`, `vendor_data`, `biometric_template_id` et `verification_date`, tandis que leurs champs d'image et d'identité sont `null`\_; les correspondances `list_entry` renvoient tous ces champs à `null`."
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        ID de session du visage correspondant. `null` lorsque
                        `source` vaut `imported`, `list_entry` ou
                        `retained_template`.
                    session_number:
                      type: integer
                      nullable: true
                    similarity_percentage:
                      type: number
                      description: >-
                        Similarité faciale entre les deux images, bornée entre 0
                        et 100.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` de la session correspondante ou de
                        l'utilisateur lié pour les visages importés et les
                        gabarits conservés.
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        Identifiant de l'utilisateur associé pour les
                        correspondances de type `imported` et
                        `retained_template`, et pour les correspondances de
                        session associées à un utilisateur. `null` pour les
                        entrées de liste et les sessions sans utilisateur.
                    biometric_template_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        Identifiant du gabarit biométrique conservé. Renseigné
                        uniquement lorsque `source` vaut `retained_template` ;
                        `null` sinon.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        Moment où le visage correspondant a été capturé, ou
                        lorsqu'un gabarit conservé a été créé. `null` pour les
                        entrées de liste.
                    user_details:
                      type: object
                      nullable: true
                      description: >-
                        Données d'identité provenant de la session
                        correspondante ou du profil utilisateur importé.
                        Toujours `null` pour les correspondances
                        `retained_template` et `list_entry`.
                      properties:
                        full_name:
                          type: string
                          nullable: true
                        document_type:
                          type: string
                          nullable: true
                        document_number:
                          type: string
                          nullable: true
                    match_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Image de référence pour les correspondances basées sur
                        une image. Toujours `null` pour les correspondances
                        `retained_template`, car les gabarits conservés ne
                        contiennent aucune image.
                    status:
                      type: string
                      nullable: true
                      description: >-
                        Statut de cycle de vie de la session correspondante.
                        `null` pour les sources qui ne sont pas des sessions.
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indique si le visage correspondant figure sur une liste
                        de blocage.
                    is_allowlisted:
                      type: boolean
                      description: >-
                        Indique si le visage correspondant figure sur une liste
                        d'autorisation.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        Service d'API autonome de la session correspondante (par
                        exemple `PASSIVE_LIVENESS`, `FACE_MATCH`) ; `null` pour
                        les sessions de workflow et les sources extérieures aux
                        sessions.
                    source:
                      type: string
                      enum:
                        - session
                        - imported
                        - list_entry
                        - retained_template
                      description: >-
                        Origine du visage correspondant : `session`, `imported`
                        (téléversement de visage d'un utilisateur), `list_entry`
                        (liste d'autorisation/blocage) ou `retained_template`
                        (un gabarit biométrique sans image stocké sur un
                        utilisateur, répertorié sous
                        `/v3/biometric-templates/`).
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
              face_quality:
                type: number
                nullable: true
                description: >-
                  Score de qualité de l'image du visage (0-100%). Disponible
                  uniquement pour la détection du vivant passive.
              face_luminance:
                type: number
                nullable: true
                description: >-
                  Score de luminance/luminosité du visage (0-100 %). Disponible
                  uniquement pour la détection du vivant passive.
        face_matches:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de correspondance faciale** produits par les
            étapes de correspondance faciale dans le graphe du workflow.
            Toujours un tableau JSON — jamais un objet `face_match` singulier.
            `null` jusqu'à ce qu'au moins une étape de correspondance faciale
            ait produit des données. Chaque élément est le rapport complet,
            comprenant `node_id`, le `status` au niveau de la fonctionnalité, le
            `score` de similarité, `source_image`, `target_image` et
            `warnings[]`.
          items:
            type: object
            description: Un rapport de correspondance faciale — le rapport complet.
            properties:
              node_id:
                type: string
                description: >-
                  ID de nœud du graphe de workflow de l'étape de correspondance
                  faciale ayant produit ce rapport.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  Statut au niveau de la fonctionnalité de cette étape de
                  correspondance faciale. Indépendant du `status` de la session
                  de niveau supérieur — une session peut atteindre sa décision
                  globale tandis qu'une fonctionnalité individuelle reste `In
                  Review`.
              score:
                type: number
                description: Score de confiance de la correspondance faciale
              source_image_session_id:
                type: string
                format: uuid
                nullable: true
                description: >-
                  ID de session sous lequel le portrait source (de référence)
                  est stocké. Dans les flux d'authentification biométrique, il
                  s'agit de l'identifiant propre à la session (le portrait
                  soumis est stocké sous la nouvelle session). `null` lorsque
                  l'image source est le portrait du document de cette même
                  session.
              source_image:
                type: string
                format: uri
                description: URL de l'image source utilisée pour la comparaison
              target_image:
                type: string
                format: uri
                description: URL de l'image cible utilisée pour la comparaison
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
                description: Avertissements de vérification de la correspondance faciale
              face_coverage:
                type: object
                nullable: true
                description: >-
                  Indique si les yeux, la bouche et le visage sont masqués sur
                  l'image capturée. Renvoyé uniquement par `GET
                  /v3/session/{sessionId}/decision/` ; ne fait pas partie des
                  payloads de webhook. `null` lorsqu'aucune mesure de couverture
                  n'existe.
                properties:
                  eyes:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          `false` signifie que le relevé est uniquement une
                          preuve secondaire et qu'aucun avertissement n'agit
                          dessus.
                      visibility_score:
                        type: number
                        nullable: true
                  mouth:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          `false` signifie que le relevé est uniquement une
                          preuve secondaire et qu'aucun avertissement n'agit
                          dessus.
                      visibility_score:
                        type: number
                        nullable: true
                  face:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          `false` signifie que le relevé est uniquement une
                          preuve secondaire et qu'aucun avertissement n'agit
                          dessus.
                      visibility_score:
                        type: number
                        nullable: true
        phone_verifications:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de vérification du téléphone** — toujours un
            tableau JSON, jamais un objet `phone` singulier. `null` jusqu'à ce
            qu'au moins une étape de vérification du téléphone ait produit des
            données. Chaque élément est le rapport complet, comprenant
            `node_id`, le `status` au niveau de la fonctionnalité, le numéro de
            téléphone et les métadonnées de pays, `lifecycle[]`, `matches[]` et
            `warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identifiant unique de cette étape de téléphone dans le graphe
                  de workflow.
              status:
                type: string
                description: >-
                  Statut au niveau de la fonctionnalité de cette étape de
                  vérification du téléphone. Indépendant du `status` de la
                  session de niveau supérieur — une session peut atteindre sa
                  décision globale tandis qu'une fonctionnalité individuelle
                  reste `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
              phone_number_prefix:
                type: string
                description: Préfixe de l'indicatif téléphonique du pays
              phone_number:
                type: string
                description: Numéro de téléphone sans indicatif pays
              full_number:
                type: string
                description: Numéro de téléphone complet avec indicatif pays
              country_code:
                type: string
                description: Code pays à deux lettres (ISO 3166-1 alpha-2)
              country_name:
                type: string
                description: Nom complet du pays
              carrier:
                type: object
                properties:
                  name:
                    type: string
                    description: Nom de l'opérateur téléphonique
                  type:
                    type: string
                    description: Type de ligne téléphonique (mobile, fixe, etc.)
              is_disposable:
                type: boolean
                description: >-
                  Indique si le numéro de téléphone provient d'un service
                  jetable
              is_virtual:
                type: boolean
                description: Indique si le numéro de téléphone est virtuel
              verification_method:
                type: string
                description: Méthode utilisée pour vérifier le numéro de téléphone
              verification_attempts:
                type: integer
                description: Nombre de tentatives de vérification effectuées
              verified_at:
                type: string
                format: date-time
                description: Horodatage de la vérification du téléphone
              lifecycle:
                type: array
                description: >-
                  Liste chronologique des événements du cycle de vie de la
                  vérification de téléphone.
                items:
                  type: object
                  properties:
                    type:
                      type: string
                    timestamp:
                      type: string
                      format: date-time
                    details:
                      type: object
                      nullable: true
                      description: >-
                        Payload spécifique à l'événement. Les événements d'envoi
                        contiennent `status`, `reason`, `channel`,
                        `actual_channel` ; les événements de livraison
                        contiennent `channel`, `status` ; les événements de
                        vérification de code contiennent `code_tried`, `status`
                        ; les événements d'état final contiennent `reason` — ou
                        `null` lorsqu'il n'y a aucune raison à signaler (par ex.
                        `PHONE_VERIFICATION_APPROVED`).
                      properties:
                        status:
                          type: string
                        reason:
                          type: string
                          nullable: true
                        channel:
                          type: string
                          nullable: true
                        actual_channel:
                          type: string
                          nullable: true
                        code_tried:
                          type: string
                    fee:
                      type: number
              warnings:
                type: array
                description: Liste des avertissements liés à la vérification du téléphone
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
              matches:
                type: array
                description: "Correspondances trouvées pour ce numéro de téléphone. Chaque correspondance a une `source`\_: `session` (une autre session de vérification dans votre application correspondait au même numéro, renvoyée avec `session_id`/`session_number`/`vendor_data`/`verification_date`) ou `list_entry` (le numéro figure sur une liste d'autorisation/de blocage gérée par l'organisation — voir `/management-api/lists/overview`). Les correspondances inter-sessions utilisent des `vendor_data` différents et sont plafonnées à 5."
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_data:
                      type: string
                      nullable: true
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                    phone_number:
                      type: string
                    status:
                      type: string
                      nullable: true
                    is_blocklisted:
                      type: boolean
                    api_service:
                      type: string
                      nullable: true
                    source:
                      type: string
                      enum:
                        - session
                        - list_entry
                      description: >-
                        Origine de cette correspondance. `session` indique
                        qu'une autre session de vérification dans votre
                        application correspondait à cette valeur. `list_entry`
                        indique que la valeur correspondait à une liste gérée
                        par l'organisation (liste d'autorisation/liste de
                        blocage) — consultez la vue d'ensemble des listes de
                        l'API de gestion sur `/management-api/lists/overview`
                        pour savoir comment gérer ces listes.
              phone_intelligence:
                allOf:
                  - $ref: '#/components/schemas/PhoneIntelligence'
                description: >-
                  Signaux d'intelligence téléphonique. Présent uniquement
                  lorsque l'add-on d'intelligence téléphonique a été exécuté
                  pour ce numéro.
              phone_social:
                allOf:
                  - $ref: '#/components/schemas/PhoneSocialFootprint'
                description: >-
                  Empreinte sociale du numéro. Présent uniquement lorsque le
                  module complémentaire d'empreinte sociale a été exécuté pour
                  ce numéro.
        email_verifications:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de vérification d'e-mail** — toujours un
            tableau JSON, jamais un objet `email` singulier. `null` jusqu'à ce
            qu'au moins une étape d'e-mail ait produit des données. Chaque
            élément est le rapport complet, comprenant `node_id`, le `status` au
            niveau de la fonctionnalité, l'adresse e-mail, les données de
            compromission, `lifecycle[]`, `matches[]` et `warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identifiant unique de cette étape d'e-mail dans le graphe de
                  workflow.
              status:
                type: string
                description: >-
                  Statut au niveau de la fonctionnalité de cette étape de
                  vérification de l'e-mail. Indépendant du `status` de la
                  session de niveau supérieur — une session peut atteindre sa
                  décision globale tandis qu'une fonctionnalité individuelle
                  reste `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
              email:
                type: string
                description: L'adresse e-mail en cours de vérification
              is_breached:
                type: boolean
                description: >-
                  Indique si l'e-mail a été trouvé dans des violations de
                  données connues
              breaches:
                type: array
                description: >-
                  Liste des fuites de données connues dans lesquelles cet e-mail
                  a été trouvé
                items:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Nom de la violation
                    domain:
                      type: string
                      description: Domaine concerné par la violation
                    logo_path:
                      type: string
                      description: URL du logo du service compromis
                    breach_date:
                      type: string
                      format: date
                      description: Date à laquelle la violation s'est produite
                    description:
                      type: string
                      description: Description de l'infraction
                    is_verified:
                      type: boolean
                      description: Indique si la fuite est vérifiée
                    data_classes:
                      type: array
                      description: Types de données exposées lors de la violation
                      items:
                        type: string
                    breach_emails_count:
                      type: integer
                      description: >-
                        Nombre d'adresses e-mail affectées par la violation de
                        données
              is_disposable:
                type: boolean
                description: Indique si l'e-mail provient d'un fournisseur jetable
              is_undeliverable:
                type: boolean
                description: Indique si l'adresse e-mail n'est pas distribuable
              verification_attempts:
                type: integer
                description: Nombre de tentatives de vérification pour cet e-mail
              verified_at:
                type: string
                format: date-time
                description: Horodatage de la vérification de l'e-mail
              warnings:
                type: array
                description: Liste des avertissements liés à la vérification de l'e-mail
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
              lifecycle:
                type: array
                description: >-
                  Liste chronologique des événements du cycle de vie de la
                  vérification d'e-mail.
                items:
                  type: object
                  properties:
                    type:
                      type: string
                    timestamp:
                      type: string
                      format: date-time
                    details:
                      type: object
                      nullable: true
                      description: >-
                        Payload spécifique à l'événement. Les événements d'envoi
                        contiennent `status`, `reason` ; les événements de
                        vérification de code contiennent `code_tried`, `status`
                        ; les événements d'état final contiennent `reason` — ou
                        `null` lorsqu'il n'y a aucune raison à signaler (par ex.
                        `EMAIL_VERIFICATION_APPROVED`).
                      properties:
                        status:
                          type: string
                        reason:
                          type: string
                          nullable: true
                        code_tried:
                          type: string
                    fee:
                      type: number
              matches:
                type: array
                description: "Correspondances trouvées pour cette adresse e-mail. Chaque correspondance a une `source`\_: `session` (une autre session de vérification dans votre application correspondait au même e-mail, renvoyée avec `session_id`/`session_number`/`vendor_data`/`verification_date`) ou `list_entry` (l'e-mail figure sur une liste d'autorisation/de blocage gérée par l'organisation — voir `/management-api/lists/overview`). Les correspondances inter-sessions utilisent des `vendor_data` différents et sont plafonnées à 5."
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_data:
                      type: string
                      nullable: true
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                    email:
                      type: string
                      format: email
                    status:
                      type: string
                      nullable: true
                    is_blocklisted:
                      type: boolean
                    api_service:
                      type: string
                      nullable: true
                    source:
                      type: string
                      enum:
                        - session
                        - list_entry
                      description: >-
                        Origine de cette correspondance. `session` indique
                        qu'une autre session de vérification dans votre
                        application correspondait à cette valeur. `list_entry`
                        indique que la valeur correspondait à une liste gérée
                        par l'organisation (liste d'autorisation/liste de
                        blocage) — consultez la vue d'ensemble des listes de
                        l'API de gestion sur `/management-api/lists/overview`
                        pour savoir comment gérer ces listes.
              email_intelligence:
                allOf:
                  - $ref: '#/components/schemas/EmailIntelligence'
                description: >-
                  Signaux d'analyse de l'e-mail. Présent uniquement lorsque le
                  module complémentaire d'analyse de l'e-mail a été exécuté pour
                  cette adresse.
              email_social:
                allOf:
                  - $ref: '#/components/schemas/EmailSocialFootprint'
                description: >-
                  Empreinte sociale de l'adresse. Présent uniquement lorsque le
                  module complémentaire d'empreinte sociale a été exécuté pour
                  cette adresse.
        poa_verifications:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de Justificatif de domicile (POA)** — toujours
            un tableau JSON, jamais un objet `poa` singulier. `null` jusqu'à ce
            qu'au moins une étape POA ait produit des données. Chaque élément
            est le rapport complet, comprenant `node_id`, le `status` au niveau
            de la fonctionnalité, l'URL du fichier du document, l'émetteur, les
            dates, l'adresse analysée et `warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identifiant unique de cette étape Justificatif de domicile
                  (POA) dans le graphe du workflow.
              status:
                type: string
                description: >-
                  Statut au niveau de la fonctionnalité de cette étape de
                  justificatif de domicile. Indépendant du `status` de la
                  session de niveau supérieur — une session peut atteindre sa
                  décision globale tandis qu'une fonctionnalité individuelle
                  reste `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              document_file:
                type: string
                format: uri
                description: URL du justificatif de domicile
              issuing_state:
                type: string
                description: Code pays à deux lettres de l'État émetteur
              document_type:
                type: string
                description: Type de justificatif de domicile
              document_subtype:
                type: string
                nullable: true
                description: >-
                  Classification plus spécifique du document POA au sein de son
                  `document_type`, lorsqu'une classification a été détectée.
                  `null` dans le cas contraire.
              document_language:
                type: string
                description: Code de langue du document
              document_metadata:
                type: object
                properties:
                  file_size:
                    type: integer
                    description: Taille du document
                  content_type:
                    type: string
                    description: Type de contenu du document
                  creation_date:
                    type: string
                    format: date
                    description: Date à laquelle le document a été créé
                  modified_date:
                    type: string
                    format: date
                    description: Date à laquelle le document a été modifié
                  overlay_manipulation:
                    type: object
                    nullable: true
                    description: >-
                      Analyse forensique de PDF pour suspicion de manipulation
                      de texte superposé. Null lorsqu'aucune preuve de
                      manipulation de superposition n'a été trouvée ou que le
                      document n'était pas un PDF.
                    properties:
                      detected:
                        type: boolean
                        description: >-
                          Indique si des preuves de manipulation de texte en
                          superposition ont été détectées.
                      analyzed:
                        type: boolean
                        description: Indique si le PDF a pu être analysé.
                      analysis_incomplete:
                        type: boolean
                        description: >-
                          Présent et vrai uniquement lorsque le fichier n'a pas
                          pu être vérifié en totalité. Ce qui a été vérifié
                          conserve ses constats lorsque c'est possible, et le
                          document affiche l'avertissement de remplacement de
                          texte non prouvé.
                      signals:
                        type: array
                        items:
                          type: string
                        description: >-
                          Signaux d'analyse forensique qui se sont déclenchés,
                          tels que duplicate_font_subset ou glyph_fragmentation.
                      manipulated_regions:
                        type: array
                        description: >-
                          Zones suspectées de manipulation selon les coordonnées
                          de la page PDF.
                        items:
                          type: object
                          properties:
                            page:
                              type: integer
                            x:
                              type: number
                            'y':
                              type: number
                            width:
                              type: number
                            height:
                              type: number
                            page_width:
                              type: number
                            page_height:
                              type: number
                  creator:
                    type: string
                    nullable: true
                    description: >-
                      Application de création enregistrée dans les métadonnées
                      du document.
                  producer:
                    type: string
                    nullable: true
                    description: >-
                      Logiciel producteur enregistré dans les métadonnées du
                      PDF.
                  software:
                    type: string
                    nullable: true
                    description: >-
                      Logiciel d'édition/de traitement enregistré dans les
                      métadonnées du fichier.
                  encryption:
                    type: string
                    nullable: true
                    description: Schéma de chiffrement du document, lorsqu'il est chiffré.
                  is_signed:
                    type: boolean
                    nullable: true
                    description: Indique si le PDF comporte une signature numérique.
                  is_tampered:
                    type: boolean
                    nullable: true
                    description: >-
                      Indique si la validation de la signature indique que le
                      fichier a été modifié après la signature.
                  signature_info:
                    type: object
                    nullable: true
                    description: >-
                      Détails de la ou des signatures numériques, le cas
                      échéant.
                  exif_original_date:
                    type: string
                    nullable: true
                    description: >-
                      Date de capture originale EXIF, pour les téléversements
                      d'images.
                  exif_digitized_date:
                    type: string
                    nullable: true
                    description: >-
                      Date de numérisation EXIF, pour les téléversements
                      d'images.
                  processed_by_known_editor:
                    type: boolean
                    nullable: true
                    description: >-
                      Indique si les métadonnées du fichier signalent un
                      traitement par un éditeur de documents connu.
                  has_different_creation_mod_date:
                    type: boolean
                    nullable: true
                    description: >-
                      Indique si les dates de création et de modification
                      diffèrent — un signal fréquent de manipulation.
                description: >-
                  Métadonnées d'analyse médico-légale de fichier extraites du
                  justificatif de domicile téléversé. Contient toujours les clés
                  ci-dessous (les valeurs sont `null` lorsqu'elles ne
                  s'appliquent pas, par exemple les dates EXIF pour les PDF).
                  `null` si aucune métadonnée n'a pu être extraite.
                nullable: true
              issuer:
                type: string
                description: Nom de l'émetteur du document
              issue_date:
                type: string
                format: date
                description: Date à laquelle le document a été délivré
              expiration_date:
                type: string
                format: date
                nullable: true
                description: Date d'expiration du document, si disponible
              poa_address:
                type: string
                description: Adresse brute issue du justificatif de domicile
              poa_formatted_address:
                type: string
                description: Adresse formatée issue du document de justificatif de domicile
              poa_parsed_address:
                type: object
                properties:
                  address_type:
                    type: string
                    description: Type d'adresse (rue, avenue, etc.)
                  street_1:
                    type: string
                    description: Adresse postale principale
                  street_2:
                    type: string
                    nullable: true
                    description: Adresse de rue secondaire
                  city:
                    type: string
                    description: Nom de la ville
                  region:
                    type: string
                    description: Nom de la région ou de l'État
                  country:
                    type: string
                    description: Code pays à deux lettres
                  postal_code:
                    type: string
                    description: Code postal
                  document_location:
                    type: object
                    properties:
                      latitude:
                        type: number
                        description: Coordonnée de latitude
                      longitude:
                        type: number
                        description: Coordonnée de longitude
              name_on_document:
                type: string
                nullable: true
                description: >-
                  Nom du titulaire du compte / destinataire extrait du document
                  de justificatif de domicile, utilisé pour la correspondance
                  des noms. `null` lorsqu'aucun nom n'a pu être extrait.
              name_match_score_expected_details:
                type: number
                nullable: true
                description: >-
                  Score de similarité (0-100) entre `name_on_document` et le nom
                  attendu fourni lors de la création de la session. `null` si
                  l'un des côtés est manquant.
              name_match_score_id_verification:
                type: number
                nullable: true
                description: >-
                  Score de similarité (0-100) entre `name_on_document` et le nom
                  extrait par l'étape de vérification d'identité. `null` si l'un
                  des côtés est manquant.
              expected_details_address:
                type: string
                nullable: true
                description: Adresse brute attendue pour la vérification
              expected_details_formatted_address:
                type: string
                nullable: true
                description: Adresse formatée attendue pour la vérification
              expected_details_parsed_address:
                type: object
                description: Détails de l'adresse analysée attendus pour la vérification
              extra_fields:
                type: object
                description: >-
                  Coordonnées bancaires et de contact supplémentaires extraites
                  du document.
                properties:
                  bank_account_number:
                    type: string
                    nullable: true
                  bank_iban:
                    type: string
                    nullable: true
                  bank_sort_code:
                    type: string
                    nullable: true
                  bank_routing_number:
                    type: string
                    nullable: true
                  bank_swift_bic:
                    type: string
                    nullable: true
                  bank_branch_name:
                    type: string
                    nullable: true
                  bank_branch_address:
                    type: string
                    nullable: true
                  document_phone_number:
                    type: string
                    nullable: true
                  additional_names:
                    type: array
                    items:
                      type: string
              extra_files:
                type: array
                items:
                  type: string
                  format: uri
                description: Fichiers supplémentaires de justificatif de domicile
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
              detected_codes:
                type: array
                description: >-
                  Codes QR et codes-barres détectés sur chaque page traitée du
                  document. Vide si aucun n'est trouvé. Un code QR localisé mais
                  indécodable a `parsed_payload: null`.
                items:
                  $ref: '#/components/schemas/DocumentAIDetectedCode'
              address_validation:
                allOf:
                  - $ref: '#/components/schemas/AddressValidationResult'
                nullable: true
                description: >-
                  Validation de l'adresse figurant sur ce justificatif de
                  domicile : indique si elle existe et sa forme normalisée,
                  telle que lue sur le document (une correction ultérieure de
                  `poa_address` ne relance pas la validation). Présent lorsque
                  cette étape de justificatif de domicile a activé le module
                  complémentaire Validation d'adresse et que le fichier
                  téléversé a passé les contrôles du document ; `null` dans le
                  cas contraire.
        document_ai_documents:
          type: array
          nullable: true
          description: >-
            **Rapports Document AI regroupés par nœud de workflow** — toujours
            un tableau JSON, jamais un objet unique. `null` jusqu'à ce qu'au
            moins une étape Document AI ait produit des données. Présents
            uniquement lorsque `session_kind = user`. Chaque élément est un
            groupe de nœuds avec un `status` global, le `node_id`, un tableau
            `items[]` des résultats par document (données extraites indexées par
            la clé de champ configurée), et `warnings`.
          items:
            type: object
            description: Résultats de Document AI regroupés par nœud de workflow.
            properties:
              status:
                type: string
                description: >-
                  Statut Document AI agrégé pour ce nœud, consolidé à partir de
                  ses `items[]`.
                enum:
                  - Approved
                  - Declined
                  - In Review
                  - Not Finished
              node_id:
                type: string
                nullable: true
                description: >-
                  Identifiant unique de cette étape Document AI dans le graphe
                  du workflow.
              items:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    node_id:
                      type: string
                      nullable: true
                      description: Nœud du graphe de workflow ayant produit ce document.
                    document_key:
                      type: string
                      description: >-
                        Clé du document configuré dans Document AI auquel ce
                        fichier correspond.
                    original_filename:
                      type: string
                      nullable: true
                      description: Nom de fichier tel que téléversé par l'utilisateur.
                    file_size:
                      type: integer
                      nullable: true
                      description: Taille du fichier en octets.
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Lien pré-signé de courte durée vers le fichier
                        téléversé.
                    status:
                      type: string
                      enum:
                        - Approved
                        - Declined
                        - In Review
                        - Not Finished
                      description: Statut Document AI par document.
                    extracted_data:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: >-
                        Valeurs extraites par Document AI, indexées par la `key`
                        de champ configurée. Chaque valeur est une chaîne, un
                        nombre ou `null`.
                    detected_codes:
                      type: array
                      description: >-
                        Codes QR et codes-barres détectés sur chaque page
                        traitée. Vide si aucun n'est trouvé. Un code QR localisé
                        mais indécodable a `parsed_payload: null`.
                      items:
                        $ref: '#/components/schemas/DocumentAIDetectedCode'
                    fields:
                      type: array
                      description: Les champs d'extraction configurés pour ce document.
                      items:
                        type: object
                        properties:
                          key:
                            type: string
                            description: >-
                              Clé de champ stable utilisée comme clé dans
                              `extracted_data`.
                          name:
                            type: string
                            description: Nom de champ lisible par l'humain.
                          instruction:
                            type: string
                            description: Instruction d'extraction présentée au modèle.
                          type:
                            type: string
                            enum:
                              - text
                              - number
                              - date
                            description: Type de valeur attendu du champ extrait.
                          required:
                            type: boolean
                            description: Whether this field is required.
                    document_metadata:
                      type: object
                      nullable: true
                      description: >-
                        Métadonnées d'analyse médico-légale de fichier extraites
                        du document téléversé (par ex. `is_tampered`). `null` si
                        rien n'a pu être extrait.
                    cross_check_result:
                      type: object
                      nullable: true
                      description: >-
                        Recoupement des champs extraits du document avec
                        d'autres données de la session. `null` lorsqu'aucun
                        recoupement n'a été effectué.
                    created_at:
                      type: string
                      format: date-time
              warnings:
                type: array
                nullable: true
                items:
                  type: object
                description: Journaux d'avertissement générés pour ce nœud Document AI.
        questionnaire_responses:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de réponses aux questionnaires** — toujours un
            tableau JSON, jamais un objet `questionnaire` singulier. `null`
            jusqu'à ce qu'au moins une étape de questionnaire ait produit des
            données. Chaque élément est le rapport complet, comprenant
            `node_id`, les métadonnées du questionnaire, les sections avec les
            éléments de formulaire et les réponses de l'utilisateur.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identifiant unique de cette étape de questionnaire dans le
                  graphe de workflow.
              questionnaire_id:
                type: string
                description: Identifiant unique du questionnaire
              title:
                type: string
                description: Titre du questionnaire
              description:
                type: string
                description: Description du questionnaire
              languages:
                type: array
                items:
                  type: string
                description: Langues prises en charge
              default_language:
                type: string
                description: Langue par défaut
              is_active:
                type: boolean
                description: Indique si le questionnaire est actif
              is_simple_questionnaire:
                type: boolean
                description: >-
                  Indique si le questionnaire est un formulaire linéaire simple
                  (sans graphe avec embranchements).
              questionnaire_group_id:
                type: string
                format: uuid
                nullable: true
                description: >-
                  Identifiant stable du groupe de questionnaires pour toutes les
                  versions.
              version:
                type: integer
                nullable: true
                description: Numéro de version du questionnaire auquel il a été répondu.
              published_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Horodatage auquel cette version du questionnaire a été
                  publiée.
              sections:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      nullable: true
                      description: Titre de la section
                    description:
                      type: string
                      nullable: true
                      description: Description de la section
                    items:
                      type: array
                      items:
                        type: object
                        properties:
                          uuid:
                            type: string
                            description: Identifiant unique de l'élément
                          value:
                            type: string
                            nullable: true
                            description: >-
                              Identifiant stable de nœud de cet élément de
                              formulaire dans le graphe du questionnaire.
                          element_type:
                            type: string
                            description: Type de l'élément de questionnaire
                          is_required:
                            type: boolean
                            description: Indique si l'élément est obligatoire
                          title:
                            type: string
                            description: Titre de l'élément
                          description:
                            type: string
                            nullable: true
                            description: Description de l'élément
                          placeholder:
                            type: string
                            nullable: true
                            description: Texte indicatif
                          choices:
                            type: array
                            nullable: true
                            items:
                              type: object
                              properties:
                                label:
                                  type: string
                                value:
                                  type: string
                                requires_text_input:
                                  type: boolean
                                  description: >-
                                    Indique si ce choix nécessite une saisie de
                                    texte supplémentaire
                                  nullable: true
                              required:
                                - label
                                - value
                            description: >-
                              Choix pour les éléments de liste déroulante ou à
                              choix unique
                          max_files:
                            type: integer
                            description: Nombre maximal de fichiers autorisés
                            nullable: true
                          answer:
                            type: object
                            description: Réponse fournie pour l'élément
                            properties:
                              value:
                                type: string
                                nullable: true
                              text:
                                type: string
                                nullable: true
                              files:
                                type: array
                                items:
                                  type: string
                                nullable: true
                          required_if:
                            type: object
                            nullable: true
                            description: >-
                              Règle d'exigence conditionnelle, lorsque l'élément
                              n'est requis que pour certaines réponses.
                          repeatable_config:
                            type: object
                            nullable: true
                            description: >-
                              Configuration pour les groupes d'éléments
                              répétables, le cas échéant.
                        required:
                          - uuid
                          - value
                          - element_type
                          - is_required
                          - title
              status:
                type: string
                description: Statut du questionnaire
        bank_verifications:
          type: array
          nullable: true
          description: "Résultats de la vérification bancaire, un élément par étape de vérification bancaire, pour la Vérification des utilisateurs et la Vérification d'entreprise (KYB). `null` jusqu'à ce qu'une étape en produise un. Le champ `method` de chaque élément indique comment le compte a été vérifié\_: `open_banking` (connexion bancaire) ou `account_lookup` (vérification de compte), ou une solution de repli `statement` ou `microdeposits`, et `none` lorsque la personne a continué sans banque avant qu'une tentative ne soit évaluée (`continued_without_bank`). Voir [Méthodes de vérification bancaire](/fr/core-technology/bank-verification/verification-methods)."
          items:
            $ref: '#/components/schemas/BankVerificationResult'
        signatures:
          type: array
          description: >-
            Résultats de la Signature électronique, un élément par signataire et
            par étape de signature, pour la Vérification des utilisateurs et la
            Vérification d'entreprise. Présent uniquement lorsque le workflow
            comprend une étape de Signature électronique ; tableau vide jusqu'à
            ce qu'un signataire l'atteigne. Voir le [rapport de Signature
            électronique](/fr/core-technology/electronic-signature/report-electronic-signature).
          items:
            $ref: '#/components/schemas/SignatureResult'
        aml_screenings:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports de filtrage AML** — toujours un tableau JSON,
            jamais un objet `aml` unique. `null` jusqu'à ce qu'au moins une
            étape AML ait produit des données. Chaque élément est le rapport
            complet, incluant `node_id`, le `status` au niveau de la
            fonctionnalité, `total_hits`, `entity_type`, `hits[]`, `score`,
            `screened_data`, `is_ongoing_monitoring_enabled` et `warnings[]`.
          items:
            $ref: '#/components/schemas/AMLScreening'
        ip_analyses:
          type: array
          nullable: true
          description: >-
            **Tableau de rapports d'Analyse de l'appareil et de l'IP** —
            toujours un tableau JSON, jamais un objet `ip_analysis` singulier.
            `null` jusqu'à ce qu'au moins une étape d'analyse IP ait produit des
            données. Chaque élément est le rapport complet, comprenant
            `node_id`, le `status` au niveau de la fonctionnalité, les données
            IP et de géolocalisation, l'empreinte de l'appareil et `warnings[]`.
            Les entrées présentant un doublon `(node_id, ip_address,
            device_fingerprint)` sont dédupliquées côté serveur.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identifiant unique de cette étape d'Analyse de l'appareil et
                  de l'IP dans le graphe du workflow.
              status:
                type: string
                description: >-
                  Statut au niveau de la fonctionnalité de cette entrée
                  d'Analyse de l'appareil et de l'IP. Indépendant du `status` de
                  la session de niveau supérieur — une session peut atteindre sa
                  décision globale tandis qu'une fonctionnalité individuelle
                  reste `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              device_brand:
                type: string
                description: Marque de l'appareil utilisé
              device_model:
                type: string
                description: Modèle de l'appareil utilisé
              browser_family:
                type: string
                description: Famille de navigateur utilisée
              os_family:
                type: string
                description: Famille de système d'exploitation
              platform:
                type: string
                description: Type de plateforme (mobile, desktop, etc.)
              device_fingerprint:
                type: string
                nullable: true
                description: Identifiant unique de l'empreinte de l'appareil
              ip_country:
                type: string
                description: Pays détecté à partir de l'IP
              ip_country_code:
                type: string
                description: Code pays à deux lettres dérivé de l'IP
              ip_state:
                type: string
                description: État/région détecté(e) à partir de l'IP
              ip_city:
                type: string
                description: Ville détectée à partir de l'IP
              latitude:
                type: number
                description: Coordonnée de latitude de la localisation de l'IP
              longitude:
                type: number
                description: Coordonnée de longitude de la localisation IP
              ip_address:
                type: string
                description: Adresse
              isp:
                type: string
                nullable: true
                description: Fournisseur d'accès à Internet
              organization:
                type: string
                nullable: true
                description: Organisation associée à l'IP
              is_vpn_or_tor:
                type: boolean
                description: Indique si l'adresse provient d'un VPN ou du réseau Tor
              is_data_center:
                type: boolean
                description: Indique si l'adresse provient d'un centre de données
              time_zone:
                type: string
                description: Fuseau horaire détecté à partir de l'IP
              time_zone_offset:
                type: string
                description: Décalage du fuseau horaire
              ip:
                type: object
                description: >-
                  Géolocalisation IP de cette entrée ainsi que les distances
                  orthodromiques (km) jusqu'à l'adresse du document d'identité
                  et l'adresse du justificatif de domicile. Les distances sont
                  `null` lorsque l'un des deux côtés ne dispose pas d'une
                  localisation exploitable.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: Coordonnées, ou `null` si non disponibles.
                  distance_from_id_document:
                    type: number
                    nullable: true
                    example: 23.4
                  distance_from_poa_document:
                    type: number
                    nullable: true
                    example: 12.3
              id_document:
                type: object
                description: >-
                  Localisation extraite de l'adresse du document d'identité plus
                  les distances (km) jusqu'à la géolocalisation IP et l'adresse
                  du document de justificatif de domicile (POA). `location` est
                  `null` lorsqu'aucune adresse de document n'a pu être géocodée.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: Coordonnées, ou `null` si non disponibles.
                  distance_from_ip:
                    type: number
                    nullable: true
                    example: 23.4
                  distance_from_poa_document:
                    type: number
                    nullable: true
                    example: 18.7
              poa_document:
                type: object
                description: >-
                  Localisation extraite du justificatif de domicile plus les
                  distances (km) jusqu'à la géolocalisation IP et l'adresse du
                  document d'identité. `location` est `null` lorsque la session
                  ne comporte pas d'étape POA ou que l'adresse n'a pas pu être
                  géocodée.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: Coordonnées, ou `null` si non disponibles.
                  distance_from_ip:
                    type: number
                    nullable: true
                    example: 12.3
                  distance_from_id_document:
                    type: number
                    nullable: true
                    example: 18.7
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
              matches:
                type: array
                description: >-
                  Correspondances inter-sessions trouvées pour l'adresse IP ou
                  l'identité de l'appareil de cette entrée. Chaque
                  correspondance est une autre session de vérification dans
                  votre application (`source` est toujours `session`) qui
                  partage la même valeur, appartenant toujours à un utilisateur
                  du fournisseur / `vendor_data` différent de la session
                  actuelle, plafonnée à 5 par collecteur (`device_fingerprint`
                  additionne deux collecteurs plafonnés indépendamment, jusqu'à
                  10 entrées sont donc possibles). Chaque élément comporte
                  `match_source`, `confidence`, `match_mode`, `device_info` et
                  `location_info` ; les clés `recovery_similarity`,
                  `tls_ja4_corroborated` et `recovery_gate_reason` ne sont
                  présentes que lorsque `match_source` est `recovered_high`.
                items:
                  type: object
                  additionalProperties: false
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      description: ID de session de la session correspondante.
                    session_number:
                      type: integer
                      description: Numéro séquentiel de la session correspondante.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` de la session correspondante — toujours
                        différent de l'utilisateur du fournisseur de la session
                        actuelle.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        Date de création de la session correspondante
                        (`YYYY-MM-DDTHH:MM:SSZ`).
                    match_type:
                      type: string
                      enum:
                        - ip_address
                        - device_fingerprint
                      description: >-
                        Indique si la correspondance portait sur l'adresse IP ou
                        sur l'empreinte de l'appareil
                    match_source:
                      type: string
                      enum:
                        - ip_address
                        - persistent_id
                        - legacy_fp
                        - recovered_high
                      description: >-
                        Manière dont cette correspondance a été établie :
                        `ip_address` (adresse partagée — colocalisation réseau,
                        et non une revendication d'identité d'appareil),
                        `persistent_id` (identifiant persistant d'appareil
                        stocké exact), `legacy_fp` (hachage d'empreinte
                        d'appareil `didit-fp-*` hérité) ou `recovered_high`
                        (résultat de récupération d'empreinte approximative à
                        haute confiance). Les candidats de récupération à plus
                        faible confiance apparaissent uniquement sous forme
                        d'avertissements de risque, jamais dans ce tableau.
                    matched_value:
                      type: string
                      nullable: true
                      description: >-
                        La valeur correspondante : l'adresse IP partagée,
                        l'identifiant persistant de l'appareil ou le hash
                        d'empreinte historique, ou — pour `recovered_high` —
                        l'UUID de l'appareil récupéré.
                    status:
                      type: string
                      description: Statut de cycle de vie de la session correspondante.
                    is_blocklisted:
                      type: boolean
                      description: >-
                        Indique si la valeur correspondante figure sur une liste
                        de blocage. Actuellement toujours `false` pour les
                        correspondances d'appareil/IP.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        Service d'API autonome de la session correspondante ;
                        `null` pour les sessions de workflow.
                    source:
                      type: string
                      enum:
                        - session
                      description: >-
                        Toujours `session` pour les correspondances
                        d'appareil/IP — chaque correspondance est une autre
                        session de vérification dans votre application.
                    device_info:
                      type: object
                      description: >-
                        Détails de l'appareil observés sur la session
                        correspondante.
                      properties:
                        device_brand:
                          type: string
                          nullable: true
                        device_model:
                          type: string
                          nullable: true
                        browser_family:
                          type: string
                          nullable: true
                        os_family:
                          type: string
                          nullable: true
                        platform:
                          type: string
                          nullable: true
                        device_fingerprint:
                          type: string
                          nullable: true
                    location_info:
                      type: object
                      description: >-
                        Détails du réseau et de la géolocalisation observés sur
                        la session correspondante.
                      properties:
                        ip_address:
                          type: string
                          nullable: true
                        ip_country:
                          type: string
                          nullable: true
                        ip_country_code:
                          type: string
                          nullable: true
                        ip_state:
                          type: string
                          nullable: true
                        ip_city:
                          type: string
                          nullable: true
                        is_vpn_or_tor:
                          type: boolean
                        is_data_center:
                          type: boolean
                    confidence:
                      type: number
                      minimum: 0
                      maximum: 1
                      description: >-
                        Confiance de l'identification côté serveur, calculée
                        comme `1 - P(false positive)` : `1.0` pour les
                        correspondances déterministes (`persistent_id` ou
                        `recovered_high` ancré au matériel), `0.5` pour
                        `legacy_fp`, `0.0` pour `ip_address` (colocalisation
                        uniquement), et une valeur ajustée par corroboration
                        inférieure à `1.0` pour les correspondances
                        probabilistes récupérées (plus élevée lorsque
                        l'empreinte TLS JA4 et le pays de l'IP concordent de
                        manière indépendante).
                    match_mode:
                      type: string
                      enum:
                        - deterministic
                        - probabilistic
                        - co_occurrence
                      description: >-
                        Classe de preuve de la correspondance : `deterministic`
                        (identifiant exact stocké ou ancré matériellement, qui
                        ne peut pas entrer en collision entre appareils
                        physiques), `probabilistic` (preuve fondée sur une
                        empreinte approximative) ou `co_occurrence` (réseau
                        partagé uniquement, aucune revendication d'identité
                        d'appareil).
                    recovery_similarity:
                      type: number
                      description: >-
                        Similarité cosinus de la correspondance de récupération
                        d'empreinte, arrondie à 4 décimales. Présent uniquement
                        lorsque `match_source` est `recovered_high`.
                    tls_ja4_corroborated:
                      type: boolean
                      description: >-
                        Indique si les empreintes TLS JA4 des deux observations
                        concordent — un signal observé côté serveur que le
                        navigateur ne peut pas usurper. Présent uniquement
                        lorsque `match_source` vaut `recovered_high`.
                    recovery_gate_reason:
                      type: string
                      description: >-
                        Raison pour laquelle la correspondance de récupération a
                        franchi le filtre strict des faux positifs :
                        `hardware_root_match` (un identifiant d'appareil ancré
                        au matériel correspondait exactement) ou, sur les
                        configurations qui admettent des preuves basées
                        uniquement sur des sondes,
                        `exact_composite_plus_<n>_families` /
                        `very_high_similarity_plus_<n>_families`. Présent
                        uniquement lorsque `match_source` est `recovered_high`.
              browser_version:
                type: string
                nullable: true
              os_version:
                type: string
                nullable: true
              user_agent:
                type: string
                nullable: true
                description: La chaîne de l'agent utilisateur du navigateur.
              accept_language:
                type: string
                nullable: true
                description: L'en-tête `Accept-Language` envoyé par le navigateur.
              session_identifier:
                type: string
                nullable: true
                description: >-
                  Identifiant de la session de navigation dans laquelle la
                  vérification s'est déroulée.
              session_age_ms:
                type: integer
                nullable: true
                description: >-
                  Âge de cette session de navigation en millisecondes lors de
                  l'exécution de l'étape.
              coords_accuracy:
                type: number
                nullable: true
                description: >-
                  Rayon de précision, en mètres, des coordonnées signalées par
                  l'appareil.
              raw_device_data:
                type: object
                nullable: true
                additionalProperties: true
                description: Signaux bruts de l'appareil collectés pour l'étape.
        geolocation_checks:
          type: array
          nullable: true
          description: >-
            **Tableau de résultats de vérification de localisation**, un par
            étape de vérification de localisation : la tentative acceptée de
            cette étape. `null` jusqu'à ce qu'une étape de vérification de
            localisation ait produit des données. Les tentatives antérieures de
            la même étape se trouvent dans `geolocation_attempts`.
          items:
            $ref: '#/components/schemas/GeolocationCheck'
        geolocation_attempts:
          type: array
          nullable: true
          description: >-
            Chaque tentative de chaque étape de vérification de localisation de
            cette session, de la plus ancienne à la plus récente. Les tentatives
            remplacées par une nouvelle soumission sont exclues. Un workflow qui
            masque `geolocation_checks` via ses attributs de réponse masque
            également cette liste.
          items:
            $ref: '#/components/schemas/GeolocationAttempt'
        database_validations:
          type: array
          nullable: true
          description: "**Tableau de rapports de Validation en base de données** — toujours un tableau JSON, jamais un objet `database_validation` singulier. `null` jusqu'à ce qu'au moins une étape de validation en base de données ait produit des données. Chaque élément correspond au rapport complet, incluant `node_id`, le `status` au niveau de la fonctionnalité, `screened_data`, les `validations[]` par service (chacune avec son `source_data` de registre) et `warnings[]`. Les champs `screened_data` et `source_data` varient selon le pays\_:\n\n**ARG (Argentine)**\_: screened_data\_: {document_number, selfie, gender, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name, date_of_birth, date_of_death, tax_id, tax_id_type, face_match_score, sit_1_since, banks, last_position, highest_position, rejected_checks}. Utilise la validation biométrique par correspondance faciale de RENAPER. Le genre est automatiquement déduit de l'analyse du visage ou du prénom lorsqu'il n'est pas présent sur le document (ex. permis de conduire)\n\n**BOL (Bolivie)**\_: screened_data\_: {document_number, date_of_birth, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name, date_of_birth, gender}\n\n**BRA (Brésil)**\_: screened_data\_: {tax_number, first_name, last_name, date_of_birth}. source_data inclut toujours {identification_number, first_name, last_name, date_of_birth, lgpd_minor, minor_under_18, minor_under_16} pour les correspondances CPF réussies. Les recherches réussies pour les adultes définissent ces indicateurs à false. Le service Consulta CPF de la Receita Federal peut renvoyer HTTP 422 (mineur de moins de 18 ans) ou 451 (moins de 16 ans) avec des données retenues en vertu de la LGPD\_; dans ces cas, source_data définit les indicateurs de minorité à true selon le cas, inclut le statut HTTP en amont, et la validation au niveau du champ est no_match. Consultez la section Brésil de la référence des codes de résultat de la Validation en base de données pour la liste complète des codes.\n\n**CHL (Chili)**\_: screened_data\_: {personal_number, first_name, last_name, date_of_birth}. source_data\_: {identification_number, first_name, last_name, date_of_birth, gender}\n\n**COL (Colombie)**\_: screened_data\_: {document_number, document_type, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name, date_of_birth, document_type}\n\n**CRI (Costa Rica)**\_: screened_data\_: {personal_number, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name}\n\n**DOM (République dominicaine)**\_: screened_data\_: {personal_number}. source_data\_: {identification_number} (renvoie valid/invalid uniquement)\n\n**ECU (Équateur)**\_: screened_data\_: {personal_number, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, street, formatted_address, gender, nationality, education, marital_status, spouse, mother_name, father_name, profession}\n\n**ESP (Espagne)**\_: screened_data\_: {personal_number, document_type, expiration_date, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name, document_type, expiration_date}\n\n**GTM (Guatemala)**\_: screened_data\_: {document_number, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name}\n\n**HND (Honduras)**\_: screened_data\_: {document_number, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name}\n\n**MEX (Mexique)**\_: screened_data\_: {personal_number (CURP), first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name, date_of_birth, gender, nationality, curp_status, state_of_birth, doc_probatorio, registration_year, registration_state, registration_municipality, num_acta, crip, issuing_state_code, foreign_registry_number, folio_carta, folio_certificado}. Utilise le registre d'état civil RENAPO. Un service distinct de vérification de validité INE est également disponible pour MEX en tant que validation supplémentaire individuelle.\n\n**PAN (Panama)**\_: screened_data\_: {personal_number, selfie}. source_data\_: {identification_number}. Utilise la validation biométrique SIB\n\n**PER (Pérou)**\_: screened_data\_: {personal_number (DNI), first_name, last_name}. source_data\_: {identification_number, first_name, last_name, paternal_name, maternal_name, verification_number, verification_letter}\n\n**PRY (Paraguay)**\_: screened_data\_: {document_number, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name}\n\n**SLV (Salvador)**\_: screened_data\_: {document_number, date_of_birth, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name}\n\n**URY (Uruguay)**\_: screened_data\_: {personal_number, date_of_birth, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name}\n\n**VEN (Venezuela)**\_: screened_data\_: {document_number, first_name, last_name}. source_data\_: {identification_number, first_name, last_name, full_name, gender, date_of_birth, document_type}"
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  Identifiant unique de cette étape de validation en base de
                  données dans le graphe de workflow.
              issuing_state:
                type: string
                description: >-
                  Code ISO 3166-1 alpha-3 du pays dont les sources
                  gouvernementales ou de registres ont été interrogées (par ex.
                  `BRA`, `MEX`, `ESP`, `NGA`, `IDN`). La Validation en base de
                  données couvre 60+ pays à travers les Amériques, l'Europe,
                  l'Afrique, le Moyen-Orient et l'Asie-Pacifique, ainsi que des
                  sources mondiales multi-pays — la couverture s'élargit
                  régulièrement, considérez donc cette valeur comme un ensemble
                  ouvert plutôt qu'un enum fixe.
              validation_type:
                type: string
                enum:
                  - one_by_one
                  - two_by_two
                  - not_enabled
                description: >-
                  Manière dont le résultat a été corroboré : `one_by_one`
                  (résultat d'un service unique), `two_by_two` (au moins deux
                  services distincts ont fait correspondre indépendamment et
                  intégralement le numéro d'identification), ou `not_enabled`
                  (conservé lorsqu'aucun service n'a produit de correspondance
                  exploitable). La valeur n'est jamais `null`. Des modes de
                  validation biométrique 2x2 dédiés sont actuellement
                  disponibles pour `ECU` et `PER`.
              screened_data:
                type: object
                description: >-
                  Les données d'entrée utilisées pour la validation. Les champs
                  varient selon le pays — consultez la documentation de
                  Validation en base de données
                  (`/core-technology/database-validation/overview`) pour les
                  formats spécifiques à chaque pays.
                properties:
                  last_name:
                    type: string
                  first_name:
                    type: string
                  tax_number:
                    type: string
                    description: 'Brésil : CPF (11 chiffres)'
                  personal_number:
                    type: string
                    description: >-
                      Chili : RUT, DOM : Cédula (11 chiffres), ECU : Cédula (10
                      chiffres), ESP : DNI/NIE, MEX : CURP (18 car.), PER : DNI
                      (8 chiffres), URY : CI
                  document_number:
                    type: string
                    description: >-
                      ARG : DNI, BOL : CI, COL : Cédula, GTM : DPI, HND : DNI,
                      PAN : Cédula, PRY : CI, SLV : DUI, VEN : Cédula
                  date_of_birth:
                    type: string
                    format: date
                  document_type:
                    type: string
                    description: 'COL : CC/CE/TI/NIT, ESP : ID/PASSPORT'
                  expiration_date:
                    type: string
                    format: date
                    description: Requis pour ESP
              validations:
                type: array
                description: >-
                  Une entrée par service de registre ayant retourné un payload
                  de validation. Chaque entrée identifie le service
                  (`service_id`, `service_name`) et contient la comparaison
                  `validation` par champ, le `outcome_code` / `outcome_detail`
                  du service lorsqu'ils sont communiqués, et l'enregistrement de
                  registre normalisé dans `source_data`.
                items:
                  type: object
                  properties:
                    service_id:
                      type: string
                      description: >-
                        Identifiant du service de registre ayant produit ce
                        résultat de validation.
                      example: bra_cpf
                    service_name:
                      type: string
                      description: Nom lisible par l'humain du service de registre.
                      example: Brazil - CPF status check
                    validation:
                      type: object
                      description: Les résultats des validations de champs.
                      properties:
                        full_name:
                          type: string
                          description: >-
                            Résultat de correspondance pour le nom complet (par
                            ex., 'full_match', 'partial_match', 'no_match').
                        date_of_birth:
                          type: string
                          description: >-
                            Résultat de correspondance pour la date de
                            naissance.
                        identification_number:
                          type: string
                          description: >-
                            Résultat de correspondance pour le numéro
                            d'identification.
                    outcome_code:
                      type: string
                      nullable: true
                      description: >-
                        Résultat lisible par machine de la recherche au registre
                        (par ex. `MATCH`, `NO_MATCH`, `PARTIAL_MATCH`,
                        `INCONCLUSIVE`, codes spécifiques à la source). Présent
                        lorsque le service en transmet un.
                    outcome_detail:
                      type: string
                      nullable: true
                      description: >-
                        Explication lisible par l'humain de `outcome_code`,
                        lorsqu'elle est fournie par le service.
                    source_data:
                      type: object
                      description: >-
                        Les données renvoyées par la base de données
                        gouvernementale. Champs communs : identification_number,
                        first_name, last_name, full_name, date_of_birth, gender.
                        Champs supplémentaires par pays : BRA inclut toujours
                        lgpd_minor, minor_under_18 et minor_under_16 lors des
                        correspondances CPF réussies ; il inclut également le
                        statut HTTP en amont lorsque les données CPF sont
                        retenues en vertu de la LGPD (HTTP 422/451). ECU ajoute
                        street, formatted_address, nationality, education,
                        marital_status, spouse, mother_name, father_name,
                        profession. PER ajoute paternal_name, maternal_name,
                        verification_number, verification_letter. ESP ajoute
                        document_type, expiration_date. VEN/COL ajoutent
                        document_type.
                      additionalProperties: true
              errors:
                type: array
                description: >-
                  Erreurs renvoyées par les services de registre lors de la
                  validation, chacune associée au `service_id` qui l'a produite.
                  **Cette clé est entièrement omise lorsqu'il n'y a pas
                  d'erreur.**
                items:
                  type: object
                  description: >-
                    L'objet d'erreur du service en amont propagé tel quel — ses
                    clés varient selon le service (généralement un message/code
                    et des détails spécifiques au fournisseur) — plus
                    `service_id` identifiant le service en erreur.
                  properties:
                    service_id:
                      type: string
                      nullable: true
                      description: >-
                        Identifiant du service de registre ayant rencontré une
                        erreur.
                  additionalProperties: true
              match_type:
                type: string
                enum:
                  - no_match
                  - partial_match
                  - full_match
                nullable: true
                description: >-
                  Le résultat global de correspondance parmi les services
                  interrogés. `null` tant que la validation n'a pas été évaluée.
              status:
                type: string
                description: >-
                  Statut au niveau de la fonctionnalité de cette validation en
                  base de données. Indépendant du `status` de la session de
                  niveau supérieur — une session peut atteindre sa décision
                  globale tandis qu'une fonctionnalité individuelle reste `In
                  Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        La fonctionnalité qui a généré cet avertissement. La
                        valeur identifie le bloc de fonctionnalités auquel
                        appartient l'avertissement. Le tableau d'avertissements
                        de chaque module utilise généralement la valeur
                        correspondant à son module (par ex. `PHONE` dans
                        `phone_verifications[].warnings`), mais l'énumération
                        ci-dessus fait foi pour tous les avertissements de
                        fonctionnalités sur le payload de décision.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        L'identifiant du nœud du graphe de workflow ayant généré
                        cet avertissement
                description: Avertissements liés à la validation en base de données.
        database_validation_not_performed_reason:
          type: object
          nullable: true
          additionalProperties: true
          description: "Raison pour laquelle une validation en base de données configurée n'a produit aucun résultat, sous la forme `{code, message}` plus des champs de contexte. Présent uniquement lorsque `database_validations` est `null` pour un workflow comportant cette étape, afin de pouvoir distinguer «\_le registre a validé\_» de «\_rien n'a été exécuté\_». `null` dans le cas contraire."
          properties:
            code:
              type: string
              description: Raison stable lisible par machine.
            message:
              type: string
              description: Explication lisible par l'humain.
        reviews:
          type: array
          items:
            type: object
            properties:
              user:
                type: string
                description: "Qui a effectué l'examen. Généralement l'identifiant du réviseur dans la console (son e-mail), mais la valeur est `\"API Client\"` pour les mises à jour de statut effectuées avec une clé API et `\"Unknown\"` lorsqu'aucun acteur n'a pu être résolu\_— n'analysez donc pas ce champ comme une adresse e-mail."
              new_status:
                type: string
              comment:
                type: string
              created_at:
                type: string
                format: date-time
        assignee:
          type: object
          nullable: true
          description: >-
            Le réviseur de la Console auquel la session est assignée, ou `null`
            si personne ne la détient.
          properties:
            email:
              type: string
              format: email
            assigned_at:
              type: string
              format: date-time
              nullable: true
        waiting_since:
          type: string
          format: date-time
          nullable: true
          description: >-
            Moment où la session a commencé à attendre un examen. `null` sauf si
            la session est `In Review` et que votre application définit un délai
            d'examen.
        sla_due_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Date limite de l'examen. `null` sauf si la session est `In Review`
            et que votre application définit une date limite d'examen.
        created_at:
          type: string
          format: date-time
          description: Horodatage de création de la session (ISO 8601, UTC).
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Horodatage auquel l'expiration de cette session est planifiée.
            Défini sur les sessions de vérification des utilisateurs (KYC)
            lorsqu'une expiration a été configurée lors de la création (ou une
            fois que le statut `Approved` déclenche le calcul de l'expiration du
            KYC). `null` pour les sessions sans expiration configurée, et pour
            les types qui n'utilisent pas d'expiration (par ex. les sessions de
            vérification d'entreprise (KYB) qui n'ont jamais reçu
            d'`expires_at`).
        registry_checks:
          type: array
          nullable: true
          description: >-
            Vérifications au registre des sociétés. Présent uniquement lorsque
            `session_kind = business`. Chaque élément encapsule le payload
            complet du registre des sociétés.
          items:
            type: object
            description: >-
              Une vérification de registre des sociétés — le payload complet du
              registre des sociétés enrichi avec la structure de l'actionnariat
              et les avertissements. Présent uniquement lorsque `session_kind =
              business`.
            properties:
              status:
                type: string
                description: Statut du cycle de vie de la fonctionnalité.
              node_id:
                type: string
                nullable: true
              data_resolved:
                type: boolean
              company:
                type: object
                description: >-
                  Payload complet du registre pour l'entreprise (enregistrement
                  du registre fusionné avec les données fournies par
                  l'utilisateur ou modifiées dans la console).
                properties:
                  uuid:
                    type: string
                    format: uuid
                  node_id:
                    type: string
                    nullable: true
                  status:
                    type: string
                  registry_status:
                    type: string
                    nullable: true
                  data_resolved:
                    type: boolean
                  company_name:
                    type: string
                  registration_number:
                    type: string
                    nullable: true
                  country_code:
                    type: string
                    description: >-
                      Pays de constitution (ISO 3166-1 alpha-2, par ex. `GB`,
                      `DE`, `US`).
                  region:
                    type: string
                    nullable: true
                    description: >-
                      Code de subdivision ISO 3166-2 le cas échéant (ex. `CA`,
                      `NY` pour les États américains).
                  company_type:
                    type: string
                    nullable: true
                  incorporation_date:
                    type: string
                    format: date
                    nullable: true
                  registered_address:
                    type: string
                    nullable: true
                  tax_number:
                    type: string
                    nullable: true
                  risk_level:
                    type: string
                    enum:
                      - LOW
                      - MEDIUM
                      - HIGH
                    nullable: true
                  verification_status:
                    type: string
                    nullable: true
                  is_from_registry:
                    type: boolean
                  fetch_status:
                    type: string
                    nullable: true
                  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
                  registered_capital:
                    type: string
                    nullable: true
                  registered_capital_amount:
                    type: string
                    format: decimal
                    nullable: true
                    description: >-
                      Montant du capital social/enregistré sous forme de chaîne
                      décimale (par ex. `"100.00"`), extrait du dépôt au
                      registre. `null` lorsqu'il n'est pas disponible.
                  registered_capital_currency:
                    type: string
                    nullable: true
                    description: >-
                      Code de devise ISO 4217 de `registered_capital_amount`
                      (ex. `"GBP"`). `null` lorsqu'il n'est pas disponible.
                  website:
                    type: string
                    nullable: true
                  email:
                    type: string
                    format: email
                    nullable: true
                  phone:
                    type: string
                    nullable: true
                  legal_entity_identifier:
                    type: string
                    nullable: true
                  location_of_registration:
                    type: string
                    nullable: true
                  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.
                  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
                  officers:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                        designation:
                          type: string
                          nullable: true
                        role:
                          type: string
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                        is_active:
                          type: boolean
                        kyc_status:
                          type: string
                          enum:
                            - Approved
                            - Declined
                            - Pending
                          nullable: true
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        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.
                  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
                        roles:
                          type: array
                          items:
                            type: string
                        ownership_min_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite inférieure du pourcentage d'actionnariat
                            telle que déclarée par le registre. Chaîne de texte
                            libre (par ex. `"25.00"`, `"50"`) ; utilisez
                            `effective_ownership_percent` pour une valeur
                            numérique analysée.
                        ownership_max_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite supérieure du pourcentage d'actionnariat tel
                            qu'indiqué par le registre. Chaîne au format libre ;
                            utilisez `effective_ownership_percent` pour obtenir
                            une valeur numérique analysée.
                        is_active:
                          type: boolean
                        kyc_status:
                          type: string
                          enum:
                            - Approved
                            - Declined
                            - Pending
                          nullable: true
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        effective_ownership_percent:
                          type: number
                          nullable: true
                        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'
                  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
                    description: Données confirmées ou modifiées par l'utilisateur final.
                  confirmed_by_user_at:
                    type: string
                    format: date-time
                    nullable: true
                  last_console_edit_at:
                    type: string
                    format: date-time
                    nullable: true
                  is_editable:
                    type: boolean
                  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_tier_delivered:
                    type: string
                    nullable: true
                    description: >-
                      Le niveau fourni par le registre et qui est facturé.
                      Également présent dans `ownership.tier_delivered`.
                  registry_ownership_status:
                    type: string
                    nullable: true
                    description: >-
                      `not_requested`, `pending`, `delivered`, `not_held` ou
                      `unavailable`. Également dans `ownership.status`.
                  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.
              ownership_structure:
                $ref: '#/components/schemas/KYBOwnershipStructure'
              warnings:
                type: array
                items:
                  type: object
        key_people_checks:
          type: array
          nullable: true
          description: >-
            Vérifications agrégées des personnes clés. Présent uniquement
            lorsque `session_kind = business`. Chaque élément utilise la
            structure à deux compartiments (`registry`, `submitted`,
            `ubo_kyc_summary`).
          items:
            type: object
            description: >-
              Vérification agrégée des dirigeants et des UBO de l'entreprise.
              Utilise la structure `registry` / `submitted`. Présent uniquement
              lorsque session_kind = business.
            properties:
              status:
                type: string
              node_id:
                type: string
                nullable: true
              registry:
                type: object
                description: Parties découvertes via la vérification du registre.
                properties:
                  officers:
                    type: array
                    description: >-
                      Dirigeants découverts via la vérification du registre,
                      chacun enrichi avec le statut de toute session KYC enfant
                      et du filtrage AML déclenchés pour eux.
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                          description: >-
                            Nom complet du dirigeant tel qu'enregistré dans le
                            registre.
                        designation:
                          type: string
                          nullable: true
                          description: >-
                            Désignation en texte libre issue du registre (par
                            exemple `Director`, `Company Secretary`).
                        role:
                          type: string
                          enum:
                            - director
                            - non_executive_director
                            - secretary
                            - chairman
                            - ubo
                            - shareholder
                            - representative
                            - founder
                            - legal_advisor
                            - authorized_signatory
                            - trustee
                            - beneficiary
                            - settlor
                            - protector
                            - company_officer
                            - investor
                            - other
                          description: Rôle normalisé du dirigeant.
                        nationality:
                          type: string
                          nullable: true
                        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
                        is_active:
                          type: boolean
                        address:
                          type: string
                          nullable: true
                          description: Adresse du dirigeant indiquée par le registre.
                        aml_status:
                          type: string
                          enum:
                            - Not Finished
                            - Approved
                            - Declined
                            - In Review
                            - Resub Requested
                          nullable: true
                          description: >-
                            Statut du filtrage AML exécuté pour ce dirigeant.
                            `null` lorsqu'aucun filtrage AML n'a été exécuté.
                        kyc_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Statut brut du cycle de vie de la session KYC enfant
                            générée pour ce dirigeant. Il s'agit de
                            l'énumération complète des statuts de session (et
                            non d'un ensemble réduit Approuvé/Refusé/En
                            attente). `null` lorsqu'aucune session KYC enfant
                            n'existe.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            URL partageable de la session KYC enfant. `null`
                            lorsqu'aucune session enfant n'existe.
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID de session de la session KYC enfant.
                            Transmettez-le à ce même endpoint de décision pour
                            récupérer le rapport KYC complet de la personne.
                            `null` lorsqu'aucune session enfant n'existe.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            Type de workflow de base du workflow de la session
                            enfant (par ex. `kyc`). `null` pour les workflows
                            basés sur un graphe ou lorsqu'aucune session enfant
                            n'existe.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID du workflow utilisé par la session enfant. `null`
                            lorsqu'aucune session enfant n'existe.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            Libellé lisible par l'humain du workflow de la
                            session enfant. `null` lorsqu'il n'est pas défini.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            Progression par fonctionnalité de la session de
                            vérification enfant, par ex. `[{"feature":
                            "ID_VERIFICATION", "status": "Approved"}]`. `null`
                            lorsque la session enfant n'a pas de liste de
                            fonctionnalités pouvant être déterminée.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  Nom d'affichage de la fonctionnalité (par ex.
                                  `ID_VERIFICATION`, `LIVENESS`, `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: >-
                                  Statut au niveau de la fonctionnalité au sein
                                  de la session enfant.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            Identifiant interne stable de l'individu vérifié
                            associé à la session enfant — utile pour la liaison
                            entre sessions. `null` lorsqu'aucune session enfant
                            n'existe ou que l'utilisateur n'a pas encore été
                            résolu.
                        kyc_document_type:
                          type: string
                          nullable: true
                          description: >-
                            Type de document présenté dans la session KYC enfant
                            (ex. `P`, `ID`, `DL`). `null` tant que la session
                            enfant n'a pas de résultat de vérification
                            d'identité.
                        kyc_nationality:
                          type: string
                          nullable: true
                          description: >-
                            Nationalité extraite du document dans la session KYC
                            enfant. `null` jusqu'à ce qu'elle soit disponible.
                        kyc_liveness_passed:
                          type: boolean
                          nullable: true
                          description: >-
                            Indique si le contrôle de détection du vivant de la
                            session KYC enfant a réussi. `null` si aucun
                            contrôle de détection du vivant n'a été exécuté.
                        kyc_verified_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Date et heure auxquelles la session KYC enfant a
                            atteint `Approved`. `null` tant que la session
                            enfant a un autre statut.
                        kyc_aml_categories:
                          type: object
                          nullable: true
                          description: >-
                            Résumé par catégorie dérivé des correspondances AML
                            de la personne. `null` lorsqu'il n'y a aucune
                            correspondance.
                          properties:
                            sanctions:
                              type: string
                              enum:
                                - match
                                - clear
                            pep:
                              type: string
                              enum:
                                - match
                                - clear
                            adverse_media:
                              type: string
                              enum:
                                - match
                                - clear
                            warnings:
                              type: string
                              enum:
                                - match
                                - clear
                        kyc_notification_sent_at:
                          type: string
                          nullable: true
                          description: >-
                            Horodatage ISO 8601 de la dernière notification
                            d'invitation à la vérification envoyée pour la
                            session enfant de cette personne. `null` si aucune
                            n'a été envoyée.
                        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.
                        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.
                  beneficial_owners:
                    type: array
                    description: >-
                      Bénéficiaires effectifs découverts via la vérification au
                      registre, chacun enrichi du statut de toute session KYC
                      enfant et de tout filtrage AML déclenchés pour lui.
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                          description: >-
                            Nom complet du bénéficiaire effectif (ou raison
                            sociale pour les UBO personnes morales).
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          nullable: true
                          description: >-
                            Date de naissance complète lorsqu'elle est
                            rapportée.
                          format: date
                        country_of_birth:
                          type: string
                          nullable: true
                        email:
                          type: string
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        nationality:
                          type: string
                          nullable: true
                        designation:
                          type: string
                          nullable: true
                        roles:
                          type: array
                          description: >-
                            Noms des rôles détenus par ce propriétaire, par ex.
                            `["ubo", "shareholder"]`.
                          items:
                            type: string
                        ownership_min_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite inférieure du pourcentage d'actionnariat
                            telle que déclarée par le registre. Chaîne de texte
                            libre (par ex. `"25"`, `"25-50%"`) ; utilisez
                            `effective_ownership_percent` pour une valeur
                            numérique analysée.
                        ownership_max_shares:
                          type: string
                          nullable: true
                          description: >-
                            Limite supérieure du pourcentage d'actionnariat tel
                            qu'indiqué par le registre. Chaîne au format libre ;
                            utilisez `effective_ownership_percent` pour obtenir
                            une valeur numérique analysée.
                        is_active:
                          type: boolean
                        aml_status:
                          type: string
                          enum:
                            - Not Finished
                            - Approved
                            - Declined
                            - In Review
                            - Resub Requested
                          nullable: true
                          description: >-
                            Statut du filtrage AML exécuté pour ce bénéficiaire
                            effectif. `null` lorsqu'aucun filtrage AML n'a été
                            exécuté.
                        kyc_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Statut brut du cycle de vie de la session KYC enfant
                            générée pour ce bénéficiaire effectif. Il s'agit de
                            l'énumération complète des statuts de session (et
                            non d'un ensemble réduit Approuvé/Refusé/En
                            attente). `null` lorsqu'aucune session KYC enfant
                            n'existe.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            URL partageable de la session KYC enfant. `null`
                            lorsqu'aucune session enfant n'existe.
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID de session de la session KYC enfant.
                            Transmettez-le à ce même endpoint de décision pour
                            récupérer le rapport KYC complet de la personne.
                            `null` lorsqu'aucune session enfant n'existe.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            Type de workflow de base du workflow de la session
                            enfant (par ex. `kyc`). `null` pour les workflows
                            basés sur un graphe ou lorsqu'aucune session enfant
                            n'existe.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID du workflow utilisé par la session enfant. `null`
                            lorsqu'aucune session enfant n'existe.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            Libellé lisible par l'humain du workflow de la
                            session enfant. `null` lorsqu'il n'est pas défini.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            Progression par fonctionnalité de la session de
                            vérification enfant, par ex. `[{"feature":
                            "ID_VERIFICATION", "status": "Approved"}]`. `null`
                            lorsque la session enfant n'a pas de liste de
                            fonctionnalités pouvant être déterminée.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  Nom d'affichage de la fonctionnalité (par ex.
                                  `ID_VERIFICATION`, `LIVENESS`, `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: >-
                                  Statut au niveau de la fonctionnalité au sein
                                  de la session enfant.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            Identifiant interne stable de l'individu vérifié
                            associé à la session enfant — utile pour la liaison
                            entre sessions. `null` lorsqu'aucune session enfant
                            n'existe ou que l'utilisateur n'a pas encore été
                            résolu.
                        kyc_document_type:
                          type: string
                          nullable: true
                          description: >-
                            Type de document présenté dans la session KYC enfant
                            (ex. `P`, `ID`, `DL`). `null` tant que la session
                            enfant n'a pas de résultat de vérification
                            d'identité.
                        kyc_nationality:
                          type: string
                          nullable: true
                          description: >-
                            Nationalité extraite du document dans la session KYC
                            enfant. `null` jusqu'à ce qu'elle soit disponible.
                        kyc_liveness_passed:
                          type: boolean
                          nullable: true
                          description: >-
                            Indique si le contrôle de détection du vivant de la
                            session KYC enfant a réussi. `null` si aucun
                            contrôle de détection du vivant n'a été exécuté.
                        kyc_verified_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            Date et heure auxquelles la session KYC enfant a
                            atteint `Approved`. `null` tant que la session
                            enfant a un autre statut.
                        kyc_aml_categories:
                          type: object
                          nullable: true
                          description: >-
                            Résumé par catégorie dérivé des correspondances AML
                            de la personne. `null` lorsqu'il n'y a aucune
                            correspondance.
                          properties:
                            sanctions:
                              type: string
                              enum:
                                - match
                                - clear
                            pep:
                              type: string
                              enum:
                                - match
                                - clear
                            adverse_media:
                              type: string
                              enum:
                                - match
                                - clear
                            warnings:
                              type: string
                              enum:
                                - match
                                - clear
                        kyc_notification_sent_at:
                          type: string
                          nullable: true
                          description: >-
                            Horodatage ISO 8601 de la dernière notification
                            d'invitation à la vérification envoyée pour la
                            session enfant de cette personne. `null` si aucune
                            n'a été envoyée.
                        child_beneficial_owners:
                          type: array
                          description: >-
                            Pour les bénéficiaires effectifs d'entreprises : les
                            propres bénéficiaires effectifs de l'entité
                            propriétaire, sous forme d'objets bruts extraits du
                            registre. Tableau vide si non applicable.
                          items:
                            type: object
                        effective_ownership_percent:
                          type: number
                          nullable: true
                          description: >-
                            Pourcentage d'actionnariat numérique analysé — la
                            borne maximale si disponible, sinon la borne
                            minimale. `null` lorsqu'aucune des deux bornes n'a
                            pu être analysée.
                        voting_min_shares:
                          type: string
                          nullable: true
                        voting_max_shares:
                          type: string
                          nullable: true
                        appointment_date:
                          type: string
                          nullable: true
                          description: Date de nomination lorsqu'elle est déclarée.
                          format: date
              submitted:
                type: object
                description: >-
                  Parties soumises par l'administrateur de l'entreprise lors du
                  flux des personnes clés (lignes BusinessParty où source=USER).
                properties:
                  parties:
                    type: array
                    items:
                      type: object
                      description: >-
                        Partie soumise par l'administrateur de l'entreprise via
                        le flux des personnes clés (source=USER).
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        source:
                          type: string
                          enum:
                            - USER
                          description: >-
                            Toujours `USER` ici — ce compartiment contient
                            uniquement les parties saisies ou confirmées par
                            l'utilisateur final dans le flux Personnes clés (les
                            personnes découvertes dans le registre apparaissent
                            sous `registry`).
                        name:
                          type: string
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        email:
                          type: string
                          format: email
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                          description: "Nationalité pour les personnes physiques\_; pays de constitution pour les entreprises."
                        phone_number:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          format: date
                          nullable: true
                        position:
                          type: string
                          nullable: true
                          description: >-
                            Intitulé de poste / fonction en texte libre
                            (personnes physiques uniquement).
                        custom_fields:
                          type: object
                          description: >-
                            Champs personnalisés définis par le workflow
                            collectés pour cette partie ; les clés sont définies
                            par les descripteurs de champs des personnes clés du
                            workflow.
                        is_active:
                          type: boolean
                        is_skipped:
                          type: boolean
                          description: >-
                            Vrai lorsque l'utilisateur final a ignoré la
                            vérification pour cette partie (possible uniquement
                            lorsque le rôle autorise l'omission).
                        requires_verification:
                          type: boolean
                          description: >-
                            Vrai lorsqu'une sous-session KYC / KYB enfant est
                            requise pour cette partie en fonction des paramètres
                            de rôle et des seuils d'actionnariat.
                        roles:
                          type: array
                          description: >-
                            Tous les rôles occupés par cette partie, chacun avec
                            ses propres pourcentages d'actionnariat et de droits
                            de vote. Il n'y a pas de champ scalaire
                            `role`/`ownership_percent` sur la partie elle-même.
                          items:
                            type: object
                            properties:
                              role:
                                type: string
                                enum:
                                  - director
                                  - non_executive_director
                                  - secretary
                                  - chairman
                                  - ubo
                                  - shareholder
                                  - representative
                                  - founder
                                  - legal_advisor
                                  - authorized_signatory
                                  - trustee
                                  - beneficiary
                                  - settlor
                                  - protector
                                  - company_officer
                                  - investor
                                  - other
                              ownership_percent:
                                type: number
                                nullable: true
                              voting_percent:
                                type: number
                                nullable: true
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            Identifiant de la sous-session KYC enfant pour les
                            personnes physiques nécessitant une vérification.
                            `null` sinon.
                        kyc_session_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Statut de cycle de vie de la session KYC enfant.
                            `null` lorsqu'aucune session KYC enfant n'existe.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        kyb_sub_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            Identifiant de la sous-session KYB enfant pour les
                            parties morales nécessitant une vérification. `null`
                            sinon.
                        kyb_sub_session_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            Statut de cycle de vie de la sous-session KYB
                            enfant. `null` lorsqu'aucune sous-session n'existe.
                        kyb_sub_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            URL partageable de la sous-session KYB enfant.
                            `null` lorsqu'aucune sous-session n'existe.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            Type de workflow de base du workflow de la session
                            enfant (session KYC prioritaire, avec repli sur la
                            sous-session KYB). `null` pour les workflows basés
                            sur un graphe ou lorsqu'aucune session enfant
                            n'existe.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            ID du workflow utilisé par la session enfant. `null`
                            lorsqu'aucune session enfant n'existe.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            Libellé lisible par l'humain du workflow de la
                            session enfant. `null` lorsqu'il n'est pas défini.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            Progression par fonctionnalité de la session de
                            vérification enfant, par ex. `[{"feature":
                            "ID_VERIFICATION", "status": "Approved"}]`. `null`
                            lorsque la session enfant n'a pas de liste de
                            fonctionnalités pouvant être déterminée.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  Nom d'affichage de la fonctionnalité (par ex.
                                  `ID_VERIFICATION`, `LIVENESS`, `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: >-
                                  Statut au niveau de la fonctionnalité au sein
                                  de la session enfant.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            Identifiant interne stable de l'individu vérifié
                            associé à la session enfant. `null` lorsqu'il n'est
                            pas résolu.
              ubo_kyc_summary:
                type: object
                nullable: true
                description: >-
                  Progression KYC agrégée des UBO, ou null lorsqu'aucun UBO n'a
                  de session KYC associée.
                properties:
                  total:
                    type: integer
                  approved:
                    type: integer
                  flagged:
                    type: integer
                    description: UBO dont le KYC est Refusé ou En cours d'examen.
                  pending:
                    type: integer
              warnings:
                type: array
                items:
                  type: object
        document_verifications:
          type: array
          nullable: true
          description: >-
            Vérifications de documents groupées par nœud de workflow. Présentes
            uniquement lorsque `session_kind = business`.
          items:
            type: object
            description: >-
              Documents groupés par nœud de workflow. Présent uniquement lorsque
              session_kind = business.
            properties:
              status:
                type: string
              node_id:
                type: string
                nullable: true
              items:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    document_type:
                      type: string
                      enum:
                        - LEGAL_PRESENCE
                        - COMPANY_DETAILS
                        - OWNERSHIP_STRUCTURE
                        - REPRESENTATIVES_AUTHORIZATION
                        - OTHER
                      nullable: true
                      description: >-
                        Groupe de documents KYB de haut niveau dans lequel le
                        fichier a été classé. `null` tant qu'il n'est pas
                        classé.
                    document_subtype:
                      type: string
                      nullable: true
                      description: >-
                        Sous-type spécifique détecté par OCR (par exemple
                        `CERTIFICATE_OF_INCORPORATION`, `SHAREHOLDER_REGISTRY`)
                        ; `UNKNOWN` lorsque l'OCR n'a pas pu classer le document
                        avec certitude.
                    document_group:
                      type: string
                      enum:
                        - LEGAL_PRESENCE
                        - COMPANY_DETAILS
                        - OWNERSHIP_STRUCTURE
                        - REPRESENTATIVES_AUTHORIZATION
                        - OTHER
                      nullable: true
                      description: "Alias de `document_type`\_: le nom de groupe utilisé par `groups` et `required_groups`."
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        Lien pré-signé de courte durée vers le fichier
                        téléversé. `null` pour les emplacements réservés de
                        demande de document créés par un analyste (`is_requested
                        = true`) qui n'ont pas encore été complétés.
                    original_filename:
                      type: string
                      nullable: true
                      description: >-
                        Nom de fichier tel que téléversé par l'utilisateur ou
                        l'analyste.
                    file_size:
                      type: integer
                      nullable: true
                      description: Taille du fichier en octets.
                    status:
                      type: string
                      enum:
                        - Not Finished
                        - Approved
                        - Declined
                        - In Review
                        - Resub Requested
                      description: Statut de vérification par document.
                    created_at:
                      type: string
                      format: date-time
                    cross_check_result:
                      type: object
                      nullable: true
                      description: >-
                        Recoupement des champs du document extraits par OCR avec
                        le profil d'entreprise du registre. Un objet avec les
                        sections `critical`, `non_critical` et `people`, chacune
                        associant un nom de champ (par exemple `company_name`,
                        `registration_number`, `incorporation_date`,
                        `registered_address`) à un enregistrement de comparaison
                        tel que `{"document": "...", "registry": "...", "match":
                        true, "score": 0.97}`. `null` lorsque le document ne
                        contenait aucune donnée OCR ou qu'aucune entreprise du
                        registre n'était disponible pour la comparaison.
                    document_metadata:
                      type: object
                      nullable: true
                      description: >-
                        Métadonnées extraites du document d'entreprise
                        téléversé. Lorsque l'extraction des métadonnées a
                        réussi, les 16 clés sont toujours présentes (les valeurs
                        individuelles sont `null` lorsqu'elles ne s'appliquent
                        pas au type de fichier) ; l'objet entier est `null` si
                        rien n'a pu être extrait. Pour les PDF,
                        `overlay_manipulation` contient l'analyse médico-légale
                        du texte superposé.
                      properties:
                        file_size:
                          type: integer
                          nullable: true
                          description: Taille du document.
                        content_type:
                          type: string
                          nullable: true
                          description: Type de contenu du document.
                        creation_date:
                          type: string
                          nullable: true
                          description: Date à laquelle le document a été créé.
                        modified_date:
                          type: string
                          nullable: true
                          description: Date à laquelle le document a été modifié.
                        creator:
                          type: string
                          nullable: true
                          description: >-
                            Outil de création ou utilisateur enregistré dans les
                            métadonnées du fichier (`Creator` du PDF).
                        producer:
                          type: string
                          nullable: true
                          description: Logiciel ayant généré le fichier (PDF `Producer`).
                        software:
                          type: string
                          nullable: true
                          description: >-
                            Logiciel d'édition enregistré dans les métadonnées
                            du fichier.
                        encryption:
                          type: string
                          nullable: true
                          description: >-
                            Schéma de chiffrement du fichier, lorsqu'il est
                            chiffré.
                        is_signed:
                          type: boolean
                          nullable: true
                          description: >-
                            Indique si le document comporte une signature
                            numérique.
                        is_tampered:
                          type: boolean
                          nullable: true
                          description: >-
                            Indique si la validation de la signature numérique a
                            échoué (modification postérieure à la signature).
                        signature_info:
                          type: object
                          nullable: true
                          description: >-
                            Détails de la ou des signatures numériques, le cas
                            échéant.
                        exif_original_date:
                          type: string
                          nullable: true
                          description: >-
                            Date de capture originale EXIF, pour les
                            téléversements d'images.
                        exif_digitized_date:
                          type: string
                          nullable: true
                          description: >-
                            Date de numérisation EXIF, pour les téléversements
                            d'images.
                        processed_by_known_editor:
                          type: boolean
                          nullable: true
                          description: >-
                            Indique si les métadonnées indiquent que le fichier
                            a transité par un éditeur d'images ou de PDF connu.
                        has_different_creation_mod_date:
                          type: boolean
                          nullable: true
                          description: >-
                            Indique si les dates de création et de modification
                            diffèrent — un signal de modification possible (mais
                            non concluant).
                        overlay_manipulation:
                          type: object
                          nullable: true
                          description: >-
                            Analyse forensique de PDF pour suspicion de
                            manipulation de texte superposé. Null lorsqu'aucune
                            preuve de manipulation de superposition n'a été
                            trouvée ou que le document n'était pas un PDF.
                          properties:
                            detected:
                              type: boolean
                              description: >-
                                Indique si des preuves de manipulation de texte
                                en superposition ont été détectées.
                            analyzed:
                              type: boolean
                              description: Indique si le PDF a pu être analysé.
                            analysis_incomplete:
                              type: boolean
                              description: >-
                                Présent et vrai uniquement lorsque le fichier
                                n'a pas pu être vérifié en totalité. Ce qui a
                                été vérifié conserve ses constats lorsque c'est
                                possible, et le document affiche l'avertissement
                                de remplacement de texte non prouvé.
                            signals:
                              type: array
                              items:
                                type: string
                              description: >-
                                Signaux d'analyse forensique qui se sont
                                déclenchés, tels que duplicate_font_subset ou
                                glyph_fragmentation.
                            manipulated_regions:
                              type: array
                              description: >-
                                Zones suspectées de manipulation selon les
                                coordonnées de la page PDF.
                              items:
                                type: object
                                properties:
                                  page:
                                    type: integer
                                  x:
                                    type: number
                                  'y':
                                    type: number
                                  width:
                                    type: number
                                  height:
                                    type: number
                                  page_width:
                                    type: number
                                  page_height:
                                    type: number
                    description:
                      type: string
                      nullable: true
                      description: >-
                        Libellé ou motif fourni par l'analyste pour une demande
                        de document. `null` pour les téléversements standards.
                    is_requested:
                      type: boolean
                      description: >-
                        Vrai pour les espaces réservés de demandes de documents
                        créés par un analyste et en attente d'un téléversement.
                    ocr_data:
                      type: object
                      nullable: true
                    is_console_upload:
                      type: boolean
                      description: >-
                        Vrai pour les documents téléversés depuis la console
                        plutôt que depuis le parcours de l'utilisateur final.
                        Les téléversements depuis la console ne modifient jamais
                        le statut global au niveau de la fonctionnalité.
                    is_confirmed:
                      type: boolean
                      description: >-
                        Les téléversements depuis la Console commencent à
                        `false` et passent à `true` une fois confirmés par
                        l'administrateur ; les téléversements par l'utilisateur
                        final sont toujours à `true`.
              groups:
                type: object
                description: >-
                  Compteurs de progression par groupe indexés par nom de groupe
                  (par ex. legal_presence, ownership_structure).
                additionalProperties:
                  type: object
                  properties:
                    total:
                      type: integer
                    approved:
                      type: integer
                    pending:
                      type: integer
                    declined:
                      type: integer
                    in_review:
                      type: integer
                    other:
                      type: integer
                    missing:
                      type: integer
                      description: >-
                        Espaces réservés demandés sans aucun fichier encore
                        téléversé.
              required_groups:
                type: array
                items:
                  type: string
              warnings:
                type: array
                items:
                  type: object
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            Indique si la session a été créée par une application de production
            (`live`) ou une application sandbox (`sandbox`). Les sessions
            sandbox sont gratuites, entièrement simulées et ne consomment jamais
            de crédits.
        sandbox_scenario:
          type: string
          nullable: true
          description: >-
            Le scénario sandbox avec lequel la session a été créée. `null` pour
            les sessions de production et pour les sessions sandbox créées sans
            scénario.
        resubmissions:
          type: array
          description: >-
            Renvoyé uniquement avec `include=resubmissions`, pour les sessions
            utilisateur et d'entreprise. Une entrée par demande de resoumission,
            de la plus ancienne à la plus récente. Chaque entrée contient les
            résultats renvoyés par les étapes resoumises avant la demande, afin
            que les soumissions antérieures restent consultables. La suppression
            de la session supprime toutes les soumissions.
          items:
            type: object
            properties:
              number:
                type: integer
                description: >-
                  1 pour la première resoumission de la session, 2 pour la
                  deuxième, et ainsi de suite.
              created_at:
                type: string
                format: date-time
                description: Moment où la nouvelle soumission a été demandée.
              previous_status:
                type: string
                description: Le statut de la session juste avant la requête.
              nodes:
                type: array
                description: Les étapes du workflow renvoyées à l'utilisateur.
                items:
                  type: object
                  properties:
                    node_id:
                      type: string
                    feature:
                      type: string
              reasons:
                type: object
                nullable: true
                additionalProperties:
                  type: string
                description: Le motif indiqué pour chaque étape, indexé par `node_id`.
              requested_by:
                type: object
                nullable: true
                description: Qui a demandé la resoumission.
                properties:
                  name:
                    type: string
                  email:
                    type: string
                  type:
                    type: string
              results:
                type: object
                additionalProperties: true
                description: >-
                  Ce que les étapes soumises à nouveau ont renvoyé avant la
                  requête, sous les mêmes clés et sous la même forme que les
                  résultats actuels de cette réponse (`id_verifications`,
                  `nfc_verifications`, `liveness_checks`, `face_matches`,
                  `poa_verifications`, `phone_verifications`,
                  `email_verifications`, `aml_screenings`, `ip_analyses`,
                  `database_validations`, `questionnaire_responses`,
                  `document_ai_documents`, `geolocation_checks` ; pour les
                  sessions d'entreprise également `document_verifications`).
                  Seules les clés des étapes qui ont été renvoyées apparaissent.
        biometric_consent:
          type: object
          nullable: true
          description: >-
            Indique si la session a requis un consentement biométrique explicite
            avant une capture de visage, pour quelle raison, ainsi que la preuve
            de la réponse. Sessions de Vérification des utilisateurs (KYC)
            uniquement ; le même objet figure dans la `decision` des webhooks de
            session. Vaut `null` lorsque la session n'a jamais été évaluée, par
            exemple un workflow sans capture de visage. Les champs sans valeur
            enregistrée sont à `null`. Un SDK natif inférieur à 4.10.0, ou qui
            ne transmet pas sa version, ne peut pas afficher l'étape de
            consentement : ses captures faciales s'exécutent comme auparavant,
            et une session ayant nécessité un consentement signale alors
            `status: "pending"` avec `reason:
            "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"`. Voir [Consentement
            biométrique](/fr/getting-started/biometric-consent).
          properties:
            required:
              type: boolean
              description: >-
                Whether the session must collect explicit biometric consent.
                Never goes back to `false`.
            trigger:
              type: string
              nullable: true
              enum:
                - declared_state
                - ip_state
                - ip_unknown
                - document_issuer
                - forced
                - customer_collected
              description: >-
                Raison pour laquelle le consentement est requis, ou comment il a
                été satisfait. `declared_state` : vous avez déclaré un État
                concerné (`user_state`, ou une adresse aux États-Unis dans
                `expected_details`). `ip_state` : l'IP de la personne se situe
                dans un État concerné (Illinois, Texas, Colorado). `ip_unknown`
                : les éléments situent la personne aux États-Unis mais l'État ne
                peut pas être déterminé (l'IP est aux États-Unis sans précision
                d'État, ou ne peut pas être localisée alors que vos informations
                ou le document situent la personne aux États-Unis).
                `document_issuer` : la pièce d'identité a été délivrée par un
                État concerné. `forced` : le mode de l'application est Always.
                `customer_collected` : vous avez transmis `biometric_consent`
                lors de la création de la session. `null` lorsqu'il n'est pas
                requis.
            status:
              type: string
              enum:
                - not_required
                - pending
                - given
                - declined
              description: >-
                `not_required` ; `pending` (requis et non fourni : la personne
                n'a pas encore répondu, ou `reason` explique pourquoi il n'a pas
                été recueilli) ; `given` ; `declined` (un refus a été enregistré
                et la session s'est terminée comme `Declined` ; aucun écran
                Didit ne propose de refus aujourd'hui).
            given_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Moment où le consentement a été donné. Pour
                `customer_collected`, la valeur `given_at` que vous avez
                envoyée.
            declined_at:
              type: string
              format: date-time
              nullable: true
              description: Moment où un refus a été enregistré.
            text_version:
              type: string
              nullable: true
              description: >-
                Identifiant de version du texte de consentement auquel la
                personne a répondu, ou celui que vous avez envoyé.
            text_hash:
              type: string
              nullable: true
              description: >-
                SHA-256 (hex) du texte exact de consentement affiché, dans la
                langue dans laquelle il a été affiché.
            locale:
              type: string
              nullable: true
              description: Langue dans laquelle le texte de consentement a été affiché.
            policy_url:
              type: string
              format: uri
              nullable: true
              description: >-
                La politique relative aux données biométriques vers laquelle
                renvoyait l'étape de consentement.
            step:
              type: string
              nullable: true
              description: >-
                Étape de workflow sur laquelle se trouvait la session lorsque la
                personne a répondu, par exemple `LIVENESS`.
            node_id:
              type: string
              nullable: true
              description: >-
                Nœud du graphe de workflow sur lequel se trouvait la session
                lorsque la personne a répondu.
            ip_address:
              type: string
              nullable: true
              description: IP d'où provient la réponse.
            ip_country_code:
              type: string
              nullable: true
              description: Pays ISO 3166-1 alpha-2 de l'adresse IP de la réponse.
            ip_state:
              type: string
              nullable: true
              description: >-
                Subdivision ISO 3166-2 de l'IP de la réponse, par exemple
                `US-IL`.
            ip_city:
              type: string
              nullable: true
              description: Ville de l'IP de la réponse.
            user_agent:
              type: string
              nullable: true
              description: Agent utilisateur de la requête associée à la réponse.
            detected_ip_address:
              type: string
              nullable: true
              description: >-
                L'IP de la personne depuis laquelle l'exigence a été évaluée
                pour la dernière fois. Peut différer de `ip_address` lorsque la
                personne a répondu sur un autre appareil.
            detected_country_code:
              type: string
              nullable: true
              description: Pays ISO 3166-1 alpha-2 de l'adresse IP détectée.
            detected_state:
              type: string
              nullable: true
              description: Subdivision ISO 3166-2 de l'IP détectée.
            detected_city:
              type: string
              nullable: true
              description: Ville de l'IP détectée.
            declared_state:
              type: string
              nullable: true
              description: >-
                Subdivision ISO 3166-2 que vous avez déclarée : `user_state`, ou
                l'État d'une adresse américaine dans `expected_details`.
            document_state:
              type: string
              nullable: true
              description: >-
                Subdivision ISO 3166-2 ayant délivré le document d'identité, lue
                lors de la capture de la pièce d'identité.
            jurisdictions:
              type: array
              items:
                type: string
              description: >-
                États américains (codes USPS, par exemple `IL`) dont la
                législation sur la biométrie couvre la personne. `US` lorsque
                les éléments indiquent que la personne se trouve aux États-Unis
                mais qu'aucun État n'est connu. Vide si aucun ne s'applique.
            retention_months:
              type: integer
              nullable: true
              description: >-
                La durée minimale de conservation biométrique, en mois, parmi
                `jurisdictions`. Vaut `null` si aucune ne s'applique.
            reason:
              type: string
              nullable: true
              enum:
                - BIOMETRIC_CONSENT_UNSUPPORTED_SDK
                - BIOMETRIC_CONSENT_DECLINED
              description: >-
                `BIOMETRIC_CONSENT_UNSUPPORTED_SDK` : le consentement était
                requis et un SDK natif inférieur à 4.10.0, ou ne transmettant
                pas sa version, a capturé un visage sans l'étape de consentement
                ; `status` reste `pending`, ou devient `given` si la personne a
                accepté ultérieurement dans le flux hébergé.
                `BIOMETRIC_CONSENT_DECLINED` : un refus a été enregistré (il
                remplace le motif du SDK). `null` dans les autres cas, et
                toujours `null` lorsque la session ne nécessitait pas de
                consentement.
            decline_reason:
              type: string
              nullable: true
              enum:
                - BIOMETRIC_CONSENT_DECLINED
              description: >-
                `BIOMETRIC_CONSENT_DECLINED` lorsqu'un refus enregistré a mis
                fin à la session, sinon `null`.
            face_data_deleted_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Date et heure auxquelles le refus a entraîné la suppression des
                images de visage, des vidéos et des gabarits biométriques de la
                session. `null` sauf si un refus a été enregistré.
        investigator:
          $ref: '#/components/schemas/InvestigatorBlock'
        biometric_retention:
          $ref: '#/components/schemas/BiometricRetention'
        fraud_check:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            Le résultat d'un appel à l'API Fraud Check. `null` pour toute autre
            session.
        full_session_video:
          type: string
          format: uri
          nullable: true
          description: >-
            URL temporaire de l'enregistrement complet de la session. Renvoyée
            uniquement lorsque votre organisation enregistre la vidéo complète
            de la session.
        full_session_video_recorded_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Date et heure d'enregistrement de la session complète. Renvoyé
            uniquement lorsque votre organisation enregistre la vidéo complète
            de la session.
    AddressValidationResult:
      type: object
      description: "Le résultat d'une Address Validation\_: indique si l'adresse existe, ainsi que sa forme normalisée. Cela confirme uniquement l'adresse\_; cela ne lie jamais l'adresse à une personne."
      required:
        - status
        - verification_level
        - address
        - formatted_address
        - latitude
        - longitude
      properties:
        status:
          type: string
          enum:
            - verified
            - partially_verified
            - not_verified
            - unavailable
          description: "`verified`\_: l'adresse a été confirmée jusqu'au bâtiment (ou à l'appartement ou à la boîte postale). `partially_verified`\_: elle a été confirmée uniquement jusqu'à la rue, ou au niveau le plus précis contenu dans les données de référence postales pour ce lieu. `not_verified`\_: seule la région ou la ville correspondait, ou rien ne correspondait. `unavailable`\_: la validation n'a pas pu être exécutée (par exemple, le service de référence n'a pas répondu)\_; elle n'est pas facturée et n'affecte jamais une vérification."
        verification_level:
          type: string
          nullable: true
          enum:
            - administrative_area
            - locality
            - thoroughfare
            - premise
            - delivery_point
            - null
          description: >-
            Le niveau le plus précis auquel l'adresse a été mise en
            correspondance. `null` si aucune correspondance n'a été trouvée ou
            si `status` est `unavailable`.
        address:
          type: object
          nullable: true
          description: L'adresse normalisée. `null` lorsque `status` est `unavailable`.
          properties:
            address_line_1:
              type: string
              nullable: true
              description: Première ligne de livraison, rédigée selon le format du pays.
              example: 1600 Amphitheatre Pkwy
            address_line_2:
              type: string
              nullable: true
              description: >-
                Deuxième ligne de livraison (appartement, bâtiment ou quartier),
                si l'adresse en comporte une.
            city:
              type: string
              nullable: true
              example: Mountain View
            region:
              type: string
              nullable: true
              description: État, province ou région.
              example: CA
            postal_code:
              type: string
              nullable: true
              example: 94043-1351
            country:
              type: string
              nullable: true
              description: Code pays ISO 3166-1 alpha-2.
              example: US
        formatted_address:
          type: string
          nullable: true
          description: L'adresse normalisée sur une seule ligne.
          example: 1600 Amphitheatre Pkwy, Mountain View CA 94043-1351
        latitude:
          type: number
          nullable: true
          example: 37.422022
        longitude:
          type: number
          nullable: true
          example: -122.08429
    PhoneIntelligence:
      type: object
      description: >-
        Bloc de renseignements téléphoniques normalisé. Présent uniquement
        lorsque le module complémentaire d'intelligence a été exécuté pour cette
        recherche ; lorsqu'il est présent, il est également exposé sous l'alias
        `enrichment` avec des valeurs identiques.
      properties:
        score:
          type: number
          nullable: true
          description: >-
            Score de risque normalisé de 0 à 100. Plus la valeur est élevée,
            plus le risque est grand.
        phone_type_risk:
          type: string
          nullable: true
          description: '`Low`, `Medium` ou `High`, dérivé du score.'
        phone_trust_index:
          type: number
          nullable: true
          description: >-
            Inverse du score, pour les tableaux de bord qui préfèrent qu'une
            valeur plus élevée soit meilleure.
        network_stability_index:
          type: number
          nullable: true
          description: Stabilité du réseau de la ligne.
        is_disposable:
          type: boolean
          nullable: true
          description: '`true` lorsque le numéro semble jetable ou virtuel.'
        is_ported:
          type: boolean
          nullable: true
          description: '`true` lorsque le numéro a changé d''opérateur.'
        is_recently_ported:
          type: boolean
          nullable: true
          description: '`true` lorsque la portabilité a eu lieu récemment.'
        carrier_type:
          type: string
          nullable: true
          description: >-
            Classification de la ligne signalée par la recherche (par exemple,
            `mobile`).
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: "Identifiant Didit stable du signal, par exemple `IR-5AC67A32`. Opaque\_: utilisez-le pour regrouper et filtrer, ne l'interprétez pas."
              value:
                nullable: true
                description: >-
                  Pour un indicateur de risque (par exemple `voip`, `leaked`,
                  `disposable`, `spam_trap`), sa valeur : un booléen, un niveau
                  ou une date. Null pour un code de motif noté.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: >-
                  Indique si le signal a augmenté le risque ou renforcé la
                  confiance.
              message:
                type: string
                description: Explication lisible par l'humain du signal, en anglais.
              impact_level:
                type: string
                nullable: true
                description: >-
                  Mesure dans laquelle le signal a influencé le score, par
                  exemple `low`, `medium` ou `high`.
          description: >-
            Signaux expliquant le score, chacun accompagné d'un code Didit
            stable, d'un sens, d'un message et d'un niveau d'impact. De nouveaux
            codes pouvant apparaître au fil du temps, ne rejetez pas les codes
            inconnus.
    PhoneSocialFootprint:
      type: object
      nullable: true
      description: >-
        Empreinte sociale du numéro de téléphone : les plateformes en ligne sur
        lesquelles il est enregistré. Présent uniquement lorsque `enable_social`
        a été défini et que la vérification s'est terminée. Chaque décompte peut
        être nul lorsqu'aucune donnée n'a été renvoyée pour celui-ci.
        `profiles_registered: 0` signifie que les plateformes ont été vérifiées
        et que le numéro de téléphone n'a été trouvé sur aucune d'entre elles,
        une réponse valide et facturable, ainsi qu'un signal fréquent d'identité
        synthétique.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: >-
            Plateformes pour lesquelles l'inscription du numéro de téléphone est
            confirmée.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: Plateformes évaluées pour l'inscription.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: Plateformes ayant renvoyé un nom associé.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: Plateformes ayant renvoyé une photo de profil.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: >-
            Plateformes de communication sur lesquelles une présence a été
            détectée.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: Catégories de plateformes distinctes avec une présence détectée.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: Indicateur composite de maturité numérique, de 0 à 10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: Indicateur de richesse du profil, de 0 à 10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: Mix de plateformes gratuites vs payantes, 0-10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: Inscriptions sur des plateformes gratuites.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: Inscriptions sur des plateformes payantes.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: Inscriptions sur des plateformes freemium.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: "Niveau de complétion du profil WhatsApp. Téléphone uniquement\_; null pour l'e-mail."
          example: Partial
        registered_platforms:
          type: array
          description: Plateformes pour lesquelles l'inscription est confirmée.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: Plateformes vérifiées avec un résultat négatif.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: Nombre d'inscrits et ratio par catégorie de plateforme.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            Détails du profil par plateforme, indexés par plateforme, lorsque
            celle-ci les expose.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    EmailIntelligence:
      type: object
      description: >-
        Bloc de renseignements d'e-mail normalisé. Présent uniquement lorsque le
        module complémentaire d'intelligence a été exécuté pour cet e-mail ;
        lorsqu'il est présent, il est également exposé sous l'alias `enrichment`
        avec des valeurs identiques.
      properties:
        score:
          type: number
          nullable: true
          description: >-
            Score de risque normalisé de 0 à 100. Plus la valeur est élevée,
            plus le risque est grand.
        deliverable:
          type: string
          nullable: true
          description: Tranche de délivrabilité (par ex., `high`).
        breach_risk_level:
          type: string
          nullable: true
          description: '`Low`, `Medium` ou `High`.'
        breach_risk_index:
          type: number
          nullable: true
          description: Indice numérique de risque de violation.
        is_recent_breach:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque l'adresse apparaît dans une violation récente de
            données.
        is_frequent_breached:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque l'adresse apparaît dans de nombreuses violations de
            données.
        is_disposable:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque le domaine appartient à un fournisseur d'e-mails
            jetables.
        is_free_domain:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque le domaine provient d'un fournisseur d'e-mails
            gratuit.
        is_breached:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque l'adresse apparaît dans des violations de données
            connues.
        no_of_breaches:
          type: number
          nullable: true
          description: Nombre de violations de données connues contenant l'adresse.
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: "Identifiant Didit stable du signal, par exemple `IR-5AC67A32`. Opaque\_: utilisez-le pour regrouper et filtrer, ne l'interprétez pas."
              value:
                nullable: true
                description: >-
                  Pour un indicateur de risque (par exemple `voip`, `leaked`,
                  `disposable`, `spam_trap`), sa valeur : un booléen, un niveau
                  ou une date. Null pour un code de motif noté.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: >-
                  Indique si le signal a augmenté le risque ou renforcé la
                  confiance.
              message:
                type: string
                description: Explication lisible par l'humain du signal, en anglais.
              impact_level:
                type: string
                nullable: true
                description: >-
                  Mesure dans laquelle le signal a influencé le score, par
                  exemple `low`, `medium` ou `high`.
          description: >-
            Signaux expliquant le score, chacun accompagné d'un code Didit
            stable, d'un sens, d'un message et d'un niveau d'impact. De nouveaux
            codes pouvant apparaître au fil du temps, ne rejetez pas les codes
            inconnus.
    EmailSocialFootprint:
      type: object
      nullable: true
      description: "Empreinte sociale de l'adresse e-mail\_: les plateformes en ligne sur lesquelles elle est enregistrée. Présent uniquement lorsque `enable_social` a été défini et que la vérification s'est terminée. Chaque décompte peut être nul lorsqu'aucune donnée n'a été renvoyée pour celui-ci. `profiles_registered: 0` signifie que les plateformes ont été vérifiées et que l'adresse e-mail n'a été trouvée sur aucune d'entre elles - une réponse valide et facturable, ainsi qu'un signal fréquent d'identité synthétique."
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: >-
            Plateformes pour lesquelles l'inscription de l'adresse e-mail est
            confirmée.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: Plateformes évaluées pour l'inscription.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: Plateformes ayant renvoyé un nom associé.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: Plateformes ayant renvoyé une photo de profil.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: >-
            Plateformes de communication sur lesquelles une présence a été
            détectée.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: Catégories de plateformes distinctes avec une présence détectée.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: Indicateur composite de maturité numérique, de 0 à 10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: Indicateur de richesse du profil, de 0 à 10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: Mix de plateformes gratuites vs payantes, 0-10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: Inscriptions sur des plateformes gratuites.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: Inscriptions sur des plateformes payantes.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: Inscriptions sur des plateformes freemium.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: "Niveau de complétion du profil WhatsApp. Téléphone uniquement\_; null pour l'e-mail."
          example: Partial
        registered_platforms:
          type: array
          description: Plateformes pour lesquelles l'inscription est confirmée.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: Plateformes vérifiées avec un résultat négatif.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: Nombre d'inscrits et ratio par catégorie de plateforme.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            Détails du profil par plateforme, indexés par plateforme, lorsque
            celle-ci les expose.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    DocumentAIDetectedCode:
      type: object
      required:
        - type
        - page_number
        - position
        - x
        - 'y'
        - width
        - height
        - page_width
        - page_height
        - raw_payload
        - parsed_payload
      properties:
        type:
          type: string
          description: >-
            Symbologie détectée, par exemple `QR_CODE`, `CODE_128`, `EAN_13`,
            `DATA_MATRIX` ou `PDF_417`.
        page_number:
          type: integer
          minimum: 1
          description: Numéro de page (à partir de 1).
        position:
          type: array
          nullable: true
          description: >-
            Polygone détecté en coordonnées de pixels de la page rendue. `null`
            lorsqu'aucun emplacement fiable n'est disponible.
          items:
            type: array
            minItems: 2
            maxItems: 2
            items:
              type: integer
        x:
          type: integer
          nullable: true
          description: Bord gauche de la boîte englobante en pixels de la page rendue.
        'y':
          type: integer
          nullable: true
          description: Bord supérieur de la boîte englobante en pixels de la page rendue.
        width:
          type: integer
          nullable: true
          description: Largeur de la boîte englobante en pixels de la page rendue.
        height:
          type: integer
          nullable: true
          description: Hauteur de la boîte englobante en pixels de la page rendue.
        page_width:
          type: integer
          description: Largeur de la page générée en pixels.
        page_height:
          type: integer
          description: Hauteur de la page générée en pixels.
        raw_payload:
          type: string
          description: >-
            Payload brut du décodeur sous forme de chaîne base64 lorsqu'il est
            disponible ; sinon chaîne vide.
        parsed_payload:
          nullable: true
          description: >-
            Chaîne décodée ou valeur structurée. `null` lorsque le code a été
            localisé mais n'a pas pu être décodé.
    BankVerificationResult:
      type: object
      description: >-
        Résultat d'une étape de vérification bancaire, pour la Vérification des
        utilisateurs et la Vérification d'entreprise (KYB). `method` indique
        comment le compte a été vérifié, et `none` que la personne a continué
        sans banque avant qu'une tentative ne soit évaluée.
        `continued_without_bank` indique que la personne a continué sans banque,
        également après une tentative évaluée. Voir [Méthodes de vérification
        bancaire](/fr/core-technology/bank-verification/verification-methods) et
        [Lorsque la personne ne peut pas vérifier sa
        banque](/fr/core-technology/bank-verification/fallbacks).
      properties:
        schema_version:
          type: integer
          description: Version de ce format de résultat. `1` actuellement.
        bank_verification_id:
          type: string
          format: uuid
          description: L'identifiant de ce résultat.
        node_id:
          type: string
          description: Le nœud de workflow auquel ce résultat appartient.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Expired
          description: Le verdict de l'étape, après ses actions et ses règles de statut.
        original_status:
          type: string
          nullable: true
          description: >-
            Le premier verdict rendu par l'étape, avant toute modification
            ultérieure telle qu'un examen manuel.
        method:
          type: string
          nullable: true
          enum:
            - open_banking
            - account_lookup
            - microdeposits
            - statement
            - none
          description: >-
            Manière dont le compte a été vérifié : `open_banking` (connexion
            bancaire : la personne s'est connectée auprès de sa banque),
            `account_lookup` (vérification de compte : la personne a saisi les
            coordonnées du compte et la banque a confirmé le nom),
            `microdeposits` ou `statement` (téléversement d'un relevé bancaire).
            `none` lorsque la personne a poursuivi sans banque avant qu'une
            tentative n'ait été évaluée, de sorte qu'aucun compte n'a été
            vérifié. Après une tentative évaluée, la méthode de cette tentative
            est conservée. `null` jusqu'à ce qu'un compte soit évalué, ainsi que
            lorsque le workflow restreint les données retournées. Les règles du
            workflow lisent la même valeur que `bank.method`.
        provider:
          type: string
          nullable: true
          description: >-
            La clé de la route qui a exécuté la connexion. Lisez `method`, et
            non cette clé, pour savoir comment le compte a été vérifié.
        credential_source:
          type: string
          nullable: true
          enum:
            - native
            - byok
          description: >-
            `native` : la route propre à Didit, facturée sur votre solde Didit.
            `byok` : un fournisseur de la marketplace que vous avez connecté
            avec vos propres identifiants.
        route:
          type: object
          nullable: true
          description: >-
            La route choisie avant le consentement. Elle ne change jamais par la
            suite.
          properties:
            provider_key:
              type: string
              nullable: true
              description: La clé de la route.
            credential_source:
              type: string
              enum:
                - native
                - byok
            is_fallback:
              type: boolean
              description: >-
                Indique si la route propre de Didit s'est substituée à un
                fournisseur de marketplace qui n'a pas pu se connecter.
            provider_connection_id:
              type: string
              nullable: true
              description: La connexion à la marketplace utilisée, pour `byok`.
            requested_scopes:
              type: array
              items:
                type: string
              description: >-
                Les données demandées par la connexion, par exemple `ownership`
                ou `balances`.
        connection:
          type: object
          nullable: true
          description: >-
            La connexion de la dernière tentative. `null` avant la première
            tentative.
          properties:
            status:
              type: string
              enum:
                - pending
                - connected
                - cancelled
                - timeout
                - failed
                - unsupported
                - revoked
                - expired
            institution_id:
              type: string
              nullable: true
              description: >-
                L'identifiant de la banque. `null` pour une vérification de
                compte où aucune banque n'est sélectionnée.
            institution_name:
              type: string
              nullable: true
              description: Le nom de la banque. `null` pour une vérification de compte.
            institution_country:
              type: string
              nullable: true
              description: Le pays du compte, ISO 3166-1 alpha-3.
            oauth:
              type: boolean
              nullable: true
              description: >-
                Indique si la connexion bancaire s'est effectuée via OAuth ou
                via une communication d'application à application. `null` pour
                une vérification de compte.
            connected_at:
              type: string
              format: date-time
              nullable: true
              description: Date et heure auxquelles la connexion a réussi.
            consent_expires_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Date et heure de fin du consentement bancaire, pour la connexion
                bancaire.
            last_refreshed_at:
              type: string
              format: date-time
              nullable: true
              description: Date et heure de dernière relecture des données financières.
            attempts:
              type: integer
              description: >-
                Le nombre de tentatives que la personne a consacrées à cette
                étape, toutes méthodes confondues.
            reason_code:
              type: string
              nullable: true
              description: >-
                Raison pour laquelle la connexion n'est pas simplement
                `connected`, par exemple `USER_CANCELLED`, `INSTITUTION_DOWN`,
                `ACCOUNT_NOT_FOUND`, `REFERENCE_IDENTITY_MISSING` ou
                `VERIFICATION_COMPLETED`.
        account:
          type: object
          nullable: true
          description: Le compte évalué. `null` jusqu'à ce qu'un compte soit évalué.
          properties:
            account_id_masked:
              type: string
              nullable: true
              description: Le numéro de compte, masqué.
            iban_masked:
              type: string
              nullable: true
              description: L'IBAN, masqué.
            sort_code:
              type: string
              nullable: true
              description: Le code guichet, au Royaume-Uni.
            routing_number_masked:
              type: string
              nullable: true
              description: Le numéro de routage, masqué.
            type:
              type: string
              nullable: true
              enum:
                - checking
                - current
                - savings
                - business
                - other
            subtype:
              type: string
              nullable: true
              description: Le sous-type de compte propre à la banque.
            currency:
              type: string
              nullable: true
              description: Devise ISO 4217 du compte.
            holder_type:
              type: string
              nullable: true
              enum:
                - person
                - business
                - unknown
            holders_count:
              type: integer
              nullable: true
            is_joint:
              type: boolean
              nullable: true
            is_business:
              type: boolean
              nullable: true
        ownership:
          type: object
          nullable: true
          description: >-
            Manière dont le titulaire du compte a été comparé à l'identité
            vérifiée. `null` jusqu'à ce qu'un compte soit évalué.
          properties:
            result:
              type: string
              enum:
                - match
                - partial_match
                - no_match
                - unknown
                - not_verifiable
              description: >-
                `partial_match` indique une correspondance proche.
                `not_verifiable` : la banque a répondu sans titulaire à
                comparer. `unknown` : la pièce justificative n'a pas pu être
                lue, ou il n'y avait aucune identité à comparer.
            reference_identity_source:
              type: string
              nullable: true
              description: >-
                L'étape par rapport à laquelle l'identité du titulaire a été
                comparée : `kyc`, `database_validation`, `expected_details`,
                `questionnaire`, `document_ai` ou `kyb`.
            name_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: Score Didit du nom du titulaire.
            provider_name_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                Le score du nom du titulaire propre à la banque, lorsqu'elle en
                a renvoyé un.
            address_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                Le score de l'adresse du titulaire, lorsque la correspondance
                d'adresse a été effectuée.
            email_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                Le score de l'e-mail du titulaire, lorsque la correspondance
                d'e-mail a été effectuée.
            phone_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                Le score du téléphone du titulaire, lorsque la correspondance de
                téléphone a été effectuée.
            dob_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                Le score de la date de naissance du titulaire, lorsque la banque
                en a partagé une.
            close_match:
              type: boolean
              nullable: true
              description: >-
                Indique si le nom se situe dans la plage de correspondance
                proche.
            holder_confirmation:
              type: string
              nullable: true
              enum:
                - pending
                - confirmed
                - rejected
              description: >-
                La réponse de la personne lorsqu'il lui est demandé de confirmer
                un nom très proche. `null` si aucune demande n'a été formulée.
            method:
              type: string
              nullable: true
              enum:
                - exact
                - token_set
                - nickname
                - transliteration
                - fuzzy
                - provider_only
                - microdeposits
              description: >-
                Quelle comparaison de noms a produit le score. Il ne s'agit pas
                de la méthode de vérification : consultez le champ de premier
                niveau `method` pour cela.
            matched_holder_index:
              type: integer
              nullable: true
            holders:
              type: array
              items:
                type: object
              description: Chaque titulaire répertorié par la banque, avec ses scores.
            owner_identity_available:
              type: boolean
              nullable: true
            evidence_freshness:
              type: string
              nullable: true
              enum:
                - live
                - cached
                - refreshed
            evaluated_at:
              type: string
              format: date-time
              nullable: true
              description: Date et heure auxquelles la décision a été calculée.
        financial_data:
          type: object
          description: >-
            Les données financières lues par l'étape. Seule la connexion
            bancaire les lit.
          properties:
            balances:
              type: object
              nullable: true
              description: Avec la portée `balances`.
            transactions:
              type: object
              nullable: true
              description: Avec la portée `transactions`.
            income:
              type: object
              nullable: true
              description: Avec la portée `income`.
            categorization:
              type: object
              nullable: true
              description: >-
                Catégorisation par Didit des transactions lues. `null` lorsqu'il
                n'y en a pas.
            not_collected:
              type: array
              items:
                type: string
                enum:
                  - balances
                  - income
                  - transactions
              description: >-
                Les données demandées par l'étape que la méthode ayant vérifié
                le compte ne collecte pas. Les soldes, transactions et revenus
                proviennent uniquement de la connexion bancaire, donc un compte
                vérifié par vérification de compte les répertorie ici. Jamais un
                échec. Vide sinon.
        billing:
          type: object
          nullable: true
          properties:
            route:
              type: string
              enum:
                - native
                - byok
            billed:
              type: boolean
            marketplace_fee:
              type: string
              nullable: true
              description: Les frais de plateforme de la marketplace facturés, pour `byok`.
            usage_type:
              type: string
              nullable: true
              description: >-
                La ligne d'utilisation sur laquelle le débit a été comptabilisé
                : `bank_verification` pour une connexion bancaire ou une
                vérification de compte, `bank_statement_upload` pour un
                téléversement de relevé sans tentative bancaire facturée
                préalable, et `bank_byok_fee` pour les frais de marketplace sur
                votre propre fournisseur. `null` lorsque rien n'a été facturé.
        reference_identity:
          type: object
          nullable: true
          description: L'identité à laquelle le titulaire a été comparé, avec sa source.
        signals:
          type: object
          nullable: true
          description: >-
            Signaux du compte lus à partir de l'historique des transactions,
            lorsque l'étape en a lu un.
        connection_abandoned:
          type: boolean
          nullable: true
          description: >-
            Indique si l'étape s'est terminée sans correspondance après que la
            personne a quitté l'étape auprès de sa banque.
        not_covered:
          type: boolean
          nullable: true
          description: >-
            Indique si la banque ou le pays de la personne n'a pas pu être joint
            lors de cette étape. Vaut également `true` lorsque la personne a
            continué sans banque parce qu'aucune méthode n'a pu vérifier son
            pays ou sa banque.
        continued_without_bank:
          type: boolean
          description: >-
            Indique si la personne a quitté l'étape avec **Continuer sans votre
            banque**. `continuation` indique alors la raison. `method` vaut
            `none` lorsqu'aucune tentative n'a été évaluée avant qu'elle ne
            continue. Après une tentative évaluée, comme un titulaire ne
            correspondant pas, `method` conserve la méthode de cette tentative
            et son verdict ainsi que ses codes de motif sont maintenus. Renvoyé
            même lorsque le workflow restreint les données qu'il retourne.
        continuation:
          type: object
          nullable: true
          description: >-
            Manière dont la personne a poursuivi sans banque. `null` lorsqu'elle
            ne l'a pas fait. Lorsque le workflow restreint les données
            retournées, `reason` est toujours renvoyé et toutes les autres clés
            sont `null`.
          properties:
            reason:
              type: string
              enum:
                - no_route
                - institution_unsupported
                - attempts_exhausted
                - person_choice
              description: >-
                Raison, telle que Didit l'a déterminée lorsque la personne a
                poursuivi : `no_route` (aucune connexion bancaire ni
                vérification de compte ne dessert son pays),
                `institution_unsupported` (la banque sélectionnée ne peut pas
                être utilisée sur cette étape), `attempts_exhausted` (toutes les
                tentatives étaient déjà épuisées et aucune n'était en cours) ou
                `person_choice` (un moyen de vérification était disponible et
                elle a choisi de poursuivre, y compris lorsque sa banque n'était
                pas joignable à cet instant). `no_route` et
                `institution_unsupported` suivent `bank_unsupported_action`,
                `attempts_exhausted` suit `bank_attempts_exhausted_action`, et
                `person_choice` suit `bank_skipped_action`, à moins qu'une
                tentative évaluée n'ait déjà tranché l'étape.
            country:
              type: string
              nullable: true
              description: >-
                Le pays dans lequel la personne effectuait la vérification, au
                format ISO 3166-1 alpha-3. `null` si elle a continué avant d'en
                sélectionner un.
            offered:
              type: array
              items:
                type: string
                enum:
                  - statement
                  - microdeposits
              nullable: true
              description: "Les autres moyens de vérification proposés à la personne par ce pays lorsqu'elle a continué, dans l'ordre où ils ont été proposés\_: `statement` (téléversement d'un relevé), puis `microdeposits`. Vide si aucun n'a été proposé."
            institution_id:
              type: string
              nullable: true
              description: >-
                Pour `institution_unsupported`, l'identifiant de la banque que
                la personne n'a pas pu utiliser : la banque qu'elle a
                sélectionnée ou celle sur laquelle sa dernière tentative s'est
                terminée. Didit le tire de sa propre liste de banques, jamais de
                l'appareil de la personne, donc une banque absente de cette
                liste est `null`. `null` pour tout autre motif.
            institution_name:
              type: string
              nullable: true
              description: >-
                Pour `institution_unsupported`, le nom de cette banque, issu de
                la même liste que `institution_id`. `null` lorsque cette liste
                ne comporte pas la banque, et pour tout autre motif.
            continued_at:
              type: string
              format: date-time
              nullable: true
              description: Moment où la personne a poursuivi.
        evidence_purged_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Date et heure auxquelles la preuve bancaire a été supprimée
            conformément à `bank_evidence_retention_days`. `null` sinon.
        warnings:
          type: array
          items:
            type: string
          description: >-
            Codes informatifs, par exemple `holder_declared`. Un avertissement
            ne modifie jamais le statut à lui seul.
        reason_codes:
          type: array
          items:
            type: string
          description: >-
            Raison pour laquelle le verdict a été rendu ainsi, par exemple
            `OWNER_NAME_PARTIAL`. Plusieurs raisons peuvent s'appliquer.
            `NOT_COVERED` : la personne a continué sans banque car aucune
            méthode ne pouvait vérifier son pays ou sa banque. `SKIPPED` : la
            personne a choisi de continuer sans banque alors qu'un moyen de
            vérification était disponible. Aucun des deux n'est ajouté
            lorsqu'une tentative évaluée a déjà tranché l'étape.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    SignatureResult:
      type: object
      description: >-
        Le résultat d'un signataire pour une étape de Signature électronique.
        Consultez le [rapport de Signature
        électronique](/fr/core-technology/electronic-signature/report-electronic-signature).
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Transmettez-le comme `signature_id` pour télécharger les preuves de
            ce signataire ou valider sa signature.
        node_id:
          type: string
          description: L'étape de workflow qui l'a produit.
        status:
          type: string
          enum:
            - intro
            - review
            - code
            - signing
            - signed
            - declined
          description: >-
            Statut du signataire dans l'étape. Seul `signed` signifie que les
            documents sont signés.
        verdict:
          type: string
          enum:
            - Not Finished
            - Approved
            - In Review
            - Declined
          description: >-
            Le résultat de l'étape. Un avertissement le définit via sa règle ;
            les règles de statut personnalisées s'appliquent ensuite.
        level:
          type: string
          enum:
            - simple
            - aes
            - qes
          description: >-
            `simple` (par défaut) ou `aes`. `qes` (signature électronique
            qualifiée, SEQ) est un module complémentaire qui n'est pas encore
            disponible.
        format:
          type: string
          enum:
            - pdf
            - pades
          description: >-
            `pdf` pour une signature Simple, `pades` pour une signature Avancée
            (AES).
        profile:
          type: string
          nullable: true
          description: >-
            `PAdES-B-LT` une fois qu'une signature avancée (AES) est apposée,
            sinon null.
        signer:
          type: object
          properties:
            name:
              type: string
              nullable: true
              description: >-
                Le nom du signataire. Vérifié (à partir de la vérification
                d'identité approuvée ou de la session), sauf au niveau Simple
                sans nom de session vérifié, où il s'agit du nom saisi par le
                signataire et il n'est pas vérifié.
            capacity:
              type: string
              enum:
                - self
                - company
            company:
              type: string
              nullable: true
            role:
              type: string
              nullable: true
              description: La désignation de la personne clé, telle que déclarée.
            roles:
              type: array
              items:
                type: string
              description: >-
                Les rôles structurés de la personne clé, tels que déclarés pour
                l'entreprise.
            identity_session_id:
              type: string
              format: uuid
              description: La session KYC qui a vérifié le signataire.
        identity_used:
          type: object
          description: >-
            L'identité vérifiée sur laquelle repose la signature. Vide pour une
            signature simple sans identité vérifiée.
          properties:
            session_id:
              type: string
              format: uuid
            kyc_id:
              type: string
              format: uuid
              nullable: true
            verified:
              type: boolean
            expected_name:
              type: string
              nullable: true
              description: Le nom auquel le signataire devait correspondre.
        certificate:
          type: object
          nullable: true
          description: >-
            Le certificat avec lequel les documents ont été signés. `null`
            jusqu'à la signature, et toujours `null` pour une signature Simple.
          properties:
            issuer:
              type: string
            issued_to:
              type: string
            serial:
              type: string
              description: Numéro de série, hexadécimal.
            valid_from:
              type: string
              format: date-time
            valid_until:
              type: string
              format: date-time
        confirmation:
          type: object
          properties:
            channel:
              type: string
              nullable: true
              enum:
                - email
                - sms
              description: '`null` pour une signature Simple, qui ne comporte aucun code.'
            destination:
              type: string
              nullable: true
              description: Le contact masqué auquel le code a été envoyé.
            confirmed_at:
              type: string
              format: date-time
              nullable: true
            attempts:
              type: integer
              description: Codes saisis, dont le bon.
        timestamp:
          type: object
          nullable: true
          description: >-
            L'horodatage RFC 3161 dans la signature, émis par Didit. `null`
            jusqu'à la signature, et toujours `null` pour une signature simple.
          properties:
            time:
              type: string
              format: date-time
            qualified:
              type: boolean
              description: Toujours `false` pour l'AES.
            valid:
              type: boolean
        documents:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: >-
                  Le document présent sur la copie de ce signataire. Utilisez-le
                  pour télécharger le fichier signé.
              uuid:
                type: string
                format: uuid
                description: Identique à `id`.
              title:
                type: string
              file_name:
                type: string
              pages:
                type: integer
                description: Pages du document signé. Pour Word, du PDF converti.
              size_bytes:
                type: integer
              sha256_original:
                type: string
                description: SHA-256 du document tel qu'il a été présenté au signataire.
              sha256_signed:
                type: string
                nullable: true
                description: SHA-256 du PDF signé, une fois signé.
              status:
                type: string
                enum:
                  - signed
                  - declined
                  - not_signed
                  - not_reached
                description: >-
                  `not_signed` : ouvert mais non signé. `not_reached` : jamais
                  ouvert.
              opened_at:
                type: string
                format: date-time
                nullable: true
              read_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Moment où le signataire a atteint la fin d'un document sans
                  champs, lorsque l'étape l'exige.
              read_to_end:
                type: boolean
              consented_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Moment où le signataire a accepté un document sans champs, ou
                  a complété les champs d'un document comportant des champs.
              consent:
                type: boolean
              signed_file:
                type: string
                nullable: true
                description: >-
                  Chemin du PDF signé, une fois signé. Voir [Télécharger un
                  document
                  signé](/fr/sessions-api/electronic-signature/download-signed-document).
              mode:
                type: string
                enum:
                  - fields
                  - read_and_agree
                description: >-
                  `fields` pour un document avec des champs, `read_and_agree`
                  pour un document sans champs.
              source_format:
                type: string
                enum:
                  - pdf
                  - docx
                description: >-
                  `pdf`, ou `docx` pour un document Word que Didit a converti en
                  PDF.
              conversion:
                type: object
                nullable: true
                description: >-
                  `null` pour un PDF. Pour un document Word, le fichier
                  d'origine et la conversion.
                properties:
                  from:
                    type: string
                    enum:
                      - docx
                  file_name:
                    type: string
                    description: Le nom d'origine de votre fichier Word.
                  sha256:
                    type: string
                    description: SHA-256 de votre fichier Word d'origine.
                  size_bytes:
                    type: integer
                    description: Taille de votre fichier Word d'origine.
                  converter:
                    type: string
                    description: Version du convertisseur qui a produit le PDF.
              fields:
                type: array
                description: >-
                  Champs sur le document, avec leurs valeurs. Vide pour un
                  document sans champs.
                items:
                  $ref: '#/components/schemas/SignatureFieldResult'
        adopted_signature:
          type: object
          nullable: true
          description: >-
            La signature et les initiales adoptées par le signataire pour les
            champs de signature et d'initiales. Vaut `null` tant que le
            signataire n'en a pas adopté.
          properties:
            method:
              type: string
              enum:
                - typed
                - drawn
              description: >-
                `typed` : le nom vérifié dans un style manuscrit. `drawn` :
                dessiné avec un doigt ou une souris.
            font:
              type: string
              nullable: true
              description: >-
                Le style d'écriture manuscrite d'une signature tapée. `null`
                lorsqu'elle est dessinée.
            adopted_at:
              type: string
              format: date-time
        electronic_signature_consent_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Moment où le signataire a accepté, sur l'écran d'examen, de signer
            électroniquement les documents. Défini lorsqu'un document comporte
            des champs.
        evidence_file:
          type: string
          nullable: true
          description: >-
            Chemin d'accès au PDF de preuve, une fois signé. Voir [Télécharger
            les preuves de
            signature](/fr/sessions-api/electronic-signature/download-evidence).
        warnings:
          type: array
          description: >-
            Avertissements générés pour ce signataire. Voir [Avertissements de
            la signature
            électronique](/fr/core-technology/electronic-signature/warnings-electronic-signature).
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - SIGNATURE_DECLINED
                  - SIGNATURE_OTP_FAILED
                  - SIGNATURE_NAME_MISMATCH
                  - SIGNATURE_IDENTITY_NOT_VERIFIED
                  - SIGNATURE_DOCUMENT_CHANGED
                  - SIGNATURE_FIELD_DATA_MISSING
              node_id:
                type: string
        validation:
          type: object
          nullable: true
          description: >-
            La dernière vérification cryptographique des documents signés.
            `null` jusqu'à ce que les documents soient signés. Si Didit ne peut
            pas confirmer l'issue de la signature, la valeur est `{"valid":
            null, "reason": "signature_provider_outcome_unknown", "checked_at":
            ...}` et `status` reste à `signing` : traitez-le comme non signé.
          properties:
            valid:
              type: boolean
              nullable: true
              description: >-
                `true` lorsque chaque document est valide. `null` lorsque le
                résultat de la signature n'a pas pu être confirmé.
            reason:
              type: string
              description: >-
                Défini lorsque `valid` est `null` :
                `signature_provider_outcome_unknown`.
            checked_at:
              type: string
              format: date-time
            documents:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  checked_at:
                    type: string
                    format: date-time
                  valid:
                    type: boolean
                    description: >-
                      `true` lorsque la signature et l'horodatage sont tous deux
                      valides et de confiance.
                  integrity:
                    type: boolean
                    description: >-
                      `true` lorsque le document n'a pas été modifié depuis sa
                      signature.
                  trusted:
                    type: boolean
                    description: >-
                      `true` lorsque le certificat de signature remonte à une
                      racine de confiance.
                  revoked:
                    type: boolean
                  trusted_list:
                    type: object
                    description: >-
                      Vérification de la liste de confiance de l'UE. Pour AES :
                      `{"status": "not_applicable", "reason":
                      "aes_not_qualified"}`.
                    properties:
                      status:
                        type: string
                      reason:
                        type: string
                  certificate:
                    type: object
                    nullable: true
                    description: >-
                      Le certificat avec lequel les documents ont été signés.
                      `null` jusqu'à la signature, et toujours `null` pour une
                      signature Simple.
                    properties:
                      issuer:
                        type: string
                      issued_to:
                        type: string
                      serial:
                        type: string
                        description: Numéro de série, hexadécimal.
                      valid_from:
                        type: string
                        format: date-time
                      valid_until:
                        type: string
                        format: date-time
                  timestamp:
                    type: object
                    nullable: true
                    description: >-
                      L'horodatage RFC 3161 dans la signature, émis par Didit.
                      `null` jusqu'à la signature, et toujours `null` pour une
                      signature simple.
                    properties:
                      time:
                        type: string
                        format: date-time
                      qualified:
                        type: boolean
                        description: Toujours `false` pour l'AES.
                      valid:
                        type: boolean
        declined_at:
          type: string
          format: date-time
          nullable: true
        declined_action:
          type: string
          enum:
            - DECLINE
            - REVIEW
            - NO_ACTION
        signed_at:
          type: string
          format: date-time
          nullable: true
        expires_at:
          type: string
          format: date-time
          description: Moment où le lien de signature cesse de fonctionner.
        email_sent_at:
          type: string
          format: date-time
          nullable: true
        email_unavailable_reason:
          type: string
          nullable: true
        ip_address:
          type: string
          nullable: true
          description: L'adresse IP du signataire au moment où il a demandé son code.
        place:
          type: string
          nullable: true
          description: 'Non collecté : toujours `null`.'
        place_unavailable_reason:
          type: string
          nullable: true
          enum:
            - not_collected
    AMLScreening:
      type: object
      properties:
        node_id:
          type: string
          description: Identifiant unique de cette étape AML dans le graphe du workflow.
        status:
          type: string
          description: >-
            Statut au niveau de la fonctionnalité de ce filtrage AML.
            Indépendant du `status` de la session de niveau supérieur — une
            session peut atteindre sa décision globale tandis qu'une
            fonctionnalité individuelle reste `In Review`.
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
        total_hits:
          type: integer
          description: Nombre total de correspondances trouvées
        entity_type:
          type: string
          description: 'Type d''entité filtrée : personne ou entreprise'
        hits:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: >-
                  Identifiant stable de Didit pour le résultat positif : `hit_`
                  suivi de 24 caractères hexadécimaux. La même entité
                  correspondante conserve le même `id` lorsque le sujet fait
                  l'objet d'un nouveau filtrage. Transmettez-le en tant que
                  `hit_id` aux endpoints d'examen des résultats AML.
              url:
                type: string
                format: uri
                description: URL source de la correspondance
              match:
                type: boolean
                description: Indique s'il s'agit d'une correspondance confirmée
              score:
                type: number
                format: float
                nullable: true
                minimum: 0
                maximum: 1
                description: >-
                  Score de correspondance pondéré obsolète compris entre 0 et 1
                  (par ex. `0.73`). Utilisez `match_score` (0-100) à la place.
                deprecated: true
              target:
                type: boolean
                nullable: true
                description: >-
                  Indique si l'entité correspondante est la cible directe de
                  l'inscription sur la liste (par opposition à une partie liée).
                  `null` lorsque la source ne le précise pas.
              caption:
                type: string
                description: Légende ou titre de la correspondance
              datasets:
                type: array
                items:
                  type: string
                  enum:
                    - PEP
                    - PEP Level 1
                    - PEP Level 2
                    - PEP Level 3
                    - PEP Level 4
                    - Sanctions
                    - Adverse Media
                    - Warnings and Regulatory Enforcement
                    - Fitness and Probity
                    - SIP
                    - SIE
                    - Insolvency
                    - Other Lists
                description: >-
                  Liste des catégories de jeux de données où la correspondance a
                  été trouvée. Indique si l'entité apparaît dans les listes PEP
                  (avec le niveau), les bases de données de sanctions, la presse
                  négative, les avertissements/mesures réglementaires ou
                  d'autres jeux de données de conformité. Vaut `Other Lists`
                  lorsque la source de l'entité n'indique aucune de ces
                  catégories.
              features:
                type: object
                nullable: true
                description: Caractéristiques supplémentaires de la correspondance
              rca_name:
                type: string
                description: Nom du RCA le cas échéant
              last_seen:
                type: string
                format: date-time
                description: >-
                  Date à laquelle la correspondance a été vue pour la dernière
                  fois
              risk_view:
                type: object
                properties:
                  crimes:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  countries:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  categories:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  custom_list:
                    type: object
              first_seen:
                type: string
                format: date-time
                description: >-
                  Date à laquelle la correspondance a été vue pour la première
                  fois
              properties:
                type: object
                properties:
                  name:
                    type: array
                    items:
                      type: string
                  alias:
                    type: array
                    items:
                      type: string
                  notes:
                    type: array
                    items:
                      type: string
                  title:
                    type: string
                    nullable: true
                  gender:
                    type: array
                    items:
                      type: string
                  height:
                    type: string
                    nullable: true
                  topics:
                    type: string
                    nullable: true
                  weight:
                    type: string
                    nullable: true
                  address:
                    type: string
                    nullable: true
                  country:
                    type: string
                    nullable: true
                  website:
                    type: string
                    nullable: true
                  eyeColor:
                    type: string
                    nullable: true
                  keywords:
                    type: string
                    nullable: true
                  lastName:
                    type: array
                    items:
                      type: string
                  position:
                    type: string
                    nullable: true
                  religion:
                    type: string
                    nullable: true
                  birthDate:
                    type: array
                    items:
                      type: string
                  education:
                    type: array
                    items:
                      type: string
                  ethnicity:
                    type: string
                    nullable: true
                  firstName:
                    type: array
                    items:
                      type: string
                  hairColor:
                    type: string
                    nullable: true
                  weakAlias:
                    type: string
                    nullable: true
                  birthPlace:
                    type: array
                    items:
                      type: string
                  modifiedAt:
                    type: string
                    nullable: true
                  wikidataId:
                    type: string
                    nullable: true
                  citizenship:
                    type: string
                    nullable: true
                  nationality:
                    type: string
                    nullable: true
              match_score:
                type: number
                description: >-
                  Score de confiance d'identité pondéré (0-100) calculé à partir
                  de la similarité de nom, de la date de naissance et de la
                  correspondance du pays. Utilisé pour déterminer si la
                  correspondance est un faux positif ou une correspondance
                  possible.
                format: float
                nullable: true
              risk_score:
                type: number
                description: >-
                  Score de risque de l'entité (0-100). Utilisé pour déterminer
                  le statut AML final (Approuvé / En cours d'examen / Refusé) en
                  fonction du risk_score le plus élevé parmi les correspondances
                  qui ne sont pas des faux positifs.
              review_status:
                type: string
                description: >-
                  Statut d'examen pour ce résultat. Peut être 'Unreviewed',
                  'Confirmed Match', 'False Positive' ou 'Inconclusive'.
                enum:
                  - Unreviewed
                  - Confirmed Match
                  - False Positive
                  - Inconclusive
              score_breakdown:
                type: object
                description: Ventilation détaillée du calcul du match_score.
                properties:
                  name_score:
                    type: integer
                    description: Pourcentage brut de similarité des noms (0-100).
                  name_weight:
                    type: integer
                    description: >-
                      Pondération d'origine pour le nom issue de la
                      configuration (0-100).
                  name_weight_normalized:
                    type: number
                    description: >-
                      Poids normalisé pour le nom après repondération pour les
                      données manquantes (0-100).
                  name_contribution:
                    type: number
                    description: Points apportés par le nom au score total.
                  dob_score:
                    type: integer
                    description: >-
                      Score de correspondance de la date de naissance (-100 à
                      100).
                  dob_weight:
                    type: integer
                    description: >-
                      Pondération d'origine pour la date de naissance issue de
                      la configuration (0-100).
                  dob_weight_normalized:
                    type: number
                    description: >-
                      Poids normalisé pour la date de naissance après
                      repondération pour les données manquantes (0-100).
                  dob_contribution:
                    type: number
                    description: Points apportés par la date de naissance au score total.
                  country_score:
                    type: integer
                    description: Score de correspondance du pays (-100 à 100).
                  country_weight:
                    type: integer
                    description: >-
                      Pondération d'origine pour le pays issue de la
                      configuration (0-100).
                  country_weight_normalized:
                    type: number
                    description: >-
                      Poids normalisé pour le pays après repondération pour les
                      données manquantes (0-100).
                  country_contribution:
                    type: number
                    description: Points apportés par le pays au score total.
                  document_number_match_type:
                    type: string
                    description: >-
                      Résultat de l'évaluation « Golden Key » du numéro de
                      document.
                    enum:
                      - MATCH
                      - NEUTRAL
                      - HARD_MISMATCH
                  document_number_effect:
                    type: string
                    description: >-
                      Description lisible par l'humain de l'effet du numéro de
                      document sur le score.
                  total_score:
                    type: integer
                    description: Score de correspondance pondéré final (0-100).
              pep_matches:
                type: array
                items:
                  type: object
                  properties:
                    aliases:
                      type: array
                      items:
                        type: string
                    education:
                      type: array
                      items:
                        type: string
                    list_name:
                      type: string
                    publisher:
                      type: string
                    source_url:
                      type: string
                      format: uri
                    description:
                      type: string
                    matched_name:
                      type: string
                    pep_position:
                      type: string
                    date_of_birth:
                      type: string
                    other_sources:
                      type: array
                      items:
                        type: string
                    place_of_birth:
                      type: string
              linked_entities:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: array
                      items:
                        type: string
                    active:
                      type: array
                      items:
                        type: string
                    status:
                      type: array
                      items:
                        type: string
                    details:
                      type: array
                      items:
                        type: string
                    relation:
                      type: array
                      items:
                        type: string
              warning_matches:
                type: array
                description: >-
                  Liste des correspondances d'avertissements et de mesures
                  réglementaires. Comprend les entrées des catégories : Warning,
                  SIP, Warnings and Regulatory Enforcement, Fitness and Probity,
                  SIE et Insolvency.
                items:
                  type: object
                  properties:
                    list_name:
                      type: string
                      description: Nom de l'éditeur de la liste d'avertissement
                    matched_name:
                      type: string
                      description: Nom correspondant dans la liste d'avertissement
                    description:
                      type: string
                      description: Description de l'entrée d'avertissement
                    publisher:
                      type: string
                      description: Émetteur ou source de l'avertissement
                    source_url:
                      type: string
                      format: uri
                      description: URL vers la source de l'avertissement
                    other_sources:
                      type: array
                      items:
                        type: string
                      description: URL sources supplémentaires
                    countries:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Pays associés à l'avertissement
                    created_at:
                      type: string
                      nullable: true
                      description: Date de création de l'entrée d'avertissement
                    updated_at:
                      type: string
                      nullable: true
                      description: Date de dernière mise à jour de l'entrée d'avertissement
                    additional_data:
                      type: object
                      description: >-
                        Données supplémentaires issues de la source de
                        l'avertissement. Peut contenir un objet `data` avec un
                        tableau `case_details`.
                      properties:
                        data:
                          type: object
                          properties:
                            case_details:
                              type: array
                              description: >-
                                Détails des cas d'avertissement associés à cette
                                correspondance
                              items:
                                type: object
                                properties:
                                  case_type:
                                    type: string
                                    description: Type du dossier d'avertissement
                                    enum:
                                      - Accusation
                                      - Arrest
                                      - Bribery
                                      - Criminal
                                      - Fraud
                                      - Illegal Fundraising
                                      - Non-conviction Terror
                                      - Proclaimed Offender
                                      - Regulatory Enforcement
                                      - Terrorism
                                      - Terrorism-related
                                      - Terrorism-related listing
              sanction_matches:
                type: array
                description: >-
                  Liste des correspondances dans les listes de sanctions
                  trouvées pour cette entité.
                items:
                  type: object
                  properties:
                    list_name:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Nom(s) de la ou des listes de sanctions
                    matched_name:
                      type: string
                      description: Nom correspondant dans la liste de sanctions
                    description:
                      type: string
                      description: Description de l'entrée de sanction
                    reason:
                      type: string
                      nullable: true
                      description: >-
                        Motif en texte libre pour lequel l'entité a été
                        sanctionnée. Concaténé à partir des entrées de motif de
                        la liste de sanctions. Exemples : 'Executive Order 13224
                        (Terrorism)', 'Support for actions undermining Ukraine's
                        sovereignty', 'Listed due to national security
                        concerns.'
                    source_url:
                      type: string
                      format: uri
                      description: URL vers la source de la sanction
                    other_sources:
                      type: array
                      items:
                        type: string
                      description: URL sources supplémentaires
                    details:
                      type: array
                      items:
                        type: string
                      description: Détails supplémentaires sur la sanction
                    legal_basis:
                      type: array
                      items:
                        type: string
                      description: Base juridique de la sanction
                    listed_on:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Date(s) d'inscription de l'entité sur la liste
                    sanction_list:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: Identifiant(s) de liste de sanctions
                    sanction_program:
                      type: array
                      items:
                        type: string
                      description: >-
                        Programme(s) de sanctions dans le(s) cadre(s) desquel(s)
                        l'entité est répertoriée
                    sanctioning_authority:
                      type: array
                      items:
                        type: string
                      description: Autorité(s) ayant imposé la sanction
                    updated_on:
                      type: array
                      items:
                        type: string
                      description: >-
                        Date(s) à laquelle/auxquelles l'entrée de sanction a été
                        mise à jour pour la dernière fois
                    additional_data:
                      type: object
                      description: >-
                        Données supplémentaires issues de la source de sanctions
                        non saisies dans les champs principaux
              adverse_media_details:
                type: object
                properties:
                  sentiment:
                    type: string
                  entity_type:
                    type: string
                  sentiment_score:
                    type: integer
                  adverse_keywords:
                    type: object
                    additionalProperties:
                      type: integer
              adverse_media_matches:
                type: array
                items:
                  type: object
                  properties:
                    country:
                      type: string
                    summary:
                      type: string
                    headline:
                      type: string
                    sentiment:
                      type: string
                    thumbnail:
                      type: string
                      format: uri
                    source_url:
                      type: string
                      format: uri
                    author_name:
                      type: string
                      nullable: true
                    other_sources:
                      type: array
                      items:
                        type: string
                    adverse_keywords:
                      type: array
                      items:
                        type: string
                    sentiment_score:
                      type: integer
                    publication_date:
                      type: string
                      format: date-time
              additional_information:
                type: object
        score:
          type: number
          format: float
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            Score global de filtrage AML — le score de risque le plus élevé
            parmi toutes les correspondances (float, 0-100). `null` jusqu'à ce
            qu'il soit calculé.
        screened_data:
          type: object
          properties:
            full_name:
              type: string
            nationality:
              type: string
            date_of_birth:
              type: string
              format: date
            document_number:
              type: string
              nullable: true
        is_ongoing_monitoring_enabled:
          type: boolean
          description: >-
            Indique si la surveillance AML continue est activée pour ce
            filtrage. Lorsque défini sur `true`, l'entité fait l'objet d'un
            nouveau filtrage périodique et toute nouvelle correspondance met à
            jour le rapport.
        next_ongoing_monitoring_bill_date:
          type: string
          format: date
          nullable: true
          description: >-
            Date (YYYY-MM-DD) à laquelle cet abonnement de surveillance continue
            sera facturé la prochaine fois. Calculée comme la date de la
            dernière facturation de surveillance continue plus 365 jours lorsque
            `is_ongoing_monitoring_enabled = true` ; sinon `null`. Il s'agit
            d'une date de facturation et non d'une date de filtrage - utilisez
            `last_ongoing_screening_at` pour cette dernière.
        last_ongoing_screening_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Date et heure auxquelles la surveillance continue a effectué pour la
            dernière fois un nouveau filtrage de cet enregistrement, que le
            résultat ait changé ou non. `null` lorsque l'enregistrement n'a
            jamais fait l'objet d'un nouveau filtrage ; cette valeur n'est
            jamais rétroactivement renseignée à partir de la date d'activation
            ou de facturation.
        last_ongoing_screening_datasets_updated_at:
          type: string
          format: date-time
          nullable: true
          description: "La date de mise à jour du jeu de données AML la plus récente signalée par le fournisseur au moment de ce filtrage. `null` lorsque le fournisseur n'a indiqué aucune date de jeu de données\_; jamais estimée."
        warnings:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
                enum:
                  - ID_VERIFICATION
                  - NFC
                  - LIVENESS
                  - FACEMATCH
                  - PROOF_OF_ADDRESS
                  - PHONE
                  - EMAIL
                  - AML
                  - LOCATION
                  - DATABASE_VALIDATION
                  - QUESTIONNAIRE
                  - DOCUMENT_AI
                  - KYB_REGISTRY
                  - KYB_DOCUMENTS
                  - KYB_KEY_PEOPLE
                  - GEOLOCATION
                  - SIGNATURE
                description: >-
                  La fonctionnalité qui a généré cet avertissement. La valeur
                  identifie le bloc de fonctionnalités auquel appartient
                  l'avertissement. Au sein d'un filtrage AML, il s'agit
                  généralement de `AML`, mais l'énumération ci-dessus fait foi
                  pour tous les avertissements de fonctionnalités sur le payload
                  de décision.
              risk:
                type: string
              additional_data:
                type: object
                nullable: true
              log_type:
                type: string
              short_description:
                type: string
              long_description:
                type: string
              node_id:
                type: string
                description: >-
                  L'identifiant du nœud du graphe de workflow ayant généré cet
                  avertissement
    GeolocationCheck:
      type: object
      description: >-
        Un résultat de vérification de localisation, la tentative acceptée d'un
        nœud de workflow. La mesure, l'incertitude et l'authenticité sont des
        clés distinctes, de sorte qu'une localisation précise non attestée se
        lit différemment d'une localisation imprécise attestée.
      properties:
        node_id:
          type: string
          nullable: true
          description: >-
            Nœud de workflow ayant produit ce résultat, afin qu'un workflow
            comportant deux étapes de vérification de localisation reste
            lisible.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: >-
            Statut au niveau de la fonctionnalité de cette étape de vérification
            de localisation, déterminé à partir de ses avertissements.
            Indépendant du `status` de la session.
        outcome:
          type: string
          nullable: true
          description: Ce qui s'est passé lors de cette tentative.
          enum:
            - verified
            - low_accuracy
            - accuracy_undetermined
            - stale
            - approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - mock_detected
            - outside_geofence
            - in_blocked_area
            - anonymizer_detected
            - skipped
            - replay_rejected
            - unsupported_client
            - null
        permission:
          type: string
          nullable: true
          description: >-
            Ce que le système d'exploitation ou le navigateur a accordé.
            `not_requested` signifie que l'étape utilise uniquement la
            localisation IP de la connexion, de sorte qu'aucune autorisation
            n'est jamais demandée à la personne.
          enum:
            - granted_precise
            - granted_approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - dismissed
            - not_requested
            - null
        latitude:
          type: number
          nullable: true
          description: >-
            Latitude WGS84 de la position. `null` lorsqu'il n'y a aucune
            position.
          format: double
        longitude:
          type: number
          nullable: true
          description: >-
            Longitude WGS84 de la position. `null` lorsqu'il n'y a aucune
            position.
          format: double
        accuracy_m:
          type: number
          nullable: true
          description: >-
            Rayon d'incertitude en mètres, au niveau de confiance indiqué dans
            `accuracy_confidence`.
          format: double
        accuracy_confidence:
          type: string
          nullable: true
          description: >-
            Niveau de confiance que la plateforme associe à `accuracy_m` : `p95`
            (navigateurs), `p68` (Android) ou `unspecified` (iOS).
          enum:
            - p95
            - p68
            - unspecified
            - null
        measured_at:
          type: string
          nullable: true
          description: >-
            Date et heure auxquelles l'appareil a obtenu la position, selon sa
            propre horloge.
          format: date-time
        age_seconds:
          type: integer
          nullable: true
          description: >-
            Secondes écoulées entre la prise du relevé par l'appareil et sa
            réception par Didit.
        source:
          type: string
          nullable: true
          description: >-
            Provenance de la géolocalisation, lorsque la plateforme l'indique.
            `ip` signifie que la position correspond à la localisation IP de la
            connexion.
          enum:
            - gps
            - fused
            - network
            - wifi
            - cell
            - browser
            - unknown
            - ip
            - null
        platform:
          type: string
          nullable: true
          description: Le client ayant produit la correction.
          enum:
            - web
            - ios
            - android
            - react_native
            - flutter
            - null
        sdk_version:
          type: string
          nullable: true
          description: Version du SDK qui a produit le correctif.
        is_mock:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque l'appareil indique que la position provient d'un
            fournisseur de localisation fictive ou d'un logiciel de simulation.
            `null` lorsque la plateforme ne le signale pas (les navigateurs ne
            peuvent pas le déterminer) ; `null` n'est pas `false`.
        produced_by_accessory:
          type: boolean
          nullable: true
          description: >-
            iOS uniquement : `true` lorsque la position a été obtenue à partir
            d'un accessoire externe. `null` ailleurs.
        integrity:
          type: string
          enum:
            - attested
            - not_attested
            - failed
            - unsupported
            - not_determined
          description: >-
            Indique si une attestation d'appareil soutient le correctif.
            `unsupported` est ce que signalent les navigateurs, car le Web ne
            dispose d'aucun mécanisme d'attestation ; il ne s'agit pas d'un
            échec.
        country_code:
          type: string
          nullable: true
          description: Pays ISO 3166-1 alpha-2 dans lequel se trouve la localisation.
        region_code:
          type: string
          nullable: true
          description: Subdivision ISO 3166-2 dans laquelle se trouve la position.
        city:
          type: string
          nullable: true
          description: Lieu habité le plus proche, un libellé pour les réviseurs.
        geofence:
          type: object
          description: Résultat des règles de pays et de zone de l'étape.
          properties:
            enabled:
              type: boolean
              description: >-
                Indique si l'étape applique une règle relative au pays ou à la
                zone géographique.
            result:
              type: string
              nullable: true
              description: >-
                Situation de la position par rapport aux règles. `undetermined`
                signifie que le cercle de précision chevauche la frontière ou
                que la position ne correspond à aucun pays ; cela ne constitue
                pas une preuve de présence à l'extérieur.
              enum:
                - inside
                - outside
                - undetermined
                - null
        inside_geofence:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque `geofence.result` est `inside`, `false` lorsqu'il est
            `outside`, `null` sinon.
        geofence_basis:
          type: string
          nullable: true
          description: >-
            À partir de quelle position le résultat de zone a été évalué : le
            point de positionnement `device`, ou la localisation `ip` de la
            connexion.
          enum:
            - device
            - ip
            - null
        inside_areas:
          type: array
          items:
            type: string
          description: >-
            Identifiants des zones autorisées configurées dans lesquelles se
            trouve la position.
        blocked_areas:
          type: array
          items:
            type: string
          description: >-
            Identifiants des zones bloquées configurées dans lesquelles se
            trouve la position.
        position_source:
          type: string
          nullable: true
          description: >-
            Provenance de la position pour l'étape, telle que configurée :
            l'appareil comparé à la localisation de l'IP, l'appareil uniquement
            ou la localisation de l'IP uniquement.
          enum:
            - device_and_ip
            - device_only
            - ip_only
            - null
        anonymizers:
          type: object
          nullable: true
          description: >-
            L'état de la connexion et de l'appareil, chacun valant `true`,
            `false` ou `null` lorsque la source ne peut pas le déterminer.
          properties:
            vpn:
              type: boolean
              nullable: true
            proxy:
              type: boolean
              nullable: true
            tor:
              type: boolean
              nullable: true
            spoofing:
              type: boolean
              nullable: true
            emulator:
              type: boolean
              nullable: true
        ip_distance_km:
          type: number
          nullable: true
          description: >-
            Distance jusqu'à la localisation IP de la session après soustraction
            des deux rayons d'incertitude ; `0` lorsqu'ils se chevauchent.
          format: double
        ip_distance_uncertainty_km:
          type: number
          nullable: true
          description: >-
            Rayon combiné qui a été soustrait : le rayon de localisation de l'IP
            plus la précision de cette position.
          format: double
        ip_consistent:
          type: boolean
          nullable: true
          description: >-
            Indique si `ip_distance_km` est inférieure ou égale à la distance
            configurée pour l'étape. `null` lorsque l'un des côtés est inconnu.
        document_distance_km:
          type: number
          nullable: true
          description: >-
            Distance jusqu'à l'adresse géocodée sur le document d'identité ou le
            justificatif de domicile. `null` lorsqu'aucune adresse n'est
            enregistrée.
          format: double
        travel_excused:
          type: boolean
          nullable: true
          description: >-
            Indique si la tolérance de déplacement de l'étape a excusé l'écart
            par rapport à l'adresse. Vaut `null` lorsque la tolérance est
            désactivée.
        consecutive_mismatches:
          type: integer
          nullable: true
          description: >-
            Lors de la dernière tentative : cette vérification ainsi que les
            non-concordances antérieures consécutives de la même personne.
        attempts:
          type: integer
          description: Numéro de cette tentative au sein du nœud, commençant à 1.
        consent:
          type: object
          nullable: true
          description: >-
            Le consentement donné par la personne avant l'invite système,
            enregistré avec la version du texte et la langue qu'elle a vues.
          properties:
            accepted_at:
              type: string
              format: date-time
            version:
              type: string
              nullable: true
            locale:
              type: string
              nullable: true
        warnings:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
                enum:
                  - ID_VERIFICATION
                  - NFC
                  - LIVENESS
                  - FACEMATCH
                  - PROOF_OF_ADDRESS
                  - PHONE
                  - EMAIL
                  - AML
                  - LOCATION
                  - DATABASE_VALIDATION
                  - QUESTIONNAIRE
                  - DOCUMENT_AI
                  - KYB_REGISTRY
                  - KYB_DOCUMENTS
                  - KYB_KEY_PEOPLE
                  - GEOLOCATION
                  - SIGNATURE
                description: >-
                  La fonctionnalité qui a généré cet avertissement. La valeur
                  identifie le bloc de fonctionnalités auquel appartient
                  l'avertissement. Le tableau d'avertissements de chaque module
                  utilise généralement la valeur correspondant à son module (par
                  ex. `PHONE` dans `phone_verifications[].warnings`), mais
                  l'énumération ci-dessus fait foi pour tous les avertissements
                  de fonctionnalités sur le payload de décision.
              risk:
                type: string
              additional_data:
                type: object
                nullable: true
              log_type:
                type: string
              short_description:
                type: string
              long_description:
                type: string
              node_id:
                type: string
                description: >-
                  L'identifiant du nœud du graphe de workflow ayant généré cet
                  avertissement
          description: >-
            Avertissements générés par cette étape de vérification de
            l'emplacement, avec `feature` défini sur `GEOLOCATION`. Les codes
            d'avertissement commencent par `LOCATION_`.
    GeolocationAttempt:
      type: object
      description: >-
        Une tentative d'étape de vérification de localisation : les mêmes clés
        que `geolocation_checks[]` à l'exception de `warnings`, plus
        l'horodatage de réception par Didit.
      properties:
        node_id:
          type: string
          nullable: true
          description: >-
            Nœud de workflow ayant produit ce résultat, afin qu'un workflow
            comportant deux étapes de vérification de localisation reste
            lisible.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: >-
            Statut au niveau de la fonctionnalité de cette étape de vérification
            de localisation, déterminé à partir de ses avertissements.
            Indépendant du `status` de la session.
        outcome:
          type: string
          nullable: true
          description: Ce qui s'est passé lors de cette tentative.
          enum:
            - verified
            - low_accuracy
            - accuracy_undetermined
            - stale
            - approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - mock_detected
            - outside_geofence
            - in_blocked_area
            - anonymizer_detected
            - skipped
            - replay_rejected
            - unsupported_client
            - null
        permission:
          type: string
          nullable: true
          description: >-
            Ce que le système d'exploitation ou le navigateur a accordé.
            `not_requested` signifie que l'étape utilise uniquement la
            localisation IP de la connexion, de sorte qu'aucune autorisation
            n'est jamais demandée à la personne.
          enum:
            - granted_precise
            - granted_approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - dismissed
            - not_requested
            - null
        latitude:
          type: number
          nullable: true
          description: >-
            Latitude WGS84 de la position. `null` lorsqu'il n'y a aucune
            position.
          format: double
        longitude:
          type: number
          nullable: true
          description: >-
            Longitude WGS84 de la position. `null` lorsqu'il n'y a aucune
            position.
          format: double
        accuracy_m:
          type: number
          nullable: true
          description: >-
            Rayon d'incertitude en mètres, au niveau de confiance indiqué dans
            `accuracy_confidence`.
          format: double
        accuracy_confidence:
          type: string
          nullable: true
          description: >-
            Niveau de confiance que la plateforme associe à `accuracy_m` : `p95`
            (navigateurs), `p68` (Android) ou `unspecified` (iOS).
          enum:
            - p95
            - p68
            - unspecified
            - null
        measured_at:
          type: string
          nullable: true
          description: >-
            Date et heure auxquelles l'appareil a obtenu la position, selon sa
            propre horloge.
          format: date-time
        age_seconds:
          type: integer
          nullable: true
          description: >-
            Secondes écoulées entre la prise du relevé par l'appareil et sa
            réception par Didit.
        source:
          type: string
          nullable: true
          description: >-
            Provenance de la géolocalisation, lorsque la plateforme l'indique.
            `ip` signifie que la position correspond à la localisation IP de la
            connexion.
          enum:
            - gps
            - fused
            - network
            - wifi
            - cell
            - browser
            - unknown
            - ip
            - null
        platform:
          type: string
          nullable: true
          description: Le client ayant produit la correction.
          enum:
            - web
            - ios
            - android
            - react_native
            - flutter
            - null
        sdk_version:
          type: string
          nullable: true
          description: Version du SDK qui a produit le correctif.
        is_mock:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque l'appareil indique que la position provient d'un
            fournisseur de localisation fictive ou d'un logiciel de simulation.
            `null` lorsque la plateforme ne le signale pas (les navigateurs ne
            peuvent pas le déterminer) ; `null` n'est pas `false`.
        produced_by_accessory:
          type: boolean
          nullable: true
          description: >-
            iOS uniquement : `true` lorsque la position a été obtenue à partir
            d'un accessoire externe. `null` ailleurs.
        integrity:
          type: string
          enum:
            - attested
            - not_attested
            - failed
            - unsupported
            - not_determined
          description: >-
            Indique si une attestation d'appareil soutient le correctif.
            `unsupported` est ce que signalent les navigateurs, car le Web ne
            dispose d'aucun mécanisme d'attestation ; il ne s'agit pas d'un
            échec.
        country_code:
          type: string
          nullable: true
          description: Pays ISO 3166-1 alpha-2 dans lequel se trouve la localisation.
        region_code:
          type: string
          nullable: true
          description: Subdivision ISO 3166-2 dans laquelle se trouve la position.
        city:
          type: string
          nullable: true
          description: Lieu habité le plus proche, un libellé pour les réviseurs.
        geofence:
          type: object
          description: Résultat des règles de pays et de zone de l'étape.
          properties:
            enabled:
              type: boolean
              description: >-
                Indique si l'étape applique une règle relative au pays ou à la
                zone géographique.
            result:
              type: string
              nullable: true
              description: >-
                Situation de la position par rapport aux règles. `undetermined`
                signifie que le cercle de précision chevauche la frontière ou
                que la position ne correspond à aucun pays ; cela ne constitue
                pas une preuve de présence à l'extérieur.
              enum:
                - inside
                - outside
                - undetermined
                - null
        inside_geofence:
          type: boolean
          nullable: true
          description: >-
            `true` lorsque `geofence.result` est `inside`, `false` lorsqu'il est
            `outside`, `null` sinon.
        geofence_basis:
          type: string
          nullable: true
          description: >-
            À partir de quelle position le résultat de zone a été évalué : le
            point de positionnement `device`, ou la localisation `ip` de la
            connexion.
          enum:
            - device
            - ip
            - null
        inside_areas:
          type: array
          items:
            type: string
          description: >-
            Identifiants des zones autorisées configurées dans lesquelles se
            trouve la position.
        blocked_areas:
          type: array
          items:
            type: string
          description: >-
            Identifiants des zones bloquées configurées dans lesquelles se
            trouve la position.
        position_source:
          type: string
          nullable: true
          description: >-
            Provenance de la position pour l'étape, telle que configurée :
            l'appareil comparé à la localisation de l'IP, l'appareil uniquement
            ou la localisation de l'IP uniquement.
          enum:
            - device_and_ip
            - device_only
            - ip_only
            - null
        anonymizers:
          type: object
          nullable: true
          description: >-
            L'état de la connexion et de l'appareil, chacun valant `true`,
            `false` ou `null` lorsque la source ne peut pas le déterminer.
          properties:
            vpn:
              type: boolean
              nullable: true
            proxy:
              type: boolean
              nullable: true
            tor:
              type: boolean
              nullable: true
            spoofing:
              type: boolean
              nullable: true
            emulator:
              type: boolean
              nullable: true
        ip_distance_km:
          type: number
          nullable: true
          description: >-
            Distance jusqu'à la localisation IP de la session après soustraction
            des deux rayons d'incertitude ; `0` lorsqu'ils se chevauchent.
          format: double
        ip_distance_uncertainty_km:
          type: number
          nullable: true
          description: >-
            Rayon combiné qui a été soustrait : le rayon de localisation de l'IP
            plus la précision de cette position.
          format: double
        ip_consistent:
          type: boolean
          nullable: true
          description: >-
            Indique si `ip_distance_km` est inférieure ou égale à la distance
            configurée pour l'étape. `null` lorsque l'un des côtés est inconnu.
        document_distance_km:
          type: number
          nullable: true
          description: >-
            Distance jusqu'à l'adresse géocodée sur le document d'identité ou le
            justificatif de domicile. `null` lorsqu'aucune adresse n'est
            enregistrée.
          format: double
        travel_excused:
          type: boolean
          nullable: true
          description: >-
            Indique si la tolérance de déplacement de l'étape a excusé l'écart
            par rapport à l'adresse. Vaut `null` lorsque la tolérance est
            désactivée.
        consecutive_mismatches:
          type: integer
          nullable: true
          description: >-
            Lors de la dernière tentative : cette vérification ainsi que les
            non-concordances antérieures consécutives de la même personne.
        attempts:
          type: integer
          description: Numéro de cette tentative au sein du nœud, commençant à 1.
        consent:
          type: object
          nullable: true
          description: >-
            Le consentement donné par la personne avant l'invite système,
            enregistré avec la version du texte et la langue qu'elle a vues.
          properties:
            accepted_at:
              type: string
              format: date-time
            version:
              type: string
              nullable: true
            locale:
              type: string
              nullable: true
        received_at:
          type: string
          nullable: true
          description: Date et heure auxquelles Didit a reçu la tentative.
          format: date-time
        created_at:
          type: string
          format: date-time
    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
    KYBOwnershipStructure:
      type: object
      nullable: true
      description: >-
        La table de capitalisation prouvée par le registre, telle qu'elle se
        présentait lors de la livraison du niveau d'actionnariat :
        `shareholders` et `beneficial_owners` directs. Null lorsque le registre
        n'a prouvé aucun actionnariat. Elle ne contient jamais les lignes
        propres à la source du registre ; lisez `company.beneficial_owners` et
        `company.ownership` pour l'enregistrement actuel.
      properties:
        shareholders:
          type: array
          items:
            $ref: '#/components/schemas/KYBOwnershipStructureOwner'
        beneficial_owners:
          type: array
          items:
            $ref: '#/components/schemas/KYBOwnershipStructureOwner'
      required:
        - shareholders
        - beneficial_owners
    InvestigatorBlock:
      type: object
      nullable: true
      description: >-
        Le dernier examen Investigator de l'élément, ou null s'il n'en a jamais
        eu. Porté par la décision de session V3 et de session d'entreprise (et
        donc par les webhooks `status.updated`).
      properties:
        run_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - running
            - completed
            - failed
        stage:
          type: string
          enum:
            - shadow
            - live
        queue:
          type: string
          enum:
            - kyc
            - kyb
            - aml
            - transactions
            - cases
        is_open:
          type: boolean
        recommendation:
          type: string
          enum:
            - approve
            - decline
            - escalate
            - request
          nullable: true
        recommendation_detail:
          type: string
          nullable: true
        confidence:
          type: string
          enum:
            - high
            - moderate
            - low
          nullable: true
        summary:
          type: string
          nullable: true
        ready_to_accept:
          type: boolean
        prepared_at:
          type: string
          format: date-time
          nullable: true
        automated:
          type: boolean
          description: >-
            L'Investigator a pris la décision seul, même si la décision a été
            modifiée par la suite.
        decided_by:
          type: string
          enum:
            - investigator
            - member
          nullable: true
        decision:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/InvestigatorDecision'
          type: object
    BiometricRetention:
      type: object
      description: >-
        Moment où les données biométriques en direct de cette session sont
        supprimées.
      required:
        - jurisdictions
        - deletes_at
      properties:
        jurisdictions:
          type: array
          items:
            type: string
          description: >-
            Codes des États américains dont les règles biométriques fixent une
            limite de suppression pour cette personne (`US` lorsque l'État est
            inconnu). Vide si aucune ne s'applique.
        deletes_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            La date à laquelle les données biométriques en direct (images de
            visage et gabarits) de cette session sont supprimées, d'après le
            paramètre de conservation de votre application et, le cas échéant,
            la limite légale pour la juridiction de la personne. `null`
            lorsqu'aucune date ne s'applique pour le moment.
    SocialFootprintPlatform:
      type: object
      properties:
        platform:
          type: string
          description: Identifiant de plateforme.
          example: whatsapp
        category:
          type: string
          description: >-
            Catégorie de plateforme, par ex. MESSAGING, SOCIAL_MEDIA, ECOMMERCE,
            PROFESSIONAL, EMAIL_PROVIDER.
          example: MESSAGING
        scope:
          type: string
          enum:
            - global
            - local
          description: >-
            `global` pour les plateformes mondiales, `local` pour celles
            spécifiques à une région.
          example: global
    SocialFootprintCategorySummary:
      type: object
      properties:
        registered:
          type: integer
          nullable: true
          description: >-
            Plateformes de cette catégorie pour lesquelles l'inscription est
            confirmée.
          example: 2
        ratio:
          type: number
          format: float
          nullable: true
          description: >-
            Part des plateformes vérifiées de la catégorie comportant une
            inscription, de 0.0 à 1.0.
          example: 0.6667
    SocialFootprintProfile:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: Nom du profil, lorsque la plateforme en fournit un.
        photo:
          type: string
          nullable: true
          description: URL de la photo de profil, lorsque la plateforme en fournit une.
        about:
          type: string
          nullable: true
          description: >-
            Texte de présentation/biographie du profil, lorsque la plateforme en
            fournit un.
        privacy_status:
          type: string
          nullable: true
          enum:
            - PUBLIC
            - PRIVATE
            - null
          description: Visibilité du profil, lorsque la plateforme la fournit.
        business_account:
          type: boolean
          nullable: true
          description: >-
            Indique si le profil est un compte professionnel, lorsque la
            plateforme l'expose.
    SignatureFieldResult:
      type: object
      description: >-
        Un champ d'un document signé, avec sa valeur sur la copie de ce
        signataire. Voir
        [Champs](/fr/core-technology/electronic-signature/report-electronic-signature#champs).
      properties:
        key:
          type: string
          description: La clé du champ, telle qu'utilisée dans `sign.field_values`.
        type:
          type: string
          enum:
            - signature
            - initials
            - full_name
            - date_signed
            - text
            - checkbox
            - email
            - data
        role:
          type: string
          enum:
            - verified_person
            - legal_representative
            - key_people
        label:
          type: string
        page:
          type: integer
          description: >-
            Numéro de page, à partir de 1. Pour un document Word, page du PDF
            converti.
        x:
          type: number
          description: Bord gauche, sous forme de fraction de la largeur de la page.
        'y':
          type: number
          description: Bord supérieur, sous forme de fraction de la hauteur de la page.
        width:
          type: number
          description: Largeur, exprimée en fraction de la largeur de la page.
        height:
          type: number
          description: Hauteur, sous forme de fraction de la hauteur de la page.
        required:
          type: boolean
        value:
          nullable: true
          description: >-
            Une chaîne pour `text`, `email`, `full_name`, `date_signed` et
            `data`, un booléen pour une `checkbox`, et `true` pour une signature
            ou des initiales appliquées. `null` si vide.
        display_value:
          type: string
          nullable: true
          description: >-
            La valeur telle qu'apposée sur la page : dates dans le `date_format`
            du champ, `Yes` ou `No` pour une case à cocher, `Signed` pour une
            signature ou des initiales.
        value_source:
          type: string
          nullable: true
          enum:
            - signer
            - identity
            - contact
            - company
            - session
            - metadata
            - api
            - signing_time
            - null
          description: >-
            Provenance de la valeur : `signer` (saisie, cochée ou appliquée par
            le signataire), `identity` (la pièce d'identité vérifiée), `contact`
            (l'e-mail ou le téléphone vérifié), `company` (l'entreprise
            vérifiée), `session` (`vendor_data`), `metadata`, `api`
            (`sign.field_values`) ou `signing_time` (la date de signature).
        filled_at:
          type: string
          format: date-time
          nullable: true
        image_url:
          type: string
          nullable: true
          description: >-
            Signature et initiales uniquement : chemin de l'image appliquée.
            Voir [Télécharger une image de
            signature](/fr/sessions-api/electronic-signature/download-field-image).
        value_unavailable_reason:
          type: string
          nullable: true
          enum:
            - source_empty
            - null
          description: >-
            `source_empty` lorsqu'un champ prérempli n'avait aucune valeur dans
            la session et que `signature_field_data_missing_action` a tout de
            même autorisé le signataire à signer.
    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
    KYBOwnershipStructureOwner:
      type: object
      description: >-
        Un propriétaire dans l'instantané de l'actionnariat : la même identité
        de registre et la même part que dans `company.beneficial_owners[]`,
        ainsi que son `shareholding` canonique.
      properties:
        name:
          type: string
          nullable: true
          description: Nom du propriétaire tel qu'indiqué par le registre.
        first_name:
          type: string
          nullable: true
          description: >-
            Prénom, pour une personne physique, lorsque le registre le
            mentionne.
        last_name:
          type: string
          nullable: true
          description: >-
            Nom de famille, pour une personne physique, lorsque le registre le
            mentionne.
        date_of_birth:
          type: string
          nullable: true
          description: Date de naissance (ISO 8601) lorsque le registre la publie.
        country_of_birth:
          type: string
          nullable: true
          description: Pays de naissance lorsque le registre le publie.
        company_name:
          type: string
          nullable: true
          description: Nom de l'entreprise, pour un propriétaire personne morale.
        registration_number:
          type: string
          nullable: true
          description: Numéro d'immatriculation, pour une personne morale propriétaire.
        entity_type:
          type: string
          nullable: true
          enum:
            - person
            - company
            - null
          description: >-
            Indique si le propriétaire est une personne physique ou une
            entreprise.
        nationality:
          type: string
          nullable: true
          description: Nationalité lorsque le registre l'indique.
        designation:
          type: string
          nullable: true
          description: Le titre ou le rôle du propriétaire tel que le registre l'indique.
        roles:
          type: array
          items:
            type: string
          description: >-
            `shareholder` pour un détenteur direct, `ubo` pour un bénéficiaire
            effectif.
        ownership_min_shares:
          type: string
          nullable: true
          description: >-
            Limite inférieure de la participation, en pourcentage (égale à la
            limite supérieure pour une participation exacte).
        ownership_max_shares:
          type: string
          nullable: true
          description: Limite supérieure de la participation, en pourcentage.
        voting_min_shares:
          type: string
          nullable: true
          description: Limite inférieure des droits de vote, en pourcentage.
        voting_max_shares:
          type: string
          nullable: true
          description: Limite supérieure des droits de vote, en pourcentage.
        appointment_date:
          type: string
          nullable: true
          description: Date de début de la fonction ou du mandat (ISO 8601).
        is_active:
          type: boolean
          nullable: true
          description: False pour un ancien propriétaire.
        shareholding:
          $ref: '#/components/schemas/KYBRegistryShareholding'
      required:
        - name
        - first_name
        - last_name
        - date_of_birth
        - country_of_birth
        - company_name
        - registration_number
        - entity_type
        - nationality
        - designation
        - roles
        - ownership_min_shares
        - ownership_max_shares
        - voting_min_shares
        - voting_max_shares
        - appointment_date
        - is_active
        - shareholding
    InvestigatorDecision:
      type: object
      description: >-
        Manière dont l'élément a quitté la file d'attente de l'Investigator.
        `decided_by`, `original_outcome` et `overrides` sont renvoyés par les
        endpoints d'acceptation et de dérogation ainsi que par le rapport ; le
        bloc `investigator` d'une décision de session contient les autres
        champs.
      properties:
        outcome:
          type: string
          enum:
            - accepted
            - edited
            - overridden
            - decided_elsewhere
            - automated
          description: >-
            `accepted` ou `edited` a suivi la recommandation (`edited` avec un
            descriptif réécrit), `overridden` a appliqué une autre action,
            `decided_elsewhere` est une décision prise en dehors de
            l'Investigator alors que le rapport était ouvert, `automated` est
            une décision que l'Investigator a prise de lui-même.
        action:
          type: string
          enum:
            - approve
            - decline
            - escalate
            - request
        actor_email:
          type: string
          nullable: true
        actor_name:
          type: string
          nullable: true
        override_category:
          type: string
          enum:
            - missing_context
            - needs_information
            - policy_differs
            - evidence_misread
            - other
            - ''
          nullable: true
        override_reason:
          type: string
          nullable: true
        final_status:
          type: string
          description: Le statut de l'élément après la décision.
        agreed:
          type: boolean
          description: Indique si la décision correspond à la recommandation.
          nullable: true
        decided_at:
          type: string
          format: date-time
        billed:
          type: boolean
          description: L'examen a été facturé.
        decided_by:
          type: string
          enum:
            - investigator
            - member
        original_outcome:
          type: object
          description: >-
            La décision que l'Investigator a prise de lui-même, inchangée malgré
            les remplacements ultérieurs. Null pour une décision prise par
            l'équipe.
          properties:
            action:
              type: string
            final_status:
              type: string
            decided_at:
              type: string
              format: date-time
          nullable: true
        overrides:
          type: array
          description: >-
            Chaque dérogation à une décision que l'Investigator a prise de
            lui-même, de la plus ancienne à la plus récente.
          items:
            type: object
            properties:
              action:
                type: string
              actor_email:
                type: string
                nullable: true
              actor_name:
                type: string
                nullable: true
              override_category:
                type: string
              override_reason:
                type: string
              previous_status:
                type: string
              final_status:
                type: string
              agreed:
                type: boolean
                nullable: true
              overridden_at:
                type: string
                format: date-time
    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.