Kembali ke Website

📡 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

ParameterTypeKeterangan
category_idintFilter berdasarkan kategori (opsional)
searchstringCari 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

StatusKeterangan
pendingMenunggu pembayaran
processingSedang diproses
successBerhasil
failedGagal
refundedDikembalikan

📜 Riwayat Pesanan

Ambil semua riwayat pesanan reseller.

GET /api/orders

Query Parameters

ParameterTypeKeterangan
statusstringFilter status (opsional)
pageintHalaman (default: 1)
per_pageintPer halaman (default: 20, max: 100)
date_fromdateDari tanggal (Y-m-d)
date_todateSampai tanggal (Y-m-d)

⚠️ Error Codes

HTTP CodeKeterangan
200Sukses
400Request tidak valid (field kurang/salah)
401Unauthorized — API key salah/expired
403Forbidden — akun diblokir
404Data tidak ditemukan
422Validation error
429Rate limit exceeded
500Server 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.