> ## 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 Manajemen Pengguna: CRUD Pengguna Vendor Didit

> Buat, baca, perbarui, ubah status, dan hapus entitas pengguna vendor Didit lewat Management API. Harga bayar sesuai pemakaian, tanpa kontrak.



Prompt Operasi Pengguna
        Salin prompt ke papan klip



      
      

\<pre>

\````# Goal — full CRUD over Didit User entities

Core CRUD operations sit under `https://verification.didit.me/v3/users/` authenticated with `x-api-key: $DIDIT_API_KEY`. Profile attachment endpoints use the organization/application path and the User's `didit_internal_id`. Each User is keyed by `vendor_data` (case-sensitive, unique per application).

\## Endpoint catalog

\| Action | Method + path |
\|---|---|
\| List users | `GET /v3/users/` |
\| Get one user | `GET /v3/users/{vendor_data}/` |
\| Create user | `POST /v3/users/create/` |
\| Upload profile face | `POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/` |
\| Update profile | `PATCH /v3/users/{vendor_data}/` |
\| Change status | `PATCH /v3/users/{vendor_data}/update-status/` |
\| Batch delete | `POST /v3/users/delete/` |

\## List (with filters)

\```bash
curl -G https://verification.didit.me/v3/users/ \
-H "x-api-key: $DIDIT_API_KEY" \
\--data-urlencode "status=ACTIVE" \
\--data-urlencode "search=jane" \
\--data-urlencode "page_size=50"
\```

\## Get one user

\```bash
curl https://verification.didit.me/v3/users/user-42/ \
-H "x-api-key: $DIDIT_API_KEY"
\```

\## Create

\```bash
curl -X POST https://verification.didit.me/v3/users/create/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"vendor_data": "user-42",
"display_name": "Jane Doe",
"metadata": {"tier": "premium", "signup_source": "web"}
}'
\```

Not idempotent — retrying with the same `vendor_data` returns conflict. `GET` first or PATCH instead.

\## Upload an imported profile face

\```bash
\# First read didit_internal_id from GET /v3/users/{vendor_data}/
curl -X POST https://verification.didit.me/v3/organization/$ORGANIZATION_ID/application/$APPLICATION_ID/vendor-users/by-id/$DIDIT_INTERNAL_ID/faces/upload/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"image": "<base64-encoded-jpg-or-png>", "comment": "Imported from previous KYC provider"}'
\```

This attaches a trusted face image to the User profile and enrolls it for duplicate detection and face search. It does not add the face to a blocklist.

\## Update profile

\```bash
curl -X PATCH https://verification.didit.me/v3/users/user-42/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"metadata": {"tier": "enterprise"}}'
\```

Mutable: `display_name`, `metadata`, `tags`. Read-only (verified): `full_name`, `date_of_birth`, `portrait_image`, all aggregate counters, `features` map.

\## Change status

\```bash
curl -X PATCH https://verification.didit.me/v3/users/user-42/update-status/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "BLOCKED", "reason": "Chargeback fraud pattern"}'
\```

Valid statuses: `ACTIVE`, `FLAGGED`, `BLOCKED`. `BLOCKED` users have new sessions auto-declined.

\## Batch delete

\```bash
curl -X POST https://verification.didit.me/v3/users/delete/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"vendor_data_list": ["user-42", "user-43", "user-44"]}'
\```

Idempotent — already-deleted is a no-op. Returns a count, `{"deleted": <int>}`, not a per-item result. The user records and every biometric template retained for them are removed permanently. Verification sessions are not covered by this endpoint; delete those with the session delete endpoints.

\## Webhooks fired

\| Operation | Event |
\|---|---|
\| create | none for the create call itself — the first `user.data.updated` arrives when a session or a PATCH first fills the profile |
\| update (PATCH) | `user.data.updated` with `changed_fields` |
\| update-status | `user.status.updated` |
\| delete | none — record the deletion on your own side if you need to react to it |

\## Failure modes

\- `401` — missing / invalid `x-api-key`.
\- `403` — the API key is not valid for this application.
\- `409` on create — `vendor_data` already exists; switch to PATCH.
\- `404` — no entity for that `vendor_data` (case-sensitive!).
\- `429` — rate-limited; back off using `Retry-After`.

\## Response shape

See /reference/data-models and /entities/users/data-model for the full User schema.

\## Sources of truth

\- /management-api/users/list, /management-api/users/get, /management-api/users/create — per-endpoint reference
\- /entities/users/data-model — field-by-field schema
\- /entities/webhooks — entity event payloads
\- /integration/integration-prompt — canonical end-to-end prompt````

\</pre>



      
      

Tempel ke

Pengelolaan entitas Pengguna inti dilakukan melalui endpoint publik di bawah `/v3/users/`. Lampiran profil, seperti unggahan wajah yang diimpor, menggunakan jalur organisasi/aplikasi dengan `didit_internal_id`. Halaman ini memberi Anda gambaran konseptual. Untuk skema permintaan dan respons lengkap, lihat [referensi API](https://docs.didit.me/id/management-api/users/list.md).## Daftar pengguna**`GET /v3/users/`**Mengembalikan daftar pengguna dengan paginasi untuk aplikasi Anda. Mendukung filter berdasarkan status, pencarian, rentang tanggal, dan lainnya.```bash theme={null}
curl -G https://verification.didit.me/v3/users/ \
  -H "x-api-key: YOUR_API_KEY" \
  --data-urlencode "status=ACTIVE" \
  --data-urlencode "search=jane" \
  --data-urlencode "page_size=50"
