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

# Referensi API Didit: REST API Verifikasi Identitas

> Referensi lengkap REST API Didit. Endpoint KYC, KYB, AML, biometrik, dan pemantauan transaksi. Spec OpenAPI, harga bayar per pemakaian, gratis $10/bulan.



Prompt Integrasi Standalone API
        Salin prompt ke papan klip



      
      

\<pre>

\``Integrate Didit standalone verification APIs into my backend for server-to-server identity checks.

\## Available Standalone APIs

\### Identity & Documents
\- POST /v3/id-verification/ — multipart/form-data: front_image (required), back_image (optional). Returns: { request_id, id_verification: { status, first_name, last_name, document_type, document_number, date_of_birth, nationality, expiration_date, issuing_state, address, parsed_address, warnings[] } }
\- POST /v3/poa/ — multipart/form-data: document (PDF/image). Returns: { request_id, poa: { status, document_type, issuer, poa_address, poa_parsed_address, issue_date, warnings[] } }
\- POST /v3/database-validation/ — JSON: { issuing_state, validation_type, first_name, last_name, date_of_birth, personal_number, ... }. Returns: { request_id, database_validation: { status, validations } }

\### Document AI
\- POST /v3/document-ai/ — multipart/form-data: document (PDF/image), fields (one JSON-encoded array string of { key, name, instruction, type: "text"|"number"|"date", required, is_full_name }, 1-30 items), expected_first_name + expected_last_name OR expected_company_name (+ expected_company_country), document_ai_name_match_score_threshold (default 80), per-risk *_action params. Returns: { request_id, document_ai: { status, extracted_data: { <key>: value|null }, detected_codes[], fields[], name_match_score, name_on_document, warnings[] } }. $0.20 per document.

\### Biometrics & Face
\- POST /v3/passive-liveness/ — multipart/form-data: user_image. Returns: { request_id, passive_liveness: { status, score, method } }
\- POST /v3/face-match/ — multipart/form-data: user_image + ref_image. Returns: { request_id, face_match: { status, score } }
\- POST /v3/face-search/ — multipart/form-data: user_image. Returns: { request_id, face_search: { status, total_matches, matches[] } }
\- POST /v3/age-estimation/ — multipart/form-data: user_image. Returns: { request_id, age_estimation: { status, age_estimation, score } }

\### Compliance
\- POST /v3/aml/ — JSON: { full_name, entity_type, date_of_birth, nationality, document_number, include_adverse_media, include_ongoing_monitoring }. Returns: { request_id, aml: { status, total_hits, hits[], score, entity_type } }

