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

# Get AML Dataset Freshness

> Check how current Didit's sanctions, PEP, warnings and adverse media datasets are, per source family, as audit evidence for AML monitoring.



AML Dataset Freshness API Prompt
        Copy prompt to clipboard



      
      

\<pre>

\`Read how current Didit's AML screening datasets are, so I can attach it to an audit of ongoing AML monitoring.

Endpoint:
GET https://verification.didit.me/v3/aml/dataset-freshness/

Authentication:
Use the x-api-key header with my Didit API key. A scoped key needs sessions: read. A key limited to some workflows or to approved sessions can't call this endpoint.

Goal:
\- Get, per AML source family (sanctions, pep, warnings, adverse_media), the most recent dataset update and the staleness bound, and store it next to the AML screening history I hand to an auditor.

Behavior:
\- Platform-wide: no session in the path, no customer data in the answer, the same answer for every application.
\- Always 200. When no reading exists, dataset_freshness is null and availability says why: "not_configured" (dataset dates are not collected in this environment) or "not_yet_collected" (collection is set up, no reading yet).
\- Dates are never estimated. A family whose datasets reported no date is absent from sources. A family where only some datasets reported a date has oldest_updated_at: null.
\- captured_at is when the dates were read. Readings are taken while ongoing monitoring runs, not on each call.

Example call:
curl -X GET "https://verification.didit.me/v3/aml/dataset-freshness/" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response:
\- availability - "available", "not_configured" or "not_yet_collected". Check it before reading dataset_freshness.
\- dataset_freshness.captured_at - when the reading was taken.
\- dataset_freshness.sources.<family>.last_updated_at - the most recent update in that family.
\- dataset_freshness.sources.<family>.oldest_updated_at - every dataset in the family is at least this current; null when some dates are missing.
\- dataset_freshness.sources.<family>.dataset_count and dated_dataset_count - how many datasets the family has and how many reported a date.
\- dataset_freshness.catalog_version - the data source's own catalog version, when reported.

Failure modes:
\- 401 - the API key has expired.
\- 403 - missing or invalid key ({"detail": "You do not have permission to perform this action."}), a scoped key without sessions: read, a key limited to workflows or approved sessions, or a request from outside the key's IP list.
\- 429 - more than 600 GET requests per minute with this key; wait Retry-After seconds.

Side effects: none. Not billed.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

Paste into

Use this endpoint to show which list versions ongoing monitoring screened against. Pair it with the per-subject screening history described in [Proving that monitoring ran](/core-technology/aml-screening/continuous-monitoring-aml-screening.md#proving-that-monitoring-ran): the history says when each subject was screened, and this endpoint says how current the datasets behind those screenings were.> [!NOTE]
>
> A missing date is reported as missing, never replaced by a substitute. Check `availability` first: when it is not `available`, `dataset_freshness` is `null` and there is nothing to read.## Related- [Continuous AML monitoring](/core-technology/aml-screening/continuous-monitoring-aml-screening.md)
- [AML screening API](/standalone-apis/aml-screening.md)
- [API keys and scoped access](/console/api-keys.md)


## OpenAPI

````yaml GET /v3/aml/dataset-freshness/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/aml/dataset-freshness/:
    get:
      tags:
        - Standalone APIs
      summary: Get AML dataset freshness
      description: >-
        Report how current the datasets behind AML screening are, per source
        family (`sanctions`, `pep`, `warnings`, `adverse_media`), as audit
        evidence for [ongoing AML
        monitoring](https://docs.didit.me/core-technology/aml-screening/continuous-monitoring-aml-screening#proving-that-monitoring-ran).
        The answer is platform-wide: no session in the path, no customer data in
        the body, the same answer for every application.


        Always `200` for an accepted key. Check `availability` first: when it is
        not `available`, `dataset_freshness` is `null`. Dates are never
        estimated: a family whose datasets reported no date is absent from
        `sources`, and a family where only some datasets reported one has
        `oldest_updated_at: null`. Readings are taken while ongoing monitoring
        runs, not on each call; `captured_at` says when.


        A scoped API key needs `sessions: read`; a key limited to some workflows
        or to approved sessions cannot call this endpoint. Nothing is billed.
      operationId: get_aml_dataset_freshness
      parameters: []
      responses:
        '200':
          description: The latest dataset freshness reading, or `null` with the reason.
          content:
            application/json:
              schema:
                type: object
                required:
                  - dataset_freshness
                  - availability
                properties:
                  dataset_freshness:
                    allOf:
                      - $ref: '#/components/schemas/AMLDatasetFreshness'
                    nullable: true
                    description: >-
                      The latest reading, or `null` when `availability` is not
                      `available`.
                  availability:
                    type: string
                    enum:
                      - available
                      - not_configured
                      - not_yet_collected
                    description: >-
                      `available` when a reading exists; `not_configured` when
                      dataset dates are not collected in this environment;
                      `not_yet_collected` when collection is set up but no
                      reading exists yet.
              examples:
                Available:
                  value:
                    dataset_freshness:
                      captured_at: '2026-10-17T06:00:12.345678+00:00'
                      provider: aml_data_source
                      catalog_version: 20261017054500-abc
                      sources:
                        sanctions:
                          last_updated_at: '2026-10-17T04:10:00+00:00'
                          oldest_updated_at: '2026-10-15T22:30:00+00:00'
                          dataset_count: 48
                          dated_dataset_count: 48
                        pep:
                          last_updated_at: '2026-10-16T23:05:00+00:00'
                          oldest_updated_at: null
                          dataset_count: 12
                          dated_dataset_count: 11
                    availability: available
                Not collected yet:
                  value:
                    dataset_freshness: null
                    availability: not_yet_collected
        '401':
          description: >-
            The API key has expired. Only a key created with an expiry date can
            expire; after that date every request with it answers `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            The request is not allowed. A missing or invalid API key gets the
            generic message (never `401`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Missing or invalid key:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without sessions read:
                  value:
                    detail: This API key has no read access to sessions.
                Key limited to workflows or approved sessions:
                  value:
                    detail: >-
                      This API key only reaches sessions inside its workflow or
                      status limits, so it can't use this endpoint.
                Outside the key's IP list:
                  value:
                    detail: This API key can't be used from this IP address.
        '429':
          description: >-
            More than 600 GET requests per minute with this API key. Wait the
            number of seconds in `Retry-After`, then retry.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Throttled:
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Seconds until the current one-minute window resets.
              schema:
                type: integer
                example: 23
            X-RateLimit-Limit:
              description: Requests allowed per minute in this budget.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix time when the window resets.
              schema:
                type: integer
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/aml/dataset-freshness/' \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            import os

            import requests

            resp = requests.get(
                'https://verification.didit.me/v3/aml/dataset-freshness/',
                headers={'x-api-key': os.environ['DIDIT_API_KEY']},
                timeout=10,
            )
            resp.raise_for_status()
            body = resp.json()
            if body['availability'] == 'available':
                for family, info in body['dataset_freshness']['sources'].items():
                    print(family, info['last_updated_at'], info['oldest_updated_at'])
        - lang: javascript
          label: JavaScript
          source: >-
            const resp = await
            fetch('https://verification.didit.me/v3/aml/dataset-freshness/', {
              headers: { 'x-api-key': process.env.DIDIT_API_KEY },
            });

            if (!resp.ok) throw new Error(`Freshness lookup failed:
            ${resp.status}`);

            const body = await resp.json();

            if (body.availability === 'available') {
              for (const [family, info] of Object.entries(body.dataset_freshness.sources)) {
                console.log(family, info.last_updated_at, info.oldest_updated_at);
              }
            }
components:
  schemas:
    AMLDatasetFreshness:
      type: object
      description: >-
        How current the AML datasets were when a screening ran. Dates are never
        estimated.
      required:
        - captured_at
        - provider
        - catalog_version
        - sources
      properties:
        captured_at:
          type: string
          format: date-time
          description: When Didit read the dataset catalog this freshness comes from.
        provider:
          type: string
          description: >-
            Opaque identifier of the AML data source. Treat it as an opaque
            string; do not branch on it.
          example: aml_data_source
        catalog_version:
          type: string
          nullable: true
          description: >-
            Version identifier of the dataset catalog, when the source reports
            one.
        sources:
          type: object
          description: >-
            Freshness per dataset family. A family whose datasets reported no
            update date is absent rather than filled with `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: Freshness of one family of AML datasets.
      required:
        - last_updated_at
        - oldest_updated_at
        - dataset_count
        - dated_dataset_count
      properties:
        last_updated_at:
          type: string
          format: date-time
          description: Most recent update of any dataset in the family.
        oldest_updated_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Staleness bound: every dataset in the family is at least this
            current. `null` when at least one dataset in the family reported no
            update date, because the bound is then unknown.
        dataset_count:
          type: integer
          description: Number of datasets in the family.
        dated_dataset_count:
          type: integer
          description: Number of those datasets that reported an update date.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your application's API key, from Developers -> API keys in the Business
        Console. The primary key has full access. A named key can be scoped:
        none, read or write per resource, limited to some workflows or to
        approved sessions, to a list of IP addresses, and to an expiry date. 401
        means the key is missing, wrong, revoked or expired; 403 means the key
        has no access to this resource or action, or the request came from an
        address outside its IP list; 404 on a session route means the session is
        outside the key's workflows or statuses. A key without media access
        receives image, video and PDF URLs as null, and a key without sessions
        write receives session links and tokens as null. See
        https://docs.didit.me/console/api-keys.

````

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