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

# AML-Screening-API: Sanktionen, PEP & Watchlists

> Echtzeit-AML-Screening mit Didit: 1,300+ Watchlists, Sanktionen, PEP, negative Medien. Zwei Risiko-Scores, $0.20/Check, keine Monatsminima.



## OpenAPI

````yaml de/openapi-25.json POST /v3/aml/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/aml/:
    post:
      tags:
        - Standalone APIs
      summary: AML-Screening (eigenständig)
      description: >-
        Überprüfen Sie eine Person oder ein Unternehmen in einem einzigen Aufruf
        anhand von PEP-, Sanktions-, Warn-/Beobachtungslisten- und
        Negativmedien-Datensätzen.


        **Zwei-Score-Modell.** Jeder Treffer enthält einen `match_score` (0–100,
        Identitätskonfidenz) und einen `risk_score` (0–100, Entitätsrisiko).
        Treffer, deren `match_score` unter `aml_match_score_threshold` (Standard
        **93**) liegt, werden mit `review_status: "False Positive"` versehen und
        für Risikozwecke ignoriert; der höchste `risk_score` unter den
        verbleibenden Treffern wird zu `aml.score`. Der finale `aml.status`
        richtet sich nach Ihren Schwellenwerten: `score` >
        `aml_score_review_threshold` (Standard **100**) → `Declined`; `score` >
        `aml_score_approve_threshold` (Standard **80**) → `In Review`;
        andernfalls `Approved`. Immer wenn `score` ungleich null und ≥ dem
        Genehmigungsschwellenwert ist, wird eine `POSSIBLE_MATCH_FOUND`-Warnung
        hinzugefügt (ein Score von exakt 0 löst nie eine Warnung aus).


        **Gewichtung des Übereinstimmungswerts.** `aml_name_weight` +
        `aml_dob_weight` + `aml_country_weight` müssen in der Summe exakt 100
        ergeben (Standardwerte 60/25/15). Komponenten, die in der Anfrage
        fehlen, werden herausrenormiert; eine übereinstimmende `document_number`
        fungiert als Masterschlüssel, der den `match_score` auf 100
        überschreibt.


        **Latenz.** Einfache Screenings sind typischerweise in wenigen Sekunden
        abgeschlossen. Bei `include_adverse_media=true` wartet die API auf die
        Anreicherung durch negative Medienberichte (eine anfängliche Pause von
        ~5 s plus bis zu ~25 s Polling) – konfigurieren Sie ein Client-Timeout
        von **mindestens 60 Sekunden**.


        **Persistenz.** `save_api_request` ist standardmäßig **true**: Das
        Screening wird als Sitzung gespeichert (`request_id` funktioniert mit
        `GET /v3/session/{sessionId}/decision/`), es erscheint in der Konsole,
        ein `status.updated`-Webhook wird ausgelöst und der Prüfstatus von
        Treffern kann später aktualisiert werden. Bei `save_api_request=false`
        wird nichts gespeichert und `request_id` ist eine temporäre
        Korrelations-ID. `include_ongoing_monitoring=true` führt fortlaufend
        erneute Screenings des Profils durch und erfordert
        `save_api_request=true` (wird mit `400` erzwungen).


        **Idempotenz.** Senden Sie bei Wiederholungsversuchen nach einem Timeout
        oder vorübergehenden Fehler einen `Idempotency-Key`-Header. Der
        Schlüssel ist an Ihre Anwendung und den exakten Request-Body gebunden.
        Die erste abgeschlossene Anfrage speichert ihre Antwort; spätere
        identische Wiederholungsversuche geben dieselbe Antwort zurück und
        führen kein weiteres AML-Screening durch bzw. stellen keines in
        Rechnung. Wenn die ursprüngliche Anfrage noch läuft, versuchen Sie es
        später mit demselben Schlüssel erneut. Wird derselbe Schlüssel mit einem
        anderen Body wiederverwendet, gibt die API `409` zurück.


        **Abrechnung.** Nach dem ersten erfolgreichen Screening wird ein
        AML-API-Credit berechnet. Wiederholte idempotente Antworten werden nicht
        erneut berechnet; ein unzureichendes Guthaben gibt `403` zurück, bevor
        ein neues Screening stattfindet.


        **Sandbox.** Schlüssel von Sandbox-Anwendungen überspringen Screening
        und Abrechnung vollständig und geben ein Mock-Ergebnis zurück –
        `Approved` mit null Treffern, sofern Sie nicht `sandbox_scenario`
        übergeben. `save_api_request` funktioniert genauso wie bei
        Live-Schlüsseln, sodass ein gespeichertes Sandbox-Screening über `GET
        /v3/session/{sessionId}/decision/` und `GET
        /v3/session/{sessionId}/generate-pdf/` abrufbar ist.
      operationId: post_v3aml
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Optionaler Schlüssel zur Absicherung von Wiederholungsversuchen, bis
            zu 255 Zeichen. Die erneute Verwendung desselben Schlüssels mit
            demselben Request-Body gibt die ursprüngliche Antwort zurück, ohne
            ein zweites Screening durchzuführen oder abzurechnen. Die erneute
            Verwendung des Schlüssels mit einem anderen Body gibt `409` zurück.
          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: >-
                    Vollständiger Name der zu überprüfenden Person oder des zu
                    überprüfenden Unternehmens. Mindestens **2 Zeichen** – die
                    Mindestanforderung des Screening-Anbieters. Ein kürzerer
                    oder leerer Name führt bei diesem Feld zu einem
                    `400`-Fehler, bevor ein Screening durchgeführt wird, sodass
                    keine Kosten anfallen.
                  example: Antonio Ejemplo Modelo
                entity_type:
                  type: string
                  enum:
                    - person
                    - company
                  default: person
                  description: Art der zu screenenden Entität. Standardwert ist `person`.
                date_of_birth:
                  type: string
                  format: date
                  description: >-
                    Geburtsdatum (Personen) oder Gründungsdatum (Unternehmen),
                    `YYYY-MM-DD`. Verbessert die Übereinstimmungsgenauigkeit
                    über die Gewichtung des Geburtsdatums.
                  example: '1972-02-29'
                nationality:
                  type: string
                  description: >-
                    ISO 3166-1-**Alpha-2**-Ländercode (z. B. `ES`). Ungültige
                    Codes geben `400` zurück. Verbessert die Genauigkeit der
                    Übereinstimmung über die Ländergewichtung.
                  example: ES
                document_number:
                  type: string
                  description: >-
                    Ausweisnummer. Nicht gewichtet – fungiert als eindeutiger
                    Schlüssel: Eine exakte Übereinstimmung überschreibt den
                    `match_score` des Treffers auf 100, eine harte
                    Nichtübereinstimmung straft ihn ab. Wird nur dann als
                    Suchfilter an den Screening-Anbieter gesendet, wenn sie
                    **2-50 Zeichen** lang ist; ein Wert außerhalb dieses
                    Bereichs wird akzeptiert und gespeichert, und das Screening
                    wird weiterhin ausgeführt und abgerechnet, jedoch nicht nach
                    Ausweisnummer eingegrenzt.
                aml_score_approve_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 80
                  description: >-
                    Risiko-Score-Schwellenwert, bei oder unter dem das Ergebnis
                    `Approved` ist. Muss ≤ `aml_score_review_threshold` sein
                    (andernfalls `400`).
                aml_score_review_threshold:
                  type: number
                  minimum: 0
                  maximum: 100
                  default: 100
                  description: >-
                    Risiko-Score-Schwellenwert, über dem das Ergebnis `Declined`
                    ist. Scores zwischen den beiden Schwellenwerten führen zu
                    `In Review`.
                aml_name_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 60
                  description: >-
                    Gewichtung der Namensähnlichkeit im Übereinstimmungswert pro
                    Treffer. Die drei Gewichtungen müssen in der Summe genau 100
                    ergeben (andernfalls `400`).
                aml_dob_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 25
                  description: >-
                    Gewichtung des Geburtsdatums im Übereinstimmungswert pro
                    Treffer.
                aml_country_weight:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 15
                  description: >-
                    Gewichtung von Land/Staatsangehörigkeit im
                    Übereinstimmungswert pro Treffer.
                aml_match_score_threshold:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 93
                  description: >-
                    Schwellenwert pro Treffer: Treffer mit einem `match_score`
                    darunter gelten als `False Positive` (von der
                    Risikobewertung ausgeschlossen); bei oder darüber gelten sie
                    als mögliche `Unreviewed`-Treffer.
                include_adverse_media:
                  type: boolean
                  default: false
                  description: >-
                    Auch Nachrichtenmedien nach negativen Berichten durchsuchen.
                    Erhöht die Latenz um bis zu ~30 s, während Ergebnisse
                    gesammelt werden – verwenden Sie ein Client-Timeout von ≥60
                    s.
                include_ongoing_monitoring:
                  type: boolean
                  default: false
                  description: >-
                    Dieses Profil kontinuierlich erneut screenen und Änderungen
                    per Webhook übertragen. Erfordert `save_api_request=true`
                    (andernfalls `400`).
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    Das Screening als Sitzung beibehalten (Sichtbarkeit in der
                    Konsole, Entscheidungs-Endpoint, Webhooks, Trefferprüfung).
                    Für eine zustandslose Prüfung auf `false` setzen.
                vendor_data:
                  type: string
                  description: >-
                    Ihre Kennung für den geprüften Benutzer; wird zurückgegeben
                    und mit der Sitzung gespeichert.
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    Freiform-JSON, das mit der Anfrage gespeichert und
                    zurückgegeben wird.
                sandbox_scenario:
                  type: string
                  description: >-
                    Nur für die Sandbox gültiger Szenario-Slug. Wird nur
                    akzeptiert, wenn der API-Schlüssel zu einer Anwendung im
                    Sandbox-Modus gehört; bei Live-Anwendungen abgelehnt. Ein
                    eigenständiges Screening verfügt über keine Sitzung, die
                    vorbereitet werden könnte, daher wird der Slug direkt in der
                    Screening-Anfrage angegeben: `decline_aml_hit` gibt einen
                    Treffer in Produktionsform zurück und schließt das Screening
                    mit `Declined` ab, `review_aml_possible_match` schließt es
                    mit `In Review` ab, und ein Szenario, das kein AML-Ergebnis
                    vorbereitet, lässt das Screening ohne Treffer. Den
                    Szenarienkatalog finden Sie unter GET /v1/sandbox/scenarios/
                    oder [Sandbox & Test Data](/de/integration/sandbox-testing).
                  example: decline_aml_hit
            example:
              full_name: Antonio Ejemplo Modelo
              entity_type: person
              date_of_birth: '1972-02-29'
              nationality: ES
              include_adverse_media: false
              vendor_data: user-1234
      responses:
        '200':
          description: >-
            Screening abgeschlossen. `aml.status` spiegelt Ihre Schwellenwerte
            wider; jeder Treffer, der den internen Mindestwert erreicht oder
            überschreitet, wird in `aml.hits` mit seinem
            Identitäts-`match_score`, Entitäts-`risk_score` und einer
            `score_breakdown` zur Erklärung der Übereinstimmung aufgeführt.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      Beibehaltene Sitzungs-ID, wenn `save_api_request=true`
                      (verwendbar mit `GET /v3/session/{sessionId}/decision/`);
                      andernfalls eine vorübergehende Korrelations-UUID.
                  aml:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - In Review
                          - Declined
                        description: >-
                          `Declined`, wenn `score` >
                          `aml_score_review_threshold`; `In Review`, wenn
                          `score` > `aml_score_approve_threshold`; andernfalls
                          `Approved` (auch wenn kein Score verfügbar ist).
                      total_hits:
                        type: integer
                        description: Anzahl der Einträge in `hits`.
                      entity_type:
                        type: string
                        enum:
                          - person
                          - company
                        description: Wiedergabe des geprüften Entitätstyps.
                      hits:
                        type: array
                        items:
                          type: object
                          description: >-
                            Ein Screening-Treffer. `match_score` (0–100) misst
                            die Identitätskonfidenz – Treffer unter
                            `aml_match_score_threshold` werden mit
                            `review_status: "False Positive"` gekennzeichnet und
                            von der Risikobewertung ausgeschlossen; Treffer ab
                            diesem Wert gelten als `"Unreviewed"` mögliche
                            Übereinstimmungen. `risk_score` (0–100) misst, wie
                            risikoreich die übereinstimmende Entität ist, und
                            steuert den übergeordneten `aml.score`.
                          properties:
                            id:
                              type: string
                              nullable: true
                              description: >-
                                Didits stabiler Bezeichner für den Treffer:
                                `hit_`, gefolgt von 24 Hexadezimalzeichen.
                                Dieselbe übereinstimmende Entität behält
                                dieselbe `id`, wenn die betreffende Entität
                                erneut überprüft wird. Übergeben Sie sie als
                                `hit_id` an die Endpoints zur
                                AML-Trefferprüfung.
                            url:
                              type: string
                              nullable: true
                              description: >-
                                Quell-URL für die übereinstimmende Entität,
                                sofern verfügbar.
                            match:
                              type: boolean
                              nullable: true
                              description: >-
                                Veraltetes Flag für exakte Übereinstimmung.
                                Verwenden Sie stattdessen `match_score` +
                                `review_status`.
                            score:
                              type: number
                              nullable: true
                              description: >-
                                VERALTET: Gewichteter Übereinstimmungswert im
                                Bereich 0–1. Verwenden Sie stattdessen
                                `match_score`.
                            match_score:
                              type: number
                              nullable: true
                              description: >-
                                Identitätskonfidenz (0–100). Wird mit
                                `aml_match_score_threshold` verglichen, um
                                falsch positive Treffer von möglichen
                                Übereinstimmungen zu trennen.
                            risk_score:
                              type: number
                              nullable: true
                              description: >-
                                Risiko-Score der Entität (0–100). Der höchste
                                `risk_score` unter den Treffern, die nicht
                                falsch positiv sind, wird zum übergeordneten
                                `aml.score`.
                            target:
                              type: boolean
                              nullable: true
                            caption:
                              type: string
                              nullable: true
                              description: Anzeigename der übereinstimmenden Entität.
                            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: >-
                                Risikokategorien, unter denen die Entität
                                gelistet ist: `PEP` (mit Stufe, `PEP Level 1`
                                bis `PEP Level 4`), `Sanctions`, `Adverse
                                Media`, `Warnings and Regulatory Enforcement`,
                                `Fitness and Probity`, `SIP`, `SIE` oder
                                `Insolvency`. `Other Lists`, wenn die Quelle der
                                Entität keine dieser Kategorien angibt.
                            features:
                              type: object
                              nullable: true
                            properties:
                              type: object
                              nullable: true
                              description: >-
                                Entitätsprofil: `name`, `alias`, `notes`,
                                `gender`, `birthDate`, `birthPlace`,
                                `nationality`, `position` und weitere
                                biografische Arrays (jeweils nullable).
                            rca_name:
                              type: string
                              nullable: true
                              description: >-
                                Name der nahestehenden Person, über die der
                                Treffer für die Entität erzielt wurde, wenn es
                                sich bei dem Treffer um eine RCA handelt.
                            pep_matches:
                              type: array
                              description: >-
                                Einträge auf PEP-Listen, die diesen Treffer
                                belegen.
                              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: >-
                                Einträge in Sanktionslisten, die diesem Treffer
                                zugrunde liegen (gleiche Struktur der zugrunde
                                liegenden Liste wie bei `pep_matches`, zuzüglich
                                sanktionsspezifischer Felder).
                            warning_matches:
                              type: array
                              items:
                                type: object
                              description: >-
                                Warnungs-/Beobachtungslisteneinträge, die diesem
                                Treffer zugrunde liegen.
                            adverse_media_matches:
                              type: array
                              description: >-
                                Artikel zu negativen Medienberichten. Wird nur
                                ausgefüllt, wenn `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: >-
                                Aggregiertes Sentiment zu negativen
                                Medienberichten für die Entität (`sentiment`,
                                `sentiment_score`, Häufigkeitsverteilung von
                                `adverse_keywords`). Wird nur ausgefüllt, wenn
                                `include_adverse_media=true`.
                            first_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Wann die Entität erstmals in den Datensätzen
                                erschienen ist.
                            last_seen:
                              type: string
                              format: date-time
                              nullable: true
                              description: >-
                                Neueste Aktualisierung des Datensatzes, die die
                                Entität enthalten hat.
                            linked_entities:
                              type: array
                              description: >-
                                Bekannte Beziehungen der übereinstimmenden
                                Entität (Familie, Geschäftspartner,
                                Unternehmen).
                              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: >-
                                Risikoaufschlüsselung pro Dimension (`crimes`,
                                `countries`, `categories`, `custom_list`),
                                jeweils mit `score`, `weightage`, `risk_level`
                                und einer `risk_scores`-Zuordnung.
                            additional_information:
                              type: object
                              nullable: true
                              description: >-
                                Zusätzlicher Kontext in Freiform, z. B. ein
                                `flag_summary`-Array, das erklärt, warum die
                                Entität markiert ist.
                            review_status:
                              type: string
                              nullable: true
                              enum:
                                - False Positive
                                - Unreviewed
                                - Confirmed Match
                                - Inconclusive
                              description: >-
                                `False Positive` – `match_score` unter
                                `aml_match_score_threshold`, von der
                                Risikobewertung ausgeschlossen. `Unreviewed` –
                                mögliche Übereinstimmung, die auf Prüfung
                                wartet. `Confirmed Match` / `Inconclusive` –
                                manuell von einem Prüfer (über die Business
                                Console) für gespeicherte Sitzungen festgelegt;
                                diese Prüfungsfunktion ist nicht Bestandteil
                                dieser Spezifikation.
                            score_breakdown:
                              type: object
                              nullable: true
                              description: >-
                                Wie der `match_score` berechnet wurde. Name,
                                Geburtsdatum und Land tragen jeweils
                                `<component>_score` ×
                                `<component>_weight_normalized` Punkte bei; die
                                Gewichtungen werden neu normalisiert, wenn eine
                                Komponente in den überprüften Daten fehlt. Die
                                Dokumentennummer wird nicht gewichtet – sie
                                fungiert als „Golden Key“: `MATCH` überschreibt
                                den Wert auf 100, `NEUTRAL` belässt ihn
                                unverändert, `HARD_MISMATCH` verhängt einen
                                Punktabzug.
                              properties:
                                name_score:
                                  type: integer
                                  nullable: true
                                  description: Unverarbeitete Namensähnlichkeit (0–100).
                                name_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Konfigurierte Gewichtung des Namens
                                    (`aml_name_weight`).
                                name_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: Namensgewichtung nach Renormierung (0–100).
                                name_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punkte, die der Name zu `total_score`
                                    beigetragen hat.
                                dob_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Score für das Geburtsdatum als Prozentsatz
                                    seiner Gewichtung (−100 bis 100).
                                dob_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Konfigurierte Gewichtung des Geburtsdatums
                                    (`aml_dob_weight`).
                                dob_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Gewichtung des Geburtsdatums nach der
                                    Neunormalisierung (0–100).
                                dob_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punkte, die das Geburtsdatum zu
                                    `total_score` beigetragen hat.
                                country_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Länder-Score als Prozentsatz seiner
                                    Gewichtung (−100 bis 100).
                                country_weight:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Konfigurierte Gewichtung des Landes
                                    (`aml_country_weight`).
                                country_weight_normalized:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Ländergewichtung nach der Renormalisierung
                                    (0–100).
                                country_contribution:
                                  type: number
                                  nullable: true
                                  description: >-
                                    Punkte, die das Land zu `total_score`
                                    beigetragen hat.
                                document_number_match_type:
                                  type: string
                                  nullable: true
                                  enum:
                                    - MATCH
                                    - NEUTRAL
                                    - HARD_MISMATCH
                                  description: >-
                                    Golden-Key-Ergebnis für den Abgleich der
                                    Dokumentennummer.
                                document_number_effect:
                                  type: string
                                  nullable: true
                                  description: >-
                                    Lesbare Beschreibung der Auswirkung der
                                    Dokumentennummer.
                                total_score:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Endgültiger gewichteter Übereinstimmungswert
                                    (0–100) – spiegelt `match_score` wider.
                      score:
                        type: number
                        nullable: true
                        description: >-
                          Gesamter AML-Risiko-Score (0–100): der höchste
                          `risk_score` unter Treffern, die nicht falsch positiv
                          sind. Steuert den `status` über die zwei
                          Schwellenwerte.
                      screened_data:
                        type: object
                        description: >-
                          Wiedergabe der überprüften Daten: `full_name`,
                          `date_of_birth`, `nationality`, `document_number`
                          (nicht vorhandene Felder sind `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: Funktion, die die Warnung ausgelöst hat.
                            risk:
                              type: string
                              description: Maschinenlesbare Risiko-Kennung.
                            additional_data:
                              type: object
                              nullable: true
                              description: >-
                                Zusätzlicher Kontext für die Warnung, sofern
                                verfügbar.
                            log_type:
                              type: string
                              description: >-
                                `warning`, `information` oder `error` – wie sich
                                das Risiko auf das Ergebnis ausgewirkt hat.
                            short_description:
                              type: string
                              description: Einzeilige, lesbare Zusammenfassung.
                            long_description:
                              type: string
                              description: Vollständige menschenlesbare Erklärung.
                        description: >-
                          Enthält eine `POSSIBLE_MATCH_FOUND`-Warnung, wann
                          immer `score` ungleich null und ≥
                          `aml_score_approve_threshold` ist (ein Score von genau
                          0 erzeugt nie eine Warnung); andernfalls leer.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Wiedergabe der von Ihnen gesendeten `vendor_data`.
                  metadata:
                    type: object
                    nullable: true
                    description: Rückgabe der von Ihnen gesendeten `metadata`.
                  created_at:
                    type: string
                    format: date-time
              examples:
                No hits (Approved):
                  summary: Unauffälliges Screening — null Treffer
                  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: >-
                    Ein möglicher PEP-Treffer; der Risiko-Score von 73 bleibt
                    unter dem standardmäßigen Genehmigungsschwellenwert von 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: >-
            Validierungsfehler. Probleme auf Feldebene geben die
            Standard-Envelope von DRF zurück (ein Array von Meldungen pro
            fehlerhaftem Feld); feldübergreifende Regeln (Gewichtungssumme,
            Schwellenwert-Reihenfolge, Überwachung ohne Speichern) geben
            `{"error": [...]}` zurück.
          content:
            application/json:
              examples:
                Missing full_name:
                  summary: '`full_name` ist das einzige Pflichtfeld'
                  value:
                    full_name:
                      - This field is required.
                Short full_name:
                  summary: '`full_name` muss mindestens 2 Zeichen lang sein'
                  value:
                    full_name:
                      - Ensure this field has at least 2 characters.
                Invalid nationality:
                  summary: '`nationality` muss ISO 3166-1 Alpha-2 sein'
                  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: Genehmigungsschwellenwert über dem Prüfungsschwellenwert
                  value:
                    error:
                      - >-
                        Approve threshold (90.0) cannot be greater than review
                        threshold (80.0)
                Monitoring without saving:
                  summary: >-
                    `include_ongoing_monitoring=true` mit
                    `save_api_request=false`
                  value:
                    error:
                      - >-
                        Ongoing monitoring can only be enabled when the API
                        request is saved.
        '403':
          description: >-
            Zugriff verweigert. Wird zurückgegeben, wenn der Header `x-api-key`
            fehlt sowie wenn das Guthaben der aufrufenden Organisation den
            Aufruf nicht decken kann; ein falscher, widerrufener oder
            abgelaufener Schlüssel gibt `401` zurück. Ein fehlender Schlüssel
            gibt `403` mit `{"detail": ...}` zurück; ein falscher, widerrufener
            oder abgelaufener Schlüssel gibt `401` zurück. Unzureichende Credits
            geben `403` mit `{"error": ...}` zurück, bevor ein Screening- oder
            Anbieteraufruf stattfindet.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: >-
                    Kein `x-api-key`-Header, oder der Schlüssel ist
                    ungültig/widerrufen
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: >-
                    Das Guthaben der Organisation reicht für den Aufruf nicht
                    aus
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            Rate-Limit überschritten. POST/PATCH/DELETE-Endpoints teilen sich
            ein Budget von 300 Schreibanfragen pro Minute pro API-Schlüssel
            (Transaktionserstellungen und Ereignis-Ingestion haben ein separates
            Budget von 600). Die Antwort enthält die Header `X-RateLimit-Limit`,
            `X-RateLimit-Remaining`, `X-RateLimit-Reset` und `Retry-After`.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: Mehr als 300 Schreibanfragen in der aktuellen Minute
                  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: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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