Dokumentasi API H2H
API khusus reseller yang sudah disetujui. Saldo, deposit QRIS, layanan, dan pesanan.
Ringkasan
API khusus reseller yang sudah disetujui. Pesanan dibayar dengan saldo TopupDong (prabayar); saldo diisi lewat QRIS. Harga reseller = harga normal − 5% (diskon dibulatkan ke bawah), selalu dihitung server.
Base URL: https://domain-anda.com/api/public/h2h (ganti dengan domain toko). Wajib HTTPS. Batas: 60 request/menit per API key.
Catatan: pesanan yang dibuat masuk antrean (queued). Pengiriman otomatis ke supplier belum aktif, jadi status akan berubah setelah diproses.
Autentikasi
Buat API key di Dasbor Reseller. Key hanya ditampilkan sekali; regenerate langsung mematikan key lama.
Authorization: Bearer tdk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# atau
X-API-Key: tdk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxEndpoint
/balanceSaldo tersedia, total deposit, pemakaian, dan refund./balance-history?page=1&limit=50Mutasi saldo (deposit, order_debit, refund, admin_adjust)./services?game=&page=1&limit=200Daftar produk aktif dengan harga normal & harga reseller./orderBuat pesanan, dibayar dari saldo./order/{order_id}Status satu pesanan milik kamu./orders?status=&page=1&limit=50Riwayat pesanan H2H./depositBuat invoice QRIS untuk isi saldo./deposit/{reference}Status deposit (dicek ulang bila masih menunggu).POST /order
Body JSON: product_id (uuid dari /services), target (sesuai target_fields produk), ref_id (ID unik dari sistemmu, 6–64 karakter; mengirim ulang ref_id yang sama tidak membuat pesanan baru). Jangan kirim harga — field lain akan ditolak.
{ "product_id": "7f2c...", "target": { "user_id": "12345678", "zone_id": "1234" }, "ref_id": "INV-0001" }HTTP 201
{ "success": true, "data": {
"order_id": "TD-AB12CD", "ref_id": "INV-0001", "product": "86 Diamonds", "category": "Top Up Game",
"target": { "user_id": "12345678", "zone_id": "1234" },
"price": 20000, "discount": 1000, "total": 19000,
"payment_status": "paid", "status": "queued", "message": null, "refunded": false,
"created_at": "2026-10-31T12:00:00Z", "duplicate": false, "balance": 81000 } }Status: queued, processing, success, failed, needs_review.
POST /deposit
{ "amount": 100000 } // Rp10.000 – Rp10.000.000HTTP 201
{ "success": true, "data": { "id": "…", "reference": "DEP-XXXXXXXX", "status": "pending",
"base_amount": 100000, "pay_amount": 100123, "qris": "000201…", "checkout_url": "https://…",
"expires_at": "…", "paid_at": null, "created_at": "…" } }Bayar tepat pay_amount. Saldo bertambah sebesar base_amount hanya setelah pembayaran terkonfirmasi (notifikasi terverifikasi + pengecekan ulang status). Halaman redirect bukan bukti bayar.
Format error
{ "success": false, "error": { "code": "INSUFFICIENT_BALANCE", "message": "Saldo tidak cukup…" } }401 INVALID_API_KEY403 RESELLER_INACTIVE400 INVALID_JSON / HTTPS_REQUIRED / CATEGORY_NOT_SUPPORTED / GAME_BLOCKED — game sedang diblokir, saldo tidak berubah422 INVALID_INPUT / INVALID_TARGET402 INSUFFICIENT_BALANCE — pesanan tidak dibuat, saldo tidak berubah404 PRODUCT_UNAVAILABLE / NOT_FOUND409 DUPLICATE_REF429 RATE_LIMITED / TOO_MANY_PENDING503 PAYMENT_UNAVAILABLE500 SERVER_ERRORAturan saldo & refund
- Pengecekan saldo, pembuatan pesanan, dan pemotongan saldo terjadi dalam satu transaksi; request bersamaan tidak bisa memakai saldo yang sama.
- Refund hanya untuk pesanan yang gagal permanen, sebesar nominal yang benar-benar dipotong, dan hanya sekali. Pesanan yang masih diproses atau berhasil tidak direfund.
- Setiap perubahan saldo tercatat di riwayat saldo.
Contoh cURL
curl -H "Authorization: Bearer $KEY" https://domain-anda.com/api/public/h2h/balance
curl -X POST https://domain-anda.com/api/public/h2h/order \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"product_id":"7f2c...","target":{"user_id":"12345678","zone_id":"1234"},"ref_id":"INV-0001"}'Contoh JavaScript
const res = await fetch("https://domain-anda.com/api/public/h2h/order", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.TOPUPDONG_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ product_id: "7f2c...", target: { user_id: "12345678" }, ref_id: "INV-0001" }),
});
const json = await res.json();
if (!json.success) console.error(json.error.code, json.error.message);Contoh PHP
<?php
$ch = curl_init("https://domain-anda.com/api/public/h2h/order");
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TOPUPDONG_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["product_id" => "7f2c...", "target" => ["user_id" => "12345678"], "ref_id" => "INV-0001"]),
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);