Dokumentasi API · Member & Publik
Integrasi Rajacek dalam hitungan menit.
Rajacek mengecek rekening bank, akun e-wallet, nomor WhatsApp, dan ID pelanggan PLN Indonesia lewat satu API. Semua contoh di halaman ini memakai domain asli https://www.rajacek.com dan bisa langsung disalin-tempel. Ganti saja kunci contoh rc_CONTOH dengan kunci Anda sendiri. Kunci baru diawali rc_. Kunci lama rv_live_ tetap berlaku. Perlakukan kunci Anda seperti kata sandi. Jangan dibagikan ke siapa pun.
Mulai cepat
- Daftar dengan akun Google di portal member. API key (
rc_...) langsung terbit. Simpan baik-baik: kunci hanya ditampilkan satu kali. Pendaftar baru mendapat trial gratis 1000× cek selama 7 hari. - Mau coba tanpa coding? Buka menu Coba Cek Live di portal. Ceknya sungguhan dan memakai kuota Anda.
- Untuk cek rekening, ambil dulu kode bank 3 digit dari
GET /v1/banks. - Kirim request ke endpoint validasi
/api/v3/validate. Paling mudah: GET dengan kunci di query, atau POST dengan kunci di header. Contohnya di bawah ini.
402. Lanjutkan ke paket berbayar lewat portal member. Beli paket dengan QRIS dan kuota langsung aktif.curl "https://www.rajacek.com/api/v3/validate?code=014&accountNumber=1234567890&api_key=rc_CONTOH"
Atau POST dengan kunci di header (mendukung Idempotency-Key — lihat Idempotensi):
curl -X POST https://www.rajacek.com/api/v3/validate \
-H "Content-Type: application/json" \
-H "X-API-Key: rc_CONTOH" \
-H "Idempotency-Key: order-20261021-0001" \
-d '{"code": "014", "accountNumber": "1234567890"}'
Respons sukses (HTTP 200):
{
"request_id": "Kx7fA92pQm",
"status": "valid",
"valid": true,
"product": "bank_account",
"message": "Respons diterima dari provider validasi.",
"result": {
"account_number": "1234667890",
"service_code": "014",
"bank_name": "BCA",
"account_name": "NAMA PELANGGAN",
"registered": true,
"reference": "ref-001"
},
"meta": {
"provider": "Rajacek",
"provider_latency_ms": 812,
"attempts": 1,
"rajacek_processing_ms": 6,
"total_latency_ms": 818,
"cached": false,
"remaining_quota": 4999,
"expires_at": "2027-01-21T10:00:00Z"
}
}
Autentikasi
Setiap request harus membawa API key Anda. Ada tiga cara mengirimnya:
X-API-Key: rc_KUNCI_ANDA
# atau
Authorization: Bearer rc_KUNCI_ANDA
Cara ketiga, khusus /api/v3/validate: kirim api_key lewat query (GET) atau field api_key di body JSON (POST). Jika lebih dari satu sumber dikirim dengan nilai berbeda, request ditolak 401. Jangan bagikan URL yang masih mengandung api_key. Kunci di query bisa tercatat di log server dan riwayat browser.
- Setiap kunci punya izin (scope) per produk:
validate:bank_account,validate:ewallet,validate:whatsapp,validate:pln, atauvalidate:*untuk semua produk. Kunci tanpa izin produk ditolak 403. - Kunci hanya ditampilkan satu kali, saat dibuat. Setelah itu server hanya menyimpan hash-nya. Kunci asli tidak bisa ditampilkan lagi.
- Jika kunci Anda bocor, segera hubungi kami (email [email protected] atau Telegram @xyz_yaz) agar kunci itu dicabut. Kunci yang sudah dicabut langsung ditolak 401.
Idempotensi
Idempotency-Key adalah kode unik untuk satu operasi, misalnya nomor order. Anda yang menentukannya. Fungsinya: jika request yang sama terkirim dua kali, hasilnya tidak diproses dua kali. Isi dengan 8–200 karakter ASCII tanpa spasi. Header ini dianjurkan. Jika tidak dikirim atau kosong, server membuatkan kode otomatis dan mengembalikannya di header respons Idempotency-Key. Request tetap jalan, tetapi pengiriman ulang akan dihitung sebagai cek baru.
GET tidak idempotent. Setiap GET ke /api/v3/validate adalah cek baru. Pengiriman ulang GET tidak memutar respons dan bisa tertagih lagi. Untuk operasi yang harus aman diulang, pakai POST dengan Idempotency-Key yang sama.
- Retry dengan kunci dan isi yang persis sama → Anda menerima respons yang sama persis (header
X-Idempotent-Replay: true). Kuota tidak terpotong dua kali. - Kunci yang sama tetapi isi berbeda → ditolak 409.
- Jika request pertama masih diproses, sistem menunggu sebentar lalu memberikan hasilnya. Jika terlalu lama, jawabannya 409.
Pembelian paket (portal member)
Member bisa membeli paket sendiri dengan QRIS lewat portal. Alurnya: lihat pratinjau → buat order → pindai QR → tekan "Saya sudah bayar". Ketentuannya:
- Kuota tidak pernah hilang karena membeli. Kuota paket baru ditambahkan ke sisa kuota Anda. Setiap paket punya masa aktif sendiri. Paket baru tidak mengubah masa aktif paket lama. Total kuota yang tampil adalah gabungan semua paket yang masih aktif. Pemakaian selalu menghabiskan paket yang paling cepat kedaluwarsa dulu. Paket yang sudah kedaluwarsa tidak bisa dipakai lagi, walau paket lain masih aktif. Rate limit menjadi yang terbesar antara rate aktif dan rate paket baru.
- Tanggal di
meta.expires_atadalah masa aktif paket yang sedang dipakai, bukan tanggal kunci mati. Contoh normal: beli 26 Okt (aktif sampai 25 Nov), lalu beli lagi 10 Nov sebelum kedaluwarsa (paket baru sampai 10 Des). Paket lama tetap sampai 25 Nov. Kuota bertambah. Pemakaian menghabiskan paket lama dulu. Tanggal dimetatetap 25 Nov sampai paket lama habis atau lewat, lalu otomatis jadi 10 Des. - Perhatian: tanggal ini bisa maju lebih awal setelah Anda beli lagi. Contoh: paket lama masih bersisa sampai 21 Jan 2027, lalu Anda beli lagi 26 Okt (paket baru sampai 25 Nov 2026). Tanggal di
metajadi 25 Nov 2026 karena paket baru dipakai dulu (yang paling cepat kedaluwarsa). Setelah 25 Nov lewat, tanggal otomatis kembali ke 21 Jan 2027. Kunci tidak bisa dipakai bila semua paket sudah lewat masa aktifnya. - Satu order menunggu per member. Membuat order kedua selagi ada order menunggu akan mengembalikan order yang sama, bukan QR baru.
- QR berlaku sesuai masa yang ditampilkan (hitungan mundur di portal). Order yang kedaluwarsa atau dibatalkan tidak memotong apa pun.
- Pembayaran yang sudah lunas tetapi nominalnya tidak cocok, atau membernya dinonaktifkan, ditahan untuk peninjauan. Kuota tidak di-grant otomatis sampai peninjauan selesai.
- Harga promo: jika ada promo aktif pada suatu paket, harga yang tampil di portal (harga asli dicoret + badge promo + hitung mundur) adalah harga yang benar-benar ditagih, bukan pajangan.
- Endpoint pembelian hanya tersedia lewat sesi portal (
/v1/member/packages,/v1/member/ordersdan turunannya), bukan lewat API key validasi.
Rate limit & kuota
- Batas bawaan: 60 request per menit untuk setiap kunci. Sisa jatah Anda ada di header respons
X-RateLimit-Remaining. Jika batas terlampaui, API menjawab 429. Tunggu sebentar (lihat headerRetry-After), lalu coba lagi. - Valid dan Belum KYC memotong 1 hit. Hasil Tidak Valid gratis hingga 100 per hari per kunci, selebihnya 1 hit. Tepatnya: hasil
validdannot_kyc(akun e-wallet belum KYC) selalu memotong 1 hit. Hasilinvaliddannot_found— satu pool bersama — gratis untuk 100 hasil pertama per kunci per hari kalender WIB. Mulai hasil tidak-valid ke-101 pada hari itu, masing-masing memotong 1 hit seperti biasa. Cek yang gagal karena error, pending, atau kena rate limit tidak memotong kuota dan tidak memakan jatah gratis. Pengiriman ulang denganIdempotency-Keyyang sama tidak pernah memotong dan tidak memakan jatah. Catatan: kunci bersaldo 0 tetap ditolak402sebelum cek berjalan. Jadi jatah gratis hanya bisa dipakai selama saldo masih di atas 0. Hitungan gratis hari ini tampil di portal member. Pool terikat prefix kunci, bukan member. Regenerasi menerbitkan prefix baru, sehingga jatah hari itu dimulai baru untuk kunci baru. Jatah kunci lama tidak terbawa. - Sisa kuota Anda selalu tampil di
meta.remaining_quotapada setiap respons. - Masa aktif paket Anda tampil di
meta.expires_atpada setiap respons. Ini tanggal kedaluwarsa paket yang sedang dipakai (paket yang paling cepat habis). Nilainya sama persis dengan yang tampil di portal member. Nilainullberarti kunci Anda tidak pernah kedaluwarsa. Pengiriman ulang denganIdempotency-Keyyang sama tetap menampilkan tanggal terbaru, bukan tanggal saat request pertama.
Daftar bank GET /v1/banks
Endpoint ini gratis, tanpa API key. Hasilnya: daftar semua bank yang didukung beserta kode resminya (3 digit). Pakai nilai code_bank sebagai code saat mengecek rekening lewat /api/v3/validate.
[
{ "code_bank": "002", "name_bank": "BRI" },
{ "code_bank": "008", "name_bank": "MANDIRI" },
{ "code_bank": "009", "name_bank": "BNI" },
{ "code_bank": "014", "name_bank": "BCA" }
]
Validasi rekening GET POST /api/v3/validate
| Field | Wajib | Keterangan |
|---|---|---|
code | Ya | Kode bank 3 digit dari GET /v1/banks (mis. 014 = BCA). |
accountNumber | Ya | Nomor rekening 6–32 karakter (angka, spasi, dan tanda hubung diperbolehkan). |
Contoh request dan respons sukses ada di Mulai cepat. Jika nomor tidak ditemukan di bank tujuan, respons tetap HTTP 200 dengan status: "not_found". Hasil ini masuk pool gratis invalid/not_found (gratis 100 pertama per hari per kunci, selebihnya 1 hit; lihat Rate limit & kuota):
{
"request_id": "Qm3Za8Kd1s",
"status": "not_found",
"valid": false,
"product": "bank_account",
"message": "Respons diterima dari provider validasi.",
"result": {
"account_number": "1234667890",
"service_code": "014",
"bank_name": "BCA",
"account_name": "DATA TIDAK DITEMUKAN"
},
"meta": {
"provider": "Rajacek",
"provider_latency_ms": 640,
"rajacek_processing_ms": 5,
"total_latency_ms": 645,
"cached": false,
"remaining_quota": 4998
}
}
Scope: validate:bank_account.
Validasi e-wallet GET POST /api/v3/validate
| Field | Wajib | Keterangan |
|---|---|---|
code | Ya | Isi dengan salah satu kode e-wallet di bawah. |
accountNumber | Ya | Nomor akun/nomor HP e-wallet 6–32 karakter. |
Kode e-wallet yang didukung: dana, gopay, gopay_driver, ovo, shopeepay, linkaja, astrapay, isaku, kaspro.
curl "https://www.rajacek.com/api/v3/validate?code=gopay&accountNumber=081234567890&api_key=rc_CONTOH"
Atau POST dengan Idempotency-Key:
curl -X POST https://www.rajacek.com/api/v3/validate \
-H "Content-Type: application/json" \
-H "X-API-Key: rc_CONTOH" \
-H "Idempotency-Key: topup-20261021-0007" \
-d '{"code": "gopay", "accountNumber": "081234567890"}'
Respons sukses (HTTP 200):
{
"request_id": "Vz81hNqP4e",
"status": "valid",
"valid": true,
"product": "ewallet",
"message": "Respons diterima dari provider validasi.",
"result": {
"account_number": "081234567890",
"service_code": "gopay",
"account_name": "SARI DEWI",
"registered": true
},
"meta": {
"provider": "Rajacek",
"provider_latency_ms": 433,
"rajacek_processing_ms": 4,
"total_latency_ms": 437,
"cached": false,
"remaining_quota": 4997
}
}
Scope: validate:ewallet.
Validasi WhatsApp GET POST /api/v3/validate
| Field | Wajib | Keterangan |
|---|---|---|
code | Ya | Isi whatsapp. |
accountNumber | Ya | Nomor format internasional (+628...) atau lokal (08...). |
curl "https://www.rajacek.com/api/v3/validate?code=whatsapp&accountNumber=081234567890&api_key=rc_CONTOH"
Atau POST dengan Idempotency-Key:
curl -X POST https://www.rajacek.com/api/v3/validate \
-H "Content-Type: application/json" \
-H "X-API-Key: rc_CONTOH" \
-H "Idempotency-Key: wa-20261021-0003" \
-d '{"code": "whatsapp", "accountNumber": "081234567890"}'
Respons nomor terdaftar WhatsApp (HTTP 200):
{
"request_id": "Rt5wXc92Nb",
"status": "valid",
"valid": true,
"product": "whatsapp",
"message": "Respons diterima dari provider validasi.",
"result": {
"phone_number": "+6281234567890",
"service_code": "whatsapp",
"registered": true
},
"meta": {
"provider": "Rajacek",
"provider_latency_ms": 388,
"rajacek_processing_ms": 4,
"total_latency_ms": 392,
"cached": false,
"remaining_quota": 4996
}
}
Nomor yang tidak terdaftar menghasilkan status: "invalid" dengan result: { "phone_number": "...", "service_code": "whatsapp", "registered": false }. Bentuk field lainnya sama.
Scope: validate:whatsapp. Gunakan layanan ini dengan bertanggung jawab. Bukan untuk spam atau mengumpulkan nomor secara massal.
Validasi PLN GET POST /api/v3/validate
Produk pln memeriksa ID pelanggan PLN (11–12 digit numerik). Di portal member, pilih tab PLN di Coba Cek Live lalu masukkan ID pelanggan. Lewat API, pakai code=pln dan accountNumber berisi ID pelanggan. Scope: validate:pln (atau validate:*).
curl "https://www.rajacek.com/api/v3/validate?code=pln&accountNumber=123456789012&api_key=rc_CONTOH"
Hasil valid (HTTP 200) menampilkan nama pelanggan (account_name, selalu huruf besar semua). Bila tersedia, tampil juga tarif dan daya:
{
"status": "valid",
"valid": true,
"product": "pln",
"result": {
"account_name": "NAMA PELANGGAN",
"tarif": "R1",
"daya": "1300"
},
"meta": {
"provider": "Rajacek"
}
}
tarif dan daya hanya ada untuk PLN, dan hanya bila tersedia pada hasil valid. Produk lain tidak membawa field ini. meta.provider tetap "Rajacek". Nama provider upstream tidak pernah ditampilkan di permukaan member.
Status hasil (respons 200)
status | Arti | Tertagih |
|---|---|---|
valid | Nomor ditemukan dan terdaftar. | Ya |
invalid | Nomor diperiksa, tetapi tidak valid atau tidak aktif. | Ya |
not_found | Nomor tidak ditemukan di bank atau layanan tujuan. | Ya |
not_kyc | Khusus e-wallet: nomor terdaftar, tetapi akun belum KYC. Jawaban upstream hanya berupa penanda "belum premium" atau gema nomor itu sendiri, bukan nama pemilik. Karena itu account_name tidak ditampilkan dan registered bernilai false. | Ya |
pending | Hasil akhir belum tersedia; coba lagi nanti. | Tidak |
Isi result selalu memuat nomor yang Anda cek dan kode layanannya. Nomor: account_number untuk bank dan e-wallet, phone_number untuk WhatsApp. Kode layanan (service_code): kode bank 3 digit, nama e-wallet seperti dana, atau whatsapp. Untuk bank ada juga bank_name, misalnya BCA atau BRI. Untuk PLN, hasil valid dilengkapi tarif dan daya bila tersedia. Bila tersedia, hasil juga dilengkapi account_name (nama pemilik, selalu huruf besar semua), registered (terdaftar atau tidak), dan reference.
Kode error
Jika request gagal, responsnya selalu berbentuk { "code", "message", "request_id" }. Simpan request_id itu. Sertakan saat menghubungi kami agar masalah Anda cepat ditelusuri. Contoh respons saat kena rate limit (429):
{
"code": "rate_limited",
"message": "Batas laju tercapai; coba lagi nanti.",
"request_id": "Hs92kLm4Qx"
}
| HTTP | code | Arti & tindakan |
|---|---|---|
| 400 | bad_request | Ada field yang hilang, formatnya salah, atau kode bank/e-wallet tidak dikenal. Periksa lagi isi request Anda. |
| 401 | unauthorized | Kunci tidak ada, salah, atau sudah dicabut. |
| 402 | quota_exhausted | Kuota paket Anda habis. Beli paket di portal member untuk menambah kuota. |
| 403 | forbidden | API key Anda tidak punya izin (scope) untuk produk ini. |
| 409 | conflict | Idempotency-Key yang sama sudah dipakai dengan isi berbeda, atau request sebelumnya masih diproses. Untuk operasi baru, pakai kunci baru. |
| 429 | rate_limited | Anda terlalu cepat (rate limit) atau antrean sedang penuh. Tunggu sesuai header Retry-After, lalu coba lagi. |
| 502 | provider_error | Layanan pemeriksa memberi respons yang tidak bisa diproses. Aman diulang dengan Idempotency-Key yang sama. |
| 503 | service_unavailable | Layanan pemeriksa sedang tidak tersedia, atau produk ini belum aktif. Coba lagi beberapa saat. |
Kami sudah mencoba lagi untuk Anda. Jika layanan pemeriksa gagal sesaat (timeout, sedang sibuk, atau respons rusak), Rajacek otomatis mengulang sampai 2 kali sebelum menyerah. Jawaban yang sudah pasti — misalnya "tidak ditemukan" — tidak pernah diulang.
Cara aman mengulang: untuk error 429, 502, dan 503, kirim ulang request yang sama persis dengan Idempotency-Key yang sama. Anda tidak akan ditagih dua kali.
OpenAPI JSON
Untuk Postman atau SDK sendiri, unduh spesifikasinya di /openapi.json (OpenAPI 3.1). Impor ke Postman/Insomnia atau generator klien favorit Anda. Isinya hanya endpoint untuk member.
FAQ
Apakah nama pemilik rekening selalu tersedia?
Umumnya tersedia untuk bank dan e-wallet. Untuk WhatsApp tidak ada nama. Yang menjadi acuan adalah registered (terdaftar atau tidak).
Request saya 200 tetapi valid: false — apakah ditagih?
Lihat status-nya. not_kyc selalu tertagih. invalid dan not_found masuk pool gratis (gratis 100 pertama per hari per kunci, selebihnya 1 hit). pending tidak tertagih.
Berapa lama respons idempotensi disimpan?
Respons idempotensi disimpan 24 jam. Lewat dari itu, kunci yang sama dianggap operasi baru.
Bolehkan saya memakai satu kunci untuk banyak server?
Boleh. Tetapi lebih aman dan rapi bila setiap aplikasi atau lingkungan punya kunci sendiri. Jika ada masalah, Anda cukup mencabut satu kunci itu saja.
Rajacek API · Dokumentasi member · Terakhir diselaraskan dengan kontrak API pada 29 Oktober 2026.