\### Business Verification (KYB)
\- POST /v3/kyb/search/ — JSON: { country_code (required), name, registration_number, tier: "basic" (default) | "shareholders" | "ubo", search_type: "contains", webhook_url, vendor_data, metadata }. `tier` picks the provider chain the search runs on; retrieve the candidate from select (Lite), shareholders or ubo. Up to $0.50 per successful request, separately from profile retrieval; empty results and failures are not charged. Returns: { request_id, kyb_registry: { companies[] ({ kyb_response_id, name, registration_number, status, type, fetch_status }), pagination, search_status, search_resolved } }. `kyb_response_id` is an opaque handle — pass it straight to select/shareholders/ubo, never parse it.
\- POST /v3/kyb/select/ — JSON: { kyb_response_id (from search), save_api_request, vendor_data, metadata }. **Lite** tier, priced per country ([per-country prices](https://docs.didit.me/getting-started/kyb-registry-pricing.md)). Returns: { request_id, kyb_registry: { status, company_name, registration_number, country_code, company_type, incorporation_date, registered_address, officers[], beneficial_owners[], fetch_status, data_resolved, ... } }
\- POST /v3/kyb/shareholders/ and POST /v3/kyb/ubo/ — same JSON shape as select. **Shareholders** and **UBOs** tiers, priced per country; delivered and billed as the highest tier the country's registries can serve. v3 only.

\### Contact Verification
\- POST /v3/email/send/ — JSON: { email }. Sends OTP code.
\- POST /v3/email/check/ — JSON: { email, code }. Verifies OTP.
\- POST /v3/phone/send/ — JSON: { phone, channel }. Sends OTP via SMS/WhatsApp/Telegram.
\- POST /v3/phone/check/ — JSON: { phone, code }. Verifies OTP.

\### Bank Verification
\- POST /v3/bank/account-check/ - JSON: { country (ISO 3166-1 alpha-3), account: { iban } or { account_number, sort_code | routing_number | ifsc | bsb | transit_institution | bank_code } or { clabe } or { cbu_cvu }, holder: { full_name } or { business_name }, vendor_data }. Checks that a bank account belongs to the name, with no session. Returns: { request_id, result: match | close_match | no_match | cannot_verify, holder_name (close_match only), account (masked), vendor_data, created_at }. Billed once per check the bank answers; errors are never billed.

\## Authentication
All requests require: Headers: { "x-api-key": DIDIT_API_KEY }
For file uploads: multipart/form-data. For JSON: Content-Type: application/json.

\## Common Parameters
\- save_api_request (bool, default true): if true, appears in Console > Manual Checks
\- vendor_data (string): your internal ID for tracking

\## Example: ID Verification (Node.js)
const FormData = require('form-data');
const fs = require('fs');
const form = new FormData();
form.append('front_image', fs.createReadStream('./id_front.jpg'));
form.append('back_image', fs.createReadStream('./id_back.jpg'));

const response = await fetch('https://verification.didit.me/v3/id-verification/', {
method: 'POST',
headers: { 'x-api-key': process.env.DIDIT_API_KEY, ...form.getHeaders() },
body: form
});
const result = await response.json();
// result.id_verification.status: "Approved" or "Declined"
// result.id_verification.first_name, .last_name, .document_number, etc.

\## Example: AML Screening
const response = await fetch('https://verification.didit.me/v3/aml/', {
method: 'POST',
headers: { 'x-api-key': process.env.DIDIT_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
full_name: 'John Doe',
entity_type: 'person',
date_of_birth: '1990-01-15',
nationality: 'US'
})
});
const result = await response.json();
// result.aml.status, result.aml.total_hits, result.aml.hits

\## When to Use Standalone APIs vs Sessions
\- Standalone: you have images/data, server-to-server, batch processing, custom UX
\- Sessions: user-facing flows where Didit handles camera, UX, multi-step, 54 languages

\## Rate Limits
\- Free: 10/min. Paid: 600/min. Exceeded: HTTP 429.

\## Environment Variables
\- DIDIT_API_KEY — from Didit Console > API & Webhooks

\## Docs
\- API Reference: https://docs.didit.me/api-reference/overview
\- Sessions vs APIs: https://docs.didit.me/api-reference/overview
\- Webhooks: https://docs.didit.me/integration/webhooks``

\</pre>



      
      

Tempel ke

Didit menawarkan **dua pendekatan yang saling melengkapi** untuk verifikasi identitas. Memahami perbedaannya sangat penting untuk memilih integrasi yang tepat bagi kasus penggunaan Anda.### [Sesi yang Di-hosting](https://docs.didit.me/id/sessions-api/create-session.md)Alur verifikasi lengkap dengan UI siap pakai yang telah dioptimalkan. Pengguna berinteraksi dengan antarmuka yang di-hosting oleh Didit melalui redirect, iframe, atau SDK native.### [API Mandiri](https://docs.didit.me/id/standalone-apis/id-verification.md)Pemanggilan API server-ke-server secara langsung. Anda mengirim data (gambar, dokumen, nama) dan menerima hasil verifikasi terstruktur, tanpa melibatkan UI pengguna akhir.***## Sesi yang Di-hosting (Direkomendasikan untuk Alur yang Berinteraksi Langsung dengan Pengguna)Sesi yang di-hosting adalah **pendekatan yang direkomendasikan** untuk sebagian besar integrasi. Saat Anda membuat sesi, Didit menghasilkan `verification_url` yang Anda tampilkan kepada pengguna. Pengguna menyelesaikan seluruh alur verifikasi di antarmuka Didit yang telah dioptimalkan, dan Anda menerima hasilnya melalui webhook atau API.### Cara Kerjanya**1. Buat Sesi**Server Anda memanggil `POST /v3/session/` dengan ID alur kerja. Didit mengembalikan `verification_url` dan `session_token`.**2. Tampilkan ke Pengguna**Arahkan pengguna, sematkan melalui iframe, atau inisialisasi SDK native menggunakan token sesi.**3. Pengguna Menyelesaikan Verifikasi**Pengguna mengikuti alur terpandu di UI Didit yang telah dioptimalkan, mencakup pengambilan ID, liveness, dan langkah tambahan apa pun.**4. Terima Hasil**Didit mengirim webhook ke server Anda beserta keputusan verifikasi, atau Anda melakukan polling melalui API untuk mengambil hasil.### Mengapa Sesi Direkomendasikan| Keunggulan | Rincian |
| - | - |
| **UX yang Dioptimalkan** | Antarmuka verifikasi terus diuji A/B secara global untuk mendapatkan tingkat penyelesaian tertinggi |
| **Penanganan kamera** | Pemilihan kamera cerdas, pengambilan otomatis, pemeriksaan kualitas, dan kompatibilitas perangkat sudah tersedia |
| **Alur terpandu** | Petunjuk langkah demi langkah, umpan balik real-time, dan pemulihan kesalahan bagi pengguna |
| **Alur multi-fitur** | Gabungkan beberapa fitur (ID + Liveness + AML + Telepon + Email) dalam satu alur |
| **Keamanan** | Anti-spoofing, deteksi liveness aktif, dan fingerprinting perangkat yang tertanam dalam alur |
| **Kepatuhan** | Jejak audit tingkat sesi, pengambilan persetujuan, dan kebijakan retensi data ditangani secara otomatis |
| **Lokalisasi** | 54 bahasa dengan deteksi bahasa browser otomatis |
| **Native untuk Perangkat Seluler** | SDK native untuk iOS, Android, React Native, dan Flutter |
| **Tanpa pemeliharaan** | Didit menangani semua pembaruan UI, bug browser/perangkat, dan kasus khusus terkait kamera |### Kapan Menggunakan Sesi- **Onboarding pengguna / KYC**: Pengguna baru mendaftar dan perlu memverifikasi identitasnya
- **Verifikasi usia**: Pastikan pengguna memenuhi persyaratan usia minimum
- **Verifikasi ulang**: Verifikasi ulang pengguna yang sudah ada secara berkala
- **Autentikasi Biometrik**: Pengguna mengautentikasi dengan wajah mereka untuk tindakan sensitif
- **Kepatuhan multi-langkah**: Alur yang memerlukan ID + Liveness + AML + Telepon sekaligus
- **Skenario apa pun saat pengguna akhir hadir** dan berinteraksi langsung### Endpoint Sesi| Endpoint | Tujuan |
| - | - |
| [Buat Sesi](https://docs.didit.me/id/sessions-api/create-session.md) | Buat URL verifikasi untuk pengguna |
| [Ambil Sesi](https://docs.didit.me/id/sessions-api/retrieve-session.md) | Ambil hasil lengkap dan keputusan untuk sesi |
| [Daftar Sesi](https://docs.didit.me/id/sessions-api/list-sessions.md) | Kueri dan filter semua sesi |
| [Hapus Sesi](https://docs.didit.me/id/sessions-api/delete-session.md) | Hapus sesi beserta semua data terkait |
| [Buat PDF](https://docs.didit.me/id/sessions-api/generate-pdf.md) | Ekspor laporan verifikasi sebagai PDF |
| [Bagikan Sesi](https://docs.didit.me/id/sessions-api/share-session/share.md) | Buat token berbagi untuk KYC yang Dapat Digunakan Kembali bersama mitra |
| [Impor yang Dibagikan](https://docs.didit.me/id/sessions-api/share-session/import.md) | Impor sesi yang dibagikan oleh mitra (KYC yang Dapat Digunakan Kembali) |***## API Standalone (Untuk Pemrosesan Server-ke-Server)API Standalone memungkinkan Anda memanggil fitur verifikasi secara langsung dari server Anda tanpa antarmuka pengguna (UI). Anda mengirim data (gambar, dokumen, nama) dan menerima hasil yang terstruktur.### Cara Kerjanya**1. Kirim Data**Server Anda memanggil endpoint standalone (misalnya `POST /v3/id-verification/`) dengan data yang diperlukan: gambar, dokumen, atau kolom JSON.**2. Terima Hasil**Didit memproses permintaan secara sinkron dan mengembalikan hasil verifikasi yang terstruktur dalam respons.### Kapan Menggunakan API Standalone| Kasus Penggunaan | Contoh |
| - | - |
| **Pemrosesan backend** | Anda sudah memiliki gambar dokumen dari UI pengambilan gambar sendiri dan perlu memverifikasinya |
| **Verifikasi batch** | Memproses dokumen identitas dalam jumlah besar yang diunggah oleh tim operasional |
| **UX kustom** | Anda sudah membangun alur pengambilan gambar sendiri dan hanya ingin menggunakan Didit untuk analisisnya |
| **Pemeriksaan server-ke-server** | Skrining AML terhadap daftar pelanggan, tanpa interaksi pengguna apa pun |
| **Pipeline otomatis** | Pemeriksaan ulang kepatuhan berbasis CI/CD atau cron (misalnya pemantauan AML harian) |
| **Integrasi dengan sistem yang ada** | Menghubungkan verifikasi Didit ke sistem manajemen dokumen yang sudah Anda miliki |
| **Panggilan fitur tunggal** | Anda hanya membutuhkan satu fitur (misalnya hanya skrining AML atau hanya pencocokan wajah) |### API Standalone yang Tersedia**Identitas & Dokumen**| API | Fungsi |
| - | - |
| [Verifikasi Identitas](https://docs.didit.me/id/standalone-apis/id-verification.md) | Mengekstrak dan memvalidasi data dari dokumen identitas (gambar depan + belakang) |
| [Bukti Alamat](https://docs.didit.me/id/standalone-apis/proof-of-address.md) | Memverifikasi dokumen alamat (tagihan utilitas, rekening koran bank, dokumen pemerintah) |
| [Validasi Alamat](https://docs.didit.me/id/standalone-apis/address-validation.md) | Mengonfirmasi bahwa alamat ada dan mengembalikannya dalam bentuk yang dinormalisasi, beserta koordinat |
| [Validasi Database](https://docs.didit.me/id/core-technology/database-validation/overview.md) | Memeriksa silang data pengguna dengan database pemerintah |**Document AI**| API | Fungsi |
| - | - |
| [Document AI](https://docs.didit.me/id/standalone-apis/document-ai.md) | Mengekstrak kolom yang Anda tentukan dari dokumen apa pun (PDF atau gambar), dengan pencocokan nama dan pemeriksaan manipulasi |**Biometrik & Wajah**| API | Fungsi |
| - | - |
| [Liveness Pasif](https://docs.didit.me/id/standalone-apis/passive-liveness.md) | Memverifikasi bahwa orang sungguhan hadir (pencegahan spoofing) dari satu gambar |
| [Pencocokan Wajah](https://docs.didit.me/id/standalone-apis/face-match.md) | Membandingkan dua wajah untuk menentukan apakah keduanya orang yang sama |
| [Pencarian Wajah](https://docs.didit.me/id/standalone-apis/face-search.md) | Mencari wajah di semua sesi yang telah diverifikasi sebelumnya (1:N) |
| [Estimasi Usia](https://docs.didit.me/id/standalone-apis/age-estimation.md) | Memperkirakan usia seseorang dari gambar wajah |**Kepatuhan & Risiko**| API | Fungsi |
| - | - |
| [Skrining AML](https://docs.didit.me/id/standalone-apis/aml-screening.md) | Menyaring individu atau perusahaan terhadap sanksi, PEP, dan daftar pantauan |**Verifikasi bank**| API | Fungsi |
| - | - |
| [Pemeriksaan rekening](https://docs.didit.me/id/standalone-apis/bank-account-check.md) | Memeriksa bahwa rekening bank milik orang atau perusahaan yang Anda sebutkan, sebelum Anda mengirim uang ke rekening tersebut |**Verifikasi Bisnis (KYB)**| API | Fungsi |
| - | - |
| [Pencarian Registri KYB](https://docs.didit.me/id/standalone-apis/kyb-registry-search.md) | Mencari registri perusahaan berdasarkan nama, nomor registrasi, dan negara; hingga \$0.50 per permintaan yang berhasil |
| [Pemilihan Registri KYB](https://docs.didit.me/id/standalone-apis/kyb-registry-select.md) | Mengambil profil registri lengkap (pengurus, pemilik manfaat, alamat) untuk perusahaan yang dipilih |***## Perbandingan Berdampingan| | Sesi yang Di-hosting | API Standalone |
| - | - | - |
| **Upaya integrasi** | Rendah: redirect, iframe, atau SDK | Sedang: Anda menangani pengambilan dan pengiriman data |
| **Interaksi pengguna** | Ya: pengguna menyelesaikan alur di UI Didit | Tidak: hanya server-ke-server |
| **Kamera/pengambilan gambar** | Ditangani oleh Didit (dioptimalkan) | Anda menyediakan gambar/data |
| **Alur multi-fitur** | Ya: rangkai fitur dalam alur kerja | Satu fitur per panggilan API |
| **Optimasi UX** | Diuji A/B secara berkelanjutan | Anda yang mengontrol UX |
| **Lokalisasi** | 54 bahasa, terdeteksi otomatis | Tidak berlaku (tanpa UI) |
| **Webhook** | Notifikasi status otomatis | Tidak berlaku (respons sinkron) |
| **Waktu respons** | Asinkron (pengguna menyelesaikan sesuai kecepatannya) | Sinkron (dalam hitungan detik) |
| **Paling cocok untuk** | Onboarding & verifikasi untuk pengguna | Pemrosesan backend & otomatisasi |
| **Visibilitas di konsol** | Siklus hidup sesi lengkap di dasbor | Muncul di bagian Pemeriksaan Manual |***## Bisakah Saya Menggunakan Keduanya?**Ya.** Banyak tim mengombinasikan kedua pendekatan ini:1) **Sesi untuk onboarding**: Pengguna baru menjalani alur verifikasi lengkap yang di-hosting saat pendaftaran
2) **AML Standalone untuk pemantauan berkelanjutan**: Tugas cron memeriksa ulang semua pengguna yang disetujui setiap malam terhadap daftar pantauan yang diperbarui
3) **Pencarian Wajah Standalone untuk deteksi duplikasi**: Saat sesi baru disetujui, server Anda memanggil Pencarian Wajah untuk memeriksa duplikasi
4) **Verifikasi Identitas Standalone untuk operasional**: Tim kepatuhan Anda mengunggah dokumen secara manual untuk peninjauan kasus khusus### Contoh: Arsitektur Gabungan| Aplikasi Anda | API Didit | Jenis |
| - | - | - |
| **Alur pendaftaran pengguna** | API Sesi (UI yang di-hosting) | Untuk pengguna |
| **Pemeriksaan ulang AML setiap malam** | API AML Standalone | Server-ke-server |
| **Tinjauan dokumen tim operasional** | API Verifikasi Identitas Standalone | Server-ke-server |
| **Deteksi wajah duplikat** | API Pencarian Wajah Standalone | Server-ke-server |***## Mulai### [Mulai Cepat dengan Sesi](https://docs.didit.me/id/integration/api-full-flow.md)Buat sesi verifikasi pertama Anda yang di-hosting dalam 5 menit.### [Autentikasi API](https://docs.didit.me/id/getting-started/api-authentication.md)Dapatkan kunci API Anda dan mulai membuat permintaan yang terautentikasi.### [Siapkan Webhook](https://docs.didit.me/id/integration/webhooks.md)Terima notifikasi real-time saat status verifikasi berubah.### [Buat Alur Kerja](https://docs.didit.me/id/console/workflows.md)Bangun alur verifikasi kustom di Business Console.***


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