```Contoh penggunaan:- Sinkronkan sebagian pengguna ke gudang data Anda setiap hari.
- Temukan pengguna yang ditandai untuk antrean analis.
- Cari pengguna berdasarkan nama tampilan.## Ambil satu pengguna**`GET /v3/users/{vendor_data}/`**Ambil satu pengguna berdasarkan `vendor_data`. Mengembalikan [model data](https://docs.didit.me/id/entities/users/data-model.md) lengkap, termasuk penghitung agregat.```bash theme={null}
curl https://verification.didit.me/v3/users/user-42/ \
  -H "x-api-key: YOUR_API_KEY"
```> [!NOTE]
>
> `vendor_data` di URL peka huruf besar-kecil. Selalu gunakan nilai persis yang Anda pakai saat membuat sesi.## Buat pengguna**`POST /v3/users/create/`**Buat entitas Pengguna sebelum sesi apa pun berjalan. Berguna untuk:- Menyiapkan metadata atau kolom kustom sebelum pelanggan melakukan verifikasi.
- Menetapkan status awal (misalnya `FLAGGED` saat tim onboarding Anda meninjau dokumen secara manual).
- Memuat pengguna dari database yang sudah ada agar Anda memiliki daftar lengkap sejak hari pertama.```bash theme={null}
curl -X POST https://verification.didit.me/v3/users/create/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "vendor_data": "user-42",
    "display_name": "Jane Doe",
    "metadata": { "tier": "premium", "signup_source": "web" }
  }'
