> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# API de triagem AML: sanções, PEP e lista de monitoramento

> A API da Didit faz triagem AML em tempo real em 1,300+ listas globais: sanções, PEP e mídia adversa. $0.20 por verificação, sem mínimo mensal.



## OpenAPI

````yaml pt-br/openapi-25.json POST /v3/aml/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/aml/:
    post:
      tags:
        - Standalone APIs
      summary: Análise AML (independente)
      description: >-
        Analise uma pessoa ou empresa em bases de dados de PEP, sanções,
        avisos/listas de monitoramento e mídia adversa em uma única chamada.


        **Modelo de duas pontuações.** Cada ocorrência traz um `match_score`
        (0–100, confiança na identidade) e um `risk_score` (0–100, risco da
        entidade). As ocorrências cujo `match_score` fica abaixo de
        `aml_match_score_threshold` (padrão **93**) recebem a marcação
        `review_status: "False Positive"` e são ignoradas para fins de risco; o
        maior `risk_score` entre as ocorrências restantes se torna `aml.score`.
        O `aml.status` final segue seus limiares: `score` >
        `aml_score_review_threshold` (padrão **100**) → `Declined`; `score` >
        `aml_score_approve_threshold` (padrão **80**) → `In Review`; caso
        contrário, `Approved`. Sempre que `score` for diferente de zero e ≥ ao
        limiar de aprovação, um aviso `POSSIBLE_MATCH_FOUND` é adicionado (uma
        pontuação exatamente igual a 0 nunca gera aviso).


        **Pesos da pontuação de correspondência.** `aml_name_weight` +
        `aml_dob_weight` + `aml_country_weight` devem somar exatamente 100
        (padrões 60/25/15). Os componentes ausentes da requisição são
        descartados e os pesos restantes são renormalizados; um
        `document_number` correspondente atua como chave definitiva (golden
        key), que substitui o `match_score` por 100.


        **Latência.** Análises simples normalmente terminam em poucos segundos.
        Com `include_adverse_media=true`, a API aguarda o enriquecimento de
        mídia adversa (uma pausa inicial de ~5 s, mais até ~25 s de polling);
        configure no cliente um timeout de **pelo menos 60 segundos**.


        **Persistência.** `save_api_request` tem como padrão **true**: a análise
        é armazenada como uma sessão (`request_id` funciona com `GET
        /v3/session/{sessionId}/decision/`), aparece no console, um webhook
        `status.updated` é disparado e os status de revisão das ocorrências
        podem ser atualizados depois. Com `save_api_request=false`, nada é
        armazenado e `request_id` é um ID de correlação temporário.
        `include_ongoing_monitoring=true` continua reanalisando o perfil e exige
        `save_api_request=true` (validado com um `400`).


        **Idempotência.** Envie um cabeçalho `Idempotency-Key` ao tentar
        novamente após um timeout ou erro transitório. A chave tem como escopo a
        sua aplicação e o corpo exato da requisição. A primeira requisição
        concluída armazena a resposta; novas tentativas idênticas posteriores
        retornam essa mesma resposta e não executam nem cobram outra análise
        AML. Se a requisição original ainda estiver em execução, tente novamente
        mais tarde com a mesma chave. Se a mesma chave for reutilizada com um
        corpo diferente, a API retorna `409`.


        **Faturamento.** Um crédito da API AML é cobrado após a primeira análise
        bem-sucedida. Respostas idempotentes reproduzidas não são cobradas
        novamente; saldo insuficiente retorna `403` antes que qualquer nova
        análise aconteça.


        **Sandbox.** Chaves de aplicações de sandbox ignoram totalmente a
        análise e o faturamento e retornam um resultado simulado: `Approved` sem
        ocorrências, a menos que você envie `sandbox_scenario`.
        `save_api_request` funciona da mesma forma que nas chaves de produção,
        então uma análise de sandbox salva pode ser recuperada por meio de `GET
        /v3/session/{sessionId}/decision/` e `GET
        /v3/session/{sessionId}/generate-pdf/`.
      operationId: post_v3aml
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Chave opcional para repetir requisições com segurança, com até 255
            caracteres. Reutilizar a mesma chave com o mesmo corpo de requisição
            retorna a resposta original, sem executar nem cobrar uma segunda
            análise. Reutilizar a chave com um corpo diferente 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: >-
                    Nome completo da pessoa ou empresa a ser analisada. Mínimo
                    de **2 caracteres**, o limite mínimo do próprio provedor de
                    análise. Um nome mais curto ou em branco retorna `400` neste
                    campo antes de qualquer análise ser executada, portanto nada
                    é cobrado.
                  example: Antonio Ejemplo Modelo
                entity_type:
                  type: string
                  enum:
                    - person
                    - company
                  default: person
                  description: Tipo de entidade a ser analisada. O padrão é `person`.
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Data de nascimento (pessoas) ou data de constituição
                    (empresas), `YYYY-MM-DD`. Melhora a precisão da
                    correspondência por meio do peso da data de nascimento.
                  example: '1972-02-29'
                nationality:
                  type: string
                  description: >-
                    Código de país ISO 3166-1 **alpha-2** (por exemplo, `ES`).
                    Códigos inválidos retornam `400`. Melhora a precisão da
                    correspondência por meio do peso do país.
                  example: ES
                document_number:
                  type: string
                  description: >-
                    Número do documento de identidade. Não tem peso: funciona
                    como uma chave de ouro. Uma correspondência exata eleva a
                    `match_score` do resultado para 100, e uma divergência clara
                    a penaliza. É enviado ao provedor de análise como filtro de
                    busca apenas quando tem **2-50 caracteres**; um valor fora
                    desse intervalo é aceito e armazenado, e a análise ainda é
                    executada e cobrada, apenas sem ser restringida pelo número
                    do documento.
                aml_score_approve_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 80
                  description: >-
                    Limiar da pontuação de risco igual ou abaixo do qual o
                    resultado é `Approved`. Deve ser ≤
                    `aml_score_review_threshold` (caso contrário, `400`).
                aml_score_review_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 100
                  description: >-
                    Limiar da pontuação de risco acima do qual o resultado é
                    `Declined`. Pontuações entre os dois limiares resultam em
                    `In Review`.
                aml_name_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 60
                  description: >-
                    Peso da similaridade de nome na pontuação de correspondência
                    por ocorrência. Os três pesos devem somar exatamente 100
                    (caso contrário, `400`).
                aml_dob_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 25
                  description: >-
                    Peso da data de nascimento na pontuação de correspondência
                    por ocorrência.
                aml_country_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 15
                  description: >-
                    Peso do país/nacionalidade na pontuação de correspondência
                    por ocorrência.
                aml_match_score_threshold:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 93
                  description: >-
                    Limite de corte por resultado: resultados com `match_score`
                    abaixo deste valor são `False Positive` (excluídos da
                    avaliação de risco); os que estão neste valor ou acima são
                    possíveis correspondências `Unreviewed`.
                include_adverse_media:
                  type: boolean
                  default: false
                  description: >-
                    Também pesquisa veículos de notícias em busca de cobertura
                    negativa. Adiciona até ~30 s de latência enquanto os
                    resultados são coletados; use um timeout de cliente de ≥60
                    s.
                include_ongoing_monitoring:
                  type: boolean
                  default: false
                  description: >-
                    Continua a reanalisar este perfil e envia as alterações via
                    webhook. Requer `save_api_request=true` (caso contrário,
                    `400`).
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Salva a análise como uma sessão (visibilidade no console,
                    endpoint de decisão, webhooks, revisão de ocorrências).
                    Defina como `false` para uma verificação sem estado.
                vendor_data:
                  type: string
                  description: >-
                    Seu identificador para o usuário analisado; retornado na
                    resposta e armazenado com a sessão.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    JSON livre armazenado com a requisição e retornado na
                    resposta.
                sandbox_scenario:
                  type: string
                  description: >-
                    Slug de cenário exclusivo de sandbox. Só é aceito quando a
                    chave de API pertence a uma aplicação em modo sandbox; é
                    rejeitado em aplicações em produção. Uma triagem avulsa não
                    tem sessão para preparar, então o slug vai na própria
                    requisição de triagem: `decline_aml_hit` retorna um
                    resultado com formato de produção e conclui a triagem como
                    `Declined`, `review_aml_possible_match` a conclui como `In
                    Review`, e um cenário que não prepara nenhum resultado AML
                    deixa a triagem limpa. Consulte o catálogo de cenários em
                    GET /v1/sandbox/scenarios/ ou [Sandbox e dados de
                    teste](/pt-br/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: >-
            Análise concluída. `aml.status` reflete seus limiares; toda
            ocorrência igual ou acima do piso interno de inclusão é listada em
            `aml.hits` com seu `match_score` de identidade, o `risk_score` da
            entidade e um `score_breakdown` que explica a correspondência.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      ID da sessão persistida quando `save_api_request=true`
                      (utilizável com `GET /v3/session/{sessionId}/decision/`);
                      caso contrário, um UUID de correlação transitório.
                  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`
                          caso contrário (inclusive quando não há pontuação
                          disponível).
                      total_hits:
                        type: integer
                        description: Número de entradas em `hits`.
                      entity_type:
                        type: string
                        enum:
                          - person
                          - company
                        description: Eco do tipo de entidade analisada.
                      hits:
                        type: array
                        items:
                          type: object
                          description: >-
                            Uma ocorrência da análise. `match_score` (0–100)
                            mede a confiança na identidade: ocorrências abaixo
                            de `aml_match_score_threshold` são marcadas com
                            `review_status: "False Positive"` e excluídas da
                            avaliação de risco; ocorrências iguais ou acima dele
                            são possíveis correspondências `"Unreviewed"`.
                            `risk_score` (0–100) mede o quão arriscada é a
                            entidade correspondida e determina o `aml.score` de
                            nível superior.
                          properties:
                            id:
                              type: string
                              nullable: true
                              description: >-
                                Identificador estável da Didit para o hit:
                                `hit_` seguido de 24 caracteres hexadecimais. A
                                mesma entidade correspondente mantém o mesmo
                                `id` quando o titular é analisado novamente.
                                Passe-o como `hit_id` para os endpoints de
                                revisão de hits AML.
                            url:
                              type: string
                              nullable: true
                              description: >-
                                URL de origem da entidade correspondente, quando
                                disponível.
                            match:
                              type: boolean
                              nullable: true
                              description: >-
                                Flag legada de correspondência exata. Prefira
                                `match_score` + `review_status`.
                            score:
                              type: number
                              nullable: true
                              description: >-
                                OBSOLETO. Pontuação de correspondência ponderada
                                no intervalo de 0 a 1. Use `match_score` em vez
                                disso.
                            match_score:
                              type: number
                              nullable: true
                              description: >-
                                Confiança de identidade (0–100). Comparada com
                                `aml_match_score_threshold` para separar Falsos
                                Positivos de Possíveis Correspondências.
                            risk_score:
                              type: number
                              nullable: true
                              description: >-
                                Pontuação de risco da entidade (0–100). A maior
                                `risk_score` entre os resultados que não são
                                falsos positivos se torna o `aml.score` de nível
                                superior.
                            target:
                              type: boolean
                              nullable: true
                            caption:
                              type: string
                              nullable: true
                              description: Nome de exibição da entidade correspondente.
                            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: >-
                                Categorias de risco em que a entidade está
                                listada: `PEP` (com seu nível, de `PEP Level 1`
                                a `PEP Level 4`), `Sanctions`, `Adverse Media`,
                                `Warnings and Regulatory Enforcement`, `Fitness
                                and Probity`, `SIP`, `SIE` ou `Insolvency`.
                                `Other Lists` quando a fonte da entidade não
                                indica nenhuma dessas categorias.
                            features:
                              type: object
                              nullable: true
                            properties:
                              type: object
                              nullable: true
                              description: >-
                                Perfil da entidade: `name`, `alias`, `notes`,
                                `gender`, `birthDate`, `birthPlace`,
                                `nationality`, `position` e outros arrays
                                biográficos (cada um pode ser nulo).
                            rca_name:
                              type: string
                              nullable: true
                              description: >-
                                Nome do associado próximo relacionado por meio
                                do qual a entidade foi correspondida, quando o
                                resultado é um RCA.
                            pep_matches:
                              type: array
                              description: >-
                                Entradas da lista de PEP que fundamentam este
                                resultado.
                              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: >-
                                Entradas da lista de sanções que sustentam este
                                resultado (mesmo formato de lista de origem de
                                `pep_matches`, mais campos específicos de
                                sanções).
                            warning_matches:
                              type: array
                              items:
                                type: object
                              description: >-
                                Entradas de aviso/lista de monitoramento que
                                fundamentam esta ocorrência.
                            adverse_media_matches:
                              type: array
                              description: >-
                                Artigos de mídia adversa. Preenchido apenas
                                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: >-
                                Sentimento agregado de mídia adversa para a
                                entidade (`sentiment`, `sentiment_score`, mapa
                                de frequência `adverse_keywords`). Preenchido
                                apenas quando `include_adverse_media=true`.
                            first_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Quando a entidade apareceu pela primeira vez nos
                                conjuntos de dados.
                            last_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Atualização mais recente do conjunto de dados
                                que incluiu a entidade.
                            linked_entities:
                              type: array
                              description: >-
                                Relacionamentos conhecidos da entidade
                                correspondente (familiares, associados,
                                empresas).
                              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: >-
                                Detalhamento do risco por dimensão (`crimes`,
                                `countries`, `categories`, `custom_list`), cada
                                uma com `score`, `weightage`, `risk_level` e um
                                mapa `risk_scores`.
                            additional_information:
                              type: object
                              nullable: true
                              description: >-
                                Contexto adicional livre, por exemplo, um array
                                `flag_summary` que explica por que a entidade
                                foi sinalizada.
                            review_status:
                              type: string
                              nullable: true
                              enum:
                                - False Positive
                                - Unreviewed
                                - Confirmed Match
                                - Inconclusive
                              description: >-
                                `False Positive`: `match_score` abaixo de
                                `aml_match_score_threshold`, excluído da
                                avaliação de risco. `Unreviewed`: possível
                                correspondência aguardando revisão. `Confirmed
                                Match` / `Inconclusive`: definidos manualmente
                                por um revisor (pelo Business Console) em
                                sessões salvas; esse recurso de revisão não faz
                                parte desta especificação.
                            score_breakdown:
                              type: object
                              nullable: true
                              description: >-
                                Como `match_score` foi calculado. Nome, data de
                                nascimento e país contribuem, cada um, com
                                `<component>_score` ×
                                `<component>_weight_normalized` pontos; os pesos
                                são renormalizados quando um componente está
                                ausente dos dados analisados. O número do
                                documento não tem peso; ele funciona como uma
                                'chave de ouro': `MATCH` substitui a pontuação
                                por 100, `NEUTRAL` a mantém inalterada e
                                `HARD_MISMATCH` aplica uma penalidade.
                              properties:
                                name_score:
                                  type: integer
                                  nullable: true
                                  description: Similaridade bruta de nome (0–100).
                                name_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Peso configurado do nome
                                    (`aml_name_weight`).
                                name_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: Peso do nome após a renormalização (0–100).
                                name_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Pontos com que o nome contribuiu para
                                    `total_score`.
                                dob_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Pontuação da data de nascimento como
                                    porcentagem do seu peso (−100 a 100).
                                dob_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Peso configurado da data de nascimento
                                    (`aml_dob_weight`).
                                dob_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Peso da data de nascimento após a
                                    renormalização (0 a 100).
                                dob_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Pontos com que a data de nascimento
                                    contribuiu para `total_score`.
                                country_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Pontuação do país como porcentagem do seu
                                    peso (−100 a 100).
                                country_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Peso configurado do país
                                    (`aml_country_weight`).
                                country_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: Peso do país após a renormalização (0–100).
                                country_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Pontos com que o país contribuiu para
                                    `total_score`.
                                document_number_match_type:
                                  type: string
                                  nullable: true
                                  enum:
                                    - MATCH
                                    - NEUTRAL
                                    - HARD_MISMATCH
                                  description: >-
                                    Resultado golden key da comparação do número
                                    do documento.
                                document_number_effect:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Descrição legível do efeito do número do
                                    documento.
                                total_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Pontuação de correspondência ponderada final
                                    (0–100), espelha `match_score`.
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Pontuação de risco AML geral (0–100): o maior
                          `risk_score` entre os resultados que não são falsos
                          positivos. Determina o `status` por meio dos dois
                          limiares.
                      screened_data:
                        type: object
                        description: >-
                          Eco do que foi analisado: `full_name`,
                          `date_of_birth`, `nationality`, `document_number`
                          (campos ausentes são `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: Recurso que emitiu o aviso.
                            risk:
                              type: string
                              description: Identificador de risco legível por máquina.
                            additional_data:
                              type: object
                              nullable: true
                              description: >-
                                Contexto adicional sobre o aviso, quando
                                disponível.
                            log_type:
                              type: string
                              description: >-
                                `warning`, `information` ou `error`: como o
                                risco afetou o resultado.
                            short_description:
                              type: string
                              description: Resumo legível de uma linha.
                            long_description:
                              type: string
                              description: Explicação completa e legível.
                        description: >-
                          Contém um aviso `POSSIBLE_MATCH_FOUND` sempre que
                          `score` é diferente de zero e ≥
                          `aml_score_approve_threshold` (uma pontuação
                          exatamente 0 nunca gera aviso); vazio caso contrário.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Eco dos `vendor_data` que você enviou.
                  metadata:
                    type: object
                    nullable: true
                    description: Eco do `metadata` que você enviou.
                  created_at:
                    type: string
                    format: date-time
              examples:
                No hits (Approved):
                  summary: 'Triagem limpa: nenhuma correspondência'
                  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: >-
                    Uma possível correspondência de PEP; a pontuação de risco 73
                    fica abaixo do limiar padrão de aprovação 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: >-
            Erro de validação. Problemas no nível de campo retornam o envelope
            padrão do DRF (um array de mensagens por campo com problema); regras
            entre campos (soma dos pesos, ordem dos limiares, monitoramento sem
            salvar) retornam `{"error": [...]}`.
          content:
            application/json:
              examples:
                Missing full_name:
                  summary: '`full_name` é o único campo obrigatório'
                  value:
                    full_name:
                      - This field is required.
                Short full_name:
                  summary: '`full_name` deve ter pelo menos 2 caracteres'
                  value:
                    full_name:
                      - Ensure this field has at least 2 characters.
                Invalid nationality:
                  summary: '`nationality` deve estar no 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: Limiar de aprovação acima do limiar de revisão
                  value:
                    error:
                      - >-
                        Approve threshold (90.0) cannot be greater than review
                        threshold (80.0)
                Monitoring without saving:
                  summary: >-
                    `include_ongoing_monitoring=true` com
                    `save_api_request=false`
                  value:
                    error:
                      - >-
                        Ongoing monitoring can only be enabled when the API
                        request is saved.
        '403':
          description: >-
            Permissão negada. Retornado quando o cabeçalho `x-api-key` está
            ausente e também quando o saldo da organização que faz a chamada não
            cobre a chamada; uma chave incorreta, revogada ou expirada retorna
            `401`. Uma chave ausente retorna `403` com `{"detail": ...}`; uma
            chave incorreta, revogada ou expirada retorna `401`. Créditos
            insuficientes retornam `403` com `{"error": ...}` antes de qualquer
            análise ou chamada a provedores.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: Nenhum cabeçalho `x-api-key`, ou a chave é inválida/revogada
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: O saldo da organização não cobre a chamada
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            Limite de requisições excedido. Todos os endpoints POST/PATCH/DELETE
            compartilham uma cota de 300 requisições de escrita por minuto por
            chave de API. A resposta inclui os cabeçalhos `X-RateLimit-Limit`,
            `X-RateLimit-Remaining`, `X-RateLimit-Reset` e `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Mais de 300 requisições de escrita no minuto atual
                  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: >-
        Chave de API da sua aplicação, em Developers -> API keys no Business
        Console. A chave principal tem acesso total. Uma chave nomeada pode ter
        escopo restrito: nenhum acesso, leitura ou escrita por recurso, limitada
        a alguns fluxos ou a sessões aprovadas, a uma lista de endereços IP e a
        uma data de validade. 401 significa que a chave está errada, revogada ou
        expirada; 403 significa que nenhuma chave foi enviada, que a chave não
        tem acesso a este recurso ou ação, ou que a requisição veio de um
        endereço fora da sua lista de IPs; 404 em uma rota de sessão significa
        que a sessão está fora dos fluxos ou status da chave. Uma chave sem
        acesso a mídia recebe URLs de imagem, vídeo e PDF como null, e uma chave
        sem permissão de escrita em sessões recebe links e tokens de sessão como
        null. Consulte https://docs.didit.me/console/api-keys.

````

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