> ## 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 Aktifkan/Nonaktifkan Pemantauan AML untuk Pengguna

> Aktifkan atau nonaktifkan pemantauan AML berkelanjutan untuk banyak pengguna dalam satu panggilan Didit, dengan estimasi biaya dry-run dan hasil per pengguna.



Prompt Mengaktifkan atau Menonaktifkan Pemantauan AML untuk Pengguna
        Salin prompt ke papan klip



      
      

\<pre>

\`Goal: Enable or disable ongoing AML monitoring for one or many Didit User entities in a single call, with the same semantics as the Business Console. Preview the cost first with estimate_only, then run the change and read the per-user outcome.

Endpoint: POST https://verification.didit.me/v3/users/aml-monitoring/
Auth header: x-api-key: <DIDIT_API_KEY>
Content-Type: application/json

Request body:
\- is_enabled: boolean (required) - true to enable monitoring, false to disable it.
\- estimate_only: boolean (default false) - when true, returns the cost preview and performs NO writes: no screening, no billing, no job.
\- vendor_data_list: string[] - your own identifiers, matched exactly as sent.
\- didit_internal_id_list: string[] (UUIDs) - the didit_internal_id returned by the create, get and list endpoints.
Provide at least one list; the two are OR'd. At most 1000 identifiers per request across both lists - split larger selections into several calls.

Semantics:
\- One monitored screening per user: a person who verified several times is monitored and billed once. Disabling turns monitoring off across all of the user's screenings.
\- Users without any AML screening are screened first (billed as a regular AML screening) when the profile has a full name, date of birth and country; otherwise the user is reported as skipped_no_identity_data.
\- Blocked users are skipped (skipped_blocked). Sandbox applications never create screenings (skipped_sandbox).
\- Enabling is refused with 403 when the organization balance does not cover the estimate; the response carries the estimate.

curl (estimate first):
curl -X POST 'https://verification.didit.me/v3/users/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "estimate_only": true, "vendor_data_list": ["user-123", "user-456"]}'

Response 200 (estimate_only):
\{
"users_total": 2, "already_enabled": 0, "with_existing_aml": 1, "needing_screening": 1,
"skipped_no_identity_data": 0, "skipped_blocked": 0,
"estimated_screening_cost_usd": 0.2, "estimated_annual_monitoring_cost_usd": 0.14,
"balance_sufficient": true, "unmatched": []
}

curl (enable):
curl -X POST 'https://verification.didit.me/v3/users/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "vendor_data_list": ["user-123", "user-456"]}'

Response 200 (20 users or fewer - processed inline, already COMPLETED) or 202 (more than 20 - running in the background):
\{
"job_id": "<uuid>", "status": "COMPLETED", "is_enabled": true, "target_type": "user",
"total": 2, "processed": 2,
"outcomes": {"enabled": 1, "screened_and_enabled": 1, "already_enabled": 0, "disabled": 0, "skipped_no_identity_data": 0, "skipped_blocked": 0, "skipped_sandbox": 0, "failed_provider": 0, "failed_insufficient_balance": 0},
"results": [
\{"didit_internal_id": "<uuid>", "vendor_data": "user-123", "outcome": "enabled"},
\{"didit_internal_id": "<uuid>", "vendor_data": "user-456", "outcome": "screened_and_enabled"}
],
"estimate": { ...same shape as above, without unmatched... },
"unmatched": [],
"error": null,                     // generic message when status is FAILED
"created_at": "<datetime>", "completed_at": "<datetime>"
}
On 202, poll GET /v3/aml-monitoring/jobs/{job_id}/ every couple of seconds until status is COMPLETED or FAILED; results fills in as users are processed.

Per-user outcome values: enabled, screened_and_enabled, already_enabled, disabled, skipped_no_identity_data, skipped_blocked, skipped_sandbox, failed_provider, failed_insufficient_balance.

Failure modes:
\- 400 - is_enabled missing, no selector, or more than 1000 identifiers across both lists.
A selection that matches nothing is NOT an error: the job completes with total 0 and every identifier is listed under unmatched (same convention as the batch delete endpoints).
\- 401 - missing/invalid x-api-key.
\- 403 - insufficient balance to enable monitoring for this selection (body: error + estimate).

Idempotency: re-sending an enable returns already_enabled for users that are already monitored, with no second screening and no second bill. Disabling an unmonitored user returns disabled and changes nothing.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Tempel ke

## IkhtisarMengaktifkan atau menonaktifkan [pemantauan AML berkelanjutan](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md) untuk [entitas Pengguna](https://docs.didit.me/id/entities/users/overview.md) yang dipilih, persis seperti tindakan **Pemantauan AML Berkelanjutan** di Business Console. Console dan endpoint ini menjalankan operasi dasar yang sama, sehingga aturan, penagihan, dan hasilnya identik.Kirim `estimate_only: true` terlebih dahulu untuk melihat berapa banyak pengguna yang dipilih, berapa banyak yang memerlukan skrining AML baru, biaya skrining satu kali, dan biaya pemantauan tahunan. Simulasi tidak menulis apa pun.## Kapan digunakan- **Onboarding terprogram**: aktifkan pemantauan untuk pengguna yang Anda impor atau buat melalui API tanpa melakukan skrining ulang secara manual.
- **Offboarding**: hentikan pemantauan, beserta perpanjangan tahunannya, untuk pengguna yang sudah meninggalkan platform Anda.
- **Kontrol biaya**: lihat dampak biaya yang tepat dari suatu pilihan sebelum Anda memutuskannya.## Cara pemrosesan pilihan- **Satu skrining terpantau per pengguna.** Pengguna yang telah melakukan verifikasi beberapa kali dipantau dan ditagih satu kali. Menonaktifkan pemantauan berarti pemantauan dimatikan untuk semua skrining milik pengguna tersebut.
- **Pengguna tanpa skrining AML akan diskrining terlebih dahulu.** Didit membuat verifikasi AML baru untuk mereka (terlihat di tab **Verifikasi** pengguna), ditagih sebagai skrining AML biasa, lalu mengaktifkan pemantauan pada skrining tersebut. Ini memerlukan nama lengkap, tanggal lahir, dan negara pengguna. Pengguna yang tidak memiliki salah satu data tersebut dilaporkan sebagai `skipped_no_identity_data`, bukan diabaikan secara diam-diam.
- **Pengguna yang diblokir dilewati** (`skipped_blocked`). Aplikasi sandbox tidak pernah membuat skrining (`skipped_sandbox`).
- **Saldo diperiksa di awal.** Pengaktifan ditolak dengan `403` jika saldo Anda tidak mencukupi estimasi, dan respons menyertakan estimasi tersebut agar Anda tahu berapa banyak yang perlu diisi saldo.
- **Perpanjangan tahunan.** Pengguna yang baru dipantau dikenai biaya pemantauan tahunan pada tanggal perpanjangan berikutnya, yaitu tanggal yang ditampilkan Console di kolom **Pemantauan berkelanjutan**. Menonaktifkan pemantauan menghentikan perpanjangan; ini tidak mengembalikan dana untuk periode yang sudah ditagih.## Pemilihan dan ukuran batchPilih pengguna dengan `vendor_data_list`, `didit_internal_id_list`, atau keduanya; kedua daftar digabungkan dengan operator OR. Satu permintaan menerima paling banyak **1000 identifier** dari kedua daftar. Identifier yang tidak cocok dengan pengguna mana pun di aplikasi Anda dikembalikan di `unmatched`, persis seperti yang Anda kirim, dan tidak pernah menggagalkan permintaan: pilihan yang tidak cocok dengan siapa pun akan selesai sebagai job kosong (`total: 0`) dengan semua identifier tercantum, sesuai konvensi endpoint penghapusan batch.## Inline atau di latar belakangPilihan **20 pengguna atau kurang** diproses secara inline dan panggilan mengembalikan `200` dengan job yang sudah selesai. Pilihan yang lebih besar mengembalikan `202` dengan job `PENDING`; lakukan polling ke [Get AML Monitoring Job](https://docs.didit.me/id/management-api/aml-monitoring/get-job.md) hingga `status` menjadi `COMPLETED` atau `FAILED`. Dalam kedua kasus, job memuat satu entri `results` per pengguna beserta `outcome`-nya.| `outcome` | Arti |
| - | - |
| `enabled` | Pemantauan diaktifkan pada skrining AML yang sudah ada. |
| `screened_and_enabled` | Skrining AML baru dibuat (ditagih) dan pemantauan diaktifkan padanya. |
| `already_enabled` | Pemantauan sudah aktif; tidak ada yang berubah, tidak ada yang ditagih. |
| `disabled` | Pemantauan dimatikan di setiap skrining milik pengguna. |
| `skipped_no_identity_data` | Pengguna tidak memiliki nama lengkap, tanggal lahir, atau negara yang diperlukan untuk skrining. |
| `skipped_blocked` | Pengguna diblokir. |
| `skipped_sandbox` | Aplikasi sandbox; tidak ada skrining yang dibuat. |
| `failed_provider` | Skrining tidak dapat diselesaikan. Coba lagi nanti. |
| `failed_insufficient_balance` | Saldo habis saat job sedang berjalan. |## WebhookMengubah status pemantauan tidak mengirim webhook tersendiri. Setelah pemantauan aktif, skrining ulang tetap memicu event `status.updated` dan `data.updated` yang dijelaskan di [Continuous AML Monitoring](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md).## IzinKunci API aktif apa pun milik aplikasi dapat memanggil endpoint ini. Kunci API Didit **terikat pada aplikasi, bukan pada peran**: [peran dan izin](https://docs.didit.me/id/console/roles-permissions.md) di Console menentukan apa yang dapat dilakukan seseorang di Console, dan itu tidak dievaluasi untuk lalu lintas Management API.## Terkait- [Get AML Monitoring Job](https://docs.didit.me/id/management-api/aml-monitoring/get-job.md)
- [Toggle AML Monitoring for Businesses](https://docs.didit.me/id/management-api/aml-monitoring/toggle-businesses.md)
- [Continuous AML Monitoring](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md)
- [AML Screening API](https://docs.didit.me/id/standalone-apis/aml-screening.md)
- [List Users](https://docs.didit.me/id/management-api/users/list.md)


## OpenAPI

````yaml id/openapi-25.json POST /v3/users/aml-monitoring/
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/users/aml-monitoring/:
    post:
      tags:
        - AML Ongoing Monitoring
      summary: Aktifkan atau nonaktifkan pemantauan AML berkelanjutan untuk pengguna
      description: >-
        Mengaktifkan atau menonaktifkan pemantauan AML berkelanjutan untuk
        pengguna yang dipilih, dengan semantik yang sama seperti Business
        Console. Tepat satu skrining AML yang dipantau disimpan per pengguna,
        sehingga profil yang diverifikasi beberapa kali akan dipantau dan
        ditagih sekali; menonaktifkannya akan mematikan pemantauan di seluruh
        skrining profil tersebut. Pengguna tanpa skrining AML apa pun akan
        diskrining terlebih dahulu (ditagih sebagai skrining AML reguler) jika
        memiliki nama lengkap, tanggal lahir, dan negara yang diperlukan; jika
        tidak, pengguna tersebut akan dilaporkan sebagai
        `skipped_no_identity_data`.


        Atur `estimate_only: true` untuk melihat pratinjau jumlah dan biaya
        tanpa menulis apa pun. Pilihan 20 profil atau kurang diselesaikan secara
        inline dan mengembalikan `200` dengan pekerjaan yang selesai; pilihan
        yang lebih besar mengembalikan `202` dan berjalan di latar belakang -
        lakukan polling pada [Dapatkan pekerjaan pemantauan
        AML](#get-/v3/aml-monitoring/jobs/-job_id-/) dengan `job_id` yang
        dikembalikan. Pengaktifan ditolak dengan `403` jika saldo organisasi
        tidak mencukupi estimasi biaya. Pengenal yang tidak cocok dengan apa pun
        dicantumkan di `unmatched` dan tidak pernah menggagalkan permintaan:
        pilihan yang tidak cocok dengan apa pun selesai sebagai pekerjaan kosong
        (`total` 0), konvensi yang sama dengan endpoint penghapusan batch.
      operationId: toggle_users_aml_monitoring
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - is_enabled
              description: >-
                Pilih pengguna dengan `vendor_data_list`,
                `didit_internal_id_list`, atau keduanya (kedua daftar
                digabungkan dengan OR). Maksimal 1000 pengidentifikasi per
                permintaan di kedua daftar.
              properties:
                is_enabled:
                  type: boolean
                  description: >-
                    true untuk mengaktifkan pemantauan, false untuk
                    menonaktifkannya.
                estimate_only:
                  type: boolean
                  default: false
                  description: >-
                    Jika true, mengembalikan estimasi biaya dan tidak melakukan
                    penulisan data - tanpa skrining, tanpa penagihan, tanpa
                    membuat job.
                vendor_data_list:
                  type: array
                  items:
                    type: string
                  description: >-
                    Pengenal Anda sendiri untuk pengguna yang akan dialihkan
                    statusnya, dicocokkan persis seperti yang dikirimkan.
                didit_internal_id_list:
                  type: array
                  items:
                    type: string
                    format: uuid
                  description: >-
                    ID internal Didit dari pengguna yang akan dialihkan
                    statusnya - `didit_internal_id` yang dikembalikan oleh
                    endpoint pembuatan, pengambilan, dan daftar.
            examples:
              Estimate first:
                summary: Pratinjau biaya tanpa menulis
                value:
                  is_enabled: true
                  estimate_only: true
                  vendor_data_list:
                    - user-123
                    - user-456
              Enable:
                summary: Aktifkan pemantauan untuk dua pengguna
                value:
                  is_enabled: true
                  vendor_data_list:
                    - user-123
                    - user-456
              Disable:
                summary: Nonaktifkan pemantauan berdasarkan id internal Didit
                value:
                  is_enabled: false
                  didit_internal_id_list:
                    - 3f1c0d3e-8f0a-4c2e-9a3d-9b1f5f4a2c11
      responses:
        '200':
          description: >-
            Estimasi (jika `estimate_only` bernilai true) atau pekerjaan yang
            telah selesai untuk pilihan yang diproses secara inline.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringToggleResult'
        '202':
          description: >-
            Pilihan yang lebih besar berjalan di latar belakang. Lakukan polling
            pada endpoint job dengan `job_id`; `results` akan terisi saat profil
            diproses.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLMonitoringJob'
        '400':
          description: >-
            Kesalahan validasi: `is_enabled` tidak ada, tidak ada selektor, atau
            lebih dari 1000 pengidentifikasi di kedua daftar.
        '401':
          description: Kunci API tidak ada atau tidak valid.
        '403':
          description: >-
            Saldo tidak mencukupi untuk mengaktifkan pemantauan untuk pilihan
            ini. Respons menyertakan `estimate` sehingga Anda dapat mengisi
            saldo dalam jumlah yang tepat.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  estimate:
                    type: object
                    description: >-
                      Pratinjau biaya. Dikembalikan secara langsung saat
                      estimate_only bernilai true (tidak ada yang ditulis).
                    properties:
                      users_total:
                        type: integer
                        description: Profil yang cocok dengan pilihan.
                      already_enabled:
                        type: integer
                        description: >-
                          Profil yang sudah dipantau (tidak ada tindakan saat
                          mengaktifkan; ini adalah profil yang dimatikan saat
                          dinonaktifkan).
                      with_existing_aml:
                        type: integer
                        description: >-
                          Profil yang skrining AML-nya yang sudah ada akan
                          dialihkan ke dipantau (tanpa skrining baru).
                      needing_screening:
                        type: integer
                        description: >-
                          Profil tanpa skrining AML apa pun yang akan diskrining
                          terlebih dahulu (ditagih sebagai skrining AML
                          reguler).
                      skipped_no_identity_data:
                        type: integer
                        description: >-
                          Profil yang tidak dapat diskrining karena data
                          identitas tidak tersedia.
                      skipped_blocked:
                        type: integer
                        description: >-
                          Pengguna terblokir yang akan dilewati (selalu 0 untuk
                          bisnis).
                      estimated_screening_cost_usd:
                        type: number
                        example: 0.2
                        description: Biaya sekali bayar untuk skrining baru.
                      estimated_annual_monitoring_cost_usd:
                        type: number
                        example: 0.07
                        description: >-
                          Biaya pemantauan tahunan dari profil yang akan
                          dipantau.
                      balance_sufficient:
                        type: boolean
                        description: >-
                          Apakah saldo organisasi mencukupi untuk skrining
                          ditambah tahun pertama pemantauan.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            'https://verification.didit.me/v3/users/aml-monitoring/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"is_enabled": true, "vendor_data_list": ["user-123", "user-456"]}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.users.set_aml_monitoring(
                is_enabled=True,
                estimate_only=True,
                vendor_data_list=["user-123", "user-456"],
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.users.setAmlMonitoring({
              is_enabled: true,
              estimate_only: true,
              vendor_data_list: ["user-123", "user-456"],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.SetAMLMonitoring(ctx, didit.UsersSetAMLMonitoringParams{\n\tIsEnabled:      true,\n\tEstimateOnly:   didit.Bool(true),\n\tVendorDataList: didit.Some([]string{\"user-123\", \"user-456\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.UsersSetAmlMonitoringParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.users().setAmlMonitoring(UsersSetAmlMonitoringParams.builder()
                    .isEnabled(true)
                    .estimateOnly(true)
                    .vendorDataList(List.of("user-123", "user-456"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->users->setAmlMonitoring([
                'is_enabled' => true,
                'estimate_only' => true,
                'vendor_data_list' => ['user-123', 'user-456'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.users.set_aml_monitoring(
              is_enabled: true,
              estimate_only: true,
              vendor_data_list: ["user-123", "user-456"]
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.Users.SetAmlMonitoringAsync(new
            UsersSetAmlMonitoringParams

            {
                IsEnabled = true,
                EstimateOnly = true,
                VendorDataList = new string[] { "user-123", "user-456" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    AMLMonitoringToggleResult:
      oneOf:
        - type: object
          required:
            - users_total
            - already_enabled
            - with_existing_aml
            - needing_screening
            - skipped_no_identity_data
            - skipped_blocked
            - estimated_screening_cost_usd
            - estimated_annual_monitoring_cost_usd
            - balance_sufficient
            - unmatched
          description: >-
            Pratinjau biaya. Dikembalikan secara langsung saat estimate_only
            bernilai true (tidak ada yang ditulis).
          properties:
            users_total:
              type: integer
              description: Profil yang cocok dengan pilihan.
            already_enabled:
              type: integer
              description: >-
                Profil yang sudah dipantau (tidak ada tindakan saat
                mengaktifkan; ini adalah profil yang dimatikan saat
                dinonaktifkan).
            with_existing_aml:
              type: integer
              description: >-
                Profil yang skrining AML-nya yang sudah ada akan dialihkan ke
                dipantau (tanpa skrining baru).
            needing_screening:
              type: integer
              description: >-
                Profil tanpa skrining AML apa pun yang akan diskrining terlebih
                dahulu (ditagih sebagai skrining AML reguler).
            skipped_no_identity_data:
              type: integer
              description: >-
                Profil yang tidak dapat diskrining karena data identitas tidak
                tersedia.
            skipped_blocked:
              type: integer
              description: Pengguna terblokir yang akan dilewati (selalu 0 untuk bisnis).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: Biaya sekali bayar untuk skrining baru.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: Biaya pemantauan tahunan dari profil yang akan dipantau.
            balance_sufficient:
              type: boolean
              description: >-
                Apakah saldo organisasi mencukupi untuk skrining ditambah tahun
                pertama pemantauan.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                Pengenal permintaan yang tidak cocok dengan profil apa pun di
                aplikasi ini, persis seperti yang dikirim.
        - type: object
          required:
            - job_id
            - status
            - is_enabled
            - target_type
            - total
            - processed
            - outcomes
            - results
            - error
            - created_at
            - completed_at
            - estimate
            - unmatched
          properties:
            job_id:
              type: string
              format: uuid
            status:
              type: string
              enum:
                - PENDING
                - PROCESSING
                - COMPLETED
                - FAILED
            is_enabled:
              type: boolean
              description: >-
                true saat pekerjaan mengaktifkan pemantauan, false saat
                menonaktifkannya.
            target_type:
              type: string
              enum:
                - user
                - business
              description: Famili profil mana yang diaktif-nonaktifkan oleh tugas ini.
            total:
              type: integer
              description: Profil yang diproses oleh tugas.
            processed:
              type: integer
              description: Profil yang diproses sejauh ini.
            outcomes:
              type: object
              description: >-
                Penghitung hasil per rekaman. Setiap profil yang dipilih
                dipetakan ke tepat satu penghitung; tidak ada yang dilewati
                secara diam-diam.
              properties:
                enabled:
                  type: integer
                  description: Pemantauan diaktifkan pada skrining AML yang ada.
                screened_and_enabled:
                  type: integer
                  description: >-
                    Skrining AML baru telah dibuat (ditagihkan) dan pemantauan
                    diaktifkan untuk skrining tersebut.
                already_enabled:
                  type: integer
                  description: >-
                    Pemantauan sudah aktif sebelumnya; tidak ada yang berubah
                    dan tidak ada yang ditagihkan.
                disabled:
                  type: integer
                  description: Pemantauan dinonaktifkan di semua skrining AML profil.
                skipped_no_identity_data:
                  type: integer
                  description: >-
                    Dilewati: profil tidak memiliki nama lengkap, tanggal lahir,
                    dan negara (pengguna) atau nama (bisnis) yang diperlukan
                    untuk diskrining.
                skipped_blocked:
                  type: integer
                  description: 'Dilewati: pengguna diblokir.'
                skipped_sandbox:
                  type: integer
                  description: 'Dilewati: aplikasi sandbox, tidak ada skrining yang dibuat.'
                failed_provider:
                  type: integer
                  description: Skrining tidak dapat diselesaikan; coba lagi nanti.
                failed_insufficient_balance:
                  type: integer
                  description: Saldo habis saat pekerjaan sedang berjalan.
            results:
              type: array
              description: >-
                Satu entri per profil yang diproses, sesuai urutan pemrosesan.
                Bertambah saat tugas berjalan; lengkap setelah statusnya
                COMPLETED. Dicatat untuk tugas yang dimulai melalui API.
              items:
                type: object
                properties:
                  didit_internal_id:
                    type: string
                    format: uuid
                    description: ID internal Didit untuk profil tersebut.
                  vendor_data:
                    type: string
                    nullable: true
                    description: Pengenal Anda sendiri untuk profil tersebut.
                  outcome:
                    type: string
                    enum:
                      - enabled
                      - screened_and_enabled
                      - already_enabled
                      - disabled
                      - skipped_no_identity_data
                      - skipped_blocked
                      - skipped_sandbox
                      - failed_provider
                      - failed_insufficient_balance
            error:
              type: string
              nullable: true
              description: >-
                Pesan kegagalan umum saat status FAILED; penyebab terperinci
                disimpan di sisi platform.
            created_at:
              type: string
              format: date-time
            completed_at:
              type: string
              format: date-time
              nullable: true
            estimate:
              type: object
              description: >-
                Pratinjau biaya. Dikembalikan secara langsung saat estimate_only
                bernilai true (tidak ada yang ditulis).
              properties:
                users_total:
                  type: integer
                  description: Profil yang cocok dengan pilihan.
                already_enabled:
                  type: integer
                  description: >-
                    Profil yang sudah dipantau (tidak ada tindakan saat
                    mengaktifkan; ini adalah profil yang dimatikan saat
                    dinonaktifkan).
                with_existing_aml:
                  type: integer
                  description: >-
                    Profil yang skrining AML-nya yang sudah ada akan dialihkan
                    ke dipantau (tanpa skrining baru).
                needing_screening:
                  type: integer
                  description: >-
                    Profil tanpa skrining AML apa pun yang akan diskrining
                    terlebih dahulu (ditagih sebagai skrining AML reguler).
                skipped_no_identity_data:
                  type: integer
                  description: >-
                    Profil yang tidak dapat diskrining karena data identitas
                    tidak tersedia.
                skipped_blocked:
                  type: integer
                  description: >-
                    Pengguna terblokir yang akan dilewati (selalu 0 untuk
                    bisnis).
                estimated_screening_cost_usd:
                  type: number
                  example: 0.2
                  description: Biaya sekali bayar untuk skrining baru.
                estimated_annual_monitoring_cost_usd:
                  type: number
                  example: 0.07
                  description: Biaya pemantauan tahunan dari profil yang akan dipantau.
                balance_sufficient:
                  type: boolean
                  description: >-
                    Apakah saldo organisasi mencukupi untuk skrining ditambah
                    tahun pertama pemantauan.
            unmatched:
              type: array
              items:
                type: string
              description: >-
                Pengenal permintaan yang tidak cocok dengan profil apa pun di
                aplikasi ini, persis seperti yang dikirim. Pengenal ini bukan
                bagian dari pekerjaan.
    AMLMonitoringJob:
      type: object
      properties:
        job_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
            - COMPLETED
            - FAILED
        is_enabled:
          type: boolean
          description: >-
            true saat pekerjaan mengaktifkan pemantauan, false saat
            menonaktifkannya.
        target_type:
          type: string
          enum:
            - user
            - business
          description: Famili profil mana yang diaktif-nonaktifkan oleh tugas ini.
        total:
          type: integer
          description: Profil yang diproses oleh tugas.
        processed:
          type: integer
          description: Profil yang diproses sejauh ini.
        outcomes:
          type: object
          description: >-
            Penghitung hasil per rekaman. Setiap profil yang dipilih dipetakan
            ke tepat satu penghitung; tidak ada yang dilewati secara diam-diam.
          properties:
            enabled:
              type: integer
              description: Pemantauan diaktifkan pada skrining AML yang ada.
            screened_and_enabled:
              type: integer
              description: >-
                Skrining AML baru telah dibuat (ditagihkan) dan pemantauan
                diaktifkan untuk skrining tersebut.
            already_enabled:
              type: integer
              description: >-
                Pemantauan sudah aktif sebelumnya; tidak ada yang berubah dan
                tidak ada yang ditagihkan.
            disabled:
              type: integer
              description: Pemantauan dinonaktifkan di semua skrining AML profil.
            skipped_no_identity_data:
              type: integer
              description: >-
                Dilewati: profil tidak memiliki nama lengkap, tanggal lahir, dan
                negara (pengguna) atau nama (bisnis) yang diperlukan untuk
                diskrining.
            skipped_blocked:
              type: integer
              description: 'Dilewati: pengguna diblokir.'
            skipped_sandbox:
              type: integer
              description: 'Dilewati: aplikasi sandbox, tidak ada skrining yang dibuat.'
            failed_provider:
              type: integer
              description: Skrining tidak dapat diselesaikan; coba lagi nanti.
            failed_insufficient_balance:
              type: integer
              description: Saldo habis saat pekerjaan sedang berjalan.
        results:
          type: array
          description: >-
            Satu entri per profil yang diproses, sesuai urutan pemrosesan.
            Bertambah saat tugas berjalan; lengkap setelah statusnya COMPLETED.
            Dicatat untuk tugas yang dimulai melalui API.
          items:
            type: object
            properties:
              didit_internal_id:
                type: string
                format: uuid
                description: ID internal Didit untuk profil tersebut.
              vendor_data:
                type: string
                nullable: true
                description: Pengenal Anda sendiri untuk profil tersebut.
              outcome:
                type: string
                enum:
                  - enabled
                  - screened_and_enabled
                  - already_enabled
                  - disabled
                  - skipped_no_identity_data
                  - skipped_blocked
                  - skipped_sandbox
                  - failed_provider
                  - failed_insufficient_balance
        error:
          type: string
          nullable: true
          description: >-
            Pesan kegagalan umum saat status FAILED; penyebab terperinci
            disimpan di sisi platform.
        created_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
        estimate:
          type: object
          description: >-
            Pratinjau biaya. Dikembalikan secara langsung saat estimate_only
            bernilai true (tidak ada yang ditulis).
          properties:
            users_total:
              type: integer
              description: Profil yang cocok dengan pilihan.
            already_enabled:
              type: integer
              description: >-
                Profil yang sudah dipantau (tidak ada tindakan saat
                mengaktifkan; ini adalah profil yang dimatikan saat
                dinonaktifkan).
            with_existing_aml:
              type: integer
              description: >-
                Profil yang skrining AML-nya yang sudah ada akan dialihkan ke
                dipantau (tanpa skrining baru).
            needing_screening:
              type: integer
              description: >-
                Profil tanpa skrining AML apa pun yang akan diskrining terlebih
                dahulu (ditagih sebagai skrining AML reguler).
            skipped_no_identity_data:
              type: integer
              description: >-
                Profil yang tidak dapat diskrining karena data identitas tidak
                tersedia.
            skipped_blocked:
              type: integer
              description: Pengguna terblokir yang akan dilewati (selalu 0 untuk bisnis).
            estimated_screening_cost_usd:
              type: number
              example: 0.2
              description: Biaya sekali bayar untuk skrining baru.
            estimated_annual_monitoring_cost_usd:
              type: number
              example: 0.07
              description: Biaya pemantauan tahunan dari profil yang akan dipantau.
            balance_sufficient:
              type: boolean
              description: >-
                Apakah saldo organisasi mencukupi untuk skrining ditambah tahun
                pertama pemantauan.
        unmatched:
          type: array
          items:
            type: string
          description: >-
            Pengenal permintaan yang tidak cocok dengan profil apa pun di
            aplikasi ini, persis seperti yang dikirim. Pengenal ini bukan bagian
            dari pekerjaan.
  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.