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

# Alur Verifikasi Pengguna: Proses KYC & UX

> UX verifikasi Didit: tangkapan ID, liveness biometrik, dan coba lagi cerdas, dirancang untuk tingkat penyelesaian KYC terdepan di industri.



Prompt Siklus Hidup Sesi
        Salin prompt ke papan klip



      
      

\<pre>

\````# Goal — drive a user through a full verification session

The session is the unit you build against. One `POST /v3/session/` returns a hosted URL; your user opens it; Didit runs the workflow; you receive a webhook with the decision.

For the complete recipe (SDK pick per platform, HMAC signature pipeline, decision parsing, every status), copy the canonical prompt at:

https://docs.didit.me/integration/integration-prompt

\## Session lifecycle at a glance

\| Phase | Trigger | What happens |
\|---|---|---|
\| Create | `POST https://verification.didit.me/v3/session/` | Returns `session_id`, `url`, `session_token`. Status = `Not Started`. |
\| User opens `url` | SDK / iframe / redirect | Status flips to `In Progress`. The hosted flow handles country, ID capture, liveness, retries. |
\| Processing | Didit backend | OCR, liveness, face match, AML, etc. run; per-feature plural arrays populate on the decision. |
\| Decision | `status.updated` webhook | One of `Approved`, `Declined`, `In Review`, `Awaiting User` (KYB resub), `Resubmitted`, `Abandoned`, `Expired`, `Kyc Expired`. |

\## Create a session

