API Validasi Rekening Bank: Cara Cek Format Nomor Rekening di Form Pencairan Dana
Oleh Tim APIPedia, Tim Engineering APIPedia · Terbit · Diperbarui · 8 menit baca
API validasi rekening APIPedia memeriksa format nomor rekening dan kode bank lewat POST /v1/rekening/validate sebelum data pencairan disimpan.

API validasi rekening APIPedia memeriksa apakah sebuah nomor rekening berbentuk benar untuk bank yang dipilih: terdiri dari angka, panjangnya sesuai, dan kode banknya terdaftar. Pemeriksaan dilakukan lewat satu request POST /v1/rekening/validate dan hasilnya ada di field valid_format.
Tutorial ini memakai kasus form pencairan dana: penjual di marketplace, mitra, atau pelanggan yang meminta refund mengetik nomor rekening, lalu backend Anda menyaring salah ketik sebelum data disimpan. Satu hal perlu jelas sejak awal: API ini memeriksa format, bukan nama pemilik dan bukan keberadaan rekening.
Ringkasan cepat: apa yang perlu Anda tahu?
Produk Validasi Rekening punya dua endpoint: satu untuk daftar bank, satu untuk memeriksa nomor. Tabel berikut merangkum intinya.
| Item | Detail |
|---|---|
| Daftar bank | GET https://api.apipedia.id/v1/rekening/banks, parameter opsional q |
| Periksa nomor | POST https://api.apipedia.id/v1/rekening/validate |
| Body | bank_code (mis. "014") dan account_number |
| Autentikasi | Header Authorization: Bearer apk_xxx |
| Yang dicek | Nomor berupa angka, panjangnya wajar untuk bank itu, kode bank ada di daftar |
| Yang tidak dicek | Nama pemilik, keberadaan rekening, status aktif |
| Jumlah bank | 101 entri saat artikel ini ditulis |
| Hasil | valid_format bernilai true atau false |
Masalah apa yang diselesaikan API validasi rekening?
API ini menangkap salah ketik nomor rekening saat form dikirim, bukan saat transfer sudah gagal. Nomor yang kurang satu digit, tertukar bank, atau berisi huruf biasanya baru ketahuan ketika tim keuangan mencoba mencairkan dana. Akibatnya pencairan tertunda dan pengguna harus dihubungi ulang.
Dengan pemeriksaan format di backend, kesalahan itu langsung dikembalikan ke pengguna sebagai pesan validasi. Tim keuangan menerima data yang sudah dirapikan dan konsisten.

Apa yang perlu disiapkan sebelum mulai?
Anda hanya butuh satu kunci API APIPedia. Daftar atau masuk di console.apipedia.id, buka menu Token API, lalu buat kunci baru. Kunci berawalan apk_ dan dikirim lewat header Authorization: Bearer apk_xxx.
Simpan kunci di variabel lingkungan server, misalnya APIPEDIA_KEY, dan panggil API dari backend. Produk Validasi Rekening tercatat di tier Free pada katalog.
Langkah 1: bagaimana mengambil daftar bank untuk dropdown?
Panggil GET /v1/rekening/banks untuk mendapatkan kode dan nama bank, lalu pakai hasilnya sebagai isi dropdown. Dengan dropdown, pengguna tidak mengetik nama bank sendiri dan backend selalu menerima kode yang valid.
curl -s "https://api.apipedia.id/v1/rekening/banks?q=mandiri" \
-H "Authorization: Bearer apk_xxx"
Respons nyata untuk pencarian q=mandiri:
{
"is_success": true,
"message": "Daftar bank berhasil diambil",
"data": {
"jumlah": 2,
"banks": [
{ "kode": "008", "nama": "Bank Mandiri", "panjang": [13] },
{ "kode": "564", "nama": "Bank Mandiri Taspen", "panjang": null }
],
"catatan": "Pemeriksaan format dan daftar bank, bukan verifikasi nama pemilik rekening."
}
}
Tanpa parameter q, endpoint ini mengembalikan seluruh daftar, yaitu 101 entri saat artikel ini ditulis. Field panjang berisi panjang nomor yang diterima untuk bank itu. Nilainya null bila bank tersebut tidak punya aturan panjang khusus di data ini. Contoh yang terisi: BRI [15], Mandiri [13], BNI [10], dan BCA [10].
Daftar bank jarang berubah. Ambil sekali saat aplikasi mulai, simpan di cache, lalu sajikan ke form dari cache itu.
Langkah 2: bagaimana memeriksa satu nomor rekening dengan curl?
Kirim bank_code dan account_number sebagai JSON ke POST /v1/rekening/validate. Nomor di bawah adalah contoh fiktif.
curl -s -X POST https://api.apipedia.id/v1/rekening/validate \
-H "Authorization: Bearer apk_xxx" \
-H "Content-Type: application/json" \
-d '{"bank_code": "014", "account_number": "1234567890"}'
{
"is_success": true,
"message": "Pemeriksaan format rekening selesai",
"data": {
"bank": { "kode": "014", "nama": "Bank Central Asia (BCA)", "panjang": [10] },
"digits": "1234567890",
"panjang": 10,
"valid_format": true,
"catatan": "Pemeriksaan format dan daftar bank, bukan verifikasi nama pemilik rekening."
}
}
| Field | Arti |
|---|---|
bank | Bank yang cocok dengan bank_code, lengkap dengan aturan panjang-nya. |
digits | Nomor yang diperiksa setelah spasi dan tanda hubung dibuang. |
panjang | Jumlah karakter pada digits. |
valid_format | true bila format lolos, false bila tidak. |
catatan | Pengingat bahwa ini bukan verifikasi nama pemilik. |
Seperti apa respons untuk input yang salah?
Nomor yang salah tetap dijawab status 200 dengan valid_format: false, sedangkan kode bank yang tidak dikenal dijawab 404. Kami menguji lima input terhadap kode bank 014 dan satu kode bank asing. Hasilnya:

