> ## 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 Kuesioner KYC: Pembuat Formulir Dinamis

> Buat kuesioner KYC kustom di Didit. Builder drag-and-drop, multibahasa, logika kondisional, dan peninjauan manual. Pay-per-call $0.10.

Kuesioner Didit memungkinkan Anda merancang formulir dinamis yang terstruktur untuk mengumpulkan informasi tambahan dari pengguna selama verifikasi. Gunakan pembuat visual kami untuk menarik dan melepas elemen, mengatur konten ke dalam beberapa bagian, melokalisasi teks untuk berbagai bahasa, dan merutekan hasil untuk peninjauan manual saat diperlukan.

Prompt Integrasi Kuesioner
        Salin prompt ke papan klip



      
      

\<pre>

\````# Goal
Integrate Didit Questionnaires (custom KYC/KYB forms with conditional logic and manual-review routing) into your app.

\# Delivery mode
Questionnaires are **session-only**. The form is designed in the Business Console (drag-and-drop builder) and bound to a workflow via the QUESTIONNAIRE feature. There is no standalone questionnaire submission API — answers are collected through the hosted Didit flow.

\# Steps
1\. Build the questionnaire in the Business Console (Questionnaires tab). Define sections, fields, conditional visibility, multi-language labels, and **custom status rules** (e.g. "if source_of_funds = 'crypto' set status to In Review").
2\. Add the QUESTIONNAIRE feature to a workflow and select the questionnaire id (POST /v3/workflows/ or the Console).
3\. Create a session — POST /v3/session/ with { workflow_id, vendor_data, callback }. See /sessions-api/create-session.
4\. Open session.url for the user (or mount the Web/Mobile SDK) — the form renders inside the flow.
5\. Fetch the decision — GET /v3/session/{sessionId}/decision/ or subscribe to session.status.updated.

