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

# Manajemen Aturan Pemantauan Transaksi via API dan MCP

> Buat, sesuaikan, backtest, dan migrasikan aturan KYT di Didit lewat Management API dan MCP, dengan alur buat - backtest - aktifkan.

Semua kemampuan terkait aturan di Konsol Bisnis juga tersedia secara terprogram: melalui **Management API** dengan kunci API aplikasi Anda, dan melalui **Didit MCP** untuk agen AI yang bertindak sebagai pengguna konsol yang telah login. Gunakan keduanya untuk mengelola aturan dari kode, menyimpan kumpulan aturan di kontrol versi, atau membiarkan asisten AI membuat dan memigrasikan aturan untuk Anda.

## Kapan menggunakan antarmuka yang mana

| Antarmuka | Autentikasi | Paling cocok untuk |
| - | - | - |
| **Konsol Bisnis** | Login konsol | Peninjauan manual setiap perubahan; pembuatan aturan secara visual dan backtesting |
| **Management API** | `x-api-key` | Otomasi dari backend Anda, kumpulan aturan dalam kode, penerapan aturan yang dikelola CI |
| **Didit MCP** | Masuk dengan Didit (OAuth) | Asisten dan agen AI: Copilot konsol Didit, Claude, Cursor, atau klien MCP apa pun |

## Endpoint