\```bash
curl -X POST https://verification.didit.me/v3/session/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_id": "$WORKFLOW_ID",
"vendor_data": "user-42",
"callback": "https://myapp.com/kyc/return"
}'
\```

Always pass `vendor_data` — it is the linking key that binds the session to the persistent [User entity](/entities/users/overview). Without it the session is orphaned.

\## Receive the decision

Webhook (recommended) — register a destination with `webhook_version: "v3"` subscribed to `status.updated` and `data.updated`. Verify the `X-Signature-V2` header (HMAC-SHA256 of canonical JSON).

Polling fallback —
\```bash
curl https://verification.didit.me/v3/session/$SESSION_ID/decision/ \
-H "x-api-key: $DIDIT_API_KEY"
\```

The V3 decision returns plural arrays for every feature: `id_verifications[]`, `liveness_checks[]`, `face_matches[]`, `aml_screenings[]`, `nfc_verifications[]`, `proof_of_address_checks[]`, etc. Never assume V2 singular fields.

\## Failure modes

\- Missing API key → `403 {"detail": "You do not have permission to perform this action."}`. Wrong, revoked or expired key → `401`.
\- Invalid `workflow_id` → `400`.
\- User abandons the flow → status becomes `Abandoned`.
\- Workflow asks for resubmit → status `Resubmitted`, payload includes `resubmit_info`; re-deliver the same `url`.

\## Sources of truth

\- /sessions-api/create-session — request body schema
\- /sessions-api/retrieve-session — V3 decision schema
\- /integration/verification-statuses — literal status strings
\- /integration/webhooks — signature verification, retries
\- /reference/data-models — per-feature decision shape
\- /integration/integration-prompt — canonical end-to-end prompt````

\</pre>



      
      

Tempel ke

Panduan ini menjelaskan apa yang dialami oleh pengguna akhir pada umumnya selama sesi **Pemeriksaan Dokumen Identitas + Uji Liveness**, serta menyoroti pengoptimalan UX yang mendorong tingkat penyelesaian yang tinggi.Pelajaran Didit Academy ini mengikuti alur yang di-hosting persis seperti yang dilihat pengguna: layar pertama, pengambilan dokumen, swafoto liveness, dan setiap layar hasil mulai dari disetujui hingga ditolak.[Apa yang sebenarnya dilihat pengguna Anda — Didit Academy](https://www.youtube.com/embed/LzGe-dMWjUw?rel=0\&playsinline=1)## Ringkasan Alur![Perjalanan verifikasi identitas Didit dari layar awal melalui pengambilan ID dan swafoto hingga hasil](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/user-verification-flow.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=cc77846e25a476c7e91281295f079e80)**1. Layar Awal**Pengguna tiba di layar bersih dengan branding yang menjelaskan apa yang diharapkan (misalnya, "Anda memerlukan kartu identitas dan wajah Anda"). Hal ini mengurangi drop-off dengan menghilangkan ketidakpastian.**2. Pemilihan Negara dan Dokumen**Pengguna memilih negara dan jenis dokumen mereka (Paspor, Kartu Identitas, dll.).> [!NOTE]
>
> Jika alur kerja Anda dikonfigurasi untuk **satu jenis dokumen**, layar ini **dilewati secara otomatis** — langsung mengarahkan pengguna ke tahap pengambilan gambar.**3. Pengambilan Dokumen Identitas dengan Coba Lagi yang Cerdas**Pengguna memotret bagian depan dokumen mereka.
**Pemeriksaan kualitas pada perangkat** — Sebelum mengirimkan, SDK memeriksa adanya silau, keburaman, dan tepi yang terpotong. Jika masalah terdeteksi, pengguna diminta untuk mengambil ulang.**Validasi backend dengan panduan untuk mencoba lagi** — Setelah dikirimkan:- **Lulus** → lanjut ke liveness
- **Gagal** → pengguna melihat instruksi spesifik (misalnya, "Dokumen kedaluwarsa", "MRZ tidak terbaca — ambil ulang dalam pencahayaan yang lebih terang"), bukan pesan kesalahan generikPerulangan coba lagi mandiri ini secara signifikan meningkatkan tingkat keberhasilan melewati proses. Lihat daftar lengkap hasil validasi di [Peringatan Verifikasi Identitas](https://docs.didit.me/id/core-technology/id-verification/warnings-id-verification.md).**4. Deteksi Liveness + Pencocokan Wajah**Pemeriksaan liveness swafoto memastikan pengguna hadir secara fisik dan mencegah serangan pemutaran ulang/deepfake. Jika pengguna tidak merespons tepat waktu, proses ini **mencoba lagi sekali secara otomatis**, alih-alih langsung mengalami kegagalan total.**5. Hasil Akhir**Setelah semua pemeriksaan selesai, pengguna melihat salah satu dari tiga hasil:| Hasil | Deskripsi |
| - | - |
| **Disetujui** | Semua pemeriksaan lulus. Data diekstraksi dan tersedia melalui API/webhook. |
| **Ditolak** | Sistem menentukan bahwa verifikasi tidak dapat disetujui. |
| **Dalam Peninjauan** | Pemeriksaan otomatis tidak konklusif — memerlukan peninjauan manual. |Alur kerja Anda menentukan langkah lanjutan apa saja yang dilihat pengguna, sesuai urutan yang Anda tetapkan.
Sebagai contoh:- [Verifikasi telepon](https://docs.didit.me/id/core-technology/phone-verification/overview.md) dan [verifikasi email](https://docs.didit.me/id/core-technology/email-verification/overview.md)
- [Kuesioner](https://docs.didit.me/id/core-technology/questionnaires/overview.md)
- [Bukti alamat](https://docs.didit.me/id/core-technology/proof-of-address/overview.md)
- [Persetujuan biometrik](https://docs.didit.me/id/getting-started/biometric-consent.md)
- [Penandatanganan dokumen](https://docs.didit.me/id/core-technology/electronic-signature/overview.md)Dengan memadukan UX yang cerdas, validasi progresif, umpan balik yang dapat ditindaklanjuti, dan mekanisme coba lagi yang mulus, perjalanan verifikasi Didit membantu pengguna yang sah tetap melanjutkan proses dan mencegah pelaku jahat masuk — tanpa intervensi manual.


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