
Cara scan KTP jadi teks di aplikasi kamu: kirim gambar KTP ke endpoint KTP OCR API, lalu API mengembalikan data terstruktur, bukan cuma teks mentah hasil OCR. Panduan ini fokus pada integrasi teknis, mulai dari autentikasi sampai parsing response, untuk developer yang sudah memutuskan pakai API dan tinggal butuh langkah konkretnya.
Yang kamu butuhkan sebelum mulai
Dua hal wajib ada sebelum kamu mulai coding.
- Akun api.co.id dan API key. Sama seperti produk lain di platform api.co.id, API key didapat self-serve dari dashboard, tidak perlu proses approval manual.
- Gambar KTP yang bisa dibaca. Format JPG atau PNG, ukuran maksimal 5 MB. Ini berlaku baik untuk upload langsung dari device maupun hasil scan ktp online lewat browser, selama filenya JPG/PNG dan di bawah 5 MB.
Cara mendapatkan API key
- Login ke dashboard api.co.id (atau daftar dulu kalau belum punya akun).
- Buka bagian API key, pilih produk KTP OCR API.
- Generate key baru. Key ini yang kamu kirim di header
x-api-co-idtiap request. - Copy key, simpan di tempat yang aman, bukan di chat atau dokumen yang bisa diakses banyak orang.
Satu catatan keamanan yang sering dilewatkan tim developer baru: simpan API key di environment variable, jangan hardcode langsung di kode atau commit ke repository publik. Kalau key sudah kadung bocor, generate ulang dari dashboard.
KTP OCR API ini pakai skema points, Rp150 dipotong dari saldo akun kamu untuk tiap scan yang berhasil diekstraksi. Kalau saldo points habis, request akan gagal dengan error 402 seperti di tabel error nanti, jadi pastikan points terisi sebelum kamu deploy ke traffic produksi.
Kirim gambar KTP ke KTP OCR API
Ini bagian inti dari cara scan ktp lewat API. Endpoint-nya:
POST https://use.api.co.id/ocr/ktp-extract
Request dikirim sebagai multipart/form-data, dengan header autentikasi x-api-co-id berisi API key kamu, dan satu field wajib bernama file berisi gambar KTP.
cURL
curl --location 'https://use.api.co.id/ocr/ktp-extract' \
--header 'x-api-co-id: YOUR_API_KEY' \
--form 'file=@"/path/to/ktp-sample.jpg"'
Node.js
const fs = require('fs');
const buf = fs.readFileSync('./ktp-sample.jpg');
const form = new FormData();
form.append('file', new Blob([buf]), 'ktp-sample.jpg');
const res = await fetch('https://use.api.co.id/ocr/ktp-extract', {
method: 'POST',
headers: { 'x-api-co-id': 'YOUR_API_KEY' },
body: form
});
const data = await res.json();
PHP
$file = new CURLFile('/path/to/ktp-sample.jpg');
$ch = curl_init('https://use.api.co.id/ocr/ktp-extract');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => $file]);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['x-api-co-id: YOUR_API_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
Tiga contoh di atas melakukan hal yang sama: baca file gambar, bungkus jadi multipart form, kirim dengan header auth. Kalau stack kamu bukan salah satu dari ini, pola request-nya tetap sama, tinggal sesuaikan cara build multipart request di bahasa kamu.
Parse response jadi data terstruktur
Kalau gambar terbaca dengan baik, response yang kamu terima berisi 16 field data KTP, dibungkus dalam is_success, message, dan data:
{
"is_success": true,
"message": "Success",
"data": {
"nik": "3175010101010001",
"nama": "JOHN DOE",
"tempat_lahir": "JAKARTA",
"tanggal_lahir": "01-01-1990",
"jenis_kelamin": "LAKI-LAKI",
"alamat": "JL. CONTOH ALAMAT NO. 123",
"rt_rw": "001/002",
"kelurahan": "KELURAHAN CONTOH",
"kecamatan": "KECAMATAN CONTOH",
"kota": "KOTA JAKARTA SELATAN",
"provinsi": "DKI JAKARTA",
"agama": "ISLAM",
"status_perkawinan": "BELUM KAWIN",
"pekerjaan": "KARYAWAN SWASTA",
"kewarganegaraan": "WNI",
"berlaku_hingga": "SEUMUR HIDUP"
}
}
Karena hasilnya JSON dengan nama field yang konsisten, kamu tinggal petakan tiap key ke variabel atau kolom database di sistem kamu. Contoh pola sederhana:
if (data.is_success) {
const { nik, nama, alamat, tanggal_lahir } = data.data;
// simpan ke database, isi otomatis form KYC, dst.
}
Pola ini biasanya dipakai untuk tiga kebutuhan: isi otomatis form KYC saat onboarding pengguna baru, simpan data identitas ke database tanpa input manual, dan verifikasi identitas dengan mencocokkan data hasil scan ke data yang diinput pengguna. Untuk kebutuhan verifikasi, jangan langsung percaya penuh ke hasil ekstraksi, tetap bandingkan field seperti NIK dan nama dengan input pengguna sebelum kamu tandai identitasnya terverifikasi.
Akurasi ekstraksi yang dinyatakan untuk KTP OCR API ini 99%, tapi tetap ada kasus di mana gambar tidak terbaca sempurna, itu yang perlu kamu tangani di bagian berikut.
Menangani error dan edge case
API ini mengembalikan status code dan pesan yang jelas kalau ada yang salah. Tabel ini daftar error yang perlu kamu tangani di kode:
| Situasi | HTTP | Pesan | Cara perbaiki |
|---|---|---|---|
| API key tidak dikirim | 401 | API key required in x-api-co-id header | Pastikan header x-api-co-id terisi API key valid. |
| Field file kosong | 400 | file is required | Sertakan field file di body multipart. |
| Tipe file tidak didukung | 400 | Only JPG, JPEG, PNG image files are allowed | Konversi gambar ke JPG atau PNG sebelum upload. |
| File melebihi batas | 400 | file size exceeds maximum limit of 5 MB | Kompres atau turunkan resolusi gambar. |
| KTP tidak terbaca | 422 | Failed to extract data. Please upload a clearer KTP image. | Minta pengguna foto ulang dengan pencahayaan lebih baik. |
| Saldo points habis | 402 | Insufficient points balance. Please top up to continue. | Top up points dari dashboard, lalu ulangi request. |
Gambar buram atau resolusi rendah
Ini penyebab paling umum untuk error 422. Kalau aplikasi kamu punya fitur ambil foto langsung dari kamera, tambahkan validasi resolusi minimum sebelum gambar dikirim ke API, supaya pengguna tidak perlu menunggu response gagal dulu baru tahu fotonya kurang jelas.
KTP miring, terpotong, atau silau/pantulan cahaya
Sudut pengambilan gambar dan pantulan cahaya dari laminasi KTP sering bikin sebagian teks tidak terbaca. Beri panduan visual di UI kamu, misalnya overlay bingkai KTP di kamera, supaya pengguna memfoto dengan sudut yang tepat, dan minta mereka menjauhkan sumber cahaya langsung dari kartu.
Field kosong atau tidak terbaca
Meski request-nya sukses (is_success: true), tidak semua field selalu terisi kalau sebagian teks di foto sulit terbaca. Validasi tiap field penting, minimal NIK dan nama, sebelum data itu kamu simpan ke database atau dipakai sebagai dasar keputusan verifikasi.
Saran retry
Kalau ekstraksi gagal atau ada field kosong, jangan langsung retry otomatis ke API dengan gambar yang sama, hasilnya kemungkinan besar tetap gagal. Minta pengguna foto ulang dengan panduan pencahayaan dan sudut yang jelas dulu.
Keamanan data KTP di aplikasi kamu
Data yang keluar dari endpoint ini adalah data pribadi sensitif, NIK, alamat, tanggal lahir, dan field lain yang termasuk PII. Beberapa hal yang perlu kamu terapkan di sisi aplikasi, bukan sekadar formalitas compliance:
- Jangan log data mentah hasil ekstraksi ke server log atau tools monitoring pihak ketiga.
- Enkripsi data KTP saat disimpan (encryption at rest), bukan cuma saat transit lewat HTTPS.
- Batasi akses ke data ini hanya untuk service dan orang yang benar-benar butuh, bukan seluruh tim.
- Tentukan masa retensi data, hapus atau anonimkan kalau sudah tidak diperlukan untuk keperluan bisnis atau regulasi.
Ini bukan sekadar disclaimer, ini bagian dari kredibilitas produk kamu ke pengguna dan kepatuhan terhadap regulasi perlindungan data pribadi.
Kapan integrasi API lebih masuk akal
Kalau tim kamu sudah sampai di titik butuh ekstraksi data KTP yang akurat dan konsisten, integrasi API seperti ini lebih cepat jalan dibanding tim kamu bangun dan maintain model OCR sendiri, ditambah beban update model saat kualitas hasil scan mulai menurun. Kamu cukup panggil satu endpoint dan urus sisanya di aplikasi, tanpa perlu tim khusus untuk training atau maintenance model. Kalau kamu masih mempertimbangkan bangun sendiri versus pakai API pihak ketiga, bahasan build-vs-buy OCR KTP ini bisa jadi bahan pertimbangan lebih lengkap.
Penutup
Ringkasnya, alur scan KTP jadi teks lewat API ini cuma tiga langkah: kirim gambar ke endpoint /ocr/ktp-extract dengan API key kamu, terima response 16 field data terstruktur, lalu petakan ke sistem kamu sambil menangani error dan edge case di atas. Platform api.co.id sendiri sudah dipakai 7.000+ pengguna dengan uptime SLA 99,9%, dan memproses jutaan API calls tiap bulan di seluruh produknya.
Mau coba langsung? Coba KTP OCR API gratis.