```Jika pengguna dengan `vendor_data` tersebut sudah ada, panggilan akan mengembalikan error konflik. Gunakan `PATCH` untuk memperbaruinya.Anda juga dapat mengirim detail kontak: `first_name` dan `last_name` (digabungkan menjadi `full_name` jika Anda tidak mengirimnya), `email`, `phone_number`, dan `country`.
Didit menyimpan `email` dan `phone_number` di `metadata.contact`, dan `country` di `metadata.address`.Untuk mengundang orang tersebut melakukan verifikasi dalam panggilan yang sama, tambahkan `send_verification_link: true` beserta `email` dan `workflow_id`.
Didit membuat sesi verifikasi untuk orang tersebut pada alur kerja itu dan mengirimkan tautannya melalui email.
Objek `verification_link` dalam respons memuat `session_id`, `session_number`, `status`, `url`, `workflow_id`, dan `email` dari sesi, dan bernilai `null` jika Anda tidak meminta tautan.
Lihat [Buat Pengguna](https://docs.didit.me/id/management-api/users/create.md#kirim-tautan-verifikasi) untuk pemeriksaan dan kesalahan.## Unggah wajah yang diimpor**`POST /v3/organization/{organization_id}/application/{application_id}/vendor-users/by-id/{didit_internal_id}/faces/upload/`**Lampirkan gambar wajah tepercaya ke profil Pengguna yang sudah ada. Langkah lanjutan ini tepat jika Anda mengimpor pengguna dari penyedia lain dan ingin Didit menyimpan bukti wajah mereka sebelum sesi Didit pertama.```bash theme={null}
# First create or retrieve the User and read didit_internal_id from the response.
curl -X POST https://verification.didit.me/v3/organization/$ORGANIZATION_ID/application/$APPLICATION_ID/vendor-users/by-id/$DIDIT_INTERNAL_ID/faces/upload/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "<base64-encoded-jpg-or-png>",
    "comment": "Imported from previous KYC provider"
  }'
```Lihat [Unggah Wajah Pengguna](https://docs.didit.me/id/management-api/users/upload-face.md) untuk kolom permintaan, batas, endpoint daftar dan hapus, serta perbedaannya dengan daftar blokir.## Perbarui pengguna**`PATCH /v3/users/{vendor_data}/`**Perbarui kolom profil yang dapat diubah. Sebagian besar kolom yang berasal dari sesi terverifikasi bersifat hanya baca. Upaya mengubahnya melalui PATCH akan diabaikan atau dicatat di log audit.**Kolom yang dapat diubah:** `display_name`, `metadata`, `tags`.
**Hanya baca setelah verifikasi:** `full_name`, `date_of_birth`, `portrait_image`, semua penghitung agregat, dan peta `features`.```bash theme={null}
curl -X PATCH https://verification.didit.me/v3/users/user-42/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "metadata": { "tier": "enterprise" } }'
```Mengirimkan event webhook `user.data.updated` dengan larik `changed_fields`.## Ubah status**`PATCH /v3/users/{vendor_data}/update-status/`**Pindahkan pengguna di antara `ACTIVE`, `FLAGGED`, dan `BLOCKED`. Perubahan status berlaku untuk sesi dan transaksi berikutnya.```bash theme={null}
curl -X PATCH https://verification.didit.me/v3/users/user-42/update-status/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "BLOCKED",
    "reason": "Chargeback fraud pattern detected"
  }'
```| Dari → ke | Pemicu umum |
| - | - |
| `ACTIVE` → `FLAGGED` | Aturan transaksi, tinjauan analis, temuan Pemantauan AML Berkelanjutan |
| `ACTIVE` → `BLOCKED` | Penipuan yang dikonfirmasi, entri daftar blokir manual, kecocokan daftar blokir |
| `FLAGGED` → `ACTIVE` | Analis membersihkan hasil tinjauan |
| `BLOCKED` → `ACTIVE` | Pembukaan blokir manual oleh analis |Mengirimkan event webhook `user.status.updated`.## Hapus pengguna (massal)**`POST /v3/users/delete/`**Hapus satu atau beberapa pengguna. Catatan pengguna dihapus secara permanen, bersama setiap [templat biometrik](https://docs.didit.me/id/management-api/biometric-templates/overview.md) yang disimpan untuk mereka setelah sesi dihapus. Sesi verifikasi mereka tidak tercakup oleh endpoint ini dan tetap ada dengan tautannya ke pengguna dihapus; hapus sesi tersebut dengan [Hapus Sesi](https://docs.didit.me/id/sessions-api/delete-session.md) atau [Hapus Sesi secara Massal](https://docs.didit.me/id/management-api/sessions/batch-delete.md). Transaksi juga tidak tercakup; hapus transaksi tersebut dari Console.```bash theme={null}
curl -X POST https://verification.didit.me/v3/users/delete/ \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "vendor_data_list": ["user-42", "user-43", "user-44"]
  }'
