Mengenal API Face Match KTP: Cocokkan Selfie dengan Foto KTP

Ditulis oleh Rifaldy Elninoru·Ditinjau oleh ·18 Oktober 2026·Diperbarui 16 Oktober 2026·Verifikasi Identitas & KYC
Bagikan:

Mencocokkan selfie dengan foto KTP dalam satu panggilan

Di aplikasi fintech atau e-wallet, pendaftar baru biasanya mengunggah foto KTP lalu mengambil selfie, dan kamu perlu memastikan selfie itu memang wajah orang yang sama dengan foto di KTP-nya. API face match KTP dari api.co.id menjawabnya dalam satu api call ke POST /face-match/verify. Kamu tinggal mengirim dua gambar sebagai multipart/form-data, foto KTP di image1 dan selfie di image2, lalu sistem akan mengembalikan data.match (true/false) dan data.confidence (skor 0.0 sampai 1.0). Dengan biaya Rp400 untuk setiap verifikasi yang berhasil, kamu sudah bisa mencocokkan wajah pendaftar, dan kamu cukup punya API key plus saldo tanpa harus lolos KYC Standard seperti endpoint verifikasi Dukcapil.

Beda face match, liveness detection, dan OCR KTP

Face matching menjawab satu pertanyaan: apakah dua wajah ini orang yang sama. Ini berbeda dari liveness detection yang memastikan ada orang hidup di depan kamera saat berfoto, dan berbeda juga dari OCR KTP yang membaca teks di foto KTP lalu mengembalikan data yang tertulis. Jadi kalau yang kamu butuhkan hanya mencocokkan selfie dengan foto KTP, face match inilah jawabannya. untuk memastikan orangnya hidup, itu pekerjaan liveness detection yang berdiri sendiri. Karena face match cuma membandingkan dua wajah, kamu juga bisa memakainya untuk mencocokkan dua selfie, tidak terbatas pada pasangan KTP dan selfie.

Prasyarat: API key dan saldo, tanpa KYC Standard

Yang kamu butuhkan sebelum panggilan pertama cuma dua hal: API key dan saldo. untuk menggunakan api ini kamu tidak perlu lolos KYC Standard terlebih dulu seperti saat memakai verifikasi KTP ke Dukcapil. Langkahnya singkat:

  • Daftar atau masuk di dashboard.api.co.id
  • Mengaktifkan produk Face Matching, lalu membuat API key di halaman credentials
  • Melakukan top up saldo lewat menu “Top Up Balance”, minimum Rp50.000

Saldo masuk sebagai points dengan 1 point setara Rp1, dan modelnya bayar sesuai pemakaian (pay as you go) tanpa kuota gratis. API key inilah yang kamu pasang di header x-api-co-id pada setiap panggilan, jadi simpan nilainya di tempat yang aman.

Menyiapkan dua gambar: foto KTP dan selfie

Kedua gambar kamu ambil dari form onboarding di aplikasimu, yaitu foto KTP yang user unggah dan selfie yang ia ambil saat itu. Keduanya berasal dari unggahan user, tidak dari API lain, jadi tidak ada panggilan yang perlu kamu jalankan lebih dulu. Inti request ada di dua field file berikut:

Field Isi Wajib Catatan
image1 foto KTP wajib JPG, JPEG, atau PNG, maksimal 5 MB
image2 selfie wajib JPG, JPEG, atau PNG, maksimal 5 MB

Pastikan wajah terlihat jelas di kedua foto sebelum kamu kirim, karena API menolak gambar yang tidak memuat wajah sebelum verifikasi berjalan.

Memanggil API face match KTP lewat POST /face-match/verify

Begitu kedua gambar siap, kamu tinggal mengirimnya ke host production use.api.co.id. Kirim dengan metode POST ke /face-match/verify, pasang header x-api-co-id berisi API key, dan kirim body sebagai multipart/form-data karena ada file di dalamnya. Contoh di bawah memakai foto milik seorang pendaftar bernama panggilan Dewi.

