Memverifikasi identitas dunia nyata pengguna seringkali terlihat sederhana, namun implementasinya bisa memakan waktu berbulan-bulan karena kebutuhan fitur seperti pengambilan dokumen, OCR, pencocokan wajah, deteksi keaktifan, pencegahan penipuan, dan dukungan untuk berbagai jenis ID dari banyak negara. Stripe Identity API mengemas semua fitur tersebut dalam satu integrasi sehingga Anda bisa menyiapkan proses verifikasi ID siap produksi hanya dalam hitungan hari.
Panduan ini memandu langkah demi langkah implementasi Stripe Identity: mulai dari aktivasi di dasbor, pembuatan VerificationSession, pemilihan antara redirect hosted atau komponen Stripe.js embedded, penanganan webhook, hingga membaca output verifikasi. Disertakan juga contoh curl dan Node.js, pola penanganan error, serta cara menguji seluruh alur secara lokal menggunakan Apidog. Jika Anda ingin membandingkan dengan solusi lain, cek juga rangkuman API KYC terbaik sebelum menentukan pilihan.
Stripe Identity sangat cocok untuk tim yang sudah menggunakan Stripe untuk pembayaran, namun juga berfungsi sebagai produk mandiri. Dokumentasi resmi Stripe Identity menjelaskan permukaan produknya, sedangkan artikel ini fokus pada pengalaman implementasi: apa yang terjadi di jaringan, bidang mana yang penting, dan jebakan umum yang perlu dihindari.
TL;DR
- Stripe Identity memverifikasi pengguna dengan ID pemerintah plus selfie liveness; biaya mulai $1.50/verifikasi di AS.
- Objek inti:
VerificationSession— buat di server, lalu arahkan user ke session URL atau gunakan komponen Stripe.js. - Atur field yang dibutuhkan lewat
options.document.require_matching_selfie,require_id_number, danallowed_types. - Gunakan webhook
identity.verification_session.verified&identity.verification_session.requires_inputuntuk sinkronisasi status aplikasi. - Data hasil verifikasi (nama, DOB, alamat, nomor ID) hanya tersedia jika
verified_outputsdiatur saat pembuatan sesi. - Dukungan lebih dari 35 negara dengan dokumen lokal.
Apa itu API Stripe Identity?
Stripe Identity adalah API verifikasi identitas berbasis dokumen dan liveness selfie di atas infrastruktur Stripe. Endpoint utamanya, /v1/identity/verification_sessions, mengorkestrasi upload dokumen, ekstraksi data, pencocokan wajah, dan deteksi penipuan. Outputnya berupa data terstruktur yang telah diverifikasi (nama, tanggal lahir, alamat, nomor ID) beserta foto dokumen yang tersimpan aman di vault Stripe.
Prosesnya berbasis pola sesi dan webhook: Anda create session di backend, Stripe handle UI pengambilan data di sisi user, dan backend Anda akan menerima notifikasi begitu hasil verifikasi siap. Jika Anda familiar dengan Stripe Checkout, workflow-nya mirip dan cepat dipahami.
Autentikasi dan Penyiapan
- Aktifkan Stripe Identity di Dashboard: masuk ke Dashboard > Pengaturan > Identitas, setujui syarat, dan isi data bisnis yang diperlukan Stripe untuk compliance KYC.
- Gunakan kunci rahasia Stripe standar (format
sk_test_untuk uji &sk_live_untuk produksi). - Install Stripe Node SDK:
npm install stripe - Inisialisasi klien dengan versi API agar skema tidak berubah tanpa pemberitahuan:
import Stripe from "stripe"; const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { apiVersion: "2024-06-20", });
Setelah itu, Anda siap memanggil endpoint stripe.identity.verificationSessions.
Endpoint Inti
Membuat VerificationSession
Satu VerificationSession dibuat untuk setiap upaya verifikasi user. Di sini Anda tentukan dokumen yang diterima, apakah selfie diperlukan, serta field apa saja yang dikembalikan ke backend.
Contoh dengan curl:
curl https://api.stripe.com/v1/identity/verification_sessions \
-u "$STRIPE_SECRET_KEY:" \
-d "type=document" \
-d "options[document][require_matching_selfie]=true" \
-d "options[document][require_id_number]=true" \
-d "options[document][allowed_types][]=driving_license" \
-d "options[document][allowed_types][]=passport" \
-d "verified_outputs[]=first_name" \
-d "verified_outputs[]=last_name" \
-d "verified_outputs[]=dob" \
-d "verified_outputs[]=address" \
-d "verified_outputs[]=id_number" \
-d "metadata[user_id]=usr_7f3k2"
Contoh dengan Node SDK:
const session = await stripe.identity.verificationSessions.create({
type: "document",
options: {
document: {
require_matching_selfie: true,
require_id_number: true,
allowed_types: ["driving_license", "passport", "id_card"],
},
},
verified_outputs: [
"first_name",
"last_name",
"dob",
"address",
"id_number",
],
metadata: { user_id: "usr_7f3k2" },
});
// Kirim ke client salah satu:
// session.url // Hosted redirect
// session.client_secret // Embedded Stripe.js
Beberapa hal penting:
-
type: "document"untuk pemeriksaan dokumen. Tipeid_number(khusus AS) hanya untuk verifikasi SSN tanpa upload dokumen. -
allowed_typesmembatasi jenis dokumen yang diterima. -
verified_outputshanya expose data yang Anda minta — minimalisasi data by design.
Redirect Hosted vs Stripe.js Embedded
Dua opsi integrasi:
-
Hosted Redirect: Redirect user ke
session.url(domain stripe.com), Stripe handle seluruh proses, user kembali viareturn_url. Kode minimal. -
Stripe.js Embedded: Gunakan
session.client_secretdi frontend, panggilstripe.verifyIdentity(clientSecret)(dengan@stripe/stripe-js). User tetap di aplikasi Anda, cocok untuk verifikasi di tengah alur registrasi.
Webhook
Selalu gunakan webhook untuk memastikan status verifikasi, bukan hanya rely pada redirect client.
- Daftarkan webhook di Dashboard > Pengembang > Webhook dan subscribe ke event berikut:
-
identity.verification_session.verified: verifikasi sukses & data siap. -
identity.verification_session.requires_input: user gagal atau dokumen tidak terbaca. -
identity.verification_session.processing: Stripe masih memproses. -
identity.verification_session.canceled: sesi dibatalkan.
-
Contoh handler webhook dengan Express:
app.post("/webhooks/stripe", express.raw({ type: "application/json" }), async (req, res) => {
const event = stripe.webhooks.constructEvent(
req.body,
req.headers["stripe-signature"],
process.env.STRIPE_WEBHOOK_SECRET
);
if (event.type === "identity.verification_session.verified") {
const session = event.data.object;
await markUserVerified(session.metadata.user_id, session.id);
}
if (event.type === "identity.verification_session.requires_input") {
await notifyUserToRetry(event.data.object.metadata.user_id);
}
res.json({ received: true });
});
Mengambil Output yang Diverifikasi
Webhook hanya memberitahu Anda status; field verifikasi sensitif diambil manual via API:
const session = await stripe.identity.verificationSessions.retrieve(
"vs_1N...",
{ expand: ["verified_outputs"] }
);
const { first_name, last_name, dob, address, id_number } = session.verified_outputs;
id_number hanya dikembalikan sekali — simpan secara terenkripsi segera. Gambar dokumen hanya dapat diakses via dashboard Stripe untuk audit.
Kesalahan Umum dan Batas Kecepatan
-
Error paling umum:
verification_session.requires_inputdengan kode sepertidocument_unverified_otheratauselfie_face_mismatch. Solusi: tampilkan UI retry; Anda bisa pakai ulang session URL selama masih aktif, atau cancel & create session baru. -
Rate limit: 100 request/detik (live) atau 25/detik (test). Jika dapat HTTP 429, patuhi header
Retry-Afterdan gunakan exponential backoff. -
Error lain:
unsupported_document_type(dokumen tidak sesuaiallowed_types),country_not_supported(negara belum didukung Stripe Identity).
Harga Stripe Identity
- Harga mulai $1.50/verifikasi di AS. Negara Eropa umumnya $1.50–$2.00; detail lengkap di halaman harga Stripe.
- Hanya sesi dengan status
verifiedyang ditagih. Sesirequires_inputtidak dikenakan biaya. - Untuk volume >10.000/bulan, hubungi tim sales Stripe untuk negosiasi harga bulk.
Menguji Stripe Identity dengan Apidog
Testing API lebih efisien menggunakan playground seperti Apidog daripada manual curl, apalagi saat menguji payload webhook.
-
Import OpenAPI Stripe: Semua field
VerificationSessiontersedia dengan dokumentasi inline. Kirim request langsung ke environment test Stripe, inspeksi response, dan replay sebanyak yang dibutuhkan. -
Webhook testing: Mock event
identity.verification_session.verifiedsecara lokal, kirim ke server dev, dan debug handler Anda tanpa harus menunggu proses verifikasi real. Untuk workflow comparison, cek panduan pengujian API tanpa Postman tahun 2026. Unduh Apidog untuk klien desktop.
FAQ
Apa bedanya Stripe Identity dengan KYC reguler Stripe? KYC Stripe built-in hanya untuk verifikasi pemilik bisnis (Connect/Payments). Stripe Identity adalah API mandiri untuk verifikasi end-user; hasilnya tidak saling berbagi.
Bisa reuse identitas yang sudah diverifikasi? Bisa. verified_outputs pada sesi yang sudah diverifikasi bersifat permanen. Untuk verifikasi ulang, buat sesi baru & tautkan ke user di backend.
Apakah Stripe Identity bisa digunakan di luar pembayaran? Ya, banyak yang menggunakannya khusus KYC tanpa pakai pembayaran Stripe. Untuk AML screening tambahan, kombinasikan dengan API AML screening.
Bagaimana perbandingan Stripe Identity dengan Plaid Identity Verification? Stripe fokus pada dokumen + selfie, Plaid lebih ke data identitas bank. Lihat juga panduan API Plaid.
Apakah selfie liveness wajib? Tidak. Set options.document.require_matching_selfie ke false jika hanya perlu dokumen. Namun, kebanyakan tim tetap mengaktifkan untuk mencegah serangan low-effort.
Negara apa saja yang didukung Stripe Identity? Lebih dari 35 negara di Amerika Utara, Eropa, dan Asia-Pasifik. Daftar lengkap negara didukung tersedia di dokumentasi Stripe.
Top comments (0)