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.

https://sakutopup.web.id/api/v1
v1.0.5Versi API
5Dokumentasi operasi
POST + JSONFormat request

Autentikasi

API reseller menggunakan API ID + API Key + Sign.
API Key adalah secret dan tidak dikirim sebagai parameter JSON. Client menghitung signature menggunakan API Key miliknya.
OperasiSignature
Cek Saldomd5(api_id + api_key)
Price Listmd5(api_id + api_key)
Transaction / Cek Statusmd5(api_id + api_key + ref_id)
Content-Type: application/json

API ID dan API Key dibuat dari Pengaturan API. Simpan API Key di server/SDK, bukan di frontend publik.

Quick Start

1. Buat credential.
Login → Pengaturan API → buat API ID + API Key.
2. Cek saldo.
Hitung md5(api_id + api_key), lalu POST ke /cek-saldo.
3. Ambil produk.
POST /price-list. Gunakan field code sebagai kode produk saat transaksi.
4. Buat transaksi.
POST /transaction dengan ref_id unik dan signature transaksi.
5. Cek status.
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

Mengecek saldo akun reseller yang dapat digunakan untuk transaksi.
POST
POSThttps://sakutopup.web.id/api/v1/cek-saldo
ParameterWajibKeterangan
api_idYaAPI ID dari Pengaturan API.
signYaMD5(api_id + api_key).
Contoh Body JSON
{
    "api_id": "API116-XXXXXXXX",
    "sign": "md5(api_id + api_key)"
}
Contoh Response
{
    "success": true,
    "data": {
        "balance": 150000,
        "points": 2500
    }
}

Profil Akun

Mengambil username, role, kode referral, dan token Check ID milik akun API yang sedang terautentikasi.
POST
POSThttps://sakutopup.web.id/api/v1/profil
ParameterWajibKeterangan
api_idYaAPI ID dari Pengaturan API.
signYaMD5(api_id + api_key).
Contoh Body JSON
{
    "api_id": "API116-XXXXXXXX",
    "sign": "md5(api_id + api_key)"
}
Contoh Response
{
    "success": true,
    "data": {
        "username": "developer",
        "role": "Super Admin",
        "referral": "RES-XXXXXXXX",
        "check_id_token": 188
    }
}

Produk

Price List

Mengambil semua produk aktif beserta kode dan harga sesuai role akun.
POST
POSThttps://sakutopup.web.id/api/v1/price-list
ParameterWajibKeterangan
api_idYaAPI ID dari Pengaturan API.
signYaMD5(api_id + api_key).
searchTidakFilter kode/nama produk atau kategori.
Contoh Body JSON
{
    "api_id": "API116-XXXXXXXX",
    "sign": "md5(api_id + api_key)",
    "search": "Mobile Legends"
}
Contoh Response
{
    "data": [
        {
            "product_name": "5 Diamonds",
            "code": "MLA5-S13",
            "price": 1529,
            "status": "active"
        }
    ]
}

Transaksi

Transaction

Membuat transaksi menggunakan saldo reseller. ref_id bersifat unik dan aman untuk retry.
POST
POSThttps://sakutopup.web.id/api/v1/transaction
ParameterWajibKeterangan
api_idYaAPI ID dari Pengaturan API.
signYaMD5(api_id + api_key + ref_id).
ref_idYaID transaksi unik dari sistem Anda.
codeYaKode produk dari Price List.
targetYaUser ID/nomor tujuan.
zoneTidakServer/zone bila produk membutuhkannya.
nicknameTidakNickname hasil Check ID jika tersedia.
nomorTidakNomor WhatsApp/pelanggan; default dari akun reseller.
Contoh Body JSON
{
    "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"
}
Contoh Response
{
    "success": true,
    "trx_id": "TRX260903XXXX",
    "status": "Pending"
}

Cek Status

Gunakan endpoint status dengan ref_id yang sama. Sistem mengembalikan status terbaru tanpa membuat transaksi baru.
POST
POSThttps://sakutopup.web.id/api/v1/status
Status menggunakan endpoint /status.
Gunakan ref_id yang sudah pernah dipakai. Request dengan ref_id yang sama tidak membuat order baru.
ParameterWajibKeterangan
api_idYaAPI ID dari Pengaturan API.
signYaMD5(api_id + api_key + ref_id).
ref_idYaref_id transaksi yang sudah dibuat. Tidak perlu mengirim code/target untuk cek status.
Contoh Body JSON
{
    "api_id": "API116-XXXXXXXX",
    "sign": "md5(api_id + api_key + ref_id)",
    "ref_id": "TRX-20260903-0001"
}
Contoh Response
{
    "success": true,
    "code": "SUCCESS",
    "message": "OK",
    "data": {
        "ref_id": "TRX-20260903-0001",
        "trx_id": "TRX260903XXXX",
        "status": "Sukses",
        "sn": "SN-123456789"
    }
}

Check ID

Check ID menggunakan endpoint v1 khusus.
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.
POSThttps://sakutopup.web.id/api/v1/check-id

Parameter Request

ParameterWajibTipeKeterangan
typeYastringJenis Check ID. Nilai yang didukung: game, emoney/ewallet, pln, atau bank.
codeYastringKode Check ID yang dipublikasikan, misalnya mobile-legends atau free-fire.
targetYastringID akun, nomor pelanggan, nomor tujuan, atau target yang akan diverifikasi.
zoneKondisionalstringServer/zone akun jika layanan membutuhkannya. Untuk game tanpa zone, tidak perlu dikirim.
Header.
Content-Type: application/json
Endpoint 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
}
Catatan kode.
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 / cek
Aether Gazer aethergazer
Arena of Valor aov
Auto Chess autochess
Azur Lane azurlane
Badlanders badlanders
BarbarQ barbarq
Basketrio basketrio
Call of Duty Mobile cod
Dragon City dragoncity
FC Mobile fcmobile
Free Fire free-fire
Genshin Impact genshin-impact
Hago hago
Honkai Star Rail honkai-star-rail
Honor of Kings hok
Magic Chess: Go Go mcgg
Mobile Legends mobile-legends
PointBlank pointblank
PUBG MOBILE pubgm
ROBLOX roblox
Undawn undawn
VALORANT valorant
Zenless Zone Zero zenlesszonezero

E-Wallet Maintenance

Biaya 15 token / cek
DANA dana
GOPAY gopay
LINK AJA linkaja
OVO ovo
SHOPEEPAY shopeepay

PLN

Biaya 10 token / cek
CEK PLN Maintenance

Bank Maintenance

Biaya 20 token / cek
BCA 014
BNI 009
BRI 002
JAGO 542
Mandiri 008
Neo Commerce 490
NOBU Bank 503
SeaBank 535

Webhook Status Transaksi

Webhook dikirim server ke URL webhook milik API Key.
Webhook tidak membuat transaksi baru. Webhook hanya memberitahukan perubahan status transaksi API.
HeaderKeterangan
X-SakuTopup-Eventtransaction.status.pending, transaction.status.sukses, atau transaction.status.gagal.
X-SakuTopup-TimestampUnix timestamp saat webhook dibuat.
X-SakuTopup-Signaturesha256=HMAC_SHA256(timestamp + '.' + raw_json, webhook_secret).
X-SakuTopup-DeliveryID 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

200Request berhasil.
401API ID atau signature tidak valid.
403Akses API akun tidak diizinkan.
404Produk/transaksi tidak ditemukan.
409ref_id sudah digunakan dengan payload berbeda.
422Parameter tidak valid atau transaksi gagal.
429Terlalu banyak request.
503API sedang dinonaktifkan.