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

# Cribratge AML API: sancions, PEP i llistes de vigilància

> Cribratge AML amb Didit contra més de 1,300 llistes de vigilància: sancions, PEP i mitjans adversos. $0.20 per comprovació, sense mínims mensuals.



## OpenAPI

````yaml ca/openapi-25.json POST /v3/aml/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificació d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/aml/:
    post:
      tags:
        - Standalone APIs
      summary: Cribratge AML (independent)
      description: >-
        Fes el cribratge d'una persona o empresa contra conjunts de dades de
        PEP, sancions, llistes d'advertències/llistes de vigilància i mitjans
        adversos en una sola crida.


        **Model de dues puntuacions.** Cada coincidència inclou un `match_score`
        (0–100, confiança de la identitat) i un `risk_score` (0–100, risc de
        l'entitat). Les coincidències amb un `match_score` inferior a
        `aml_match_score_threshold` (per defecte **93**) s'etiqueten com a
        `review_status: "False Positive"` i s'ignoren a efectes de risc; el
        `risk_score` més alt d'entre les coincidències restants es converteix en
        `aml.score`. L'`aml.status` final segueix els teus llindars: `score` >
        `aml_score_review_threshold` (per defecte **100**) → `Declined`; `score`
        > `aml_score_approve_threshold` (per defecte **80**) → `In Review`;
        altrament `Approved`. Sempre que l'`score` sigui diferent de zero i ≥ el
        llindar d'aprovació, s'afegeix una advertència `POSSIBLE_MATCH_FOUND`
        (una puntuació exactament de 0 mai no genera cap advertència).


        **Ponderacions de la puntuació de coincidència.** `aml_name_weight` +
        `aml_dob_weight` + `aml_country_weight` han de sumar exactament 100 (per
        defecte 60/25/15). Els components que faltin a la sol·licitud s'eliminen
        de la suma i les ponderacions es renormalitzen; un `document_number`
        coincident actua com una clau mestra que substitueix el `match_score`
        per 100.


        **Latència.** Els cribratges ordinaris solen completar-se en pocs
        segons. Amb `include_adverse_media=true`, l'API espera l'enriquiment de
        mitjans adversos (una pausa inicial d'uns ~5 s més fins a ~25 s de
        sondeig); configura un temps d'espera del client de **com a mínim 60
        segons**.


        **Persistència.** `save_api_request` està establert per defecte a
        **true**: el cribratge s'emmagatzema com una sessió (`request_id`
        funciona amb `GET /v3/session/{sessionId}/decision/`), apareix a la
        consola, es dispara un webhook `status.updated`, i els estats de revisió
        de les coincidències es poden actualitzar més endavant. Amb
        `save_api_request=false` no s'emmagatzema res i `request_id` és un
        identificador de correlació transitori.
        `include_ongoing_monitoring=true` continua recribrant el perfil i
        requereix `save_api_request=true` (es fa complir amb un `400`).


        **Idempotència.** Envia una capçalera `Idempotency-Key` en reintentar
        després d'un temps d'espera o d'un error transitori. La clau està
        limitada a la teva aplicació i al cos exacte de la sol·licitud. La
        primera sol·licitud completada emmagatzema la seva resposta; els
        reintents idèntics posteriors retornen aquesta mateixa resposta i no
        executen ni facturen cap altre cribratge AML. Si la sol·licitud original
        encara s'està executant, torna-ho a intentar més tard amb la mateixa
        clau. Si es reutilitza la mateixa clau amb un cos diferent, l'API
        retorna `409`.


        **Facturació.** Es cobra un crèdit d'API d'AML després del primer
        cribratge satisfactori. Les respostes idempotents retornades de nou no
        es tornen a cobrar; un saldo insuficient retorna `403` abans que es
        produeixi cap cribratge nou.


        **Sandbox.** Les claus d'aplicacions de sandbox ometen completament el
        cribratge i la facturació i retornen un resultat simulat: `Approved` amb
        zero coincidències tret que passis `sandbox_scenario`.
        `save_api_request` funciona igual que a les claus de producció, de
        manera que un cribratge desat de sandbox es pot recuperar mitjançant
        `GET /v3/session/{sessionId}/decision/` i `GET
        /v3/session/{sessionId}/generate-pdf/`.
      operationId: post_v3aml
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Clau opcional de seguretat per a reintents, de fins a 255 caràcters.
            Reutilitzar la mateixa clau amb el mateix cos de sol·licitud retorna
            la resposta original sense executar ni facturar un segon cribratge.
            Reutilitzar la clau amb un cos diferent retorna `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 persona o empresa a sotmetre a cribratge.
                    Mínim **2 caràcters**: el límit mínim del propi proveïdor de
                    cribratge. Un nom més curt o en blanc retorna `400` en
                    aquest camp abans que s'executi cap cribratge, de manera que
                    no es factura res.
                  example: Antonio Ejemplo Modelo
                entity_type:
                  type: string
                  enum:
                    - person
                    - company
                  default: person
                  description: >-
                    Tipus d'entitat que s'ha de cribrar. El valor per defecte és
                    `person`.
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Data de naixement (persones) o data de constitució
                    (empreses), `YYYY-MM-DD`. Millora la precisió de la
                    coincidència mitjançant la ponderació de la data de
                    naixement.
                  example: '1972-02-29'
                nationality:
                  type: string
                  description: >-
                    Codi de país ISO 3166-1 **alfa-2** (p. ex. `ES`). Els codis
                    no vàlids retornen `400`. Millora la precisió de
                    coincidència mitjançant la ponderació per país.
                  example: ES
                document_number:
                  type: string
                  description: >-
                    Número del document d'identitat. No ponderat: actua com a
                    clau mestra: una coincidència exacta substitueix el
                    `match_score` de la coincidència a 100, i una discrepància
                    clara el penalitza. S'envia al proveïdor de cribratge com a
                    filtre de cerca només quan té entre **2 i 50 caràcters**; si
                    té un valor fora d'aquest interval, s'accepta i
                    s'emmagatzema, i el cribratge s'executa i es factura
                    igualment, però sense filtrar pel número de document.
                aml_score_approve_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 80
                  description: >-
                    Llindar de la puntuació de risc igual o per sota del qual el
                    resultat és `Approved`. Ha de ser ≤
                    `aml_score_review_threshold` (en cas contrari, `400`).
                aml_score_review_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 100
                  description: >-
                    Llindar de la puntuació de risc per sobre del qual el
                    resultat és `Declined`. Les puntuacions entre els dos
                    llindars produeixen `In Review`.
                aml_name_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 60
                  description: >-
                    Pes de la similitud del nom en la puntuació de coincidència
                    per hit. Els tres pesos han de sumar exactament 100 (en cas
                    contrari, `400`).
                aml_dob_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 25
                  description: >-
                    Pes de la data de naixement en la puntuació de coincidència
                    per coincidència.
                aml_country_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 15
                  description: >-
                    Pes del país/nacionalitat en la puntuació de coincidència
                    per coincidència.
                aml_match_score_threshold:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 93
                  description: >-
                    Punt de tall per coincidència: les coincidències amb un
                    `match_score` inferior a aquest es consideren `False
                    Positive` (excloses de l'avaluació de risc); les que siguin
                    iguals o superiors són possibles coincidències `Unreviewed`.
                include_adverse_media:
                  type: boolean
                  default: false
                  description: >-
                    Cerca també mitjans de comunicació per detectar cobertura
                    negativa. Afegeix fins a ~30 s de latència mentre es
                    recopilen els resultats; utilitza un temps d'espera del
                    client de ≥60 s.
                include_ongoing_monitoring:
                  type: boolean
                  default: false
                  description: >-
                    Continua tornant a cribrar aquest perfil i envia els canvis
                    mitjançant webhook. Requereix `save_api_request=true` (si
                    no, `400`).
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Persisteix el cribratge com una sessió (visibilitat a la
                    consola, endpoint de decisió, webhooks, revisió de
                    coincidències). Estableix-ho a `false` per a una comprovació
                    sense estat.
                vendor_data:
                  type: string
                  description: >-
                    El teu identificador per a l'usuari sotmès a cribratge; es
                    retorna tal com s'ha enviat i s'emmagatzema amb la sessió.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    JSON de format lliure emmagatzemat amb la sol·licitud i
                    retornat com a resposta.
                sandbox_scenario:
                  type: string
                  description: >-
                    Identificador d'escenari només per a sandbox. Només
                    s'accepta quan la clau d'API pertany a una aplicació en mode
                    sandbox; es rebutja en aplicacions en producció. Un
                    cribratge independent no té cap sessió per activar, de
                    manera que l'identificador s'inclou a la mateixa sol·licitud
                    de cribratge: `decline_aml_hit` retorna una coincidència amb
                    estructura de producció i resol el cribratge com a
                    `Declined`, `review_aml_possible_match` el resol com a `In
                    Review`, i un escenari que no activi cap resultat d'AML
                    deixa el cribratge net. Consulta el catàleg d'escenaris a
                    GET /v1/sandbox/scenarios/ o a [Sandbox i dades de
                    prova](/ca/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: >-
            Cribratge completat. `aml.status` reflecteix els teus llindars; cada
            coincidència que iguali o superi el mínim intern d'inclusió s'indica
            a `aml.hits` amb el seu `match_score` d'identitat, el `risk_score`
            de l'entitat i un `score_breakdown` que explica la coincidència.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      ID de sessió persistida quan `save_api_request=true`
                      (utilitzable amb `GET /v3/session/{sessionId}/decision/`);
                      en cas contrari, un UUID de correlació transitori.
                  aml:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - In Review
                          - Declined
                        description: >-
                          `Declined` quan `score` >
                          `aml_score_review_threshold`; `In Review` quan `score`
                          > `aml_score_approve_threshold`; `Approved` en cas
                          contrari (fins i tot quan no hi ha cap puntuació
                          disponible).
                      total_hits:
                        type: integer
                        description: Nombre d'entrades a `hits`.
                      entity_type:
                        type: string
                        enum:
                          - person
                          - company
                        description: Ressò del tipus d'entitat sotmesa a cribratge.
                      hits:
                        type: array
                        items:
                          type: object
                          description: >-
                            Una coincidència de cribratge. `match_score` (0–100)
                            mesura la confiança de la identitat: les
                            coincidències per sota de
                            `aml_match_score_threshold` s'etiqueten com a
                            `review_status: "False Positive"` i s'exclouen de
                            l'avaluació de risc; les coincidències iguals o
                            superiors s'etiqueten com a possibles coincidències
                            `"Unreviewed"`. `risk_score` (0–100) mesura com de
                            riesgosa és l'entitat coincident i determina el
                            valor de `aml.score` de nivell superior.
                          properties:
                            id:
                              type: string
                              nullable: true
                              description: >-
                                Identificador estable de Didit per a la
                                coincidència: `hit_` seguit de 24 caràcters
                                hexadecimals. La mateixa entitat coincident
                                manté el mateix `id` quan se sotmet el subjecte
                                a un nou cribratge. Transmet-lo com a `hit_id`
                                als endpoints de revisió de coincidències d'AML.
                            url:
                              type: string
                              nullable: true
                              description: >-
                                URL d'origen de l'entitat coincident, si està
                                disponible.
                            match:
                              type: boolean
                              nullable: true
                              description: >-
                                Indicador antic de coincidència exacta. És
                                preferible utilitzar `match_score` +
                                `review_status`.
                            score:
                              type: number
                              nullable: true
                              description: >-
                                OBSOLET. Puntuació de coincidència ponderada en
                                el rang 0–1. Utilitza `match_score` en el seu
                                lloc.
                            match_score:
                              type: number
                              nullable: true
                              description: >-
                                Confiança de la identitat (0–100). Es compara
                                amb `aml_match_score_threshold` per separar els
                                falsos positius de les possibles coincidències.
                            risk_score:
                              type: number
                              nullable: true
                              description: >-
                                Puntuació de risc de l'entitat (0–100). El
                                `risk_score` més alt entre les coincidències que
                                no siguin falsos positius es converteix en
                                l'`aml.score` de nivell superior.
                            target:
                              type: boolean
                              nullable: true
                            caption:
                              type: string
                              nullable: true
                              description: Nom visible de l'entitat coincident.
                            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: >-
                                Categories de risc en què figura l'entitat:
                                `PEP` (amb el seu nivell, de `PEP Level 1` a
                                `PEP Level 4`), `Sanctions`, `Adverse Media`,
                                `Warnings and Regulatory Enforcement`, `Fitness
                                and Probity`, `SIP`, `SIE` o `Insolvency`.
                                `Other Lists` quan la font de l'entitat no
                                indica cap d'aquestes categories.
                            features:
                              type: object
                              nullable: true
                            properties:
                              type: object
                              nullable: true
                              description: >-
                                Perfil de l'entitat: `name`, `alias`, `notes`,
                                `gender`, `birthDate`, `birthPlace`,
                                `nationality`, `position` i altres vectors
                                biogràfics (cadascun admet valors nuls).
                            rca_name:
                              type: string
                              nullable: true
                              description: >-
                                Nom de la persona associada propera amb la qual
                                s'ha produït la coincidència de l'entitat, quan
                                la coincidència és un RCA.
                            pep_matches:
                              type: array
                              description: >-
                                Entrades de la llista PEP que motiven aquesta
                                coincidència.
                              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: >-
                                Entrades de la llista de sancions que
                                justifiquen aquesta coincidència (la mateixa
                                estructura de llista que `pep_matches`, més
                                camps específics de sancions).
                            warning_matches:
                              type: array
                              items:
                                type: object
                              description: >-
                                Entrades d'advertències/llistes de vigilància
                                que donen suport a aquesta coincidència.
                            adverse_media_matches:
                              type: array
                              description: >-
                                Articles de mitjans adversos. S'omple només quan
                                `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 agregat de mitjans adversos per a
                                l'entitat (`sentiment`, `sentiment_score`, mapa
                                de freqüència d'`adverse_keywords`). S'omple
                                només quan `include_adverse_media=true`.
                            first_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Quan l'entitat va aparèixer per primera vegada
                                als conjunts de dades.
                            last_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Actualització més recent del conjunt de dades
                                que inclou l'entitat.
                            linked_entities:
                              type: array
                              description: >-
                                Relacions conegudes de l'entitat coincident
                                (família, associats, empreses).
                              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: >-
                                Desglossament del risc per dimensió (`crimes`,
                                `countries`, `categories`, `custom_list`),
                                cadascun amb `score`, `weightage`, `risk_level`
                                i un mapa `risk_scores`.
                            additional_information:
                              type: object
                              nullable: true
                              description: >-
                                Context addicional de format lliure, p. ex. una
                                matriu `flag_summary` que explica per què
                                l'entitat està marcada.
                            review_status:
                              type: string
                              nullable: true
                              enum:
                                - False Positive
                                - Unreviewed
                                - Confirmed Match
                                - Inconclusive
                              description: >-
                                `False Positive` — `match_score` per sota
                                d'`aml_match_score_threshold`, exclòs de
                                l'avaluació de risc. `Unreviewed` — possible
                                coincidència pendent de revisió. `Confirmed
                                Match` / `Inconclusive` — establert manualment
                                per un revisor (mitjançant la Business Console)
                                en sessions desades; aquesta funcionalitat de
                                revisió no forma part d'aquesta especificació.
                            score_breakdown:
                              type: object
                              nullable: true
                              description: >-
                                Com s'ha calculat `match_score`. El nom, la data
                                de naixement i el país aporten cadascun
                                `<component>_score` ×
                                `<component>_weight_normalized` punts; els pesos
                                es renormalitzen quan falta un component a les
                                dades analitzades. El número de document no té
                                pes: actua com a 'clau d'or': `MATCH` canvia la
                                puntuació a 100, `NEUTRAL` la deixa sense canvis
                                i `HARD_MISMATCH` aplica una penalització.
                              properties:
                                name_score:
                                  type: integer
                                  nullable: true
                                  description: Similitud del nom en brut (0–100).
                                name_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Pes configurat per al nom
                                    (`aml_name_weight`).
                                name_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Pes del nom després de la renormalització
                                    (0–100).
                                name_contribution:
                                  type: number
                                  nullable: true
                                  description: Punts que el nom ha aportat a `total_score`.
                                dob_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Puntuació de la data de naixement com a
                                    percentatge del seu pes (−100 a 100).
                                dob_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Pes configurat per a la data de naixement
                                    (`aml_dob_weight`).
                                dob_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Pes de la data de naixement després de la
                                    renormalització (0–100).
                                dob_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punts que la data de naixement ha aportat a
                                    `total_score`.
                                country_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Puntuació de país com a percentatge del seu
                                    pes (−100 a 100).
                                country_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Pes configurat per al país
                                    (`aml_country_weight`).
                                country_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Pes del país després de la renormalització
                                    (0–100).
                                country_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punts que el país ha aportat a
                                    `total_score`.
                                document_number_match_type:
                                  type: string
                                  nullable: true
                                  enum:
                                    - MATCH
                                    - NEUTRAL
                                    - HARD_MISMATCH
                                  description: >-
                                    Resultat de clau mestra (golden key) per a
                                    la comparació del número de document.
                                document_number_effect:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Descripció fàcil de llegir de l'efecte del
                                    número de document.
                                total_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Puntuació de coincidència ponderada final
                                    (0–100) — reflecteix `match_score`.
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Puntuació de risc AML global (0–100): el `risk_score`
                          més alt entre les coincidències que no són falsos
                          positius. Determina l'`status` mitjançant els dos
                          llindars.
                      screened_data:
                        type: object
                        description: >-
                          Ressò del que s'ha sotmès a cribratge: `full_name`,
                          `date_of_birth`, `nationality`, `document_number` (els
                          camps absents són `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: Funcionalitat que ha generat l'advertència.
                            risk:
                              type: string
                              description: Identificador de risc llegible per màquina.
                            additional_data:
                              type: object
                              nullable: true
                              description: >-
                                Context addicional per a l'advertència, quan
                                estigui disponible.
                            log_type:
                              type: string
                              description: >-
                                `warning`, `information` o `error` — com ha
                                afectat el risc el resultat.
                            short_description:
                              type: string
                              description: Resum d'una línia llegible per humans.
                            long_description:
                              type: string
                              description: Explicació completa comprensible per a persones.
                        description: >-
                          Conté un advertiment `POSSIBLE_MATCH_FOUND` sempre que
                          `score` sigui diferent de zero i ≥
                          `aml_score_approve_threshold` (una puntuació
                          d'exactament 0 mai no adverteix); buit en cas
                          contrari.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Ressò del `vendor_data` que has enviat.
                  metadata:
                    type: object
                    nullable: true
                    description: Ressò de les `metadata` que has enviat.
                  created_at:
                    type: string
                    format: date-time
              examples:
                No hits (Approved):
                  summary: 'Cribratge net: zero coincidències'
                  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 possible coincidència amb una PEP; la puntuació de risc
                    73 es manté per sota del llindar d'aprovació per defecte de
                    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: >-
            Error de validació. Els problemes a nivell de camp retornen
            l'embolcall estàndard de DRF (un array de missatges per camp
            infractor); les regles entre camps (suma de pesos, ordenació de
            llindars, monitoratge sense desar) retornen `{"error": [...]}`.
          content:
            application/json:
              examples:
                Missing full_name:
                  summary: '`full_name` és l''únic camp obligatori'
                  value:
                    full_name:
                      - This field is required.
                Short full_name:
                  summary: '`full_name` ha de tenir com a mínim 2 caràcters'
                  value:
                    full_name:
                      - Ensure this field has at least 2 characters.
                Invalid nationality:
                  summary: '`nationality` ha de ser 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: Llindar d'aprovació per sobre del llindar de revisió
                  value:
                    error:
                      - >-
                        Approve threshold (90.0) cannot be greater than review
                        threshold (80.0)
                Monitoring without saving:
                  summary: >-
                    `include_ongoing_monitoring=true` amb
                    `save_api_request=false`
                  value:
                    error:
                      - >-
                        Ongoing monitoring can only be enabled when the API
                        request is saved.
        '403':
          description: >-
            Permís denegat. Es retorna quan falta la capçalera `x-api-key`, i
            també quan el saldo de l'organització que fa la crida no pot cobrir
            la crida; una clau incorrecta, revocada o caducada retorna `401`. Si
            falta la clau es retorna `403` amb `{"detail": ...}`; una clau
            incorrecta, revocada o caducada retorna `401`. La manca de crèdit
            retorna `403` amb `{"error": ...}` abans que es produeixi cap
            cribratge o crida al proveïdor.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: >-
                    Sense capçalera `x-api-key`, o la clau no és vàlida/s'ha
                    revocat
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: El saldo de l'organització no pot cobrir la crida
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            S'ha superat el límit de freqüència. Els endpoints POST/PATCH/DELETE
            comparteixen un pressupost de 300 sol·licituds d'escriptura per
            minut per clau d'API (la creació de transaccions i la ingesta
            d'esdeveniments tenen un pressupost independent de 600). La resposta
            inclou les capçaleres `X-RateLimit-Limit`, `X-RateLimit-Remaining`,
            `X-RateLimit-Reset` i `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Més de 300 sol·licituds d'escriptura en el minut actual
                  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 clau d'API de la teva aplicació, des de Developers -> API keys a la
        Business Console. La clau primària té accés complet. Una clau amb nom
        pot tenir l'abast limitat: cap, lectura o escriptura per recurs,
        limitada a determinats fluxos de treball o a sessions aprovades, a una
        llista d'adreces IP i a una data de caducitat. 401 significa que la clau
        és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap
        clau, que la clau no té accés a aquest recurs o acció, o que la
        sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una
        ruta de sessió significa que la sessió està fora dels fluxos de treball
        o estats de la clau. Una clau sense accés a fitxers multimèdia rep els
        URL d'imatge, vídeo i PDF com a null, i una clau sense permís
        d'escriptura de sessions rep els enllaços de sessió i els tokens com a
        null. Consulta https://docs.didit.me/console/api-keys.

````

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