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

# Riwayat Skrining AML API Didit

> Lihat setiap pemantauan AML berkelanjutan pada sesi, termasuk yang tidak ada perubahan, dengan hasil, skor, dan kesegaran dataset di Didit.

Prompt API Daftar Riwayat Skrining AML
Salin prompt ke papan klip

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

Tempel ke

Alert, entri aktivitas, dan webhook hanya terpicu ketika hasil skrining berubah, sehingga riwayat ini menjadi catatan bahwa subjek yang bersih tetap menjalani skrining. [Pemantauan AML Berkelanjutan](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md) menjelaskan cara skrining ulang dijalankan dan arti setiap kolom. Untuk memberikan riwayat yang sama kepada auditor dalam bentuk file, gunakan [Ekspor riwayat skrining AML](https://docs.didit.me/id/management-api/sessions/export-aml-screening-history.md).


## OpenAPI

````yaml id/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 Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/aml-screening-history/:
    get:
      tags:
        - Sessions
      summary: Daftar riwayat skrining AML
      description: >-
        Daftar setiap skrining ulang pemantauan berkelanjutan yang telah selesai
        dari pemeriksaan AML suatu sesi, terbaru lebih dahulu berdasarkan
        `completed_at`, termasuk proses di mana tidak ada yang berubah: alert,
        entri aktivitas, dan webhook hanya terpicu saat hasil berubah, sehingga
        riwayat ini menjadi bukti bahwa subjek yang bersih tetap diskrining.
        Berfungsi untuk ID sesi KYC dan KYB; teruskan `node_id` jika sesi
        menjalankan lebih dari satu langkah AML. Hanya skrining ulang pemantauan
        berkelanjutan yang dicantumkan (skrining pertama adalah bagian dari
        keputusan sesi) dan proses dari sebelum riwayat ini ada tidak
        direkonstruksi, sehingga sesi tanpa pemantauan berkelanjutan
        mengembalikan daftar kosong. `count` akurat hingga 100 dan dibatasi
        maksimum 100 di atasnya, jadi ikuti `next` hingga bernilai `null`.
        Teruskan `month` untuk membaca satu bulan kalender sekaligus. Kunci API
        yang dibatasi cakupannya memerlukan `decisions: read`; lihat [Pemantauan
        AML
        Berkelanjutan](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening).
      operationId: get_v3_session_aml_screening_history
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID sesi verifikasi (`session_id` yang dikembalikan oleh `POST
            /v3/session/`). Menerima ID sesi Verifikasi Pengguna (KYC) dan
            Verifikasi Bisnis (KYB): server mencari ID tersebut di kedua jenis
            sesi. Harus berupa UUID dengan format yang benar; nilai yang salah
            format tidak cocok dengan rute dan mengembalikan HTML `404`.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: node_id
          in: query
          required: false
          description: >-
            ID node graf alur kerja dari pemeriksaan AML. Hanya diperlukan jika
            sesi menjalankan lebih dari satu langkah AML; jika tidak diisi,
            pemeriksaan AML terbaru yang akan digunakan. Node yang tidak dikenal
            akan mengembalikan `404`.
          schema:
            type: string
            example: feature_aml_1
        - name: month
          in: query
          required: false
          description: >-
            Bulan kalender UTC dalam format `YYYY-MM`. Hanya skrining yang
            selesai pada bulan tersebut yang dikembalikan; tanpa parameter ini,
            setiap bulan akan dikembalikan. Format bulan yang salah
            mengembalikan `400`.
          schema:
            type: string
            pattern: ^\d{4}-(0[1-9]|1[0-2])$
            example: 2026-09
        - name: limit
          in: query
          required: false
          description: >-
            Jumlah eksekusi skrining maksimum per halaman. Defaultnya 50. Nilai
            di bawah 1 atau nilai non-numerik akan dialihkan ke 50; nilai di
            atas 1.000.000 mengembalikan `400`.
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
            example: 50
        - name: offset
          in: query
          required: false
          description: >-
            Jumlah hasil yang dilewati sebelum hasil pertama yang dikembalikan.
            Default-nya 0; nilai negatif atau non-numerik akan kembali ke 0,
            nilai di atas 1.000.000 mengembalikan `400`. Disarankan mengikuti
            URL `next` dan `previous`.
          schema:
            type: integer
            default: 0
            minimum: 0
            maximum: 1000000
            example: 0
        - name: ordering
          in: query
          required: false
          description: >-
            Penggantian pengurutan opsional. Urutan default adalah
            `-completed_at`. Berikan nama kolom hasil (misalnya `completed_at`,
            `started_at`, `outcome`, atau `score`) untuk mengurutkan secara
            naik, tambahkan awalan `-` untuk mengurutkan secara turun, dan
            pisahkan beberapa kolom dengan tanda koma. Kolom yang tidak dikenal
            akan diabaikan.
          schema:
            type: string
            example: completed_at
      responses:
        '200':
          description: Satu halaman eksekusi skrining, terbaru lebih dahulu.
          content:
            application/json:
              schema:
                type: object
                required:
                  - count
                  - next
                  - previous
                  - results
                properties:
                  count:
                    type: integer
                    maximum: 100
                    description: >-
                      Jumlah eksekusi, tepat hingga 100 dan dibatasi maksimal
                      100 di atasnya.
                  next:
                    type: string
                    format: uri
                    nullable: true
                    description: URL halaman berikutnya, atau `null` pada halaman terakhir.
                  previous:
                    type: string
                    format: uri
                    nullable: true
                    description: URL halaman sebelumnya, atau `null` pada halaman pertama.
                  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` atau `offset` berada di atas 1,000,000 (array JSON dengan
            satu pesan), atau `month` bukan bulan kalender `YYYY-MM` (objek
            dengan kunci `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: >-
            Kunci API dengan cakupan terbatas telah kedaluwarsa. Ini
            satu-satunya kasus yang mengembalikan `401`: kunci yang hilang,
            tidak valid, atau dicabut mengembalikan `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Expired key:
                  summary: Tanggal kedaluwarsa kunci telah lewat
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Kegagalan autentikasi atau otorisasi. Kunci yang hilang
            mengembalikan `403`, begitu juga dengan kunci dari aplikasi lain,
            kunci dengan cakupan tanpa izin yang dibutuhkan endpoint ini, dan
            permintaan dari luar daftar izin IP kunci tersebut; kunci yang
            salah, dicabut, atau kedaluwarsa mengembalikan `401`. Bedakan
            kegagalan tersebut berdasarkan `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Missing or invalid credentials:
                  summary: Tidak ada header x-api-key, atau kunci gagal divalidasi
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: Kunci valid milik aplikasi yang berbeda dari sesi
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions read:
                  summary: 'Kunci ber-scope tidak memiliki decisions: read'
                  value:
                    detail: This API key has no read access to decisions.
                IP not allowed:
                  summary: Permintaan dari luar daftar izin IP kunci
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            Sesi tidak ada, telah dihapus, atau berada di luar batas kunci
            dengan cakupan terbatas, atau tidak memiliki pemeriksaan AML (untuk
            `node_id` yang diberikan). Pencarian sesi berjalan sebelum
            pemeriksaan kredensial, sehingga `sessionId` yang tidak dikenal
            mengembalikan `404` bahkan tanpa kunci yang valid.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Unknown session:
                  summary: Tidak ada sesi dengan ID ini, atau telah dihapus
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    Sesi berada di luar batas kunci dengan cakupan terbatas
                    (juga dikembalikan untuk sesi yang baru saja dihapus)
                  value:
                    detail: Session not found.
                No AML check:
                  summary: Sesi tidak pernah menjalankan langkah AML
                  value:
                    detail: The session does not have an AML check.
                No AML check for node:
                  summary: >-
                    node_id tidak cocok dengan pemeriksaan AML pada sesi
                    tersebut
                  value:
                    detail: >-
                      The session does not have an AML check for node
                      'feature_aml_2'.
        '429':
          description: >-
            Batas laju terlampaui: 600 permintaan GET per menit per kunci API.
            Tunggu `Retry-After` detik sebelum mencoba lagi; header
            `X-RateLimit-*` menampilkan anggaran yang tersedia.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Rate limited:
                  summary: Anggaran untuk menit saat ini habis
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
          headers:
            Retry-After:
              description: Detik untuk menunggu sebelum mencoba lagi.
              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: >-
        Satu skrining ulang pemantauan berkelanjutan yang telah selesai dari
        pemeriksaan 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: Pengenal eksekusi skrining ini.
        run_id:
          type: string
          format: uuid
          description: >-
            Putaran pemantauan tempat skrining ini berada. Setiap verifikasi
            yang diskrining dalam putaran yang sama memiliki nilai yang sama.
        completed_at:
          type: string
          format: date-time
          description: >-
            Kapan skrining ulang subjek ini selesai. Hasil diurutkan berdasarkan
            ini, yang terbaru lebih dahulu.
        started_at:
          type: string
          format: date-time
          description: Waktu batch pemantauan tempat skrining ulang ini berada dimulai.
        outcome:
          type: string
          enum:
            - NO_CHANGE
            - CHANGED
            - FAILED
          description: >-
            `NO_CHANGE`: selesai dan hasilnya tidak berubah. `CHANGED`: selesai
            dan skor, status, jumlah kecocokan, atau kecocokan berubah.
            `FAILED`: tidak ada jawaban yang dapat digunakan untuk subjek ini,
            sehingga pemeriksaan dibiarkan apa adanya.
        trigger:
          type: string
          enum:
            - ONGOING_MONITORING
          description: Apa yang memulai skrining. Selalu `ONGOING_MONITORING` saat ini.
        provider:
          type: string
          description: >-
            Pengidentifikasi opaque dari sumber data AML yang merespons.
            Perlakukan sebagai string opaque; jangan membuat percabangan logika
            berdasarkan nilai ini.
          example: aml_data_source
        status:
          type: string
          nullable: true
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
            - null
          description: Status pemeriksaan AML setelah eksekusi ini.
        score:
          type: number
          format: float
          nullable: true
          minimum: 0
          maximum: 100
          description: Skor AML setelah eksekusi ini.
        total_hits:
          type: integer
          nullable: true
          description: Jumlah kecocokan yang tersisa dalam pemeriksaan setelah proses ini.
        new_hits:
          type: integer
          nullable: true
          description: >-
            Jumlah kecocokan yang ditemukan proses ini yang belum ada pada
            pemeriksaan sebelumnya. `0` ketika tidak ada hal baru yang
            ditemukan; `null` ketika proses gagal atau dicatat sebelum hitungan
            ini tersedia.
        entities_screened:
          type: integer
          minimum: 0
          maximum: 1
          description: >-
            Jumlah entitas yang diskrining oleh proses ini untuk verifikasi: `1`
            ketika subjek diskrining, `0` ketika proses gagal.
        dataset_freshness:
          allOf:
            - $ref: '#/components/schemas/AMLDatasetFreshness'
          nullable: true
          description: >-
            Kebaruan himpunan data untuk proses ini, atau `null` jika tidak ada
            tanggal yang tersedia.
    AMLDatasetFreshness:
      type: object
      description: >-
        Tingkat kemutakhiran set data AML saat skrining dijalankan. Tanggal
        tidak pernah diestimasi.
      required:
        - captured_at
        - provider
        - catalog_version
        - sources
      properties:
        captured_at:
          type: string
          format: date-time
          description: >-
            Waktu ketika Didit membaca katalog dataset yang menjadi sumber
            informasi kesegaran ini.
        provider:
          type: string
          description: >-
            Pengidentifikasi tidak transparan dari sumber data AML. Perlakukan
            sebagai string yang tidak transparan; jangan membuat percabangan
            logika berdasarkan nilai ini.
          example: aml_data_source
        catalog_version:
          type: string
          nullable: true
          description: >-
            Pengidentifikasi versi dari katalog dataset, jika sumber
            melaporkannya.
        sources:
          type: object
          description: >-
            Kebaruan per kelompok himpunan data. Kelompok yang himpunan datanya
            tidak melaporkan tanggal pembaruan tidak ditampilkan, alih-alih
            diisi dengan `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: Kebaruan dari satu kelompok dataset AML.
      required:
        - last_updated_at
        - oldest_updated_at
        - dataset_count
        - dated_dataset_count
      properties:
        last_updated_at:
          type: string
          format: date-time
          description: >-
            Pembaruan terbaru dari himpunan data apa pun dalam keluarga
            tersebut.
        oldest_updated_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Batas keusangan: setiap himpunan data dalam keluarga setidaknya
            semutakhir ini. `null` jika setidaknya satu himpunan data dalam
            keluarga tidak melaporkan tanggal pembaruan, karena batasnya menjadi
            tidak diketahui.
        dataset_count:
          type: integer
          description: Jumlah dataset dalam keluarga.
        dated_dataset_count:
          type: integer
          description: Jumlah himpunan data yang melaporkan tanggal pembaruan.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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