Cara Scan KTP jadi Teks (Ekstraksi Data) untuk Aplikasi

Ditulis oleh Rendy Andriyanto·Ditinjau oleh ·5 Agustus 2026·Diperbarui 10 September 2026·Verifikasi Identitas & KYC
Bagikan:

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

  1. Login ke dashboard api.co.id (atau daftar dulu kalau belum punya akun).
  2. Buka bagian API key, pilih produk KTP OCR API.
  3. Generate key baru. Key ini yang kamu kirim di header x-api-co-id tiap request.
  4. 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.

Ditulis oleh

Rendy Andriyanto

Seorang praktisi di berbagai bidang teknologi dan IT yang juga hobi menulis untuk berbagi dan mendokumentasikan hal penting supaya bisa bermanfaat bagi orang lain dan diri sendiri.

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