curl -X POST https://use.api.co.id/face-match/verify \
  -H "x-api-co-id: YOUR_API_KEY" \
  -F "image1=@ktp-dewi.jpg" \
  -F "image2=@selfie-dewi.jpg"

Ganti YOUR_API_KEY dengan key dari dashboard, dan arahkan kedua path file ke gambar yang benar di servermu. Kalau request-nya benar, kamu dapat balasan sukses yang strukturnya kita bahas di bagian berikut.

Diagram alur request sampai keputusan

Alurnya berjalan satu arah: user mengunggah foto KTP dan selfie, backend-mu memanggil POST /face-match/verify, API membalas dengan match dan confidence, lalu aplikasimu memakai hasil itu untuk memilih antara meloloskan pendaftar atau mengirimnya ke review manual.

Diagram alur dari unggahan foto KTP dan selfie sampai keputusan approve atau review

Membaca match dan confidence

Respons sukses punya tiga bagian, yaitu is_success, message, dan data. Untuk foto Dewi yang cocok, balasannya seperti ini:

{ "is_success": true, "message": "Success", "data": { "match": true, "confidence": 0.95 } }

Kalau selfie yang kamu kirim ternyata wajah orang lain, strukturnya sama tetapi hasilnya berbeda:

{ "is_success": true, "message": "Success", "data": { "match": false, "confidence": 0.35 } }

Keputusan lolos atau tidak kamu ambil dari data.match, sedangkan data.confidence kamu pakai sebagai skor pendukung, misalnya untuk menandai kasus yang skornya di tengah supaya masuk review. Respons publik hanya mengembalikan match dan confidence, jadi perlakukan match sebagai keputusan utama.

Error yang mungkin akan ditemui

Sebelum verifikasi berjalan, API bisa menolak request kalau ada yang kurang. Berikut status dan pesan persis yang akan kamu terima:

Status Kapan muncul Pesan
401 header API key tidak dikirim API key required in x-api-co-id header
400 image1 tidak ada image1 is required. Please upload an image file using 'image1' field in multipart/form-data
400 image2 tidak ada image2 is required. Please upload an image file using 'image2' field in multipart/form-data
400 tipe file salah Invalid image1 file type. Only JPG, JPEG, and PNG image files are allowed
400 file melebihi 5 MB image1 file size exceeds maximum limit of 5 MB
400 wajah tidak terdeteksi Failed to verify faces. Please ensure both images are valid and contain faces.
402 saldo kurang Insufficient points balance. Please top up to continue.

Hanya panggilan yang berhasil yang memotong saldo Rp400. Panggilan yang berakhir di salah satu error di atas tidak kami potong, jadi request yang filenya hilang atau terlalu besar tidak ikut memakan biaya.

Contoh lengkap: dari unggahan sampai keputusan

Kita coba satukan semuanya dengan foto Dewi tadi. Aplikasi pinjaman menerima unggahan ktp-dewi.jpg dan selfie-dewi.jpg, lalu backend memanggil endpoint dengan nilai yang sama seperti contoh cURL di atas. Versi PHP di bawah mengirim kedua file itu dan langsung membaca keputusannya.

<?php
$ch = curl_init('https://use.api.co.id/face-match/verify');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-api-co-id: YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'image1' => new CURLFile('ktp-dewi.jpg'),
    'image2' => new CURLFile('selfie-dewi.jpg'),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($response['data']['match'] ?? false) === true) {
    // wajah cocok, naikkan status dan lanjut ke pencairan
    naikkanStatus('wajah terverifikasi', $response['data']['confidence']);
} else {
    // match=false, teruskan ke tim risk untuk review manual
    teruskanKeReview($response['data']['confidence'] ?? null);
}

Untuk Dewi, match bernilai true dengan confidence 0.95, sehingga statusnya naik ke “wajah terverifikasi” dan alur lanjut ke pencairan. Kalau kamu mengganti selfie-nya dengan wajah orang lain, hasilnya match false dengan confidence 0.35, dan cabang satunya membawanya ke review manual.

Kasus nyata: onboarding aplikasi pinjaman

