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

# Cronologia screening AML API

> Didit elenca ogni ri-screening AML di monitoraggio continuo di una sessione, anche senza modifiche, con esito, punteggio e aggiornamento dei dataset.

Prompt dell'API per elencare la cronologia dello Screening AML
Copia il prompt negli appunti

<pre>
  \`List the ongoing AML monitoring history of one Didit verification session through the API.

  Endpoint:
  GET [https://verification.didit.me/v3/session/\{session\_id}/aml-screening-history/](https://verification.didit.me/v3/session/\{session_id}/aml-screening-history/)

  Authentication:
  Send my Didit API key in the x-api-key header. A scoped key needs decisions: read.

  Goal:

  * Prove that ongoing AML monitoring ran for a subject, including the re-screens that found nothing new, for example to answer an auditor.

  Query parameters:

  * node\_id (optional): the workflow node ID of the AML check when the session ran several AML steps. Without it, the most recent AML check is used.
  * limit (default 50) and offset: pagination.

  Behavior:

  * Works for user (KYC) and business (KYB) session IDs.
  * Returns { count, next, previous, results }, newest first by completed\_at. count is exact up to 100 and capped at 100 above that, so follow next until it is null.
  * Only ongoing-monitoring re-screens are listed. The first screening is part of the session decision, so a session without ongoing monitoring returns an empty list.
  * History starts when the feature was introduced; earlier screenings are not reconstructed.

  Example call:
  curl -X GET "[https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/aml-screening-history/](https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/aml-screening-history/)" \
  -H "x-api-key: YOUR\_API\_KEY"

  What to read from the response:

  * results\[].completed\_at: when the re-screen finished. started\_at: when its batch started.
  * results\[].outcome: NO\_CHANGE (completed, result unchanged), CHANGED (score, status or hits moved) or FAILED (no usable answer for this subject, nothing changed).
  * results\[].status, score and total\_hits: the state the re-screen left the check in.
  * results\[].dataset\_freshness: how current the screening datasets were (sources.sanctions, pep, warnings, adverse\_media with last\_updated\_at and oldest\_updated\_at), or null when no dates were available. Dates are never estimated.
  * results\[].provider and dataset\_freshness.provider: an identifier of the data source. Treat it as an opaque string.

  Failure modes:

  * 400: limit or offset above 1,000,000.
  * 401: the API key has expired.
  * 403: missing key (a wrong, revoked or expired key gets 401), a key of another application, a scoped key without decisions: read, or a request from outside the key's IP allowlist.
  * 404: the session does not exist, was deleted, or is outside a scoped key's limits, or it has no AML check (for that node\_id).

  Side effects: none. This is a pure read.

  For the full integration shape, see /integration/integration-prompt.\`
</pre>

Incolla in

Gli alert, le voci di attività e i webhook si attivano solo quando cambia il risultato dello Screening AML, quindi questa cronologia è la registrazione che dimostra che un soggetto risultato pulito era comunque sottoposto a screening. Il [monitoraggio AML continuo](https://docs.didit.me/it/core-technology/aml-screening/continuous-monitoring-aml-screening.md) spiega come vengono eseguiti i nuovi Screening AML e cosa significa ciascun campo. Per consegnare la stessa cronologia a un revisore in forma di file, usa [Esporta la cronologia dello Screening AML](https://docs.didit.me/it/management-api/sessions/export-aml-screening-history.md).


## OpenAPI

````yaml it/openapi-25.json GET /v3/session/{sessionId}/aml-screening-history/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/aml-screening-history/:
    get:
      tags:
        - Sessions
      summary: Elenca la cronologia dello screening AML
      description: >-
        Elenca ogni nuovo screening completato per il monitoraggio continuo del
        controllo AML di una sessione, dal più recente in base a `completed_at`,
        comprese le esecuzioni in cui nulla è cambiato: alert, voci di attività
        e webhook vengono attivati solo quando un risultato cambia, pertanto
        questa cronologia costituisce la prova che un soggetto pulito era
        comunque sottoposto a screening. Funziona sia per ID di sessione KYC che
        KYB; passa `node_id` quando la sessione ha eseguito più di un passaggio
        AML. Vengono elencati solo i nuovi screening di monitoraggio continuo
        (il primo screening fa parte della decisione della sessione) e le
        esecuzioni precedenti all'introduzione di questa cronologia non vengono
        ricostruite, per cui una sessione senza monitoraggio continuo
        restituisce un elenco vuoto. `count` è esatto fino a 100 e limitato a
        100 al di sopra di tale soglia, quindi segui `next` finché non diventa
        `null`. Passa `month` per leggere un mese di calendario alla volta. Una
        chiave API con ambito limitato richiede `decisions: read`; vedi
        [Monitoraggio AML
        continuo](https://docs.didit.me/it/core-technology/aml-screening/continuous-monitoring-aml-screening).
      operationId: get_v3_session_aml_screening_history
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID della sessione di verifica (il `session_id` restituito da `POST
            /v3/session/`). Accetta sia ID di sessione di Verifica degli utenti
            (KYC) sia di Verifica aziendale (KYB): il server risolve l'ID per
            entrambi i tipi di sessione. Deve essere un UUID ben formato; un
            valore malformato non corrisponde alla route e restituisce una
            pagina HTML `404`.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: node_id
          in: query
          required: false
          description: >-
            ID del nodo del grafo del workflow relativo al controllo AML.
            Necessario solo se la sessione ha eseguito più di un passaggio AML;
            in sua assenza viene utilizzato il controllo AML più recente. Un
            nodo sconosciuto restituisce `404`.
          schema:
            type: string
            example: feature_aml_1
        - name: month
          in: query
          required: false
          description: >-
            Un mese di calendario UTC nel formato `YYYY-MM`. Vengono restituiti
            solo gli screening completati in quel mese; senza di esso vengono
            restituiti i dati di ogni mese. Un mese con formato errato
            restituisce `400`.
          schema:
            type: string
            pattern: ^\d{4}-(0[1-9]|1[0-2])$
            example: 2026-09
        - name: limit
          in: query
          required: false
          description: >-
            Numero massimo di esecuzioni di screening per pagina. Il valore
            predefinito è 50. Un valore inferiore a 1 o non numerico viene
            reimpostato su 50; un valore superiore a 1,000,000 restituisce
            `400`.
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
            example: 50
        - name: offset
          in: query
          required: false
          description: >-
            Numero di risultati da saltare prima del primo restituito. Il valore
            predefinito è 0; un valore negativo o non numerico reimposta il
            valore a 0, un valore superiore a 1,000,000 restituisce `400`. È
            preferibile seguire gli URL `next` e `previous`.
          schema:
            type: integer
            default: 0
            minimum: 0
            maximum: 1000000
            example: 0
        - name: ordering
          in: query
          required: false
          description: >-
            Criterio di ordinamento opzionale alternativo. L'ordine predefinito
            è `-completed_at`. Passa il nome di un campo dei risultati (ad
            esempio `completed_at`, `started_at`, `outcome` o `score`) per
            ordinare in modo crescente, anteponi `-` per ordinare in modo
            decrescente e separa più campi con virgole. I campi sconosciuti
            vengono ignorati.
          schema:
            type: string
            example: completed_at
      responses:
        '200':
          description: >-
            Una pagina di esecuzioni di screening, dalla più recente alla meno
            recente.
          content:
            application/json:
              schema:
                type: object
                required:
                  - count
                  - next
                  - previous
                  - results
                properties:
                  count:
                    type: integer
                    maximum: 100
                    description: >-
                      Numero di esecuzioni, esatto fino a 100 e limitato a 100
                      al di sopra.
                  next:
                    type: string
                    format: uri
                    nullable: true
                    description: URL della pagina successiva, o `null` nell'ultima pagina.
                  previous:
                    type: string
                    format: uri
                    nullable: true
                    description: URL della pagina precedente, o `null` nella prima pagina.
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/AMLScreeningRun'
              examples:
                Monitored subject:
                  value:
                    count: 2
                    next: null
                    previous: null
                    results:
                      - uuid: dddddddd-1111-2222-3333-444444444444
                        run_id: aaaaaaaa-1111-2222-3333-444444444444
                        completed_at: '2026-09-14T04:12:33.481207Z'
                        started_at: '2026-09-14T04:00:01.002311Z'
                        outcome: NO_CHANGE
                        trigger: ONGOING_MONITORING
                        provider: aml_data_source
                        status: Approved
                        score: 0
                        total_hits: 0
                        new_hits: 0
                        entities_screened: 1
                        dataset_freshness:
                          captured_at: '2026-09-14T03:58:02.114820+00:00'
                          provider: aml_data_source
                          catalog_version: '2026-09-13'
                          sources:
                            sanctions:
                              last_updated_at: '2026-09-13T21:10:00+00:00'
                              oldest_updated_at: '2026-09-11T06:00:00+00:00'
                              dataset_count: 120
                              dated_dataset_count: 120
                            pep:
                              last_updated_at: '2026-09-13T08:00:00+00:00'
                              oldest_updated_at: null
                              dataset_count: 45
                              dated_dataset_count: 44
                            warnings:
                              last_updated_at: '2026-09-12T18:45:00+00:00'
                              oldest_updated_at: '2026-09-01T00:00:00+00:00'
                              dataset_count: 30
                              dated_dataset_count: 30
                      - uuid: eeeeeeee-1111-2222-3333-444444444444
                        run_id: bbbbbbbb-1111-2222-3333-444444444444
                        completed_at: '2026-09-13T04:11:58.020914Z'
                        started_at: '2026-09-13T04:00:00.871022Z'
                        outcome: FAILED
                        trigger: ONGOING_MONITORING
                        provider: aml_data_source
                        status: Approved
                        score: 0
                        total_hits: 0
                        new_hits: null
                        entities_screened: 0
                        dataset_freshness: null
        '400':
          description: >-
            `limit` o `offset` è superiore a 1,000,000 (un array JSON con un
            messaggio), oppure `month` non è un mese di calendario `YYYY-MM` (un
            oggetto con chiave `month`).
          content:
            application/json:
              examples:
                Limit too large:
                  summary: limit=2000000
                  value:
                    - limit must not exceed 1000000.
                Offset too large:
                  summary: offset=2000000
                  value:
                    - offset must not exceed 1000000.
                Malformed month:
                  summary: month=2026-13
                  value:
                    month:
                      - Not a calendar month. Use YYYY-MM.
              schema:
                oneOf:
                  - type: array
                    items:
                      type: string
                  - type: object
                    properties:
                      month:
                        type: array
                        items:
                          type: string
        '401':
          description: >-
            La chiave API con ambito è scaduta. Questo è l'unico caso che
            restituisce `401`: una chiave mancante, non valida o revocata
            restituisce `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              examples:
                Expired key:
                  summary: La data di scadenza della chiave è stata superata
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Errore di autenticazione o autorizzazione. Una chiave mancante
            restituisce `403`, così come la chiave di un'altra applicazione, una
            chiave con ambito limitato priva dell'autorizzazione necessaria per
            questo endpoint e una richiesta proveniente dall'esterno
            dell'allowlist IP della chiave; una chiave errata, revocata o
            scaduta restituisce `401`. Distinguili tramite `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Nessuna intestazione x-api-key, oppure validazione della
                    chiave non riuscita
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Una chiave valida appartenente a un'applicazione diversa da
                    quella della sessione
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions read:
                  summary: 'La chiave con ambito non dispone di decisions: read'
                  value:
                    detail: This API key has no read access to decisions.
                IP not allowed:
                  summary: >-
                    Richiesta proveniente da un indirizzo esterno all'allowlist
                    degli IP della chiave
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La sessione non esiste, è stata eliminata o non rientra nei limiti
            di una chiave con ambito limitato, oppure non presenta alcun
            controllo AML (per il `node_id` specificato). La ricerca della
            sessione viene eseguita prima della verifica delle credenziali,
            quindi un `sessionId` sconosciuto restituisce `404` anche senza una
            chiave valida.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              examples:
                Unknown session:
                  summary: >-
                    Nessuna sessione con questo ID esiste, oppure è stata
                    eliminata
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    La sessione non rientra nei limiti di una chiave con ambito
                    limitato (restituito anche per una sessione eliminata pochi
                    istanti prima)
                  value:
                    detail: Session not found.
                No AML check:
                  summary: La sessione non ha mai eseguito un passaggio AML
                  value:
                    detail: The session does not have an AML check.
                No AML check for node:
                  summary: node_id non corrisponde a un controllo AML della sessione
                  value:
                    detail: >-
                      The session does not have an AML check for node
                      'feature_aml_2'.
        '429':
          description: >-
            Limite di frequenza superato: 600 richieste GET al minuto per chiave
            API. Attendi `Retry-After` secondi prima di riprovare; le
            intestazioni `X-RateLimit-*` mostrano il budget.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              examples:
                Rate limited:
                  summary: Budget per il minuto corrente esaurito
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Secondi da attendere prima di effettuare un nuovo tentativo.
              schema:
                type: integer
                minimum: 1
                example: 30
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/aml-screening-history/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            for item in client.sessions.list_aml_screening_history(
                "11111111-2222-3333-4444-555555555555",
            ):
                print(item)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            for await (const item of
            didit.sessions.listAmlScreeningHistory("11111111-2222-3333-4444-555555555555"))
            {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.ListAMLScreeningHistoryAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsListAMLScreeningHistoryParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            for (var item :
            client.sessions().listAmlScreeningHistory("11111111-2222-3333-4444-555555555555"))
            {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            foreach
            ($didit->sessions->listAmlScreeningHistory('11111111-2222-3333-4444-555555555555')
            as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            didit.sessions.list_aml_screening_history("11111111-2222-3333-4444-555555555555").auto_paging_each
            do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            await foreach (var item in await
            client.Sessions.ListAmlScreeningHistoryAsync("11111111-2222-3333-4444-555555555555"))

            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    AMLScreeningRun:
      type: object
      description: >-
        Un nuovo screening completato nell'ambito del monitoraggio AML continuo
        di un controllo AML.
      required:
        - uuid
        - run_id
        - completed_at
        - started_at
        - outcome
        - trigger
        - provider
        - status
        - score
        - total_hits
        - new_hits
        - entities_screened
        - dataset_freshness
      properties:
        uuid:
          type: string
          format: uuid
          description: Identificatore di questa esecuzione di screening.
        run_id:
          type: string
          format: uuid
          description: >-
            L'esecuzione di monitoraggio a cui appartiene questo screening.
            Tutte le verifiche sottoposte a screening nella stessa esecuzione la
            condividono.
        completed_at:
          type: string
          format: date-time
          description: >-
            Quando è terminato il nuovo screening di questo soggetto. I
            risultati sono ordinati in base ad esso, dal più recente.
        started_at:
          type: string
          format: date-time
          description: >-
            Quando è iniziato il lotto di monitoraggio a cui appartiene questo
            nuovo screening.
        outcome:
          type: string
          enum:
            - NO_CHANGE
            - CHANGED
            - FAILED
          description: >-
            `NO_CHANGE`: completato e il risultato non è cambiato. `CHANGED`:
            completato e il punteggio, lo stato, il conteggio dei riscontri o i
            riscontri sono cambiati. `FAILED`: nessuna risposta utilizzabile per
            questo soggetto, quindi il controllo è stato lasciato invariato.
        trigger:
          type: string
          enum:
            - ONGOING_MONITORING
          description: >-
            Cosa ha avviato lo screening. Attualmente sempre
            `ONGOING_MONITORING`.
        provider:
          type: string
          description: >-
            Identificatore opaco della fonte di dati AML che ha risposto.
            Trattalo come una stringa opaca; non eseguire diramazioni su di
            esso.
          example: aml_data_source
        status:
          type: string
          nullable: true
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
            - null
          description: >-
            Stato del controllo AML in cui questa esecuzione ha lasciato il
            controllo.
        score:
          type: number
          format: float
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            Punteggio AML risultante al termine di questa esecuzione del
            controllo.
        total_hits:
          type: integer
          nullable: true
          description: >-
            Numero di corrispondenze che questa esecuzione ha lasciato nel
            controllo.
        new_hits:
          type: integer
          nullable: true
          description: >-
            Numero di corrispondenze trovate da questa esecuzione che il
            controllo non presentava in precedenza. `0` quando non è stato
            trovato nulla di nuovo; `null` quando l'esecuzione non è riuscita o
            è stata registrata prima che questo conteggio esistesse.
        entities_screened:
          type: integer
          minimum: 0
          maximum: 1
          description: >-
            Numero di entità sottoposte a screening da questa esecuzione per la
            verifica: `1` quando il soggetto è stato sottoposto a screening, `0`
            quando l'esecuzione non è riuscita.
        dataset_freshness:
          allOf:
            - $ref: '#/components/schemas/AMLDatasetFreshness'
          nullable: true
          description: >-
            Attualità del set di dati alla base di questa esecuzione, oppure
            `null` quando non erano disponibili date.
    AMLDatasetFreshness:
      type: object
      description: >-
        Livello di aggiornamento dei set di dati AML al momento dell'esecuzione
        dello screening. Le date non vengono mai stimate.
      required:
        - captured_at
        - provider
        - catalog_version
        - sources
      properties:
        captured_at:
          type: string
          format: date-time
          description: >-
            Quando Didit ha letto il catalogo del dataset da cui proviene questa
            informazione sulla freschezza.
        provider:
          type: string
          description: >-
            Identificatore opaco della fonte di dati AML. Trattalo come una
            stringa opaca; non eseguire diramazioni su di esso.
          example: aml_data_source
        catalog_version:
          type: string
          nullable: true
          description: >-
            Identificatore di versione del catalogo dei set di dati, quando la
            fonte ne segnala uno.
        sources:
          type: object
          description: >-
            Grado di aggiornamento per famiglia di dataset. Una famiglia i cui
            dataset non hanno riportato alcuna data di aggiornamento è assente
            anziché compilata con `null`.
          properties:
            sanctions:
              $ref: '#/components/schemas/AMLDatasetSourceFreshness'
            pep:
              $ref: '#/components/schemas/AMLDatasetSourceFreshness'
            warnings:
              $ref: '#/components/schemas/AMLDatasetSourceFreshness'
            adverse_media:
              $ref: '#/components/schemas/AMLDatasetSourceFreshness'
    AMLDatasetSourceFreshness:
      type: object
      description: Grado di aggiornamento di una famiglia di dataset AML.
      required:
        - last_updated_at
        - oldest_updated_at
        - dataset_count
        - dated_dataset_count
      properties:
        last_updated_at:
          type: string
          format: date-time
          description: Aggiornamento più recente di qualsiasi set di dati della famiglia.
        oldest_updated_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Limite di obsolescenza: ogni dataset nella famiglia è aggiornato
            almeno a questa data. `null` quando almeno un dataset nella famiglia
            non ha riportato alcuna data di aggiornamento, poiché in tal caso il
            limite è sconosciuto.
        dataset_count:
          type: integer
          description: Numero di dataset nella famiglia.
        dated_dataset_count:
          type: integer
          description: >-
            Numero di quei dataset che hanno segnalato una data di
            aggiornamento.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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