| Input | Status | valid_format | Catatan |
|---|---|---|---|
014 + 1234567890 | 200 | true | 10 digit, sesuai aturan |
014 + 123-456 7890 | 200 | true | digits menjadi 1234567890 |
014 + 12345 | 200 | false | panjang 5, aturan bank 10 |
014 + 12345abcde | 200 | false | Mengandung huruf |
999 + 1234567890 | 404 | - | Kode bank tidak ditemukan |
Respons 404 untuk kode bank asing berbentuk seperti ini:
{
"is_success": false,
"message": "Kode bank \"999\" tidak ditemukan. Lihat daftarnya di /v1/rekening/banks.",
"data": null
}
Langkah 3: bagaimana memasangnya di backend Node.js?
Buat dua fungsi: satu mengambil daftar bank untuk dropdown, satu memeriksa nomor saat form dikirim. Contoh ini berjalan di Node.js 18 ke atas tanpa dependensi tambahan.
const BASE = "https://api.apipedia.id/v1";
const headers = {
Authorization: `Bearer ${process.env.APIPEDIA_KEY}`, // apk_xxx
"Content-Type": "application/json",
};
let cacheBank = null;
// Daftar bank untuk dropdown. Cukup diambil sekali, lalu disimpan.
export async function daftarBank() {
if (cacheBank) return cacheBank;
const res = await fetch(`${BASE}/rekening/banks`, { headers });
const body = await res.json();
if (!body.is_success) throw new Error(body.message);
cacheBank = body.data.banks.map((b) => ({ kode: b.kode, nama: b.nama }));
return cacheBank;
}
// Dipanggil saat form pencairan dikirim.
export async function cekRekening(bankCode, accountNumber) {
const res = await fetch(`${BASE}/rekening/validate`, {
method: "POST",
headers,
body: JSON.stringify({ bank_code: bankCode, account_number: accountNumber }),
});
const body = await res.json();
if (res.status === 404) {
return { ok: false, pesan: "Bank tidak dikenal. Pilih bank dari daftar." };
}
if (!body.is_success) throw new Error(`HTTP ${res.status}: ${body.message}`);
const { bank, digits, panjang, valid_format } = body.data;
if (!valid_format) {
const aturan = bank.panjang ? ` ${bank.nama} memakai ${bank.panjang.join(" atau ")} digit.` : "";
return { ok: false, pesan: `Nomor rekening tidak sesuai format (${panjang} karakter).${aturan}` };
}
// Simpan versi yang sudah dirapikan, bukan ketikan mentah pengguna.
return { ok: true, bankCode: bank.kode, bankNama: bank.nama, nomor: digits };
}
console.log(await cekRekening("014", "123-456 7890"));
console.log(await cekRekening("014", "12345"));
console.log(await cekRekening("999", "1234567890"));
Fungsi cekRekening memisahkan tiga keadaan: bank tidak dikenal, format salah, dan format lolos. Saat lolos, yang disimpan adalah digits, sehingga nomor di database Anda tidak lagi berisi spasi atau tanda hubung.
Langkah 4: bagaimana contoh yang sama di Python?
Di Python, kirim JSON dengan requests lalu baca status HTTP dan valid_format. Polanya sama dengan versi Node.js.
import os
import requests # pip install requests
BASE = "https://api.apipedia.id/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['APIPEDIA_KEY']}"} # apk_xxx
def cek_rekening(bank_code, account_number):
res = requests.post(
f"{BASE}/rekening/validate",
headers=HEADERS,
json={"bank_code": bank_code, "account_number": account_number},
timeout=10,
)
body = res.json()
if res.status_code == 404:
return {"ok": False, "pesan": "Bank tidak dikenal. Pilih bank dari daftar."}
if not body.get("is_success"):
raise RuntimeError(f"HTTP {res.status_code}: {body.get('message')}")
data = body["data"]
if not data["valid_format"]:
return {"ok": False, "pesan": f"Format nomor rekening {data['bank']['nama']} tidak sesuai."}
return {"ok": True, "bank_code": data["bank"]["kode"], "nomor": data["digits"]}
if __name__ == "__main__":
for bank, nomor in [("014", "1234567890"), ("014", "12345abcde"), ("999", "1234567890")]:
print(bank, nomor, "->", cek_rekening(bank, nomor))
Apa batas pemeriksaan ini?
Pemeriksaan ini hanya menjawab "apakah nomornya berbentuk benar", bukan "apakah rekeningnya ada dan milik orang ini". Verifikasi nama pemilik butuh akses ke sistem kliring bank, dan gateway ini tidak memilikinya. Nomor yang lolos belum tentu ada.
Karena itu, perlakukan valid_format: true sebagai saringan pertama. Tetap tampilkan ringkasan bank dan nomor ke pengguna untuk dikonfirmasi, dan ikuti prosedur verifikasi yang berlaku di bisnis Anda sebelum dana dikirim.
Kesalahan umum apa yang perlu dihindari?
Kesalahan paling sering adalah menganggap status 200 sebagai tanda lolos. Periksa juga hal-hal berikut.
- Hanya membaca
is_success. Nilainyatruewalau formatnya salah. Keputusan ada divalid_format. - Menganggap lolos berarti rekening ada. API ini tidak mengecek keberadaan rekening maupun nama pemiliknya.
- Mengirim nama bank, bukan kodenya.
bank_codeharus berupa kode dari/rekening/banks, misalnya"014". - Mengirim kode sebagai angka. Kode seperti
008kehilangan nol di depan bila dikirim sebagai angka. Kirim sebagai string. - Menyimpan ketikan mentah. Simpan
digitsdari respons agar format di database seragam. - Memanggil dari browser. Kunci
apk_xxxakan terbaca siapa pun. Panggil dari backend. - Mengambil daftar bank di setiap kunjungan. Simpan di cache, karena daftar ini jarang berubah.
Kode status yang perlu ditangani
| Status | Arti | Tindakan |
|---|---|---|
| 200 | Pemeriksaan selesai | Baca valid_format |
| 400 | Parameter atau body tidak valid | Baca message, yang menyebut field bermasalah |
| 401 | Token tidak ada, tidak dikenal, atau kedaluwarsa | Periksa header Authorization |
| 403 | Kunci tidak punya scope untuk endpoint ini | Ubah scope kunci di halaman Token |
| 404 | Kode bank tidak ditemukan | Minta pengguna memilih bank dari daftar |
Pertanyaan yang sering diajukan
Apakah API ini bisa mengecek nama pemilik rekening?
Tidak. API ini memeriksa format nomor dan daftar kode bank saja. Verifikasi nama pemilik membutuhkan akses ke sistem kliring bank yang tidak dimiliki gateway ini.
Apakah nomor yang lolos pasti rekening yang aktif?
Belum tentu. valid_format: true hanya berarti nomornya berupa angka dengan panjang yang sesuai untuk bank tersebut. Rekeningnya bisa saja tidak ada.
Kenapa field panjang bernilai null untuk banyak bank?
Data ini hanya menyimpan aturan panjang khusus untuk sebagian bank, seperti BRI, Mandiri, BNI, dan BCA. Untuk bank lain, API memeriksa bahwa nomornya berupa angka dengan panjang yang wajar.
Apakah nomor dengan spasi atau tanda hubung ditolak?
Tidak. Pada uji kami, 123-456 7890 dirapikan menjadi 1234567890 di field digits dan lolos. Nomor yang mengandung huruf dijawab valid_format: false.
Apakah API validasi rekening ini gratis?
Produk Validasi Rekening tercatat di tier Free pada katalog APIPedia. Buat kunci di menu Token API pada konsol untuk mulai mencoba.
Langkah berikutnya: coba di konsol
Form pencairan yang rapi cukup butuh dropdown bank dari /rekening/banks dan satu pemeriksaan POST /v1/rekening/validate di backend. Buat kunci di console.apipedia.id, jalankan contoh curl di atas, lalu pasang fungsi cekRekening di handler form Anda.
Untuk melengkapi alur verifikasi mitra, baca juga API OCR KTP untuk membaca e-KTP dan memeriksa NIK. Bila asisten AI Anda perlu memeriksa rekening, ikuti panduan menghubungkan APIPedia ke Claude lewat MCP.
Topik: #validasi rekening #kode bank #api keamanan #tutorial #nodejs #python
Tentang penulis
Tim APIPedia — Tim Engineering APIPedia
Tim engineering di balik APIPedia yang membangun dan memelihara API data Indonesia - ongkir, OCR KTP, data wilayah, BMKG, hingga server MCP - dan menulis panduan integrasinya dari pengalaman langsung.