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

# Filtrage AML API : sanctions, PEP, listes de surveillance

> Didit : filtrage AML en temps réel sur 1,300+ listes mondiales. Sanctions, PEP, presse négative. $0.20 par vérification, sans minimum mensuel.



## OpenAPI

````yaml fr/openapi-25.json POST /v3/aml/
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/aml/:
    post:
      tags:
        - Standalone APIs
      summary: Filtrage AML (autonome)
      description: >-
        Effectuez le filtrage d'une personne ou d'une entreprise par rapport aux
        jeux de données PEP, de sanctions, d'avertissements/listes de
        surveillance et de presse négative en un seul appel.


        **Modèle à deux scores.** Chaque résultat comporte un `match_score`
        (0–100, confiance dans l'identité) et un `risk_score` (0–100, risque lié
        à l'entité). Les résultats dont le `match_score` est inférieur à
        `aml_match_score_threshold` (par défaut **93**) sont marqués
        `review_status: "False Positive"` et ignorés pour l'évaluation du risque
        ; le `risk_score` le plus élevé parmi les résultats restants devient
        `aml.score`. Le `aml.status` final suit vos seuils : `score` >
        `aml_score_review_threshold` (par défaut **100**) → `Declined` ; `score`
        > `aml_score_approve_threshold` (par défaut **80**) → `In Review` ;
        sinon `Approved`. Dès lors que `score` est non nul et ≥ au seuil
        d'approbation, un avertissement `POSSIBLE_MATCH_FOUND` est ajouté (un
        score exactement égal à 0 ne génère jamais d'avertissement).


        **Pondérations du score de correspondance.** `aml_name_weight` +
        `aml_dob_weight` + `aml_country_weight` doivent totaliser exactement 100
        (par défaut 60/25/15). Les composantes absentes de la requête sont
        écartées par renormalisation ; un `document_number` correspondant fait
        office de clé universelle qui remplace `match_score` par 100.


        **Latence.** Les filtrages simples s'exécutent généralement en quelques
        secondes. Avec `include_adverse_media=true`, l'API attend
        l'enrichissement par la presse négative (une pause initiale d'environ 5
        s plus jusqu'à environ 25 s d'interrogation) — configurez un délai
        d'attente client d'**au moins 60 secondes**.


        **Persistance.** `save_api_request` est défini par défaut sur **true** :
        le filtrage est conservé sous forme de session (`request_id` fonctionne
        avec `GET /v3/session/{sessionId}/decision/`), il apparaît dans la
        console, un webhook `status.updated` est déclenché, et les statuts
        d'examen des résultats peuvent être mis à jour ultérieurement. Avec
        `save_api_request=false`, rien n'est stocké et `request_id` est un
        identifiant de corrélation temporaire. `include_ongoing_monitoring=true`
        continue d'analyser à nouveau le profil et nécessite
        `save_api_request=true` (imposé par un code `400`).


        **Idempotence.** Envoyez un en-tête `Idempotency-Key` lors d'une
        nouvelle tentative après un dépassement de délai ou une erreur
        temporaire. La clé est circonscrite à votre application et au corps
        exact de la requête. La première requête terminée stocke sa réponse ;
        les nouvelles tentatives identiques ultérieures renvoient cette même
        réponse et n'exécutent ni ne facturent un autre filtrage AML. Si la
        requête d'origine est toujours en cours d'exécution, réessayez plus tard
        avec la même clé. Si la même clé est réutilisée avec un corps différent,
        l'API renvoie `409`.


        **Facturation.** Un crédit d'API AML est débité après le premier
        filtrage réussi. Les réponses réémises de manière idempotente ne sont
        pas facturées à nouveau ; un solde insuffisant renvoie `403` avant tout
        nouveau filtrage.


        **Sandbox.** Les clés des applications sandbox ignorent entièrement le
        filtrage et la facturation et renvoient un résultat simulé — `Approved`
        sans aucun résultat, sauf si vous transmettez `sandbox_scenario`.
        `save_api_request` fonctionne de la même manière qu'avec les clés de
        production, de sorte qu'un filtrage sandbox enregistré peut être
        récupéré via `GET /v3/session/{sessionId}/decision/` et `GET
        /v3/session/{sessionId}/generate-pdf/`.
      operationId: post_v3aml
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Clé de sécurité de nouvelle tentative optionnelle, jusqu'à 255
            caractères. La réutilisation de la même clé avec le même corps de
            requête renvoie la réponse d'origine sans exécuter ni facturer un
            second filtrage. La réutilisation de la clé avec un corps différent
            renvoie `409`.
          schema:
            type: string
            maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - full_name
              properties:
                full_name:
                  type: string
                  minLength: 2
                  description: >-
                    Nom complet de la personne ou de l'entreprise à filtrer.
                    Minimum **2 caractères** - seuil plancher propre au
                    fournisseur de filtrage. Un nom plus court ou vide renvoie
                    `400` sur ce champ avant tout filtrage, de sorte que rien
                    n'est facturé.
                  example: Antonio Ejemplo Modelo
                entity_type:
                  type: string
                  enum:
                    - person
                    - company
                  default: person
                  description: 'Type d''entité à filtrer. Valeur par défaut : `person`.'
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Date de naissance (personnes) ou date de constitution
                    (entreprises), `YYYY-MM-DD`. Améliore la précision de la
                    correspondance via le poids de la date de naissance.
                  example: '1972-02-29'
                nationality:
                  type: string
                  description: >-
                    Code pays ISO 3166-1 **alpha-2** (par exemple `ES`). Les
                    codes invalides renvoient `400`. Améliore la précision de
                    correspondance grâce au poids attribué au pays.
                  example: ES
                document_number:
                  type: string
                  description: >-
                    Numéro du document d'identité. Non pondéré — agit comme une
                    clé déterminante : une correspondance exacte remplace le
                    `match_score` du résultat par 100, une discordance stricte
                    le pénalise. Envoyé au fournisseur de filtrage comme filtre
                    de recherche uniquement lorsqu'il comporte **2-50
                    caractères** ; une valeur en dehors de cette plage est
                    acceptée et stockée, et le filtrage s'exécute et est facturé
                    normalement, mais n'est simplement pas affiné par le numéro
                    de document.
                aml_score_approve_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 80
                  description: >-
                    Seuil de score de risque auquel ou en dessous duquel le
                    résultat est `Approved`. Doit être ≤
                    `aml_score_review_threshold` (sinon `400`).
                aml_score_review_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 100
                  description: >-
                    Seuil de score de risque au-dessus duquel le résultat est
                    `Declined`. Les scores situés entre les deux seuils
                    produisent `In Review`.
                aml_name_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 60
                  description: >-
                    Poids de la similarité de nom dans le score de
                    correspondance par correspondance. La somme des trois poids
                    doit être exactement égale à 100 (sinon `400`).
                aml_dob_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 25
                  description: >-
                    Poids de la date de naissance dans le score de
                    correspondance par correspondance.
                aml_country_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 15
                  description: >-
                    Poids du pays/de la nationalité dans le score de
                    correspondance par correspondance.
                aml_match_score_threshold:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 93
                  description: >-
                    Seuil par résultat : les résultats avec un `match_score`
                    inférieur à cette valeur sont `False Positive` (exclus de
                    l'évaluation du risque) ; ceux atteignant ou dépassant cette
                    valeur sont des correspondances possibles `Unreviewed`.
                include_adverse_media:
                  type: boolean
                  default: false
                  description: >-
                    Rechercher également la presse négative dans les médias
                    d'information. Ajoute jusqu'à ~30 s de latence pendant la
                    collecte des résultats — utilisez un délai d'expiration
                    client ≥ 60 s.
                include_ongoing_monitoring:
                  type: boolean
                  default: false
                  description: >-
                    Continuer à filtrer ce profil et transmettre les
                    modifications par webhook. Nécessite `save_api_request=true`
                    (sinon `400`).
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Conserver le filtrage en tant que session (visibilité dans
                    la console, endpoint de décision, webhooks, examen des
                    correspondances). Définissez sur `false` pour une
                    vérification sans état.
                vendor_data:
                  type: string
                  description: >-
                    Votre identifiant pour l'utilisateur filtré ; renvoyé en
                    écho et conservé avec la session.
                metadata:
                  type: object
                  nullable: true
                  description: JSON libre stocké avec la requête et renvoyé en écho.
                sandbox_scenario:
                  type: string
                  description: >-
                    Identifiant de scénario réservé à la sandbox. Accepté
                    uniquement lorsque la clé API appartient à une application
                    en mode sandbox ; rejeté sur les applications en production.
                    Un filtrage autonome n'ayant pas de session à armer, le slug
                    est directement transmis dans la requête de filtrage :
                    `decline_aml_hit` renvoie une correspondance conforme au
                    format de production et clôture le filtrage avec le statut
                    `Declined`, `review_aml_possible_match` le clôture avec le
                    statut `In Review`, et un scénario n'armant aucun résultat
                    AML laisse le filtrage vierge. Consultez le catalogue des
                    scénarios à GET /v1/sandbox/scenarios/ ou [Sandbox et
                    données de test](/fr/integration/sandbox-testing).
                  example: decline_aml_hit
            example:
              full_name: Antonio Ejemplo Modelo
              entity_type: person
              date_of_birth: '1972-02-29'
              nationality: ES
              include_adverse_media: false
              vendor_data: user-1234
      responses:
        '200':
          description: >-
            Filtrage terminé. `aml.status` reflète vos seuils ; chaque résultat
            atteignant ou dépassant le seuil minimal interne d'inclusion est
            listé dans `aml.hits` avec son `match_score` d'identité, son
            `risk_score` d'entité et une décomposition `score_breakdown`
            expliquant la correspondance.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: "Identifiant de session persistante lorsque `save_api_request=true` (utilisable avec `GET /v3/session/{sessionId}/decision/`)\_; sinon un UUID de corrélation temporaire."
                  aml:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - In Review
                          - Declined
                        description: >-
                          `Declined` lorsque `score` >
                          `aml_score_review_threshold` ; `In Review` lorsque
                          `score` > `aml_score_approve_threshold` ; `Approved`
                          dans les autres cas (y compris lorsqu'aucun score
                          n'est disponible).
                      total_hits:
                        type: integer
                        description: Nombre d'entrées dans `hits`.
                      entity_type:
                        type: string
                        enum:
                          - person
                          - company
                        description: Type d'entité filtré renvoyé.
                      hits:
                        type: array
                        items:
                          type: object
                          description: >-
                            Un résultat de filtrage. `match_score` (0–100)
                            mesure la confiance dans l'identité — les
                            correspondances inférieures à
                            `aml_match_score_threshold` sont marquées avec
                            `review_status: "False Positive"` et exclues de
                            l'évaluation du risque ; les correspondances
                            supérieures ou égales à ce seuil sont des
                            correspondances possibles `"Unreviewed"`.
                            `risk_score` (0–100) mesure le niveau de risque de
                            l'entité correspondante et détermine le `aml.score`
                            de premier niveau.
                          properties:
                            id:
                              type: string
                              nullable: true
                              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
                              nullable: true
                              description: >-
                                URL source de l'entité correspondante,
                                lorsqu'elle est disponible.
                            match:
                              type: boolean
                              nullable: true
                              description: >-
                                Indicateur de correspondance exacte obsolète.
                                Privilégiez `match_score` + `review_status`.
                            score:
                              type: number
                              nullable: true
                              description: >-
                                OBSOLÈTE : score de correspondance pondéré dans
                                la plage 0–1. Utilisez `match_score` à la place.
                            match_score:
                              type: number
                              nullable: true
                              description: >-
                                Score de confiance de l'identité (0–100).
                                Comparé à `aml_match_score_threshold` pour
                                séparer les faux positifs des correspondances
                                possibles.
                            risk_score:
                              type: number
                              nullable: true
                              description: >-
                                Score de risque de l'entité (0–100). Le
                                `risk_score` le plus élevé parmi les
                                correspondances qui ne sont pas des faux
                                positifs devient le `aml.score` de premier
                                niveau.
                            target:
                              type: boolean
                              nullable: true
                            caption:
                              type: string
                              nullable: true
                              description: Nom d'affichage de l'entité correspondante.
                            datasets:
                              type: array
                              nullable: true
                              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: >-
                                Catégories de risque dans lesquelles l'entité
                                est répertoriée : `PEP` (avec son niveau, `PEP
                                Level 1` à `PEP Level 4`), `Sanctions`, `Adverse
                                Media`, `Warnings and Regulatory Enforcement`,
                                `Fitness and Probity`, `SIP`, `SIE` ou
                                `Insolvency`. `Other Lists` lorsque la source de
                                l'entité n'indique aucune de ces catégories.
                            features:
                              type: object
                              nullable: true
                            properties:
                              type: object
                              nullable: true
                              description: >-
                                Profil de l'entité : `name`, `alias`, `notes`,
                                `gender`, `birthDate`, `birthPlace`,
                                `nationality`, `position`, ainsi que d'autres
                                tableaux biographiques (chacun pouvant être
                                nul).
                            rca_name:
                              type: string
                              nullable: true
                              description: >-
                                Nom du proche associé concerné grâce auquel
                                l'entité a été mise en correspondance, lorsque
                                le résultat est un RCA.
                            pep_matches:
                              type: array
                              description: Entrées de la liste PEP associées à ce résultat.
                              items:
                                type: object
                                properties:
                                  list_name:
                                    type: string
                                  publisher:
                                    type: string
                                  source_url:
                                    type: string
                                  description:
                                    type: string
                                  matched_name:
                                    type: string
                                  pep_position:
                                    type: string
                                  date_of_birth:
                                    type: string
                                  place_of_birth:
                                    type: string
                                  aliases:
                                    type: array
                                    items:
                                      type: string
                                  education:
                                    type: array
                                    items:
                                      type: string
                                  other_sources:
                                    type: array
                                    items:
                                      type: string
                            sanction_matches:
                              type: array
                              items:
                                type: object
                              description: >-
                                Entrées de listes de sanctions associées à cette
                                correspondance (même format de liste
                                sous-jacente que `pep_matches`, avec des champs
                                spécifiques aux sanctions en plus).
                            warning_matches:
                              type: array
                              items:
                                type: object
                              description: >-
                                Entrées d'avertissement/de liste de surveillance
                                à l'origine de cette correspondance.
                            adverse_media_matches:
                              type: array
                              description: >-
                                Articles de presse négative. Renseigné
                                uniquement lorsque `include_adverse_media=true`.
                              items:
                                type: object
                                properties:
                                  headline:
                                    type: string
                                  summary:
                                    type: string
                                  sentiment:
                                    type: string
                                  sentiment_score:
                                    type: number
                                  source_url:
                                    type: string
                                  thumbnail:
                                    type: string
                                    nullable: true
                                  country:
                                    type: string
                                    nullable: true
                                  author_name:
                                    type: string
                                    nullable: true
                                  publication_date:
                                    type: string
                                    nullable: true
                                  adverse_keywords:
                                    type: array
                                    items:
                                      type: string
                                  other_sources:
                                    type: array
                                    items:
                                      type: string
                            adverse_media_details:
                              type: object
                              nullable: true
                              description: >-
                                Sentiment agrégé de presse négative pour
                                l'entité (`sentiment`, `sentiment_score`, carte
                                de fréquence `adverse_keywords`). Renseigné
                                uniquement lorsque `include_adverse_media=true`.
                            first_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Date et heure de première apparition de l'entité
                                dans les jeux de données.
                            last_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Actualisation la plus récente du jeu de données
                                ayant inclus l'entité.
                            linked_entities:
                              type: array
                              description: >-
                                Relations connues de l'entité correspondante
                                (famille, associés, entreprises).
                              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
                            risk_view:
                              type: object
                              nullable: true
                              description: >-
                                Décomposition du risque par dimension (`crimes`,
                                `countries`, `categories`, `custom_list`),
                                chacune avec `score`, `weightage`, `risk_level`
                                et un mappage `risk_scores`.
                            additional_information:
                              type: object
                              nullable: true
                              description: >-
                                Contexte supplémentaire au format libre, par
                                exemple un tableau `flag_summary` expliquant
                                pourquoi l'entité est signalée.
                            review_status:
                              type: string
                              nullable: true
                              enum:
                                - False Positive
                                - Unreviewed
                                - Confirmed Match
                                - Inconclusive
                              description: >-
                                `False Positive` — `match_score` inférieur à
                                `aml_match_score_threshold`, exclu de
                                l'évaluation du risque. `Unreviewed` —
                                correspondance possible en attente d'examen.
                                `Confirmed Match` / `Inconclusive` — définis
                                manuellement par un réviseur (via la Business
                                Console) sur les sessions enregistrées ; cette
                                fonctionnalité d'examen ne fait pas partie de
                                cette spécification.
                            score_breakdown:
                              type: object
                              nullable: true
                              description: >-
                                Mode de calcul du `match_score`. Le nom, la date
                                de naissance et le pays apportent chacun
                                `<component>_score` ×
                                `<component>_weight_normalized` points ; les
                                poids sont renormalisés lorsqu'un composant est
                                manquant dans les données filtrées. Le numéro de
                                document n'est pas pondéré — il agit comme une «
                                clé maîtresse » : `MATCH` remplace le score par
                                100, `NEUTRAL` le laisse inchangé,
                                `HARD_MISMATCH` applique une pénalité.
                              properties:
                                name_score:
                                  type: integer
                                  nullable: true
                                  description: Similarité brute des noms (0–100).
                                name_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Poids configuré pour le nom
                                    (`aml_name_weight`).
                                name_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: Poids du nom après renormalisation (0–100).
                                name_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Points que le nom a apportés à
                                    `total_score`.
                                dob_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Score de la date de naissance en pourcentage
                                    de son poids (−100 à 100).
                                dob_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Poids configuré pour la date de naissance
                                    (`aml_dob_weight`).
                                dob_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Pondération de la date de naissance après
                                    renormalisation (0–100).
                                dob_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Points que la date de naissance a apportés à
                                    `total_score`.
                                country_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Score du pays exprimé en pourcentage de son
                                    poids (−100 à 100).
                                country_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Poids configuré pour le pays
                                    (`aml_country_weight`).
                                country_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: Poids du pays après renormalisation (0–100).
                                country_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Points que le pays a apportés à
                                    `total_score`.
                                document_number_match_type:
                                  type: string
                                  nullable: true
                                  enum:
                                    - MATCH
                                    - NEUTRAL
                                    - HARD_MISMATCH
                                  description: >-
                                    Résultat de référence absolue (golden-key)
                                    pour la comparaison du numéro de document.
                                document_number_effect:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Description lisible par l'humain de l'effet
                                    du numéro de document.
                                total_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Score de correspondance pondéré final
                                    (0–100) — reflète `match_score`.
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Score de risque AML global (0–100) : le `risk_score`
                          le plus élevé parmi les correspondances qui ne sont
                          pas des faux positifs. Détermine le `status` via les
                          deux seuils.
                      screened_data:
                        type: object
                        description: >-
                          Éléments filtrés renvoyés : `full_name`,
                          `date_of_birth`, `nationality`, `document_number` (les
                          champs absents sont `null`).
                        properties:
                          full_name:
                            type: string
                          date_of_birth:
                            type: string
                            nullable: true
                          nationality:
                            type: string
                            nullable: true
                          document_number:
                            type: string
                            nullable: true
                      warnings:
                        type: array
                        items:
                          type: object
                          properties:
                            feature:
                              type: string
                              description: Fonctionnalité ayant émis l'avertissement.
                            risk:
                              type: string
                              description: Identifiant de risque lisible par machine.
                            additional_data:
                              type: object
                              nullable: true
                              description: >-
                                Contexte supplémentaire pour l'avertissement,
                                lorsqu'il est disponible.
                            log_type:
                              type: string
                              description: >-
                                `warning`, `information` ou `error` — manière
                                dont le risque a affecté le résultat.
                            short_description:
                              type: string
                              description: Résumé lisible par un humain sur une ligne.
                            long_description:
                              type: string
                              description: Explication complète lisible par un humain.
                        description: >-
                          Contient un avertissement `POSSIBLE_MATCH_FOUND`
                          chaque fois que le `score` est non nul et ≥
                          `aml_score_approve_threshold` (un score exactement
                          égal à 0 n'émet jamais d'avertissement) ; vide sinon.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Valeur renvoyée de `vendor_data` que vous avez envoyé.
                  metadata:
                    type: object
                    nullable: true
                    description: Écho des `metadata` que vous avez envoyées.
                  created_at:
                    type: string
                    format: date-time
              examples:
                No hits (Approved):
                  summary: Filtrage sans correspondance — zéro résultat
                  value:
                    request_id: d27c5509-7a66-45a9-b05e-d69d9f4c336a
                    aml:
                      status: Approved
                      total_hits: 0
                      entity_type: person
                      hits: []
                      score: 0
                      screened_data:
                        full_name: Maximilian Mustermann-Doe
                        date_of_birth: '1992-03-14'
                        nationality: DE
                        document_number: null
                      warnings: []
                    vendor_data: user-1234
                    metadata:
                      internal_ref: abc-123
                    created_at: '2026-06-11T10:21:07.013938+00:00'
                PEP hit (Approved — risk below approve threshold):
                  summary: >-
                    Une correspondance possible avec une PEP ; le score de
                    risque de 73 reste inférieur au seuil d'approbation par
                    défaut fixé à 80
                  value:
                    request_id: 0b7e7a3e-65a1-4f3d-9c7a-1de2f9a40111
                    aml:
                      status: Approved
                      total_hits: 1
                      entity_type: person
                      hits:
                        - id: hit_7c1e9a40b2d35f86e0a4c912
                          url: https://news.example.org/articles/sample
                          match: false
                          score: 0.93
                          match_score: 93
                          risk_score: 73
                          target: null
                          caption: Antonio Ejemplo Modelo
                          datasets:
                            - PEP Level 1
                            - PEP
                          features: null
                          rca_name: ''
                          first_seen: '2026-01-07T00:00:00'
                          last_seen: '2026-01-07T00:00:00'
                          review_status: Unreviewed
                          properties:
                            name:
                              - Antonio Ejemplo Modelo
                              - Antonio Ejemplo
                            alias:
                              - Antonio Ejemplo Modelo
                              - Ejemplo Modelo, Pedro
                            notes:
                              - Prime Minister of Spain
                            gender:
                              - male
                            birthDate:
                              - '1972-02-29'
                            birthPlace:
                              - Madrid, Spain
                            nationality: null
                            position: null
                          risk_view:
                            crimes:
                              score: 0
                              weightage: 20
                              risk_level: Low
                              risk_scores: {}
                            countries:
                              score: 9.64
                              weightage: 30
                              risk_level: Low
                              risk_scores:
                                Spain: 25.71
                            categories:
                              score: 62.5
                              weightage: 50
                              risk_level: High
                              risk_scores:
                                PEP: 100
                                PEP Level 1: 100
                            custom_list: {}
                          score_breakdown:
                            name_score: 89
                            name_weight: 60
                            name_weight_normalized: 60
                            name_contribution: 53.4
                            dob_score: 100
                            dob_weight: 25
                            dob_weight_normalized: 25
                            dob_contribution: 25
                            country_score: 100
                            country_weight: 15
                            country_weight_normalized: 15
                            country_contribution: 15
                            document_number_match_type: NEUTRAL
                            document_number_effect: No document number provided for screening
                            total_score: 93
                          pep_matches:
                            - aliases: []
                              education: []
                              list_name: Presidency of the Government of Spain
                              publisher: Presidency of the Government of Spain
                              source_url: https://news.example.org/articles/sample
                              description: >-
                                The Presidency of the Government is the central
                                institutional body in Spain that supports the
                                Prime Minister and coordinates the general
                                action of the central government.
                              matched_name: Antonio Ejemplo Modelo
                              pep_position: ''
                              date_of_birth: '1972-02-29'
                              other_sources: []
                              place_of_birth: Madrid, Spain
                          sanction_matches: []
                          warning_matches: []
                          adverse_media_matches: []
                          adverse_media_details: null
                          linked_entities:
                            - name:
                                - Maria Begona Gomez Fernandez
                              active: []
                              status: []
                              details: []
                              relation:
                                - spouse
                          additional_information:
                            flag_summary:
                              - >-
                                Antonio Ejemplo Modelo has been flagged as a
                                Level 1 Politically Exposed Person (PEP) from
                                Spain, serving as the President of the
                                Government of Spain.
                      score: 73
                      screened_data:
                        full_name: Pedro Sanchez Perez-Castejon
                        date_of_birth: '1972-02-29'
                        nationality: ES
                        document_number: null
                      warnings: []
                    vendor_data: null
                    metadata: null
                    created_at: '2026-06-11T10:23:44.812000+00:00'
        '400':
          description: >-
            Erreur de validation. Les problèmes au niveau des champs renvoient
            l'enveloppe standard de DRF (un tableau de messages par champ en
            cause) ; les règles inter-champs (somme des pondérations, ordre des
            seuils, surveillance sans enregistrement) renvoient `{"error":
            [...]}`.
          content:
            application/json:
              examples:
                Missing full_name:
                  summary: '`full_name` est le seul champ obligatoire'
                  value:
                    full_name:
                      - This field is required.
                Short full_name:
                  summary: '`full_name` doit comporter au moins 2 caractères'
                  value:
                    full_name:
                      - Ensure this field has at least 2 characters.
                Invalid nationality:
                  summary: '`nationality` doit être au format ISO 3166-1 alpha-2'
                  value:
                    nationality:
                      - Invalid ISO 3166-1 alpha-2 country code.
                Weights do not sum to 100:
                  summary: >-
                    `aml_name_weight` + `aml_dob_weight` + `aml_country_weight`
                    ≠ 100
                  value:
                    error:
                      - >-
                        AML weights must sum to 100. Current sum: 90 (name: 50,
                        dob: 25, country: 15)
                Thresholds out of order:
                  summary: Seuil d'approbation supérieur au seuil d'examen
                  value:
                    error:
                      - >-
                        Approve threshold (90.0) cannot be greater than review
                        threshold (80.0)
                Monitoring without saving:
                  summary: >-
                    `include_ongoing_monitoring=true` avec
                    `save_api_request=false`
                  value:
                    error:
                      - >-
                        Ongoing monitoring can only be enabled when the API
                        request is saved.
        '403':
          description: "Permission refusée. Renvoyé lorsque l'en-tête `x-api-key` est manquant, ainsi que lorsque le solde de l'organisation appelante ne permet pas de couvrir l'appel\_; une clé incorrecte, révoquée ou expirée renvoie `401`. Une clé manquante renvoie `403` avec `{\"detail\": ...}`\_; une clé incorrecte, révoquée ou expirée renvoie `401`. Les crédits insuffisants renvoient `403` avec `{\"error\": ...}` avant tout filtrage ou appel à un fournisseur."
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: Aucun en-tête `x-api-key`, ou la clé est non valide/révoquée
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: Le solde de l'organisation ne peut pas couvrir l'appel
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            Limite de débit dépassée. Les endpoints POST/PATCH/DELETE partagent
            un budget de 300 requêtes d'écriture par minute par clé API (la
            création de transactions et l'ingestion d'événements ont un budget
            distinct de 600). La réponse comporte les en-têtes
            `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` et
            `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: >-
                    Plus de 300 requêtes d'écriture au cours de la minute
                    actuelle
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/aml/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -H 'Idempotency-Key: aml-user-1234-2026-08-20' \
              -d '{
                "full_name": "Antonio Ejemplo Modelo",
                "entity_type": "person",
                "date_of_birth": "1972-02-29",
                "nationality": "ES",
                "include_adverse_media": false,
                "vendor_data": "user-1234"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.aml.screen(
                full_name="Antonio Ejemplo Modelo",
                entity_type="person",
                date_of_birth="1972-02-29",
                nationality="ES",
                include_adverse_media=False,
                vendor_data="user-1234",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

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

            const result = await didit.aml.screen({
              full_name: "Antonio Ejemplo Modelo",
              entity_type: "person",
              date_of_birth: "1972-02-29",
              nationality: "ES",
              include_adverse_media: false,
              vendor_data: "user-1234",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.AML.Screen(ctx, didit.AMLScreenParams{\n\tFullName:            \"Antonio Ejemplo Modelo\",\n\tEntityType:          didit.Some(didit.AMLScreenParamsEntityType(\"person\")),\n\tDateOfBirth:         didit.String(\"1972-02-29\"),\n\tNationality:         didit.String(\"ES\"),\n\tIncludeAdverseMedia: didit.Bool(false),\n\tVendorData:          didit.String(\"user-1234\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: |-
            import java.time.LocalDate;
            import me.didit.Didit;
            import me.didit.types.AmlScreenParams;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            var result = client.aml().screen(AmlScreenParams.builder()
                    .fullName("Antonio Ejemplo Modelo")
                    .entityType(AmlScreenParams.EntityType.of("person"))
                    .dateOfBirth(LocalDate.parse("1972-02-29"))
                    .nationality("ES")
                    .includeAdverseMedia(false)
                    .vendorData("user-1234")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

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

            $result = $didit->aml->screen([
                'full_name' => 'Antonio Ejemplo Modelo',
                'entity_type' => 'person',
                'date_of_birth' => '1972-02-29',
                'nationality' => 'ES',
                'include_adverse_media' => false,
                'vendor_data' => 'user-1234',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.aml.screen(
              full_name: "Antonio Ejemplo Modelo",
              entity_type: "person",
              date_of_birth: "1972-02-29",
              nationality: "ES",
              include_adverse_media: false,
              vendor_data: "user-1234"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            var result = await client.Aml.ScreenAsync(new AmlScreenParams
            {
                FullName = "Antonio Ejemplo Modelo",
                EntityType = new AmlScreenParamsEntityType("person"),
                DateOfBirth = "1972-02-29",
                Nationality = "ES",
                IncludeAdverseMedia = false,
                VendorData = "user-1234",
            });
            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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