> ## 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 l'historique du filtrage AML : liste des contrôles

> Listez chaque re-filtrage AML de surveillance continue d'une session, y compris sans changement, avec résultat, score et fraîcheur des données. Didit.

Prompt pour l'API de liste de l'historique de filtrage AML
Copier le prompt dans le presse-papiers

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

Coller dans

Les alertes, les entrées d'activité et les webhooks ne se déclenchent que lorsqu'un résultat de filtrage évolue. Cet historique atteste donc qu'un sujet sans alerte faisait toujours l'objet d'un filtrage. [Surveillance AML continue](https://docs.didit.me/fr/core-technology/aml-screening/continuous-monitoring-aml-screening.md) explique comment sont effectués les nouveaux filtrages et ce que signifie chaque champ. Pour remettre ce même historique à un auditeur sous forme de fichier, utilisez [Exporter l'historique du filtrage AML](https://docs.didit.me/fr/management-api/sessions/export-aml-screening-history.md).


## OpenAPI

````yaml fr/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 de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/aml-screening-history/:
    get:
      tags:
        - Sessions
      summary: Lister l'historique de filtrage AML
      description: "Lister chaque nouveau filtrage de surveillance continue terminé pour le contrôle AML d'une session, du plus récent au plus ancien selon `completed_at`, y compris les exécutions où rien n'a changé\_: les alertes, les entrées d'activité et les webhooks ne se déclenchent que lorsqu'un résultat évolue, cet historique constitue donc la preuve qu'un sujet sans alerte a bien continué d'être filtré. Fonctionne pour les identifiants de session KYC et KYB\_; transmettez `node_id` lorsque la session a exécuté plusieurs étapes AML. Seuls les nouveaux filtrages de surveillance continue sont listés (le premier filtrage fait partie de la décision de session) et les exécutions antérieures à la création de cet historique ne sont pas reconstituées, de sorte qu'une session sans surveillance continue renvoie une liste vide. `count` est exact jusqu'à 100 et plafonné à 100 au-delà, suivez donc `next` jusqu'à ce qu'il soit `null`. Transmettez `month` pour lire un mois calendaire à la fois. Une clé API restreinte nécessite `decisions: read`\_; voir [Surveillance AML continue](https://docs.didit.me/fr/core-technology/aml-screening/continuous-monitoring-aml-screening)."
      operationId: get_v3_session_aml_screening_history
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID de la session de vérification (le `session_id` renvoyé par
            `POST /v3/session/`). Accepte les identifiants de session de
            Vérification des utilisateurs (KYC) et de Vérification d'entreprise
            (KYB) : le serveur résout l'identifiant pour les deux types de
            session. Doit être un UUID bien formé ; une valeur malformée ne
            correspond pas à la route et renvoie une erreur HTML `404`.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: node_id
          in: query
          required: false
          description: >-
            ID de nœud du graphe de workflow du contrôle AML. Nécessaire
            uniquement lorsque la session a exécuté plusieurs étapes AML ; sans
            cela, le contrôle AML le plus récent est utilisé. Un nœud inconnu
            renvoie `404`.
          schema:
            type: string
            example: feature_aml_1
        - name: month
          in: query
          required: false
          description: >-
            Un mois civil UTC au format `YYYY-MM`. Seuls les filtrages effectués
            au cours de ce mois sont renvoyés ; sans ce paramètre, tous les mois
            sont renvoyés. Un mois mal formé renvoie `400`.
          schema:
            type: string
            pattern: ^\d{4}-(0[1-9]|1[0-2])$
            example: 2026-09
        - name: limit
          in: query
          required: false
          description: "Nombre maximal d'exécutions de filtrage par page. Vaut par défaut 50. Une valeur inférieure à 1 ou non numérique revient à 50\_; une valeur supérieure à 1,000,000 renvoie `400`."
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
            example: 50
        - name: offset
          in: query
          required: false
          description: >-
            Nombre de résultats à ignorer avant le premier renvoyé. La valeur
            par défaut est 0 ; une valeur négative ou non numérique revient à 0,
            une valeur supérieure à 1,000,000 renvoie `400`. Privilégiez
            l'utilisation des URL `next` et `previous`.
          schema:
            type: integer
            default: 0
            minimum: 0
            maximum: 1000000
            example: 0
        - name: ordering
          in: query
          required: false
          description: >-
            Remplacement de tri optionnel. L'ordre par défaut est
            `-completed_at`. Transmettez le nom d'un champ de résultat (par
            exemple `completed_at`, `started_at`, `outcome` ou `score`) pour un
            tri croissant, préfixez-le par `-` pour un tri décroissant, et
            séparez plusieurs champs par des virgules. Les champs inconnus sont
            ignorés.
          schema:
            type: string
            example: completed_at
      responses:
        '200':
          description: >-
            Une page d'exécutions de filtrage, de la plus récente à la plus
            ancienne.
          content:
            application/json:
              schema:
                type: object
                required:
                  - count
                  - next
                  - previous
                  - results
                properties:
                  count:
                    type: integer
                    maximum: 100
                    description: >-
                      Nombre d'exécutions, exact jusqu'à 100 et plafonné à 100
                      au-delà.
                  next:
                    type: string
                    format: uri
                    nullable: true
                    description: URL de la page suivante, ou `null` sur la dernière page.
                  previous:
                    type: string
                    format: uri
                    nullable: true
                    description: URL de la page précédente, ou `null` sur la première page.
                  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` ou `offset` est supérieur à 1 000 000 (un tableau JSON avec
            un message), ou `month` n'est pas un mois calendaire `YYYY-MM` (un
            objet ayant pour clé `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 clé API restreinte a expiré. C'est le seul cas qui renvoie `401`
            : une clé manquante, invalide ou révoquée renvoie `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Expired key:
                  summary: La date d'expiration de la clé est dépassée
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Échec d'authentification ou d'autorisation. Une clé manquante
            renvoie `403`, tout comme la clé d'une autre application, une clé
            restreinte ne disposant pas de l'autorisation requise par cet
            endpoint, ou une requête provenant de l'extérieur de la liste
            d'adresses IP autorisées de la clé ; une clé incorrecte, révoquée ou
            expirée renvoie `401`. Distinguez-les grâce au champ `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Missing or invalid credentials:
                  summary: Aucun en-tête x-api-key, ou la validation de la clé a échoué
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Une clé valide qui appartient à une application différente
                    de la session
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions read:
                  summary: 'La clé restreinte ne dispose pas de decisions: read'
                  value:
                    detail: This API key has no read access to decisions.
                IP not allowed:
                  summary: >-
                    Requête provenant de l'extérieur de la liste d'adresses IP
                    autorisées de la clé
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La session n'existe pas, a été supprimée ou se trouve en dehors des
            limites d'une clé restreinte, ou elle ne comporte aucune
            vérification AML (pour le `node_id` indiqué). La recherche de
            session s'exécute avant la vérification des identifiants, donc un
            `sessionId` inconnu renvoie `404` même sans clé valide.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Unknown session:
                  summary: Aucune session avec cet ID n'existe, ou elle a été supprimée
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    La session se trouve en dehors des limites d'une clé
                    restreinte (également renvoyée pour une session supprimée il
                    y a quelques instants)
                  value:
                    detail: Session not found.
                No AML check:
                  summary: La session n'a jamais exécuté d'étape AML
                  value:
                    detail: The session does not have an AML check.
                No AML check for node:
                  summary: >-
                    node_id ne correspond à aucune vérification AML de la
                    session
                  value:
                    detail: >-
                      The session does not have an AML check for node
                      'feature_aml_2'.
        '429':
          description: >-
            Limite de débit dépassée : 600 requêtes GET par minute par clé API.
            Attendez `Retry-After` secondes avant de réessayer ; les en-têtes
            `X-RateLimit-*` indiquent le quota.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Message d'erreur lisible par l'humain.
              examples:
                Rate limited:
                  summary: Budget épuisé pour la minute en cours
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Secondes à attendre avant de réessayer.
              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: >-
        Une revérification terminée d'un contrôle AML dans le cadre de la
        surveillance continue.
      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: Identifiant de cette exécution de filtrage.
        run_id:
          type: string
          format: uuid
          description: >-
            L'exécution de surveillance à laquelle appartient ce filtrage.
            Chaque vérification filtrée lors de la même exécution la partage.
        completed_at:
          type: string
          format: date-time
          description: >-
            Date et heure auxquelles le nouveau filtrage de ce sujet s'est
            terminé. Les résultats sont triés par cette valeur, du plus récent
            au plus ancien.
        started_at:
          type: string
          format: date-time
          description: >-
            Moment où le lot de surveillance auquel appartient ce nouveau
            filtrage a débuté.
        outcome:
          type: string
          enum:
            - NO_CHANGE
            - CHANGED
            - FAILED
          description: >-
            `NO_CHANGE` : terminé et le résultat n'a pas changé. `CHANGED` :
            terminé et le score, le statut, le nombre de correspondances ou les
            correspondances ont changé. `FAILED` : aucune réponse exploitable
            pour ce sujet, la vérification a donc été laissée en l'état.
        trigger:
          type: string
          enum:
            - ONGOING_MONITORING
          description: >-
            Ce qui a déclenché le filtrage. Toujours `ONGOING_MONITORING`
            actuellement.
        provider:
          type: string
          description: "Identifiant opaque de la source de données AML ayant répondu. Traitez-le comme une chaîne opaque\_; ne créez pas de branche conditionnelle dessus."
          example: aml_data_source
        status:
          type: string
          nullable: true
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
            - null
          description: Statut du contrôle AML à l'issue de cette exécution.
        score:
          type: number
          format: float
          nullable: true
          minimum: 0
          maximum: 100
          description: Score AML de la vérification à l'issue de cette exécution.
        total_hits:
          type: integer
          nullable: true
          description: >-
            Nombre de correspondances que cette exécution a laissées dans la
            vérification.
        new_hits:
          type: integer
          nullable: true
          description: >-
            Nombre de correspondances trouvées par cette exécution que la
            vérification n'avait pas auparavant. `0` si rien de nouveau n'a été
            trouvé ; `null` si l'exécution a échoué ou a été enregistrée avant
            que ce décompte n'existe.
        entities_screened:
          type: integer
          minimum: 0
          maximum: 1
          description: >-
            Nombre d'entités filtrées par cette exécution pour la vérification :
            `1` lorsque le sujet a été filtré, `0` lorsque l'exécution a échoué.
        dataset_freshness:
          allOf:
            - $ref: '#/components/schemas/AMLDatasetFreshness'
          nullable: true
          description: >-
            Fraîcheur du jeu de données pour cette exécution, ou `null` si
            aucune date n'était disponible.
    AMLDatasetFreshness:
      type: object
      description: >-
        Degré de fraîcheur des jeux de données AML lors de l'exécution d'un
        filtrage. Les dates ne sont jamais estimées.
      required:
        - captured_at
        - provider
        - catalog_version
        - sources
      properties:
        captured_at:
          type: string
          format: date-time
          description: >-
            Date et heure auxquelles Didit a lu le catalogue de jeux de données
            dont provient cette fraîcheur.
        provider:
          type: string
          description: "Identifiant opaque de la source de données AML. Traitez-le comme une chaîne opaque\_; ne créez pas de branche conditionnelle dessus."
          example: aml_data_source
        catalog_version:
          type: string
          nullable: true
          description: >-
            Identifiant de version du catalogue de jeux de données, lorsque la
            source en transmet un.
        sources:
          type: object
          description: >-
            Fraîcheur par famille de jeux de données. Une famille dont les jeux
            de données n'ont signalé aucune date de mise à jour est absente
            plutôt que renseignée avec `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: Fraîcheur d'une famille de jeux de données AML.
      required:
        - last_updated_at
        - oldest_updated_at
        - dataset_count
        - dated_dataset_count
      properties:
        last_updated_at:
          type: string
          format: date-time
          description: >-
            Mise à jour la plus récente de n'importe quel jeu de données de la
            famille.
        oldest_updated_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Limite d'obsolescence : chaque jeu de données de la famille est au
            moins aussi récent. `null` lorsqu'au moins un jeu de données de la
            famille n'a indiqué aucune date de mise à jour, car la limite est
            alors inconnue.
        dataset_count:
          type: integer
          description: Nombre de jeux de données dans la famille.
        dated_dataset_count:
          type: integer
          description: Nombre de ces jeux de données ayant signalé une date de mise à jour.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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