> ## 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 para exportar el historial de screening AML en CSV

> Descarga en CSV el historial de monitorización AML continua de una sesión en Didit: una línea por re-screening completado, lista para auditoría.

Prompt de la API para exportar el historial de análisis AML
Copiar el prompt al portapapeles

<pre>
  \`Download the ongoing AML monitoring history of one Didit verification session as a CSV file through the API.

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

  Authentication:
  Send my Didit API key in the x-api-key header. A scoped key needs decisions: read and media: read (the response is a file; without media: read the call returns 403).

  Goal:

  * Produce the audit evidence that ongoing AML monitoring ran for a subject, as a file a compliance team can hand to 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.

  Behavior:

  * Works for user (KYC) and business (KYB) session IDs.
  * Streams text/csv with Content-Disposition: attachment; filename="aml-screening-history-SESSION\_ID.csv". Not paginated: the file holds the whole history, newest first.
  * The first line is the header. Each following line is one completed re-screen.
  * Columns: screened\_at, outcome, provider, aml\_status, aml\_score, total\_hits, datasets\_captured\_at, datasets\_sanctions\_last\_updated\_at, datasets\_pep\_last\_updated\_at, datasets\_warnings\_last\_updated\_at, datasets\_adverse\_media\_last\_updated\_at, datasets\_catalog\_version.
  * Empty cell = unknown. Dataset dates are never estimated.
  * provider is an identifier of the data source; treat it as an opaque string.
  * Values that would start a spreadsheet formula (=, +, -, @) are prefixed with an apostrophe.
  * Errors come back as JSON, not CSV.

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

  Failure modes:

  * 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 media: 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>

Pegar en

El archivo contiene los mismos análisis que [Listar el historial de análisis AML](https://docs.didit.me/es/management-api/sessions/aml-screening-history.md), reducidos a una línea cada uno, con la fecha de actualización del conjunto de datos de cada familia de listas (sanciones, PEP, advertencias, medios adversos) cuando se haya informado una. La Business Console ofrece la misma exportación junto al resultado AML. Consulta [Monitorización AML continua](https://docs.didit.me/es/core-technology/aml-screening/continuous-monitoring-aml-screening.md) para saber qué significa cada valor.


## OpenAPI

````yaml es/openapi-25.json GET /v3/session/{sessionId}/aml-screening-history/export/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificación de identidad. Autentícate con el encabezado x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/aml-screening-history/export/:
    get:
      tags:
        - Sessions
      summary: Exportar el historial de análisis AML como CSV
      description: >-
        Descarga el mismo historial de monitorización continua que `GET
        /v3/session/{sessionId}/aml-screening-history/` como archivo CSV, con
        una línea por cada nuevo análisis completado, del más reciente al más
        antiguo, listo para entregar a un auditor. El archivo se transmite
        completo (sin paginación) y empieza con una línea de encabezado; una
        celda vacía significa desconocido, las fechas de los conjuntos de datos
        nunca se estiman y a cualquier valor que empezaría una fórmula de hoja
        de cálculo se le antepone un apóstrofo. Funciona con IDs de sesiones KYC
        y KYB; pasa `node_id` cuando la sesión ejecutó más de un paso AML. Pasa
        `month` para exportar un mes natural. Los errores se devuelven en JSON,
        no en CSV. Una clave de API con alcance necesita `decisions: read` y
        `media: read`: la respuesta es un archivo, así que una clave sin `media:
        read` recibe `403`.
      operationId: get_v3_session_aml_screening_history_export
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID de la sesión de verificación (el `session_id` que devuelve
            `POST /v3/session/`). Acepta ID de sesión tanto de Verificación de
            usuarios (KYC) como de Verificación de empresas (KYB): el servidor
            resuelve el ID en ambos tipos de sesión. Debe ser un UUID con
            formato válido; un valor mal formado no coincide con la ruta y
            devuelve un `404` en HTML.
          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 flujo correspondiente al análisis AML.
            Solo es necesario cuando la sesión ejecutó más de un paso AML; sin
            él, se usa el análisis AML más reciente. Un nodo desconocido
            devuelve `404`.
          schema:
            type: string
            example: feature_aml_1
        - name: month
          in: query
          required: false
          description: >-
            Un mes natural en UTC con el formato `YYYY-MM`. Solo se devuelven
            los análisis completados en ese mes; sin él, se devuelven todos los
            meses. Un mes con formato incorrecto devuelve `400`.
          schema:
            type: string
            pattern: ^\d{4}-(0[1-9]|1[0-2])$
            example: 2026-09
      responses:
        '200':
          description: >-
            El archivo CSV, transmitido como `text/csv` con finales de línea
            CRLF. Columnas, en orden: `screened_at` (cuándo terminó el nuevo
            análisis), `outcome` (`NO_CHANGE`, `CHANGED` o `FAILED`), `provider`
            (identificador opaco de la fuente de datos AML; no bases tu lógica
            en él), `aml_status`, `aml_score`, `total_hits`,
            `datasets_captured_at`, `datasets_sanctions_last_updated_at`,
            `datasets_pep_last_updated_at`, `datasets_warnings_last_updated_at`,
            `datasets_adverse_media_last_updated_at`,
            `datasets_catalog_version`, `run_id` (la ejecución de
            monitorización), `entities_screened` (`1`, o `0` en una ejecución
            fallida) y `new_hits` (vacío cuando se desconoce). Las fechas están
            en ISO 8601 con desfase UTC. Una sesión que aún no tiene nuevos
            análisis devuelve solo la línea de encabezado.
          headers:
            Content-Disposition:
              description: >-
                `attachment; filename="aml-screening-history-{sessionId}.csv"`,
                o `aml-screening-history-{sessionId}-{month}.csv` cuando se pasa
                `month`.
              schema:
                type: string
                example: >-
                  attachment;
                  filename="aml-screening-history-11111111-2222-3333-4444-555555555555.csv"
          content:
            text/csv:
              schema:
                type: string
                format: binary
              example: "screened_at,outcome,provider,aml_status,aml_score,total_hits,datasets_captured_at,datasets_sanctions_last_updated_at,datasets_pep_last_updated_at,datasets_warnings_last_updated_at,datasets_adverse_media_last_updated_at,datasets_catalog_version,run_id,entities_screened,new_hits\r\n2026-09-14T04:12:33.481207+00:00,NO_CHANGE,aml_data_source,Approved,0.0,0,2026-09-14T03:58:02.114820+00:00,2026-09-13T21:10:00+00:00,2026-09-13T08:00:00+00:00,2026-09-12T18:45:00+00:00,,2026-09-13,aaaaaaaa-1111-2222-3333-444444444444,1,0\r\n2026-09-13T04:11:58.020914+00:00,FAILED,aml_data_source,Approved,0.0,0,,,,,,,bbbbbbbb-1111-2222-3333-444444444444,0,\r\n"
        '400':
          description: '`month` no es un mes natural `YYYY-MM`.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  month:
                    type: array
                    items:
                      type: string
              examples:
                Malformed month:
                  summary: month=2026-13
                  value:
                    month:
                      - Not a calendar month. Use YYYY-MM.
        '401':
          description: >-
            La clave de API con alcance limitado ha expirado. Este es el único
            caso que devuelve `401`: una clave ausente, no válida o revocada
            devuelve `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Expired key:
                  summary: La fecha de caducidad de la clave ya pasó
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Fallo de autenticación o autorización. Si falta la clave, se
            devuelve `403`, al igual que con una clave de otra aplicación, una
            clave con alcance limitado sin el permiso que necesita este endpoint
            y una solicitud desde fuera de la lista de IP permitidas de la
            clave; una clave incorrecta, revocada o expirada devuelve `401`.
            Distínguelos por `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Falta el encabezado x-api-key, o la clave no superó la
                    validación
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Una clave válida que pertenece a una aplicación distinta de
                    la de la sesión
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions read:
                  summary: 'A la clave con alcance limitado le falta decisions: read'
                  value:
                    detail: This API key has no read access to decisions.
                Scoped key without media read:
                  summary: >-
                    A la clave con alcance limitado le falta media: read (la
                    respuesta es un archivo)
                  value:
                    detail: This API key has no read access to media.
                IP not allowed:
                  summary: >-
                    Solicitud desde fuera de la lista de IP permitidas de la
                    clave
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La sesión no existe, se ha eliminado o está fuera de los límites de
            una clave con alcance restringido, o no tiene ninguna comprobación
            AML (para el `node_id` indicado). La búsqueda de la sesión se
            ejecuta antes de comprobar la credencial, por lo que un `sessionId`
            desconocido devuelve `404` incluso sin una clave válida.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Unknown session:
                  summary: No existe ninguna sesión con este ID, o se eliminó
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    La sesión está fuera de los límites de una clave con alcance
                    restringido (también se devuelve para una sesión eliminada
                    hace unos instantes)
                  value:
                    detail: Session not found.
                No AML check:
                  summary: La sesión nunca ejecutó un paso AML
                  value:
                    detail: The session does not have an AML check.
                No AML check for node:
                  summary: >-
                    node_id no corresponde a ninguna comprobación AML de la
                    sesión
                  value:
                    detail: >-
                      The session does not have an AML check for node
                      'feature_aml_2'.
        '429':
          description: >-
            Límite de solicitudes superado: 600 solicitudes GET por minuto por
            clave de API. Espera los segundos indicados en `Retry-After` antes
            de reintentar; los encabezados `X-RateLimit-*` muestran el
            presupuesto.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Rate limited:
                  summary: Presupuesto del minuto actual agotado
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Segundos que hay que esperar antes de reintentar.
              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/export/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -o aml-screening-history.csv
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            content = client.sessions.export_aml_screening_history(
                "11111111-2222-3333-4444-555555555555",
            )
            with open("download.csv", "wb") as file:
                file.write(content)
        - lang: javascript
          label: Node.js
          source: >-
            import { writeFile } from "node:fs/promises";

            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const content = await
            didit.sessions.exportAmlScreeningHistory("11111111-2222-3333-4444-555555555555");

            await writeFile("download.csv", Buffer.from(await
            content.arrayBuffer()));
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.ExportAMLScreeningHistory(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsExportAMLScreeningHistoryParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.csv\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            client.sessions().exportAmlScreeningHistory("11111111-2222-3333-4444-555555555555")
                    .writeTo(Path.of("download.csv"));
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $content =
            $didit->sessions->exportAmlScreeningHistory('11111111-2222-3333-4444-555555555555');

            $content->saveTo('download.csv');
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            content =
            didit.sessions.export_aml_screening_history("11111111-2222-3333-4444-555555555555")

            File.binwrite("download.csv", content)
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var content = await
            client.Sessions.ExportAmlScreeningHistoryAsync("11111111-2222-3333-4444-555555555555");

            await content.SaveToAsync("download.csv");
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clave de API de tu aplicación, que encontrarás en Developers -> API
        keys en la Business Console. La clave principal tiene acceso completo.
        Una clave con nombre puede tener un alcance limitado: ninguno, lectura o
        escritura por recurso, limitada a algunos flujos o a sesiones aprobadas,
        a una lista de direcciones IP y a una fecha de caducidad. 401 significa
        que la clave es incorrecta, se revocó o expiró; 403 significa que no se
        envió ninguna clave, que la clave no tiene acceso a este recurso o
        acción, o que la solicitud provino de una dirección fuera de su lista de
        IP; 404 en una ruta de sesión significa que la sesión está fuera de los
        flujos o estados de la clave. Una clave sin acceso a contenido
        multimedia recibe las URL de imágenes, videos y PDF como null, y una
        clave sin permiso de escritura en sesiones recibe los enlaces y tokens
        de sesión como null. Consulta https://docs.didit.me/console/api-keys.

````

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