📡 API Documentation
Integrasi layanan top-up otomatis ke website atau aplikasi Anda.
🔑 Authentication
Semua request ke API memerlukan API Key yang dikirim via header Authorization.
Authorization: Bearer YOUR_API_KEY Content-Type: application/json
Dapatkan API Key dari Dashboard → Pengaturan → API Key. Jangan bagikan API Key ke siapapun!
Base URL:
https://topup.hanyademo.com/api
💰 Cek Saldo
Cek sisa saldo akun reseller.
GET
/api/balance
Response
{
"success": true,
"data": {
"balance": 500000,
"formatted": "Rp 500.000"
}
}
📂 Daftar Kategori
Ambil semua kategori game yang tersedia.
GET
/api/categories
Response
{
"success": true,
"data": [
{
"id": 1,
"name": "Mobile Legends",
"slug": "mobile-legends",
"product_count": 15
}
]
}
📦 Daftar Produk
Ambil semua produk yang tersedia.
GET
/api/products
Query Parameters
| Parameter | Type | Keterangan |
|---|---|---|
category_id | int | Filter berdasarkan kategori (opsional) |
search | string | Cari nama produk (opsional) |
Response
{
"success": true,
"data": [
{
"id": 1,
"sku": "ml-86",
"name": "86 Diamonds",
"category": "Mobile Legends",
"price": 22000,
"status": "active"
}
]
}
🔍 Detail Produk
Ambil detail satu produk beserta field yang dibutuhkan.
GET
/api/products/{id}
Response
{
"success": true,
"data": {
"id": 1,
"name": "86 Diamonds",
"price": 22000,
"fields": [
{ "name": "user_id", "label": "User ID", "required": true },
{ "name": "zone_id", "label": "Zone ID", "required": true }
]
}
}
🎮 Cek Game ID
Validasi ID game customer sebelum order.
POST
/api/check-id
Request Body
{
"game": "mobile-legends",
"user_id": "123456789",
"zone_id": "1234"
}
Response
{
"success": true,
"data": {
"valid": true,
"username": "PlayerName"
}
}
🛒 Buat Pesanan
Buat pesanan baru (otomatis potong saldo).
POST
/api/order
Request Body
{
"product_id": 1,
"game_id": "123456789",
"zone_id": "1234",
"customer_name": "Budi",
"customer_phone": "08123456789",
"voucher_code": "PROMO10"
}
Response (sukses)
{
"success": true,
"data": {
"invoice": "INV-20260228-ABC123",
"product": "86 Diamonds",
"total": 22000,
"status": "processing"
}
}
Response (saldo tidak cukup)
{
"success": false,
"message": "Saldo tidak cukup. Saldo: Rp 10.000, harga: Rp 22.000"
}
📋 Cek Status Pesanan
Cek status pesanan berdasarkan invoice number.
GET
/api/order/{invoice}
Response
{
"success": true,
"data": {
"invoice": "INV-20260228-ABC123",
"status": "success",
"serial_number": "SN123456",
"completed_at": "2026-02-28 12:01:30"
}
}
Status Order
| Status | Keterangan |
|---|---|
| pending | Menunggu pembayaran |
| processing | Sedang diproses |
| success | Berhasil |
| failed | Gagal |
| refunded | Dikembalikan |
📜 Riwayat Pesanan
Ambil semua riwayat pesanan reseller.
GET
/api/orders
Query Parameters
| Parameter | Type | Keterangan |
|---|---|---|
status | string | Filter status (opsional) |
page | int | Halaman (default: 1) |
per_page | int | Per halaman (default: 20, max: 100) |
date_from | date | Dari tanggal (Y-m-d) |
date_to | date | Sampai tanggal (Y-m-d) |
⚠️ Error Codes
| HTTP Code | Keterangan |
|---|---|
200 | Sukses |
400 | Request tidak valid (field kurang/salah) |
401 | Unauthorized — API key salah/expired |
403 | Forbidden — akun diblokir |
404 | Data tidak ditemukan |
422 | Validation error |
429 | Rate limit exceeded |
500 | Server error |
⏱️ Rate Limiting
60 request per menit per API key.
Jika melebihi limit, akan mendapat response
429 Too Many Requests. Cek header X-RateLimit-Remaining untuk sisa quota.⚡ Webhook Callback
Terima notifikasi otomatis saat status order berubah. Set webhook URL di dashboard reseller.
POST
{webhook_url_anda}
Body yang diterima
{
"event": "order.updated",
"data": {
"invoice": "INV-20260228-ABC123",
"status": "success",
"serial_number": "SN123456"
},
"signature": "sha256_hmac_signature"
}
Validasi signature:
hash_hmac('sha256', json_encode($data), $api_key)💻 Contoh Kode
PHP
JavaScript
Python
// Cek Saldo $ch = curl_init("https://topup.hanyademo.com/api/balance"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json" ] ]); $response = json_decode(curl_exec($ch), true); echo "Saldo: " . $response['data']['formatted']; // Buat Pesanan $ch = curl_init("https://topup.hanyademo.com/api/order"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer YOUR_API_KEY", "Content-Type: application/json" ], CURLOPT_POSTFIELDS => json_encode([ 'product_id' => 1, 'game_id' => '123456789', 'zone_id' => '1234', ]) ]); $order = json_decode(curl_exec($ch), true);
// Cek Saldo const res = await fetch("https://topup.hanyademo.com/api/balance", { headers: { Authorization: `Bearer YOUR_API_KEY` } }); const data = await res.json(); console.log("Saldo:", data.data.formatted); // Buat Pesanan const order = await fetch("https://topup.hanyademo.com/api/order", { method: "POST", headers: { Authorization: `Bearer YOUR_API_KEY`, "Content-Type": "application/json" }, body: JSON.stringify({ product_id: 1, game_id: "123456789", zone_id: "1234" }) }).then(r => r.json());
import requests API_KEY = 'YOUR_API_KEY' BASE = 'https://topup.hanyademo.com/api' headers = {'Authorization': f'Bearer {API_KEY}'} # Cek Saldo balance = requests.get(f'{BASE}/balance', headers=headers).json() print(f"Saldo: {balance['data']['formatted']}") # Buat Pesanan order = requests.post(f'{BASE}/order', headers=headers, json={ 'product_id': 1, 'game_id': '123456789', 'zone_id': '1234' }).json()
📞 Butuh bantuan? Buka tiket support atau hubungi admin via WhatsApp.
© 2026 TopUp Store — All rights reserved.