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

# Pengiriman Event SDK - Penangkapan Event di Sisi Klien

> Didit: kirim event login, gameplay, dan sesi dari perangkat dengan kredensial terbatas. Pengikatan subjek & konteks jaringan dijalankan di server.

Sebagian besar [event](https://docs.didit.me/id/transaction-monitoring/events.md) yang penting untuk deteksi penipuan terjadi di perangkat: proses login, sesi, putaran gameplay, dan telemetri waktu yang membedakan pengguna manusia dari skrip. Jalur perangkat mengirim event tersebut tanpa menaruh kunci API di browser.

Backend Anda membuat kredensial berumur pendek yang terbatas pada satu pengguna. Aplikasi kemudian mengirim event menggunakan kredensial tersebut.

## Alur

**1. Buat kredensial pemantauan**

Backend Anda memanggil `POST /v3/events/sdk-token/` dengan kunci API Anda dan `vendor_data` pengguna.

**2. Kirim dari perangkat**

Aplikasi mengirim ke `POST /v1/events/` (atau `POST /v1/events/batch/`) dengan header `X-Monitoring-Token`.

**3. Aturan berjalan seperti biasa**

Event diperkaya, dikumpulkan, dan dievaluasi oleh [aturan](https://docs.didit.me/id/transaction-monitoring/event-rules.md) yang sama persis dengan event yang dikirim dari server.

## Membuat kredensial

> [!NOTE]
>
> Pembuatan kredensial memerlukan [ingesti event](https://docs.didit.me/id/transaction-monitoring/events.md) yang diaktifkan untuk aplikasi. Selama fitur ini nonaktif, endpoint ini membalas `403` dengan `{"code": "event_monitoring_disabled"}`, alih-alih memberikan kredensial yang tidak akan pernah bisa menulis apa pun.

```bash theme={null}
curl -X POST https://verification.didit.me/v3/events/sdk-token/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "vendor_data": "user_391",
    "allowed_event_categories": ["auth", "session", "gameplay"],
    "ttl_seconds": 900,
    "max_uses": 1000,
    "bind_to_origin": "https://operator.example"
  }'
```

```json theme={null}
{
  "monitoring_token": "…",
  "expires_at": "2026-08-31T21:00:00Z",
  "allowed_event_categories": ["auth", "session", "gameplay"],
  "max_uses": 1000,
  "bind_to_origin": "https://operator.example"
}
```

| Kolom | Default | Keterangan |
| - | - | - |
| `vendor_data` | wajib | Subjek yang terkait dengan setiap event yang dikirim menggunakan kredensial ini. |
| `entity_type` | `individual` | `individual` atau `company`. |
| `allowed_event_categories` | semua | Mempersempit apa yang dapat ditulis oleh kredensial yang bocor. |
| `ttl_seconds` | 900 | 60 - 86400. |
| `max_uses` | 1000 | Satu penggunaan per **event**, bukan per permintaan. |
| `bind_to_origin` | tidak ada | Jika diatur, `Origin` browser harus cocok persis. |

## Mengirim event

```bash theme={null}
curl -X POST https://verification.didit.me/v1/events/ \
  -H "X-Monitoring-Token: THE_MINTED_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "event_id": "session-abc-login-1",
    "event_category": "auth",
    "action_type": "login",
    "occurred_at": "2026-08-31T20:40:31.123Z",
    "session": { "session_id": "web-session-abc", "sequence": 1 },
    "device_context": { "fingerprint": "didit-fp-v2:a8c1" },
    "payload": { "method": "password" }
  }'
```

Perhatikan bahwa payload **tidak** memuat kunci API dan tidak memuat subjek. Keduanya diterapkan di sisi server.

## Yang diterapkan server

* **Pengikatan subjek.** Kredensial dibatasi pada satu `vendor_data` saat dibuat. Blok `subject` di body permintaan akan ditimpa, sehingga klien yang dimanipulasi tidak dapat menulis ke linimasa pengguna lain.
* **Konteks jaringan.** Alamat IP, user agent, accept-language, dan origin diturunkan dari permintaan. Nilai yang diturunkan server ini selalu diutamakan dibanding petunjuk dari klien untuk evaluasi aturan. Bukti aturan mencatat perbedaannya sebagai [sumber kolom](https://docs.didit.me/id/transaction-monitoring/event-rules.md#bukti).
* **Cakupan kategori.** Kredensial yang dibatasi ke `session` tidak dapat mengirim event `payment`. Permintaan tersebut ditolak dengan `400`.
* **Anggaran penggunaan.** Satu batch menghabiskan satu penggunaan per event, sehingga batch 500 event tidak dapat lolos dari kredensial 10 penggunaan sebagai satu penggunaan saja.
* **Pengikatan origin.** Jika `bind_to_origin` diaktifkan, permintaan yang `Origin`-nya tidak cocok akan ditolak, termasuk permintaan yang sama sekali tidak memiliki `Origin`.

## Pengiriman dalam batch

```bash theme={null}
curl -X POST https://verification.didit.me/v1/events/batch/ \
  -H "X-Monitoring-Token: THE_MINTED_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "events": [ { "…": "…" }, { "…": "…" } ] }'
```

Hingga 500 event per pengiriman, dengan hasil per item yang sama seperti [endpoint batch server](https://docs.didit.me/id/transaction-monitoring/events.md#batch). Lakukan flush setelah 25 event, setelah 5 detik, atau saat halaman atau aplikasi masuk ke latar belakang.

### Yang dibuang saat terjadi backpressure

Jika Anda terpaksa membuang event, buang yang murah saja. Event berikut aman untuk dibuang:

`session.page_view` · `session.sdk_heartbeat` · `session.sdk_loaded` · `session.device_seen` · `session.bot_signal_observed` · `bonus.promotion_viewed` · `affiliate.referral_clicked`

Event berikut tidak boleh dibuang. Kirim lebih dulu:

setiap event `security`, `payment`, `dispute` dan `responsible_gambling`, ditambah `gameplay.bet_placed`, `gameplay.bet_settled` dan `gameplay.p2p_settlement`.

Endpoint daftar mengembalikan klasifikasi yang sama per event sebagai `is_droppable`, sehingga klien dapat mengikuti nilai ini, bukan salinan yang ditulis tetap di kode.

## Kompatibilitas header

Header kanonis adalah `X-Monitoring-Token`. `X-Transaction-Token` masih diterima sebagai alias sementara, agar aplikasi yang sudah memakai jalur kredensial transaksi dapat bermigrasi secara bertahap.

> [!WARNING]
>
> Alias ini bersifat sementara dan akan dihapus sebelum API event mencapai ketersediaan umum. Kirim `X-Monitoring-Token` pada kode baru.

## Memilih jalur

| | Jalur perangkat | Jalur server |
| - | - | - |
| Endpoint | `POST /v1/events/` | `POST /v3/events/` |
| Autentikasi | `X-Monitoring-Token` | `x-api-key` |
| Subjek | Terikat pada kredensial | Ada di dalam payload |
| Paling cocok untuk | Login, sesi, gameplay, telemetri | Pembayaran, sengketa, event turunan ledger, backfill |

Keduanya menghasilkan catatan event yang identik dan menjalankan aturan yang identik. Gunakan jalur server setiap kali tidak ada pengguna akhir.

## Selanjutnya

> [card] [Ingesti event](https://docs.didit.me/id/transaction-monitoring/events.md)
>
> Envelope, kategori, retensi, dan idempotensi.

> [card] [Aturan pada event](https://docs.didit.me/id/transaction-monitoring/event-rules.md)
>
> Aturan velocity, rasio, urutan, dan korelasi.


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