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

# Screening AML API: Sanzioni, PEP e Watchlist

> Screening AML in tempo reale su 1,300+ watchlist globali con Didit: sanzioni, PEP, notizie negative. $0.20 a controllo, nessun minimo mensile.



## OpenAPI

````yaml it/openapi-25.json POST /v3/aml/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/aml/:
    post:
      tags:
        - Standalone APIs
      summary: Screening AML (autonomo)
      description: >-
        Esegui lo screening di una persona o di un'azienda rispetto a dataset di
        PEP, sanzioni, avvisi/watchlist e notizie negative in un'unica chiamata.


        **Modello a due punteggi.** Ciascun hit include un `match_score` (0–100,
        affidabilità dell'identità) e un `risk_score` (0–100, rischio
        dell'entità). Gli hit il cui `match_score` è inferiore a
        `aml_match_score_threshold` (valore predefinito **93**) sono
        contrassegnati come `review_status: "False Positive"` e ignorati ai fini
        della valutazione del rischio; il `risk_score` più elevato tra gli hit
        rimanenti diventa `aml.score`. Lo stato finale `aml.status` segue le tue
        soglie: `score` > `aml_score_review_threshold` (valore predefinito
        **100**) → `Declined`; `score` > `aml_score_approve_threshold` (valore
        predefinito **80**) → `In Review`; altrimenti `Approved`. Ogni volta che
        `score` è diverso da zero e ≥ alla soglia di approvazione, viene
        aggiunto un avviso `POSSIBLE_MATCH_FOUND` (uno score pari esattamente a
        0 non genera mai avvisi).


        **Pesi del punteggio di corrispondenza.** La somma di `aml_name_weight`
        + `aml_dob_weight` + `aml_country_weight` deve essere esattamente pari a
        100 (valori predefiniti 60/25/15). I componenti assenti nella richiesta
        vengono rinormalizzati; un `document_number` corrispondente funge da
        chiave principale che sovrascrive `match_score` impostandolo a 100.


        **Latenza.** Gli screening standard si completano solitamente in pochi
        secondi. Con `include_adverse_media=true` l'API attende l'arricchimento
        con notizie negative (una pausa iniziale di circa 5 s più fino a ~25 s
        di polling) — configura un timeout lato client di **almeno 60 secondi**.


        **Persistenza.** `save_api_request` è impostato per impostazione
        predefinita su **true**: lo screening viene memorizzato come sessione
        (`request_id` funziona con `GET /v3/session/{sessionId}/decision/`),
        compare nella console, viene attivato un webhook `status.updated` e gli
        stati di revisione degli hit possono essere aggiornati in seguito. Con
        `save_api_request=false` non viene memorizzato nulla e `request_id` è un
        ID di correlazione transitorio. `include_ongoing_monitoring=true`
        continua a rieseguire lo screening del profilo e richiede
        `save_api_request=true` (imposto con un errore `400`).


        **Idempotenza.** Invia un'intestazione `Idempotency-Key` quando effettui
        un nuovo tentativo dopo un timeout o un errore transitorio. La chiave è
        limitata all'ambito della tua applicazione e al corpo esatto della
        richiesta. La prima richiesta completata memorizza la propria risposta;
        i successivi tentativi identici restituiscono la stessa risposta e non
        eseguono né fatturano un altro screening AML. Se la richiesta originale
        è ancora in esecuzione, riprova più tardi con la stessa chiave. Se la
        stessa chiave viene riutilizzata con un corpo differente, l'API
        restituisce `409`.


        **Fatturazione.** Viene addebitato un credito dell'API AML dopo il primo
        screening riuscito. Le risposte idempotenti riprodotte non vengono
        addebitate nuovamente; un saldo insufficiente restituisce `403` prima
        che venga eseguito qualsiasi nuovo screening.


        **Sandbox.** Le chiavi delle applicazioni sandbox ignorano del tutto lo
        screening e la fatturazione e restituiscono un risultato simulato —
        `Approved` con zero hit, a meno che non venga passato
        `sandbox_scenario`. `save_api_request` funziona esattamente come per le
        chiavi di produzione, quindi uno screening sandbox salvato può essere
        recuperato tramite `GET /v3/session/{sessionId}/decision/` e `GET
        /v3/session/{sessionId}/generate-pdf/`.
      operationId: post_v3aml
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Chiave opzionale di sicurezza per i nuovi tentativi, fino a 255
            caratteri. Riutilizzare la stessa chiave con lo stesso corpo della
            richiesta restituisce la risposta originale senza eseguire né
            fatturare un secondo screening. Riutilizzare la chiave con un corpo
            diverso restituisce `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: >-
                    Nome completo della persona o azienda da sottoporre a
                    screening. Minimo **2 caratteri** (limite minimo imposto dal
                    fornitore di screening). Un nome più corto o vuoto
                    restituisce `400` su questo campo prima che venga eseguito
                    qualsiasi screening, quindi non viene addebitato alcun
                    costo.
                  example: Antonio Ejemplo Modelo
                entity_type:
                  type: string
                  enum:
                    - person
                    - company
                  default: person
                  description: >-
                    Tipo di entità da sottoporre a screening. Il valore
                    predefinito è `person`.
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Data di nascita (persone) o data di costituzione (aziende),
                    `YYYY-MM-DD`. Migliora la precisione della corrispondenza
                    tramite il peso della data di nascita.
                  example: '1972-02-29'
                nationality:
                  type: string
                  description: >-
                    Codice paese ISO 3166-1 **alpha-2** (ad es. `ES`). I codici
                    non validi restituiscono `400`. Migliora la precisione della
                    corrispondenza tramite il peso del paese.
                  example: ES
                document_number:
                  type: string
                  description: >-
                    Numero del documento d'identità. Non ponderato — funge da
                    chiave di riferimento: una corrispondenza esatta sovrascrive
                    il `match_score` del riscontro portandolo a 100, mentre una
                    netta mancata corrispondenza lo penalizza. Inviato al
                    fornitore di screening come filtro di ricerca solo quando è
                    di **2-50 caratteri**; un valore al di fuori di questo
                    intervallo viene accettato e memorizzato, e lo screening
                    viene comunque eseguito e fatturato, semplicemente senza
                    restrizione per numero di documento.
                aml_score_approve_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 80
                  description: >-
                    Soglia del punteggio di rischio pari o inferiore alla quale
                    il risultato è `Approved`. Deve essere ≤
                    `aml_score_review_threshold` (altrimenti `400`).
                aml_score_review_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 100
                  description: >-
                    Soglia del punteggio di rischio al di sopra della quale il
                    risultato è `Declined`. I punteggi compresi tra le due
                    soglie generano `In Review`.
                aml_name_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 60
                  description: >-
                    Peso della somiglianza del nome nel punteggio di
                    corrispondenza per singola occorrenza. I tre pesi devono
                    dare come somma esattamente 100 (altrimenti `400`).
                aml_dob_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 25
                  description: >-
                    Peso della data di nascita nel punteggio di corrispondenza
                    per singola occorrenza.
                aml_country_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 15
                  description: >-
                    Peso del paese/nazionalità nel punteggio di corrispondenza
                    per singola occorrenza.
                aml_match_score_threshold:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 93
                  description: >-
                    Soglia per hit: gli hit con `match_score` inferiore a questo
                    valore sono `False Positive` (esclusi dalla valutazione del
                    rischio); quelli pari o superiori sono possibili
                    corrispondenze `Unreviewed`.
                include_adverse_media:
                  type: boolean
                  default: false
                  description: >-
                    Cerca anche notizie negative sui media. Aggiunge fino a ~30
                    s di latenza durante la raccolta dei risultati; utilizza un
                    timeout del client ≥60 s.
                include_ongoing_monitoring:
                  type: boolean
                  default: false
                  description: >-
                    Continua a eseguire lo screening periodico di questo profilo
                    e invia le modifiche tramite webhook. Richiede
                    `save_api_request=true` (altrimenti `400`).
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Salva lo screening come sessione (visibilità nella console,
                    endpoint della decisione, webhook, revisione dei riscontri).
                    Imposta su `false` per un controllo senza stato.
                vendor_data:
                  type: string
                  description: >-
                    Il tuo identificatore per l'utente sottoposto a screening;
                    restituito nella risposta e memorizzato con la sessione.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    JSON a struttura libera memorizzato con la richiesta e
                    restituito nella risposta.
                sandbox_scenario:
                  type: string
                  description: >-
                    Slug dello scenario solo per sandbox. Accettato solo quando
                    la chiave API appartiene a un'applicazione in modalità
                    sandbox; rifiutato nelle applicazioni di produzione. Uno
                    screening autonomo non ha una sessione da preparare, quindi
                    lo slug va inserito direttamente nella richiesta di
                    screening: `decline_aml_hit` restituisce una corrispondenza
                    con struttura identica a quella di produzione e conclude lo
                    screening come `Declined`, `review_aml_possible_match` lo
                    conclude come `In Review`, mentre uno scenario che non
                    imposta alcun esito AML lascia lo screening pulito. Consulta
                    il catalogo degli scenari su GET /v1/sandbox/scenarios/ o
                    [Sandbox & Test Data](/it/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: >-
            Screening completato. `aml.status` riflette le tue soglie; ogni hit
            pari o superiore alla soglia minima interna di inclusione è elencato
            in `aml.hits` con il relativo `match_score` di identità,
            `risk_score` dell'entità e uno `score_breakdown` che spiega la
            corrispondenza.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      ID della sessione salvata quando `save_api_request=true`
                      (utilizzabile con `GET
                      /v3/session/{sessionId}/decision/`); altrimenti un UUID di
                      correlazione temporaneo.
                  aml:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - In Review
                          - Declined
                        description: >-
                          `Declined` quando `score` >
                          `aml_score_review_threshold`; `In Review` quando
                          `score` > `aml_score_approve_threshold`; `Approved`
                          altrimenti (anche quando non è disponibile alcun
                          punteggio).
                      total_hits:
                        type: integer
                        description: Numero di voci in `hits`.
                      entity_type:
                        type: string
                        enum:
                          - person
                          - company
                        description: Eco del tipo di entità sottoposta a screening.
                      hits:
                        type: array
                        items:
                          type: object
                          description: >-
                            Un hit dello screening. `match_score` (0–100) misura
                            l'affidabilità dell'identità: gli hit inferiori a
                            `aml_match_score_threshold` sono contrassegnati con
                            `review_status: "False Positive"` ed esclusi dalla
                            valutazione del rischio; gli hit pari o superiori
                            alla soglia sono possibili corrispondenze con stato
                            `"Unreviewed"`. `risk_score` (0–100) misura il
                            livello di rischio dell'entità rilevata e determina
                            il valore di `aml.score` di livello principale.
                          properties:
                            id:
                              type: string
                              nullable: true
                              description: >-
                                Identificativo stabile di Didit per l'hit:
                                `hit_` seguito da 24 caratteri esadecimali. La
                                stessa entità corrispondente mantiene lo stesso
                                `id` quando il soggetto viene sottoposto
                                nuovamente a screening. Passalo come `hit_id`
                                agli endpoint di revisione degli hit AML.
                            url:
                              type: string
                              nullable: true
                              description: >-
                                URL di origine per l'entità corrispondente,
                                quando disponibile.
                            match:
                              type: boolean
                              nullable: true
                              description: >-
                                Flag legacy di corrispondenza esatta. È
                                preferibile utilizzare `match_score` +
                                `review_status`.
                            score:
                              type: number
                              nullable: true
                              description: >-
                                DEPRECATO: punteggio di corrispondenza ponderato
                                compreso nell'intervallo 0–1. Usa invece
                                `match_score`.
                            match_score:
                              type: number
                              nullable: true
                              description: >-
                                Affidabilità dell'identità (0–100). Confrontata
                                con `aml_match_score_threshold` per distinguere
                                i falsi positivi dalle possibili corrispondenze.
                            risk_score:
                              type: number
                              nullable: true
                              description: >-
                                Punteggio di rischio dell'entità (0–100). Il
                                `risk_score` più alto tra le corrispondenze
                                diverse dai falsi positivi diventa il valore di
                                primo livello `aml.score`.
                            target:
                              type: boolean
                              nullable: true
                            caption:
                              type: string
                              nullable: true
                              description: Nome visualizzato dell'entità corrispondente.
                            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: >-
                                Categorie di rischio in cui l'entità è inclusa:
                                `PEP` (con il relativo livello, da `PEP Level 1`
                                a `PEP Level 4`), `Sanctions`, `Adverse Media`,
                                `Warnings and Regulatory Enforcement`, `Fitness
                                and Probity`, `SIP`, `SIE` o `Insolvency`.
                                `Other Lists` quando la fonte dell'entità non
                                indica nessuna di queste categorie.
                            features:
                              type: object
                              nullable: true
                            properties:
                              type: object
                              nullable: true
                              description: >-
                                Profilo dell'entità: `name`, `alias`, `notes`,
                                `gender`, `birthDate`, `birthPlace`,
                                `nationality`, `position` e altri array
                                biografici (ciascuno può essere null).
                            rca_name:
                              type: string
                              nullable: true
                              description: >-
                                Nome della persona vicina correlata tramite la
                                quale è stata rilevata la corrispondenza
                                dell'entità, quando l'esito positivo è un RCA.
                            pep_matches:
                              type: array
                              description: >-
                                Voci della lista PEP alla base di questo
                                riscontro.
                              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: >-
                                Voci della lista delle sanzioni a supporto di
                                questa corrispondenza (stessa struttura della
                                lista di supporto di `pep_matches`, più i campi
                                specifici delle sanzioni).
                            warning_matches:
                              type: array
                              items:
                                type: object
                              description: >-
                                Voci di avviso/watchlist a supporto di questa
                                corrispondenza.
                            adverse_media_matches:
                              type: array
                              description: >-
                                Articoli di notizie negative. Popolato solo
                                quando `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 aggregato delle notizie negative per
                                l'entità (`sentiment`, `sentiment_score`, mappa
                                delle frequenze di `adverse_keywords`). Popolato
                                solo quando `include_adverse_media=true`.
                            first_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Data e ora della prima apparizione dell'entità
                                nei dataset.
                            last_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Aggiornamento più recente del set di dati che ha
                                incluso l'entità.
                            linked_entities:
                              type: array
                              description: >-
                                Relazioni note dell'entità corrispondente
                                (familiari, collaboratori, aziende).
                              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: >-
                                Dettaglio del rischio per dimensione (`crimes`,
                                `countries`, `categories`, `custom_list`),
                                ciascuno con `score`, `weightage`, `risk_level`
                                e una mappa `risk_scores`.
                            additional_information:
                              type: object
                              nullable: true
                              description: >-
                                Contesto aggiuntivo a struttura libera, ad es.
                                un array `flag_summary` che spiega perché
                                l'entità è segnalata.
                            review_status:
                              type: string
                              nullable: true
                              enum:
                                - False Positive
                                - Unreviewed
                                - Confirmed Match
                                - Inconclusive
                              description: >-
                                `False Positive` — `match_score` inferiore a
                                `aml_match_score_threshold`, escluso dalla
                                valutazione del rischio. `Unreviewed` —
                                possibile corrispondenza in attesa di revisione.
                                `Confirmed Match` / `Inconclusive` — impostato
                                manualmente da un revisore (tramite la Business
                                Console) sulle sessioni salvate; tale
                                funzionalità di revisione non fa parte di questa
                                specifica.
                            score_breakdown:
                              type: object
                              nullable: true
                              description: >-
                                Modalità di calcolo di `match_score`. Nome, data
                                di nascita e paese contribuiscono ciascuno con
                                `<component>_score` ×
                                `<component>_weight_normalized` punti; i pesi
                                vengono nuovamente normalizzati se un componente
                                è assente dai dati sottoposti a screening. Il
                                numero del documento non è ponderato: agisce
                                come 'chiave fondamentale': `MATCH` sovrascrive
                                il punteggio impostandolo a 100, `NEUTRAL` lo
                                lascia invariato, `HARD_MISMATCH` applica una
                                penalità.
                              properties:
                                name_score:
                                  type: integer
                                  nullable: true
                                  description: Somiglianza dei nomi non elaborata (0–100).
                                name_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Peso del nome configurato
                                    (`aml_name_weight`).
                                name_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Peso del nome dopo la rinormalizzazione
                                    (0–100).
                                name_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punti con cui il nome ha contribuito a
                                    `total_score`.
                                dob_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Punteggio della data di nascita come
                                    percentuale del suo peso (da −100 a 100).
                                dob_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Peso della data di nascita configurato
                                    (`aml_dob_weight`).
                                dob_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Peso della data di nascita dopo la
                                    rinormalizzazione (0–100).
                                dob_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punti con cui la data di nascita ha
                                    contribuito a `total_score`.
                                country_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Punteggio del paese come percentuale del suo
                                    peso (da −100 a 100).
                                country_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Peso del paese configurato
                                    (`aml_country_weight`).
                                country_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Peso del paese dopo la rinormalizzazione
                                    (0–100).
                                country_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punti con cui il paese ha contribuito a
                                    `total_score`.
                                document_number_match_type:
                                  type: string
                                  nullable: true
                                  enum:
                                    - MATCH
                                    - NEUTRAL
                                    - HARD_MISMATCH
                                  description: >-
                                    Risultato golden-key per il confronto del
                                    numero di documento.
                                document_number_effect:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Descrizione di facile lettura dell'effetto
                                    del numero del documento.
                                total_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Punteggio di corrispondenza ponderato finale
                                    (0–100) — rispecchia `match_score`.
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Punteggio di rischio AML complessivo (0–100): il
                          `risk_score` più alto tra i riscontri che non sono
                          falsi positivi. Determina lo `status` tramite le due
                          soglie.
                      screened_data:
                        type: object
                        description: >-
                          Eco dei dati sottoposti a screening: `full_name`,
                          `date_of_birth`, `nationality`, `document_number` (i
                          campi assenti sono `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: Funzionalità che ha generato l'avviso.
                            risk:
                              type: string
                              description: >-
                                Identificatore di rischio leggibile dalla
                                macchina.
                            additional_data:
                              type: object
                              nullable: true
                              description: >-
                                Contesto aggiuntivo per l'avviso, se
                                disponibile.
                            log_type:
                              type: string
                              description: >-
                                `warning`, `information` o `error` — come il
                                rischio ha influito sull'esito.
                            short_description:
                              type: string
                              description: Riepilogo su una riga leggibile dall'uomo.
                            long_description:
                              type: string
                              description: Spiegazione completa e leggibile.
                        description: >-
                          Contiene un avviso `POSSIBLE_MATCH_FOUND` ogni volta
                          che `score` è diverso da zero e ≥
                          `aml_score_approve_threshold` (un punteggio
                          esattamente pari a 0 non genera mai avvisi); vuoto
                          altrimenti.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Eco del `vendor_data` inviato.
                  metadata:
                    type: object
                    nullable: true
                    description: Eco del `metadata` inviato.
                  created_at:
                    type: string
                    format: date-time
              examples:
                No hits (Approved):
                  summary: Screening pulito — zero corrispondenze
                  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: >-
                    Una possibile corrispondenza PEP; il punteggio di rischio 73
                    rimane al di sotto della soglia predefinita di approvazione
                    di 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: >-
            Errore di validazione. I problemi a livello di campo restituiscono
            l'involucro standard di DRF (un array di messaggi per ogni campo non
            conforme); le regole tra campi (somma dei pesi, ordinamento delle
            soglie, monitoraggio senza salvataggio) restituiscono `{"error":
            [...]}`.
          content:
            application/json:
              examples:
                Missing full_name:
                  summary: '`full_name` è l''unico campo obbligatorio'
                  value:
                    full_name:
                      - This field is required.
                Short full_name:
                  summary: '`full_name` deve contenere almeno 2 caratteri'
                  value:
                    full_name:
                      - Ensure this field has at least 2 characters.
                Invalid nationality:
                  summary: '`nationality` deve essere in formato 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: Soglia di approvazione superiore alla soglia di revisione
                  value:
                    error:
                      - >-
                        Approve threshold (90.0) cannot be greater than review
                        threshold (80.0)
                Monitoring without saving:
                  summary: >-
                    `include_ongoing_monitoring=true` con
                    `save_api_request=false`
                  value:
                    error:
                      - >-
                        Ongoing monitoring can only be enabled when the API
                        request is saved.
        '403':
          description: >-
            Autorizzazione negata. Restituito quando l'intestazione `x-api-key`
            è mancante e anche quando il saldo dell'organizzazione chiamante non
            è sufficiente a coprire la chiamata; una chiave errata, revocata o
            scaduta restituisce `401`. Una chiave mancante restituisce `403` con
            `{"detail": ...}`; una chiave errata, revocata o scaduta restituisce
            `401`. Crediti insufficienti restituiscono `403` con `{"error":
            ...}` prima che avvenga qualsiasi screening o chiamata al provider.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: >-
                    Nessuna intestazione `x-api-key`, oppure la chiave non è
                    valida/revocata
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: >-
                    Il saldo dell'organizzazione non è sufficiente per coprire
                    la chiamata
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            Limite di frequenza superato. Gli endpoint POST/PATCH/DELETE
            condividono un budget di 300 richieste di scrittura al minuto per
            chiave API (la creazione di transazioni e l'ingestione di eventi
            hanno un budget separato di 600). La risposta contiene le
            intestazioni `X-RateLimit-Limit`, `X-RateLimit-Remaining`,
            `X-RateLimit-Reset` e `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Più di 300 richieste di scrittura nel minuto corrente
                  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 chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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