> ## 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 Pemantauan AML untuk Bisnis

> Aktifkan atau nonaktifkan Pemantauan AML Berkelanjutan untuk banyak bisnis sekaligus lewat Didit: estimasi biaya, job, dan hasil per bisnis.



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



      
      

\<pre>

\`Goal: Enable or disable ongoing AML monitoring for one or many Didit Business (KYB) 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-business outcome.

Endpoint: POST https://verification.didit.me/v3/businesses/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 business: a company that verified several times is monitored and billed once. Disabling turns monitoring off across all of the business's screenings.
\- Businesses without any AML screening are screened first (billed as a regular AML screening) using their legal name (or display name) and country; a business with no name is reported as skipped_no_identity_data.
\- 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/businesses/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "estimate_only": true, "vendor_data_list": ["company-123", "company-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": []
}
(users_total counts the selected businesses; the estimate shape is shared with the users endpoint.)

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

Response 200 (20 businesses 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": "business",
"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": "company-123", "outcome": "enabled"},
\{"didit_internal_id": "<uuid>", "vendor_data": "company-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 businesses are processed.

Per-business outcome values: enabled, screened_and_enabled, already_enabled, disabled, skipped_no_identity_data, skipped_sandbox, failed_provider, failed_insufficient_balance (skipped_blocked is always 0 for businesses).

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 businesses that are already monitored, with no second screening and no second bill. Disabling an unmonitored business 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 bisnis](https://docs.didit.me/id/entities/businesses/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 bisnis yang dipilih, berapa yang memerlukan skrining AML baru, biaya skrining sekali bayar, dan biaya pemantauan tahunan. Uji coba tidak menulis apa pun. Estimasi menggunakan nama kolom yang sama dengan endpoint pengguna, jadi `users_total` adalah jumlah bisnis yang dipilih.## Cara pemilihan diproses- **Satu skrining yang dipantau per bisnis.** Perusahaan yang telah diverifikasi beberapa kali dipantau dan ditagih satu kali. Menonaktifkan pemantauan akan mematikan pemantauan di semua skrining milik bisnis tersebut.
- **Bisnis tanpa skrining AML akan diskrining terlebih dahulu.** Didit membuat verifikasi AML baru untuk bisnis tersebut (dapat dilihat di tab **Verifikasi** bisnis), ditagih sebagai skrining AML biasa, dan mengaktifkan pemantauan padanya. Skrining menggunakan nama legal bisnis (atau nama tampilan) dan negaranya. Bisnis yang tidak memiliki nama sama sekali dilaporkan sebagai `skipped_no_identity_data` dan tidak dihilangkan secara diam-diam.
- **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 sehingga Anda tahu berapa jumlah yang perlu diisi saldo.
- **Perpanjangan tahunan.** Bisnis yang baru dipantau ditagih harga pemantauan tahunan pada tanggal perpanjangan berikutnya, yaitu tanggal yang ditampilkan Console di kolom **Pemantauan berkelanjutan**. Menonaktifkan pemantauan akan menghentikan perpanjangan; tidak ada pengembalian dana untuk periode yang sudah ditagih.## Pemilihan dan ukuran batchPilih bisnis dengan `vendor_data_list`, `didit_internal_id_list`, atau keduanya; kedua daftar digabungkan dengan OR. Satu permintaan menerima paling banyak **1000 pengenal** dari kedua daftar. Pengenal yang tidak cocok dengan bisnis mana pun di aplikasi Anda dikembalikan di `unmatched` persis seperti yang dikirim, dan tidak pernah menyebabkan permintaan gagal: pilihan yang tidak cocok dengan apa pun akan selesai sebagai tugas kosong (`total: 0`) dengan semua pengenal tercantum, sesuai dengan konvensi endpoint penghapusan batch.## Sinkron atau di latar belakangPilihan **20 bisnis atau kurang** diproses secara sinkron dan panggilan mengembalikan `200` beserta tugas yang sudah selesai. Pilihan yang lebih besar mengembalikan `202` dengan tugas `PENDING`; lakukan polling pada [Dapatkan Tugas Pemantauan AML](https://docs.didit.me/id/management-api/aml-monitoring/get-job.md) hingga `status` berubah menjadi `COMPLETED` atau `FAILED`. Dalam kedua kasus, tugas memuat satu entri `results` untuk setiap bisnis beserta hasilnya di kolom `outcome`.| `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 semua skrining milik bisnis. |
| `skipped_no_identity_data` | Bisnis tidak memiliki nama legal atau nama tampilan untuk diskrining. |
| `skipped_sandbox` | Aplikasi sandbox; tidak ada skrining yang dibuat. |
| `failed_provider` | Skrining tidak dapat diselesaikan. Coba lagi nanti. |
| `failed_insufficient_balance` | Saldo habis saat tugas sedang berjalan. |## WebhookMengubah pemantauan tidak mengirimkan webhook tersendiri. Setelah pemantauan aktif, skrining ulang tetap mengirimkan event `status.updated` dan `data.updated` seperti yang dijelaskan di [Pemantauan AML Berkelanjutan](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md).## IzinSetiap kunci API aktif milik aplikasi dapat memanggil endpoint ini. Kunci API Didit bersifat **terbatas pada aplikasi, bukan berdasarkan peran**: [peran dan izin](https://docs.didit.me/id/console/roles-permissions.md) di Console menentukan apa yang dapat dilakukan *seseorang* di Console, dan aturan tersebut tidak dievaluasi untuk lalu lintas Management API.## Terkait- [Dapatkan Tugas Pemantauan AML](https://docs.didit.me/id/management-api/aml-monitoring/get-job.md)
- [Aktifkan atau Nonaktifkan Pemantauan AML untuk Pengguna](https://docs.didit.me/id/management-api/aml-monitoring/toggle-users.md)
- [Pemantauan AML Berkelanjutan](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md)
- [Skrining AML bisnis](https://docs.didit.me/id/business-verification/aml.md)
- [Daftar Bisnis](https://docs.didit.me/id/management-api/businesses/list.md)


## OpenAPI

````yaml id/openapi-25.json POST /v3/businesses/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/businesses/aml-monitoring/:
    post:
      tags:
        - AML Ongoing Monitoring
      summary: Aktifkan atau nonaktifkan pemantauan AML berkelanjutan untuk bisnis
      description: >-
        Mengaktifkan atau menonaktifkan pemantauan AML berkelanjutan untuk
        bisnis yang dipilih, dengan semantik yang sama seperti Business Console.
        Tepat satu skrining AML yang dipantau disimpan per bisnis, sehingga
        profil yang diverifikasi beberapa kali akan dipantau dan ditagih sekali;
        menonaktifkannya akan mematikan pemantauan di seluruh skrining profil
        tersebut. Bisnis tanpa skrining AML apa pun akan diskrining terlebih
        dahulu (ditagih sebagai skrining AML reguler) jika memiliki nama resmi
        atau nama tampilan yang diperlukan; jika tidak, bisnis 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_businesses_aml_monitoring
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - is_enabled
              description: >-
                Pilih bisnis 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 bisnis 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 bisnis 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:
                    - company-123
                    - company-456
              Enable:
                summary: Aktifkan pemantauan untuk dua bisnis
                value:
                  is_enabled: true
                  vendor_data_list:
                    - company-123
                    - company-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/businesses/aml-monitoring/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"is_enabled": true, "vendor_data_list": ["company-123", "company-456"]}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.businesses.set_aml_monitoring(
                is_enabled=True,
                estimate_only=True,
                vendor_data_list=["company-123", "company-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.businesses.setAmlMonitoring({
              is_enabled: true,
              estimate_only: true,
              vendor_data_list: ["company-123", "company-456"],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Businesses.SetAMLMonitoring(ctx, didit.BusinessesSetAMLMonitoringParams{\n\tIsEnabled:      true,\n\tEstimateOnly:   didit.Bool(true),\n\tVendorDataList: didit.Some([]string{\"company-123\", \"company-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.BusinessesSetAmlMonitoringParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.businesses().setAmlMonitoring(BusinessesSetAmlMonitoringParams.builder()
                    .isEnabled(true)
                    .estimateOnly(true)
                    .vendorDataList(List.of("company-123", "company-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->businesses->setAmlMonitoring([
                'is_enabled' => true,
                'estimate_only' => true,
                'vendor_data_list' => ['company-123', 'company-456'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.businesses.set_aml_monitoring(
              is_enabled: true,
              estimate_only: true,
              vendor_data_list: ["company-123", "company-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.Businesses.SetAmlMonitoringAsync(new
            BusinessesSetAmlMonitoringParams

            {
                IsEnabled = true,
                EstimateOnly = true,
                VendorDataList = new string[] { "company-123", "company-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.