| Endpoint | Fungsi |
| - | - |
| [`GET /v3/transactions/rules/`](https://docs.didit.me/id/management-api/transactions/rules-list) | Mencantumkan aturan dengan filter dan pengurutan berdasarkan performa |
| [`POST /v3/transactions/rules/`](https://docs.didit.me/id/management-api/transactions/rules-create) | Membuat aturan kustom |
| [`GET /v3/transactions/rules/{rule_uuid}/`](https://docs.didit.me/id/management-api/transactions/rules-get) | Membaca satu aturan beserta penghitung eksekusinya |
| [`PATCH /v3/transactions/rules/{rule_uuid}/`](https://docs.didit.me/id/management-api/transactions/rules-update) | Memperbarui aturan kustom; mengubah mode aturan mana pun |
| [`DELETE /v3/transactions/rules/{rule_uuid}/`](https://docs.didit.me/id/management-api/transactions/rules-delete) | Menghapus aturan kustom (permanen) |
| [`POST /v3/transactions/rules/backtest/`](https://docs.didit.me/id/management-api/transactions/rules-backtest) | Mengevaluasi aturan hipotetis terhadap riwayat Anda |
| [`GET /v3/transactions/rules/library/`](https://docs.didit.me/id/management-api/transactions/rules-library) | Menelusuri pustaka preset 150+ beserta status instalasinya |
| [`POST /v3/transactions/rules/install/`](https://docs.didit.me/id/management-api/transactions/rules-install) | Memasang preset berdasarkan kunci, paket, atau irisan keduanya |
| [`DELETE /v3/transactions/rules/install/`](https://docs.didit.me/id/management-api/transactions/rules-uninstall) | Menghapus instalasi preset berdasarkan kunci, paket, atau irisan keduanya |

Tool MCP yang sesuai adalah `didit_transaction_rule_list`, `didit_transaction_rule_get`, `didit_transaction_rule_create`, `didit_transaction_rule_update`, `didit_transaction_rule_delete`, `didit_transaction_rule_backtest`, `didit_transaction_rule_library_list`, `didit_transaction_rule_install`, dan `didit_transaction_rule_uninstall` - lihat [Referensi tool MCP](https://docs.didit.me/id/integration/mcp/tools.md).

Skema lengkap - katalog kolom, seluruh 19 operator kondisi, jendela velocity, kondisi berkelompok, dan keenam jenis tindakan - didokumentasikan di halaman [Aturan & Penilaian](https://docs.didit.me/id/transaction-monitoring/rules.md) dan disematkan dalam referensi API.

## Buat, backtest, aktifkan

Pola peluncuran yang aman untuk setiap aturan baru:

**1. Buat aturan dalam mode TEST**

```bash theme={null}
curl -X POST 'https://verification.didit.me/v3/transactions/rules/' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Structuring - inbound (custom)",
    "description": "20+ inbound EUR transfers, all under 10,000 EUR, 30 days",
    "category": "finance",
    "mode": "TEST",
    "evaluation_mode": "ALL",
    "scope": {
      "transaction_types": ["finance"],
      "directions": ["INBOUND"]
    },
    "conditions": [
      {"field": "currency", "operator": "eq", "value": "EUR"},
      {"field": "amount",
       "operator": "lt", "value": 10000}
    ],
    "aggregation": [
      {
        "metric": "count", "operator": "gte", "value": 20,
        "window": "30d",
        "filters": {"direction": "INBOUND",
                    "transaction_type": "finance",
                    "currency": "EUR",
                    "subject_vendor_data": "__current__"}
      },
      {
        "metric": "max", "field": "amount",
        "operator": "lt", "value": 10000, "window": "30d",
        "filters": {"direction": "INBOUND",
                    "transaction_type": "finance",
                    "currency": "EUR",
                    "subject_vendor_data": "__current__"}
      }
    ],
    "actions": [{"type": "add_score", "value": 35}]
  }'
```

Baca payload dalam dua bagian. `scope` dan `conditions` menjelaskan **transaksi yang sedang dievaluasi**: transaksi keuangan masuk dalam EUR dengan `amount` mentah di bawah 10.000. Entri `aggregation` menjelaskan **jendela 30 hari untuk subjek yang sama**: minimal 20 transaksi keuangan EUR masuk, dan tidak satu pun dari transaksi tersebut bernilai 10.000 EUR atau lebih. Kedua entri aggregation harus terpenuhi, apa pun nilai `evaluation_mode` - pengaturan itu hanya mengatur kondisi.

Contoh ini menggunakan `amount` mentah dan mengunci `currency` ke EUR di kedua bagian, sehingga tidak bergantung pada normalisasi FX. Untuk melakukan backtest pada data uji sandbox, kirimkan minimal 20 transaksi keuangan EUR masuk untuk subjek yang sama dalam 30 hari, masing-masing dengan `amount` di bawah 10.000. Baik `preferred_currency_amount` maupun `amount_in_default_currency` tidak wajib. Proses ingestion di sandbox menyimpan transaksi ini; jalankan backtest secara eksplisit.

Aturan `TEST` dievaluasi pada setiap transaksi baru dan mencatat apa yang akan cocok dengan aturan tersebut, tetapi tidak pernah mengubah skor atau status transaksi.

> [!NOTE]
>
> **Filter aggregation bukan kondisi.** Kondisi hanya membaca transaksi yang sedang dievaluasi; filter agregasi hanya mempersempit jendela historis, dan filter ini membandingkan berdasarkan kesamaan atau keanggotaan dalam daftar - tidak ada filter `lt`, sehingga Anda tidak dapat menghitung *hanya transfer di bawah 10.000*.
>
> Entri `max ... lt 10000` adalah cara yang didukung untuk memberi batas atas pada jendela: entri ini mensyaratkan **setiap** transaksi dalam jendela bernilai di bawah 10.000, yang lebih ketat daripada hanya menghitung transaksi kecil - satu transfer 12.000 di antara dua puluh transaksi akan mencegah aturan terpicu. Hapus entri itu jika Anda lebih memilih agar jumlahnya berdiri sendiri, lalu sebutkan hal itu di judul: tanpa entri tersebut, aturan menghitung transfer masuk dengan nilai berapa pun, dan sembilan belas transfer 50.000 yang diikuti satu transfer kecil akan cocok dengan aturan ini.

**2. Backtest terhadap riwayat Anda**

```bash theme={null}
curl -X POST 'https://verification.didit.me/v3/transactions/rules/backtest/' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "conditions": [
      {"field": "currency", "operator": "eq", "value": "EUR"},
      {"field": "amount",
       "operator": "lt", "value": 10000}
    ],
    "aggregation": [
      {
        "metric": "count", "operator": "gte", "value": 20,
        "window": "30d",
        "filters": {"direction": "INBOUND",
                    "transaction_type": "finance",
                    "currency": "EUR",
                    "subject_vendor_data": "__current__"}
      },
      {
        "metric": "max", "field": "amount",
        "operator": "lt", "value": 10000, "window": "30d",
        "filters": {"direction": "INBOUND",
                    "transaction_type": "finance",
                    "currency": "EUR",
                    "subject_vendor_data": "__current__"}
      }
    ],
    "evaluation_mode": "ALL",
    "scope": {
      "transaction_types": ["finance"],
      "directions": ["INBOUND"]
    },
    "period_days": 90
  }'
```

```json theme={null}
{ "evaluated": 4820, "matched": 12, "affected_entities": 4, "period_days": 90 }
```

Jumlah `matched` yang tidak wajar berarti ambang batas perlu disesuaikan sebelum aturan dapat diterapkan.

> [!WARNING]
>
> Jalankan backtest pada konfigurasi **tepat** yang akan Anda aktifkan: `conditions`, `aggregation`, `evaluation_mode`, dan `scope` yang sama. `conditions`, `aggregation`, dan `scope` yang dihilangkan tidak menambahkan batasan sendiri; menghapus scope dapat menyertakan arah atau jenis transaksi yang dilewati oleh aturan tersimpan. `evaluation_mode` yang dihilangkan memiliki nilai default `ALL`, sehingga menghilangkannya pada aturan `ANY` dapat mengurangi kecocokan. `period_days` yang dihilangkan memiliki nilai default 90 hari; nilai ini tidak memilih riwayat tanpa batas.

**3. Aktifkan**

```bash theme={null}
curl -X PATCH 'https://verification.didit.me/v3/transactions/rules/RULE_UUID/' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"mode": "ACTIVE"}'
```

Aturan berlaku untuk seluruh transaksi baru pada aplikasi **produksi** secara langsung.

> [!WARNING]
>
> Aplikasi sandbox tidak pernah mengevaluasi aturan. Transaksi sandbox hanya disimpan dan tidak lebih dari itu, sehingga mengaktifkan aturan pada aplikasi sandbox tidak mengubah apa pun yang dapat Anda amati. Backtest adalah cara yang didukung untuk menguji aturan sebelum aturan berjalan di produksi - lihat [Pemantauan Transaksi di sandbox](https://docs.didit.me/id/integration/sandbox-testing.md#pemantauan-transaksi-di-sandbox).

## Memigrasikan aturan dari penyedia lain

Karena pembuatan aturan adalah panggilan API biasa dengan skema yang terdokumentasi lengkap, asisten AI dapat menerjemahkan ekspor aturan dari penyedia lain menjadi aturan Didit untuk Anda.

1. **Ekspor** aturan Anda dari penyedia saat ini. Sebagian besar alat mengekspor ke CSV atau Excel.
2. **Unggah file** ke asisten konsol Didit, atau ke agen apa pun yang terhubung ke MCP, seperti Claude dengan [Didit MCP](https://docs.didit.me/id/integration/mcp/overview.md) terpasang. Spreadsheet dikonversi menjadi teks secara otomatis.
3. Asisten **memetakan setiap baris** ke skema Didit (kondisi, jendela velocity, tindakan) dan menampilkan pemetaannya, termasuk menyoroti apa pun yang tidak memiliki padanan di Didit, sebelum membuat apa pun.
4. Setelah Anda menyetujui, asisten **membuat aturan dalam mode TEST**, menguji balik aturan tersebut terhadap riwayat transaksi Anda sendiri, dan melaporkan baris yang dibuat / gagal / tidak dapat dipetakan.
5. **Tinjau angkanya dan aktifkan** aturan yang tampak benar, dari konsol atau dengan `PATCH {"mode": "ACTIVE"}`.

Ekspor dari penyedia seperti ini:

```csv theme={null}
Rule Name,Condition,Threshold,Window (days),Action
Structuring - Small Transfers,count of outbound transfers under amount,20 transfers under 10000 EUR,30,Flag for review
High Value Wire,single transaction amount,> 50000 USD,,Decline
```

menjadi aturan seperti ini:

```json theme={null}
{
  "title": "Structuring - Small Transfers",
  "description": "20+ outbound EUR transfers, all under 10,000 EUR, 30 days",
  "category": "finance",
  "mode": "TEST",
  "evaluation_mode": "ALL",
  "scope": {
    "transaction_types": ["finance"],
    "directions": ["OUTBOUND"]
  },
  "conditions": [
    {"field": "currency", "operator": "eq", "value": "EUR"},
    {"field": "amount", "operator": "lt", "value": 10000}
  ],
  "aggregation": [
    {
      "metric": "count", "operator": "gte", "value": 20,
      "window": "30d",
      "filters": {"direction": "OUTBOUND",
                  "transaction_type": "finance",
                  "currency": "EUR",
                  "subject_vendor_data": "__current__"}
    },
    {
      "metric": "max", "field": "amount",
      "operator": "lt", "value": 10000, "window": "30d",
      "filters": {"direction": "OUTBOUND",
                  "transaction_type": "finance",
                  "currency": "EUR",
                  "subject_vendor_data": "__current__"}
    }
  ],
  "actions": [
    {"type": "add_score", "value": 35},
    {"type": "change_status", "value": "IN_REVIEW"}
  ]
}
```

Baris CSV menyebutkan arah dan mata uang, sehingga kedua bagian aturan membawa keduanya: `scope` dan `conditions` mengunci transaksi yang dievaluasi menjadi transfer keluar dalam EUR di bawah 10,000, dan filter agregasi mengunci jendela 30 hari ke transfer keluar dalam EUR dari subjek yang sama. `amount` mentah hanya dapat dibandingkan di dalam satu mata uang, jadi pertahankan mata uang yang terkunci seperti di atas. Batas atas lintas mata uang memerlukan jumlah yang dinormalisasi untuk setiap transaksi dalam jendela. Beralih ke `preferred_currency_amount` saja tidak menjamin ketersediaan: jumlah yang dinormalisasi historis yang hilang dapat diperlakukan sebagai nol oleh agregasi numerik.

Entri `max`-lah yang menjaga jendela tetap di bawah 10,000 EUR, karena filter agregasi tidak dapat mengekspresikan *di bawah 10,000*. Lihat catatan pada [langkah pembuatan](#buat-backtest-aktifkan) di atas untuk kompromi yang diambil. Apa pun yang tidak dapat diekspresikan dengan tepat oleh skema sebaiknya disebutkan secara eksplisit dalam `description` aturan, bukan didekati secara diam-diam.

> [!TIP]
>
> Sebelum membuat ulang aturan penyedia sebagai kustom, periksa [pustaka aturan](https://docs.didit.me/id/management-api/transactions/rules-library.md). Didit menyediakan 150+ preset yang mencakup tipologi umum (penstrukturan transaksi, frekuensi transaksi, paparan sanksi, penggunaan ulang perangkat, risiko kripto), dan memasang preset hanya memerlukan satu panggilan.

## Kesalahan validasi sengaja dibuat presisi

Endpoint pembuatan dan pembaruan memvalidasi nilai kondisi, agregasi, dan scope sesuai persis dengan yang diterima mesin aturan. Operator atau metrik yang tidak dikenal, jendela yang tidak valid (`"30days"` alih-alih `"30d"`), arah scope yang tidak valid, `contains_any` tanpa daftar, `fuzzy_match` tanpa `score`, dan `change_status` ke `AWAITING_USER` tanpa `workflow_id` semuanya mengembalikan `400` yang menyebutkan indeks dan masalahnya, alih-alih menyimpan aturan yang diam-diam tidak pernah cocok. Agen dan skrip sebaiknya membaca isi error dan memperbaiki payload. Kunci scope tambahan selain `transaction_types`, `directions`, dan `action_types` tetap disimpan tetapi diabaikan oleh mesin, sesuai dengan cara Business Console selalu menyimpannya.

## Langkah selanjutnya

> [card] [Aturan & Penilaian](https://docs.didit.me/id/transaction-monitoring/rules.md)
>
> Skema aturan lengkap: kolom, operator, jendela velocity, dan tindakan.

> [card] [API Pembuatan Aturan](https://docs.didit.me/id/management-api/transactions/rules-create.md)
>
> Referensi endpoint dengan skema permintaan dan respons.

> [card] [Pustaka aturan](https://docs.didit.me/id/transaction-monitoring/rules-library.md)
>
> Katalog 150+ preset beserta paketnya.

> [card] [Ringkasan MCP](https://docs.didit.me/id/integration/mcp/overview.md)
>
> Hubungkan agen AI ke ruang kerja Didit Anda.


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