API Reseller SakuTopup
Dokumentasi API versi v1.0.5 untuk integrasi saldo, price list, transaksi, dan pengecekan status. Check ID tetap menggunakan sistem Check ID yang sudah tersedia dan didokumentasikan terpisah.
Autentikasi
API Key adalah secret dan tidak dikirim sebagai parameter JSON. Client menghitung signature menggunakan API Key miliknya.
| Operasi | Signature |
|---|---|
| Cek Saldo | md5(api_id + api_key) |
| Price List | md5(api_id + api_key) |
| Transaction / Cek Status | md5(api_id + api_key + ref_id) |
API ID dan API Key dibuat dari Pengaturan API. Simpan API Key di server/SDK, bukan di frontend publik.
Quick Start
Login → Pengaturan API → buat API ID + API Key.
Hitung
md5(api_id + api_key), lalu POST ke /cek-saldo.POST
/price-list. Gunakan field code sebagai kode produk saat transaksi.POST
/transaction dengan ref_id unik dan signature transaksi.Gunakan endpoint
/status hanya dengan ref_id yang sama. Tidak perlu mengirim code/target. Endpoint status hanya membaca transaksi dan tidak membuat transaksi baru.$apiId = 'API116-XXXXXXXX'; $apiKey = 'AKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; $refId = 'TRX-20260903-0001'; $sign = md5($apiId . $apiKey . $refId);
Akun
Cek Saldo
| Parameter | Wajib | Keterangan |
|---|---|---|
api_id | Ya | API ID dari Pengaturan API. |
sign | Ya | MD5(api_id + api_key). |
{
"api_id": "API116-XXXXXXXX",
"sign": "md5(api_id + api_key)"
}{
"success": true,
"data": {
"balance": 150000,
"points": 2500
}
}Profil Akun
| Parameter | Wajib | Keterangan |
|---|---|---|
api_id | Ya | API ID dari Pengaturan API. |
sign | Ya | MD5(api_id + api_key). |
{
"api_id": "API116-XXXXXXXX",
"sign": "md5(api_id + api_key)"
}{
"success": true,
"data": {
"username": "developer",
"role": "Super Admin",
"referral": "RES-XXXXXXXX",
"check_id_token": 188
}
}Produk
Price List
| Parameter | Wajib | Keterangan |
|---|---|---|
api_id | Ya | API ID dari Pengaturan API. |
sign | Ya | MD5(api_id + api_key). |
search | Tidak | Filter kode/nama produk atau kategori. |
{
"api_id": "API116-XXXXXXXX",
"sign": "md5(api_id + api_key)",
"search": "Mobile Legends"
}{
"data": [
{
"product_name": "5 Diamonds",
"code": "MLA5-S13",
"price": 1529,
"status": "active"
}
]
}Transaksi
Transaction
| Parameter | Wajib | Keterangan |
|---|---|---|
api_id | Ya | API ID dari Pengaturan API. |
sign | Ya | MD5(api_id + api_key + ref_id). |
ref_id | Ya | ID transaksi unik dari sistem Anda. |
code | Ya | Kode produk dari Price List. |
target | Ya | User ID/nomor tujuan. |
zone | Tidak | Server/zone bila produk membutuhkannya. |
nickname | Tidak | Nickname hasil Check ID jika tersedia. |
nomor | Tidak | Nomor WhatsApp/pelanggan; default dari akun reseller. |
{
"api_id": "API116-XXXXXXXX",
"sign": "md5(api_id + api_key + ref_id)",
"ref_id": "TRX-20260903-0001",
"code": "MLA5-S13",
"target": "290716936",
"zone": "9508",
"nickname": "Nama Player"
}{
"success": true,
"trx_id": "TRX260903XXXX",
"status": "Pending"
}Cek Status
/status.Gunakan
ref_id yang sudah pernah dipakai. Request dengan ref_id yang sama tidak membuat order baru.| Parameter | Wajib | Keterangan |
|---|---|---|
api_id | Ya | API ID dari Pengaturan API. |
sign | Ya | MD5(api_id + api_key + ref_id). |
ref_id | Ya | ref_id transaksi yang sudah dibuat. Tidak perlu mengirim code/target untuk cek status. |
{
"api_id": "API116-XXXXXXXX",
"sign": "md5(api_id + api_key + ref_id)",
"ref_id": "TRX-20260903-0001"
}{
"success": true,
"code": "SUCCESS",
"message": "OK",
"data": {
"ref_id": "TRX-20260903-0001",
"trx_id": "TRX260903XXXX",
"status": "Sukses",
"sn": "SN-123456789"
}
}Check ID
Check ID tidak menggunakan API ID + Sign reseller. Endpoint ini memakai API Key Check ID yang telah dikonfigurasi pada sistem dan token Check ID sesuai pengaturan akun.
Parameter Request
| Parameter | Wajib | Tipe | Keterangan |
|---|---|---|---|
type | Ya | string | Jenis Check ID. Nilai yang didukung: game, emoney/ewallet, pln, atau bank. |
code | Ya | string | Kode Check ID yang dipublikasikan, misalnya mobile-legends atau free-fire. |
target | Ya | string | ID akun, nomor pelanggan, nomor tujuan, atau target yang akan diverifikasi. |
zone | Kondisional | string | Server/zone akun jika layanan membutuhkannya. Untuk game tanpa zone, tidak perlu dikirim. |
Content-Type: application/jsonEndpoint memakai mekanisme autentikasi Check ID yang dikonfigurasi di server. API ID dan Sign reseller tidak diperlukan.
Contoh Body JSON — Mobile Legends
{
"type": "game",
"code": "mobile-legends",
"target": "290716936",
"zone": "9508"
}Contoh Body JSON — Free Fire
{
"type": "game",
"code": "free-fire",
"target": "123456789"
}Contoh Response Berhasil
{
"success": true,
"code": "SUCCESS",
"message": "OK",
"data": {
"type": "game",
"code": "mobile-legends",
"name": "Mobile Legends",
"target": "290716936",
"zone": "9508",
"nickname": "Nama Player",
"data": {
"status": "valid"
},
"tokens_charged": 1,
"token_balance": 99,
"reference": "CHK-20260904104600-A1B2C3D4"
}
}Contoh Response Gagal — Belum Dikonfigurasi
{
"success": false,
"code": "CHECK_NOT_CONFIGURED",
"message": "Check ID ini belum tersedia atau belum dipublikasikan.",
"data": null
}mobile-legends dan free-fire akan diproses hanya jika mapping Check ID-nya aktif dan dipublikasikan. Daftar yang tampil di bawah berasal dari mapping publik yang tersedia.Game
Biaya 1 token / cekaethergazer
aov
autochess
azurlane
badlanders
barbarq
basketrio
cod
dragoncity
fcmobile
free-fire
genshin-impact
hago
honkai-star-rail
hok
mcgg
mobile-legends
pointblank
pubgm
roblox
undawn
valorant
zenlesszonezero
E-Wallet Maintenance
Biaya 15 token / cekdana
gopay
linkaja
ovo
shopeepay
PLN
Biaya 10 token / cekBank Maintenance
Biaya 20 token / cek014
009
002
542
008
490
503
535
Webhook Status Transaksi
Webhook tidak membuat transaksi baru. Webhook hanya memberitahukan perubahan status transaksi API.
| Header | Keterangan |
|---|---|
X-SakuTopup-Event | transaction.status.pending, transaction.status.sukses, atau transaction.status.gagal. |
X-SakuTopup-Timestamp | Unix timestamp saat webhook dibuat. |
X-SakuTopup-Signature | sha256=HMAC_SHA256(timestamp + '.' + raw_json, webhook_secret). |
X-SakuTopup-Delivery | ID delivery internal untuk tracing. |
Contoh Payload
{
"event": "transaction.status.sukses",
"success": true,
"data": {
"ref_id": "TRX-20260905-0001",
"trx_id": "TRX260905XXXX",
"status": "Sukses",
"sn": "SN-123456",
"service": "5 Diamonds",
"target": "290716936",
"zone": "9508",
"price": 1500,
"updated_at": "2026-09-05T06:00:00+07:00"
}
}IP Server
IP server aplikasi yang dapat digunakan sebagai referensi whitelist: 82.25.62.250. Dari log API yang tersedia, request keluar server juga tercatat dari 82.25.62.250; verifikasi di cPanel sebelum whitelist.
Keamanan & Konfigurasi
API Key
API Key adalah secret. Jangan ditaruh di JavaScript/frontend publik atau dikirim sebagai field JSON.
Signature
Gunakan API Key untuk menghitung MD5 sesuai operasi. Server akan memverifikasi signature sebelum request diproses.
ref_id
Satu ref_id mewakili satu transaksi logis. Retry transaksi harus mempertahankan ref_id yang sama.
Rate Limit
Endpoint transaction dibatasi untuk mencegah request berulang yang berlebihan.
HTTP Status
| 200 | Request berhasil. |
| 401 | API ID atau signature tidak valid. |
| 403 | Akses API akun tidak diizinkan. |
| 404 | Produk/transaksi tidak ditemukan. |
| 409 | ref_id sudah digunakan dengan payload berbeda. |
| 422 | Parameter tidak valid atau transaksi gagal. |
| 429 | Terlalu banyak request. |
| 503 | API sedang dinonaktifkan. |