Fintech lending wajib memastikan pendaftar memakai KTP miliknya sendiri sebelum pencairan. Saat onboarding, user mengisi data, mengunggah foto KTP, lalu mengambil selfie. Backend memanggil POST /face-match/verify dengan foto KTP di image1 dan selfie di image2. Kalau match bernilai true dengan confidence tinggi, akun lanjut ke tahap pencairan; kalau match bernilai false, sistem meminta selfie ulang atau meneruskannya ke tim risk. Hasil tiap verifikasi kamu simpan bersama timestamp untuk audit, karena alasan kepatuhan KYC di Indonesia menuntut jejak yang bisa kamu telusuri.

Harga dan batas

Satu verifikasi yang berhasil memotong saldo Rp400, dan modelnya pay as you go tanpa kuota gratis. Panggilan yang gagal, misalnya karena file hilang, tipe salah, atau wajah tidak terdeteksi, tidak kami potong. Batas tiap gambar 5 MB dengan format JPG, JPEG, atau PNG, jadi kompres foto beresolusi besar di sisi aplikasi sebelum kamu kirim supaya tidak tertolak oleh batas ukuran.

Data biometrik dan regulasi

Foto wajah termasuk data biometrik, dan di Indonesia data seperti ini masuk kategori data pribadi yang bersifat spesifik menurut UU No. 27 Tahun 2022 tentang Pelindungan Data Pribadi. Karena itu simpan hasil verifikasi seperlunya, batasi akses ke foto yang kamu kirim, dan pastikan user tahu untuk apa kamu memakai selfie dan foto KTP-nya.

Langkah berikutnya: baca data KTP dan cek ke Dukcapil

Setelah wajah cocok, biasanya ada dua hal yang bisa kamu otomatisasi di sekitarnya. Kamu bisa membaca data KTP otomatis dari foto dengan OCR KTP, sehingga data yang tertulis di KTP terisi dari gambar tanpa kamu ketik manual. Kamu juga bisa mengecek NIK ke Dukcapil dengan ID Verification saat butuh validasi terhadap catatan resmi. Keduanya tidak wajib kamu panggil lebih dulu. face match berdiri sendiri. Kalau kamu menyusun proses identitas yang lebih besar, endpoint ini menempati satu titik dalam alur eKYC, dan rangkaian verifikasi yang lebih lengkap ada di solusi eKYC.

Produk Endpoint Kapan dipakai
OCR KTP POST /ocr/ktp-extract membaca data KTP otomatis dari foto
ID Verification POST /id-verification/verify mencocokkan NIK ke catatan Dukcapil
Ditulis oleh

Rifaldy Elninoru

Founder Api.co.id dan Principal Engineer di PT Akselerasi Platform Indonesia. Membangun platform API serbaguna untuk developer dan perusahaan di Indonesia, mulai dari OCR, data regional, sampai validasi rekening bank. Founding Engineer Lumen Trade di Gotrade (YC S19), merancang mesin trading futures real time berikut integrasi MT4, MT5, dan protokol FIX. Sebelumnya Backend Engineer di Bank Rakyat Indonesia menggarap sistem Ceria dengan Go dan Node.js, serta Web Developer di Direktorat Jenderal Pendidikan Tinggi Kemdikbudristek.

Lihat semua artikel →
Ditinjau oleh

Roni Eka SetiawanExpert Reviewer

CTO Api.co.id. Menangani arsitektur produk, infrastruktur, penetapan harga, dan pengalaman developer untuk API verifikasi identitas, OCR, data keuangan, logistik, geolokasi, data regional, dan AI. Sebelumnya tiga tahun sebagai Web Platform Engineer di Bank Rakyat Indonesia, membangun API pencairan dana real time dengan Go, PostgreSQL, dan Kafka, serta modul KYC, QRIS, dan alur persetujuan pelunasan. Pernah menangani deteksi fraud dan integrasi payment gateway di Airpaz, dan live streaming latensi rendah di Kompas Gramedia. Alumni Bangkit Academy jalur Cloud Computing.

Lihat konten yang ditinjau →
Scroll to Top