curl (create session):
\```bash
curl -X POST 'https://verification.didit.me/v3/session/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"workflow_id": "YOUR_WORKFLOW_ID",
"vendor_data": "user-1234",
"callback": "https://yourapp.com/post-kyc"
}'
\```

\# Decision surface
The result lands under `questionnaire_responses[]` on the decision payload (one entry per questionnaire node). Each entry includes:
\- `status` — final status for this questionnaire instance (driven by your custom status rules).
\- `answers` — array of { question_id, question_label, value } pairs (or nested sections).
\- `warnings` — any rule-triggered warnings.

\# Status enum (per questionnaire_responses[].status)
"Not Started" | "In Progress" | "Approved" | "In Review" | "Declined" | "Abandoned" | "Kyc Expired"

\# Warnings (LogWarningChoices.QUESTIONNAIRE)
The dominant risk code is CUSTOM_STATUS_RULE_TRIGGERED — emitted whenever an answer matches a Console-configured rule that escalates the status. The warning's `additional_data` carries the rule id and matched answer so reviewers can see why the session was routed.

Full catalogue: questionnaire warnings are documented inside the report page — see /core-technology/questionnaires/report-questionnaire.

\# Failure modes to handle
\- questionnaire_responses[] empty — user abandoned the form. The session status will reflect "Abandoned"; treat per your retention policy.
\- status="In Review" with CUSTOM_STATUS_RULE_TRIGGERED — answers crossed your manual-review rule; surface the relevant answers in your reviewer UI.
\- status="Declined" — answers crossed a decline rule (e.g. user declared they are a sanctioned-country resident); do not approve.

\# See also
\- Canonical schema: /reference/data-models#questionnaire-response
\- Per-feature report: /core-technology/questionnaires/report-questionnaire
\- Full integration playbook: /integration/integration-prompt````

\</pre>



      
      

Tempel ke

Dalam pelajaran Academy tentang membaca hasil verifikasi, bab 11:54 membahas Document AI dan kuesioner.[Document AI dan kuesioner — Didit Academy](https://www.youtube.com/embed/7htTWCWsl60?start=714\&rel=0\&playsinline=1)***## Dua Cara Membangun KuesionerDidit menawarkan **dua pendekatan berbeda** untuk membuat kuesioner, memungkinkan Anda memilih tingkat kompleksitas yang tepat sesuai kebutuhan Anda:![Mode builder kuesioner KYC Didit sederhana dan lanjutan secara berdampingan](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/questionnaires-simple-and-complex.jpg?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=71d18d67b4684cca46c7809ba43cfcb6)### 1. Mode Sederhana: Form Builder Cepat**Mode Sederhana** sangat cocok untuk membuat formulir sederhana dengan cepat. Gunakan antarmuka seret-dan-lepas intuitif kami untuk menambahkan elemen, menetapkan kolom wajib, dan memublikasikannya dalam hitungan menit.![Antarmuka form builder seret-dan-lepas mode sederhana kuesioner Didit](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/questionnaires-simple.jpg?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=8e777d8fc72ca16e8e2deb65a0a66e92)**Paling cocok untuk:**- Formulir pengumpulan data cepat
- Survei dan atestasi sederhana
- Tim yang baru mengenal pembuatan formulir
- Kuesioner satu bahasa**Cara kerjanya:**1) Buka Questionnaire Builder
2) Seret elemen dari palet ke formulir Anda
3) Konfigurasikan setiap elemen (label, wajib diisi, placeholder)
4) Pratinjau dan publikasikan***### 2. Mode Lanjutan: Visual Graph Builder**Mode Lanjutan** membuka fitur-fitur canggih untuk skenario pengumpulan data yang kompleks menggunakan **editor visual berbasis node**. Bangun kuesioner yang canggih dengan logika kondisional, jalur percabangan, dan kendali penuh atas alur.![Editor graf visual berbasis node kuesioner lanjutan Didit dengan logika percabangan](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/questionnaires-node-based.jpg?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=7ff0c1d79f500ed3f78dca4ff89b0698)**Paling cocok untuk:**- Kuesioner multibahasa
- Formulir kompleks dengan percabangan kondisional
- Pengumpulan data berbasis kepatuhan dengan jalur yang berbeda
- Formulir yang memerlukan alur kerja peninjauan manual**Kemampuan utama:**- **Editor node visual**: Seret, lepas, dan hubungkan node di kanvas tanpa batas
- **Koneksi cerdas**: Seret dari pegangan node ke ruang kosong untuk langsung membuat dan menghubungkan node baru
- **Percabangan kondisional**: Arahkan pengguna ke pertanyaan berbeda berdasarkan jawaban sebelumnya, lalu [gabungkan kembali jalur pada langkah bersama](#menggabungkan-kembali-jalur-percabangan-ke-langkah-bersama)
- **Dukungan multibahasa**: Terjemahkan semua konten yang ditampilkan kepada pengguna
- **Pintasan keyboard**: Batalkan (Ctrl/Cmd+Z), Ulangi (Ctrl/Cmd+Shift+Z), Hapus (Delete/Backspace)
- **Perbesar dan geser**: Navigasikan formulir yang kompleks dengan scroll untuk memperbesar dan seret untuk menggeser#### Jenis Node Graph Builder| Jenis Node | Warna | Deskripsi | Kapan Digunakan |
| - | - | - | - |
| **Node Pertanyaan** | Biru | Elemen input yang mengumpulkan data pengguna | Input teks, dropdown, unggahan file, tanggal, dll. |
| **Node Teks** | Hijau | Konten hanya-baca yang ditampilkan kepada pengguna | Petunjuk, penjelasan, teks hukum |
| **Node Percabangan** | Oranye | Perutean kondisional berdasarkan jawaban | "Jika negara adalah AS, tampilkan formulir pajak" |
| **Node Bagian** | Abu-abu | Pengelompokan visual elemen terkait | Atur pertanyaan ke dalam bagian-bagian logis |> **Aturan Koneksi:** Node Bagian dan Teks dapat terhubung ke Pertanyaan dan node Teks lainnya, tetapi tidak langsung ke node Percabangan. Node Percabangan dapat terhubung ke jenis node apa pun.#### Operator KondisiKondisi percabangan membandingkan jawaban sebelumnya dengan suatu nilai.
Gabungkan beberapa kondisi dengan `and` atau `or`.| Operator | Cocok jika jawaban |
| - | - |
| `equals` | Sama dengan nilai tersebut |
| `not_equals` | Tidak sama dengan nilai tersebut |
| `contains` | Mengandung nilai tersebut |
| `greater_than` | Lebih besar dari nilai tersebut |
| `greater_than_or_equals` | Lebih besar dari atau sama dengan nilai tersebut |
| `less_than` | Lebih kecil dari nilai tersebut |
| `less_than_or_equals` | Lebih kecil dari atau sama dengan nilai tersebut |
| `in` | Merupakan salah satu dari daftar nilai |
| `not_in` | Bukan salah satu dari daftar nilai |
| `is_empty` | Dibiarkan kosong |
| `is_not_empty` | Diisi |#### Menggabungkan Kembali Jalur Percabangan ke Langkah BersamaPercabangan tidak harus selalu satu arah. Ujung dari beberapa jalur dapat terhubung ke node hilir yang sama, dan kuesioner berlanjut dari sana satu kali. Pertanyaan bersama dibangun dan dikelola di satu tempat alih-alih diulang di akhir setiap jalur.**Contoh pengerjaan: pertanyaan tambahan untuk Ya, lalu bagian akhir bersama**1) Tambahkan **node Pertanyaan** dengan pertanyaan **Pilihan Tunggal** yang menawarkan Ya dan Tidak, lalu **node Percabangan** setelahnya dengan jalur `Yes` dan jalur `No`.
2) Pada jalur `Yes`, tambahkan pertanyaan tambahan yang hanya berlaku jika jawabannya adalah Ya.
3) Di akhir jalur tersebut, tambahkan pertanyaan pertama yang harus dijawab oleh setiap responden setelah percabangan — awal dari bagian akhir bersama.
4) Arahkan jalur `No` ke pertanyaan tersebut: buka menu **+** di akhir jalur `No` dan pilih **Hubungkan langkah yang sudah ada**, atau seret dari konektor jalur `No` dan lepaskan di tepi atas pertanyaan bersama. Kanvas hanya terhubung ke target kecil di bagian atas kartu, sehingga melepaskannya di bagian tengah kartu tidak akan melakukan apa pun.
5) Lanjutkan menambahkan sisa pertanyaan bersama setelah pertanyaan pertama, lalu publikasikan. Kanvas akan menampilkan satu bagian akhir bersama, di bawah jalur-jalur yang mengarah kepadanya.Sebuah jalur dapat bergabung ke node yang sudah ada dengan cara ini, dan beberapa jalur dapat mengarah ke node yang sama. Penggabungan menentukan ke mana jalur tersebut berlanjut, sehingga menu **+** menawarkan **Hubungkan langkah yang sudah ada** selama jalur berakhir di sana. Koneksi yang akan menutup loop kembali ke node sebelumnya akan ditolak.Responden menjawab pertanyaan bersama sekali, di jalur mana pun yang mereka ambil; pertanyaan pada jalur yang tidak mereka ambil akan dilewati. Payload keputusan mengikuti aturan yang sama: `questionnaire_responses[].sections[].items` hanya mencantumkan item pada jalur yang diikuti responden. Lihat [Visibilitas kondisional](https://docs.didit.me/id/core-technology/questionnaires/report-questionnaire.md#visibilitas-kondisional).***## Templat KuesionerTemplat membantu Anda memulai dengan cepat menggunakan formulir yang telah dikonfigurasi sebelumnya untuk kasus penggunaan umum. Anda dapat menggunakannya apa adanya atau menyesuaikannya dengan kebutuhan Anda.![Templat bawaan kuesioner Didit untuk sumber dana dan kepatuhan KYC](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/questionnaires-template.jpg?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=97a45bd55692379ffc057e11f4530a54)### Templat Bawaan| Templat | Deskripsi | Elemen Umum |
| - | - | - |
| **Sumber Dana** | Catat sumber pendapatan dan dokumentasi pendukung | Menu tarik-turun, Teks Panjang, Unggah File |
| **Detail Pekerjaan** | Kumpulkan jabatan, pemberi kerja, rentang pendapatan | Teks Pendek, Menu tarik-turun, Angka |
| **Tujuan Akun** | Pahami tujuan penggunaan akun | Pilihan Tunggal, Pilihan Ganda, Teks Panjang |
| **Kepemilikan Manfaat** | Identifikasi UBO dan struktur kepemilikan | Teks Pendek, Angka, Unggah File |
| **Residensi Pajak** | Kumpulkan deklarasi terkait pajak | Negara, Persetujuan, Unggah File |
| **Penilaian Risiko** | Kumpulkan informasi yang relevan dengan risiko | Pilihan Ganda, Menu tarik-turun, Teks Panjang |***## Cara kerjaAlur kerja kuesioner kami dirancang agar fleksibel dan dapat diaudit:### 1. Buat di Konsol (Tanpa Kode)- Seret dan lepas elemen untuk membuat kuesioner Anda
- Atur konten ke dalam beberapa bagian untuk kejelasan
- Tandai elemen sebagai wajib atau opsional
- Konfigurasikan teks pengganti dan deskripsi bantuan
- Tambahkan pilihan (dengan tindak lanjut teks bebas opsional) untuk menu tarik-turun dan pilihan tunggal
- Konfigurasikan batas unggah file/gambar per elemen### 2. Lokalisasi Konten- Tulis konten Anda sekali dalam `default_language` kuesioner
- Tentukan `languages` yang didukung — saat Anda memublikasikan, setiap judul, deskripsi, teks pengganti, label pilihan, dan pesan validasi **diterjemahkan secara otomatis** ke semua bahasa tersebut
- Sempurnakan terjemahan apa pun secara manual di editor; pengeditan manual akan dipertahankan hingga teks sumber berubah
- Pengguna akhir melihat konten secara otomatis dalam bahasa terbaik yang tersedia### 3. Publikasikan dan Kumpulkan- Aktifkan kuesioner dan sematkan ke dalam alur verifikasi Anda
- Pengguna akhir menyelesaikan bagian-bagian tersebut dan mengirimkan jawaban
- Unggahan file (dokumen, gambar) disimpan dan ditautkan ke respons### 4. Tinjau dan Putuskan* Respons disimpan dengan `status`: `Approved`, `In Review`, atau `Not Finished`
* Anda dapat memaksa semua respons kuesioner untuk masuk ke `In Review`, sehingga seseorang menyetujuinya secara manual
* Tinjau jawaban dan file di konsol, lalu tandai sebagai `Approved`> Catatan: Kuesioner tidak menghasilkan peringatan risiko. Tata kelola dicapai melalui kolom wajib, validasi, dan alur kerja peninjauan.***## Kemampuan utama| Kemampuan | Mode Sederhana | Mode Lanjutan |
| - | - | - |
| Pembuat seret-dan-lepas | ✅ | ✅ |
| Kolom wajib/opsional | ✅ | ✅ |
| Teks pengganti & deskripsi | ✅ | ✅ |
| Beberapa bagian | ✅ | ✅ |
| Batas unggahan file | ✅ | ✅ |
| Editor graf visual | ❌ | ✅ |
| Percabangan kondisional | ❌ | ✅ |
| Terjemahan multibahasa | ❌ | ✅ |
| Logika pilihan (wajib teks) | ❌ | ✅ |
| Paksa peninjauan manual | ❌ | ✅ |
| Dukungan Urungkan/Ulangi | ❌ | ✅ |
| Pintasan keyboard | ❌ | ✅ |**Daftar fitur lengkap:**- **Pembuat Visual**: Buat dan kelola kuesioner dengan editor seret-dan-lepas yang intuitif
- **Bagian**: Kelompokkan pertanyaan terkait; tambahkan header dan pemisah untuk memandu pengguna
- **Terjemahan otomatis**: Tulis konten dalam satu bahasa — semua teks yang dilihat pengguna diterjemahkan ke setiap bahasa lain yang dipilih saat publikasi, dengan dukungan penyempurnaan manual
- **Validasi**: Tandai kolom sebagai wajib; terapkan jumlah maksimum file per elemen unggahan
- **Logika Pilihan**: Untuk menu tarik-turun/pilihan tunggal, secara opsional wajibkan teks tambahan per opsi yang dipilih
- **Unggahan**: Kumpulkan dokumen dan gambar dengan batas jumlah file (misalnya, hingga 3 file)
- **Peninjauan Manual**: Secara opsional paksa semua respons ke `In Review` menunggu persetujuan manusia
- **Sakelar Aktivasi**: Aktifkan atau nonaktifkan kuesioner per aplikasi
- **Integrasi Alur Kerja**: Tambahkan kuesioner ke KYC atau jalankan secara mandiri sebagai alur kerja Verifikasi Kuesioner
- **API & Webhook**: Baca hasil terstruktur melalui API dan terima pembaruan***## Jenis elemenAnda dapat menambahkan jenis elemen berikut di pembuat formulir (dapat dipilih dari konsol):### Elemen Input| Elemen | Deskripsi | Opsi Konfigurasi |
| - | - | - |
| **SHORT\_TEXT** | Teks bebas satu baris | Placeholder, wajib diisi |
| **LONG\_TEXT** | Teks bebas multibaris | Placeholder, wajib diisi |
| **NUMBER** | Input numerik | Placeholder, wajib diisi |
| **EMAIL** | Input email dengan validasi | Placeholder, wajib diisi |
| **PHONE** | Input nomor telepon | Placeholder, wajib diisi |
| **ADDRESS** | Input alamat | Placeholder, wajib diisi |
| **DATE\_PICKER** | Pemilihan tanggal | Placeholder, wajib diisi |
| **TIME** | Input waktu | Placeholder, wajib diisi |### Elemen Pilihan| Elemen | Deskripsi | Opsi Konfigurasi |
| - | - | - |
| **DROPDOWN** | Pilihan tunggal dari daftar | Pilihan, `requires_text_input` per pilihan |
| **SINGLE\_CHOICE** | Pilihan tunggal bergaya radio | Pilihan, `requires_text_input` per pilihan |
| **MULTIPLE\_CHOICE** | Daftar periksa pilihan ganda | Pilihan |
| **COUNTRY** | Pemilih negara | Wajib diisi |
| **CONSENT** | Kotak centang atau konfirmasi persetujuan | Wajib diisi, label kustom |### Elemen Unggahan| Elemen | Deskripsi | Opsi Konfigurasi |
| - | - | - |
| **IMAGE** | Unggah gambar | `max_files` (1-5), wajib diisi |
| **FILE\_UPLOAD** | Unggah dokumen | `max_files` (1-5), wajib diisi |### Elemen Tata Letak| Elemen | Deskripsi | Catatan |
| - | - | - |
| **PARAGRAPH** | Teks penjelasan hanya-baca | Tidak dapat dijawab |
| **SECTION\_HEADER** | Header bagian visual | Tidak dapat dijawab, tidak wajib diisi |
| **SEPARATOR** | Pembatas visual | Tidak dapat dijawab, tidak wajib diisi |**Catatan perilaku:**- `SECTION_HEADER` dan `SEPARATOR` hanya untuk presentasi. Keduanya mengabaikan persyaratan wajib, placeholder, pilihan, dan batas jumlah berkas.
- Untuk elemen pilihan, tentukan pilihan sebagai `{ label, value, requires_text_input? }`.
- Untuk elemen unggahan, atur `max_files` (1–5) untuk mengontrol berapa banyak berkas yang dapat dilampirkan.***## Mewajibkan peninjauan manualBeberapa alur kerja kepatuhan mewajibkan peninjauan manusia untuk setiap respons. Dari konsol, Anda dapat mengatur kuesioner agar selalu menghasilkan status `In Review`. Peninjau kemudian menyetujui atau meminta perubahan, setelah itu respons menjadi `Approved`.**Kapan menggunakan peninjauan manual:**- Onboarding pelanggan berisiko tinggi
- Pengumpulan data sensitif (Sumber Dana, deklarasi UBO)
- Persyaratan regulasi untuk pengawasan manusia
- Jaminan kualitas selama peluncuran awal***## Contoh kasus penggunaan### Sumber DanaKumpulkan sumber pendapatan, nominal, dan unggah dokumen pendukung (misalnya slip gaji, rekening koran). Gabungkan elemen DROPDOWN, teks panjang, dan unggahan berkas.**Struktur umum:**- Bagian 1: Status Pekerjaan (Dropdown)
- Bagian 2: Sumber Pendapatan (Pilihan Ganda + Teks Panjang)
- Bagian 3: Dokumen Pendukung (Unggah Berkas)
- Bagian 4: Deklarasi (Persetujuan)***### Asosiasi atau KeanggotaanCatat afiliasi, peran, dan bukti keanggotaan; sertakan elemen persetujuan untuk deklarasi.**Struktur umum:**- Nama Organisasi (Teks Pendek)
- Peran/Jabatan (Dropdown)
- Durasi Keanggotaan (Pemilih Tanggal)
- Bukti Keanggotaan (Unggah Berkas)
- Deklarasi (Persetujuan)***### Tujuan Hubungan & Perkiraan Aktivitas AkunKumpulkan tujuan, perkiraan volume transaksi, negara aktivitas, dan pihak lawan yang diantisipasi. Gunakan pilihan tunggal/ganda, input angka, dan paragraf untuk konteks.**Struktur umum:**- Bagian 1: Tujuan Akun (Pilihan Ganda)
- Bagian 2: Perkiraan Volume Bulanan (Angka + Dropdown untuk mata uang)
- Bagian 3: Negara Aktivitas (Negara – beberapa pilihan)
- Bagian 4: Jenis Transaksi (Pilihan Ganda)
- Bagian 5: Informasi Tambahan (Teks Panjang)***## Mode Simple vs Advanced: Kapan Menggunakan Masing-Masing| Skenario | Mode yang Disarankan |
| - | - |
| Formulir dasar, satu bahasa | Simple |
| Diperlukan dukungan multibahasa | Advanced |
| Survei internal cepat | Simple |
| Kuesioner kepatuhan | Advanced |
| Pengumpulan data satu kali | Simple |
| Jalur percabangan kondisional | Advanced |
| Wajibkan peninjauan manual | Advanced |
| Formulir multibagian yang kompleks | Advanced |***## Memulai1. **Baru menggunakan kuesioner?** Mulai dengan **Simple Mode** untuk mempelajari pembuat formulir
2. **Memerlukan terjemahan atau logika kondisional?** Beralih ke **Advanced Mode** untuk editor graf visual> Lihat bagaimana hasil disusun di halaman [Laporan Kuesioner](https://docs.didit.me/id/core-technology/questionnaires/report-questionnaire.md).


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