```Pilih pengguna berdasarkan `vendor_data_list`, `didit_internal_id_list`, atau keduanya sekaligus; atau
kirim `delete_all: true` untuk menghapus setiap pengguna di aplikasi. Parameter massal `filter_*` dari Console ditolak di sini dengan `400`, bukan diabaikan, sehingga permintaan yang dipersempit tidak pernah berubah menjadi penghapusan total.Mengembalikan jumlah, `{"deleted": <int>}`, bukan hasil per item. Pengidentifikasi yang tidak cocok dilewati tanpa pemberitahuan, jadi kirim daftar yang sudah tanpa duplikat jika Anda ingin membandingkan `deleted` dengan jumlah identifier yang Anda kirim.## Model izinKunci API dimiliki oleh satu aplikasi.
Rahasia utama dan kunci akses penuh dapat memanggil setiap endpoint `/v3/users/*` milik aplikasi tersebut, termasuk `delete`.[Kunci API dengan cakupan](https://docs.didit.me/id/console/api-keys.md) membutuhkan akses **People** (`users`): baca untuk endpoint `GET`, dan tulis untuk membuat, memperbarui, mengubah status, dan menghapus.
Membuat pengguna dengan `send_verification_link: true` juga membutuhkan akses tulis **Sessions**, karena membuat sesi dan mengirimkan tautannya melalui email.
Kunci yang tidak memiliki akses yang dibutuhkan akan merespons `403`.
Kunci yang dibatasi ke sebagian alur kerja atau ke sesi yang disetujui sama sekali tidak dapat mengakses endpoint `/v3/users/*`.Peran adalah konsep Console: izin sumber daya `users` dan klaimnya menentukan apa yang dapat dilakukan anggota tim di Console, dan keduanya tidak dievaluasi untuk permintaan kunci API.
Lihat [Peran & izin](https://docs.didit.me/id/console/roles-permissions.md) untuk matriks tersebut.Untuk mencegah layanan menghapus pengguna, berikan layanan itu kunci dengan akses **People** hanya baca, atau tanpa akses **People** sama sekali.## Batas laju dan idempotensi- Semua endpoint `/v3/users/*` tunduk pada [batas laju](https://docs.didit.me/id/integration/rate-limiting.md) standar.
- `create` **tidak** idempoten. Mencoba ulang dengan `vendor_data` yang sama akan mengembalikan konflik. Lakukan deduplikasi di sisi Anda, atau selalu `GET` terlebih dahulu.
- `delete` bersifat idempoten. Menghapus pengguna yang sudah dihapus tidak memberi efek apa pun.## Webhook yang dipicu oleh operasi ini| Operasi | Webhook |
| - | - |
| `create` | Tidak ada untuk panggilan create itu sendiri: `user.data.updated` pertama tiba saat sesi atau pembaruan pertama kali mengisi profil |
| `update` | `user.data.updated` (dengan `changed_fields`) |
| `update-status` | `user.status.updated` |
| `delete` | Tidak ada: catat penghapusan di sistem Anda sendiri jika Anda perlu bereaksi terhadapnya |## Langkah selanjutnya> [card] [Model data](https://docs.didit.me/id/entities/users/data-model.md)
>
> Referensi kolom lengkap.> [card] [API daftar](https://docs.didit.me/id/management-api/users/list.md)
>
> Skema GET /v3/users/.> [card] [API pembuatan](https://docs.didit.me/id/management-api/users/create.md)
>
> Skema POST /v3/users/create/.> [card] [Unggah wajah](https://docs.didit.me/id/management-api/users/upload-face.md)
>
> Lampirkan gambar wajah yang diimpor ke profil pengguna.


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