Endpoint di halaman ini
GET /v1/catalog/coins: Mata uang kripto dan jaringan yang diterima (beserta alamat deposit tetapnya)POST /v1/topups: Mulai isi saldo kripto (alamat tetap, jumlah pasti)POST /v1/topups/{topUpId}/txid: Laporkan pembayaran sebagai telah dikirim (TXID opsional)GET /v1/topups/{topUpId}: Dapatkan isi saldo (periksa status terkini)GET /v1/topups: Lihat daftar isi saldo kripto
URL dasar https://localserpproxy.com/api/v1. Autentikasi, error, dan batas: lihat ringkasan API].
Mata uang kripto dan jaringan yang diterima (dengan alamat deposit tetap)
GET/v1/catalog/coins
Publik: tidak perlu kunci API.
Respons 200 OK
{
"data": [
{
"code": "BTC",
"name": "Bitcoin",
"networks": [
{
"id": "bitcoin",
"name": "Bitcoin",
"confirmationsRequired": 2,
"estimatedMinutes": null,
"memoRequired": false,
"address": "DEPOSIT_ADDRESS"
}
]
}
]
}Contoh kode
curl -s "https://localserpproxy.com/api/v1/catalog/coins"import os
import requests
API = "https://localserpproxy.com/api/v1"
r = requests.get(f"{API}/catalog/coins", timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/catalog/coins`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Mulai isi saldo dengan kripto (alamat tetap, jumlah pasti)
POST/v1/topups
amountUsd≥ 25.00 USD dan ≤ batas maksimum (default 10,000.00):422diamountUsdjika tidak.coin+networkharus salah satu dariGET /v1/catalog/coins(jika tidak,409 coin_unavailable).- Mengembalikan
addresstetap milik jaringan danamountCryptopasti =amountUsd/rate, dibulatkan ke atas sesuai presisi koin (BTC/LTC/ETH/SOL 8 desimal, USDT/USDC 6), ditambah selisih kecil unik pada digit terakhir agar tidak ada 2 isi saldo terbuka di jaringan yang sama meminta jumlah yang sama.ratedikunci hinggaexpiresAt(30 menit);txidDeadline=expiresAt+ 72 jam. - Opsional
purchase(isi yang sama denganPOST /v1/orders): divalidasi dan dihitung harganya sekarang (422dengan nama kolom berawalanpurchase.,409 plan_unavailable…).amountUsdharus mencukupi totalpurchase− saldo saat ini (422 too_smalldiamountUsd). Saat isi saldo dikreditkan, pesanan dibuat dari saldo dalam transaksi yang sama;purchase.statusmenjadicompleted(denganorderId) ataufailed(failureReason; dana tetap ada di saldo).
Autentikasi: kunci API di header Authorization: Bearer API_KEY.
Parameter
| Nama | Di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
Idempotency-Key | header | string | Tidak | Kunci unik (misalnya UUID) untuk mengulangi POST dengan aman. Berlaku 24 jam. — maks. 128 karakter |
Isi permintaan
| Kolom | Tipe | Wajib | Deskripsi |
|---|---|---|---|
amountUsd | string (USD, 2 decimals) | Ya | USD untuk ditambahkan: ≥ 25.00, ≤ 10,000.00 secara default. |
coin | string | Ya | — |
network | string | Ya | — |
purchase | object | Tidak | Rencana pembelian dari saldo setelah isi saldo dikreditkan (isi yang sama dengan POST /v1/orders). |
{
"amountUsd": "50.00",
"coin": "USDT",
"network": "tron"
}{
"amountUsd": "25.00",
"coin": "BTC",
"network": "bitcoin",
"purchase": {
"planId": "res-10",
"quantity": 1
}
}Respons 201 Created
{
"id": "top_7d2kq9x1",
"status": "verifying",
"final": false,
"amountUsd": "25.00",
"coin": "USDT",
"network": "tron",
"address": "DEPOSIT_ADDRESS",
"amountCrypto": "25.000137",
"rate": "1.00",
"paymentUri": "PAYMENT_URI",
"expiresAt": "2026-10-05T14:33:11Z",
"txidDeadline": "2026-10-08T14:33:11Z",
"confirmationsRequired": 20,
"confirmations": 7,
"txid": "9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"txidSubmittedAt": "2026-10-05T14:09:42Z",
"amountReceivedCrypto": "25.000137",
"explorerUrl": "https://tronscan.org/#/transaction/9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"creditedUsd": null,
"creditedAt": null,
"rejection": null,
"purchase": {
"planId": "res-10",
"planName": "Local team",
"quantity": 1,
"options": {},
"promoCode": null,
"total": "7.50",
"status": "pending",
"orderId": null,
"failureReason": null
},
"createdAt": "2026-10-05T14:03:11Z"
}Contoh kode
curl -s -X POST "https://localserpproxy.com/api/v1/topups" \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"amountUsd":"50.00","coin":"USDT","network":"tron"}'import os, uuid
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}", "Idempotency-Key": str(uuid.uuid4())}
r = requests.post(f"{API}/topups", headers=HEADERS, json={"amountUsd": "50.00", "coin": "USDT", "network": "tron"}, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
import { randomUUID } from 'node:crypto';
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/topups`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Idempotency-Key': randomUUID(), 'Content-Type': 'application/json' },
body: JSON.stringify({ amountUsd: '50.00', coin: 'USDT', network: 'tron' }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Laporkan pembayaran sebagai terkirim (TXID opsional)
POST/v1/topups/{topUpId}/txid
Laporkan pembayaran sebagai terkirim setelah dana meninggalkan dompet atau bursa Anda: ini adalah versi API dari tombol “Saya sudah mengirim pembayaran”. ID transaksi (TXID) bersifat opsional: kirim isi kosong ({}), atau tambahkan txid jika Anda memilikinya. Pembayaran Anda dicocokkan dengan isi saldo ini berdasarkan jumlah pastinya (amountCrypto) pada jaringan dan alamat isi saldo tersebut, jadi kirim jumlah yang persis sama.
Dapat diterima saat isi saldo berstatus awaiting_payment, expired atau rejected, dan sebelum txidDeadline (expiresAt + 72 jam): laporan yang terlambat tidak akan menyebabkan pembayaran hilang. txid, jika diberikan, akan diperiksa berdasarkan format jaringan (422 di txid) dan tidak boleh diklaim oleh isi saldo lain (409 txid_already_used). Isi saldo yang sudah ditutup akan mengembalikan 409 topup_closed. Isi saldo kemudian berstatus verifying selama pembayaran diperiksa di blockchain, dan berakhir dengan status credited setelah jaringan mengonfirmasi transaksi, atau rejected (dengan rejection).
Autentikasi: kunci API di header Authorization: Bearer API_KEY.
Parameter
| Nama | Di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
topUpId | path | string | Ya | — |
Isi permintaan
| Kolom | Tipe | Wajib | Deskripsi |
|---|---|---|---|
txid | string | Tidak | Opsional. Hash transaksi: 64 karakter heksadesimal (bitcoin, litecoin, tron), 0x + 64 karakter heksadesimal (ethereum), tanda tangan base58 (solana). Kosong atau tidak dicantumkan: pembayaran dicocokkan berdasarkan jumlah pastinya. — maks. 128 karakter |
{}{
"txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"
}Respons 200 OK
{
"id": "top_7d2kq9x1",
"status": "verifying",
"final": false,
"amountUsd": "25.00",
"coin": "USDT",
"network": "tron",
"address": "DEPOSIT_ADDRESS",
"amountCrypto": "25.000137",
"rate": "1.00",
"paymentUri": "PAYMENT_URI",
"expiresAt": "2026-10-05T14:33:11Z",
"txidDeadline": "2026-10-08T14:33:11Z",
"confirmationsRequired": 20,
"confirmations": 7,
"txid": "9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"txidSubmittedAt": "2026-10-05T14:09:42Z",
"amountReceivedCrypto": "25.000137",
"explorerUrl": "https://tronscan.org/#/transaction/9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"creditedUsd": null,
"creditedAt": null,
"rejection": null,
"purchase": {
"planId": "res-10",
"planName": "Local team",
"quantity": 1,
"options": {},
"promoCode": null,
"total": "7.50",
"status": "pending",
"orderId": null,
"failureReason": null
},
"createdAt": "2026-10-05T14:03:11Z"
}Contoh kode
curl -s -X POST "https://localserpproxy.com/api/v1/topups/top_7d2kq9x1/txid" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{}'import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.post(f"{API}/topups/top_7d2kq9x1/txid", headers=HEADERS, json={}, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/topups/top_7d2kq9x1/txid`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({}),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Isi saldo (pantau status terkini)
GET/v1/topups/{topUpId}
Pantau rute ini untuk mengikuti proses isi saldo: setiap 10 dtk selama status = verifying, setiap 30 dtk saat menunggu pembayaran, lalu berhenti saat final = true. Isi saldo menjadi expired jika pembayaran belum dilaporkan terkirim sebelum expiresAt; pembayaran masih dapat dilaporkan hingga txidDeadline.
Autentikasi: kunci API di header Authorization: Bearer API_KEY.
Parameter
| Nama | Di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
topUpId | path | string | Ya | — |
Respons 200 OK
{
"id": "top_7d2kq9x1",
"status": "verifying",
"final": false,
"amountUsd": "25.00",
"coin": "USDT",
"network": "tron",
"address": "DEPOSIT_ADDRESS",
"amountCrypto": "25.000137",
"rate": "1.00",
"paymentUri": "PAYMENT_URI",
"expiresAt": "2026-10-05T14:33:11Z",
"txidDeadline": "2026-10-08T14:33:11Z",
"confirmationsRequired": 20,
"confirmations": 7,
"txid": "9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"txidSubmittedAt": "2026-10-05T14:09:42Z",
"amountReceivedCrypto": "25.000137",
"explorerUrl": "https://tronscan.org/#/transaction/9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"creditedUsd": null,
"creditedAt": null,
"rejection": null,
"purchase": {
"planId": "res-10",
"planName": "Local team",
"quantity": 1,
"options": {},
"promoCode": null,
"total": "7.50",
"status": "pending",
"orderId": null,
"failureReason": null
},
"createdAt": "2026-10-05T14:03:11Z"
}Contoh kode
curl -s "https://localserpproxy.com/api/v1/topups/top_7d2kq9x1" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/topups/top_7d2kq9x1", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/topups/top_7d2kq9x1`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Daftar isi saldo kripto
GET/v1/topups
Autentikasi: kunci API di header Authorization: Bearer API_KEY.
Parameter
| Nama | Di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
page | query | integer | Tidak | ≥ 1, default 1 |
perPage | query | integer | Tidak | 1–100, default 20 |
status | query | awaiting_payment · verifying · credited · rejected · expired | Tidak | final = dikreditkan, atau kedaluwarsa / ditolak setelah txidDeadline. |
Respons 200 OK
{
"data": [
{
"id": "top_7d2kq9x1",
"status": "verifying",
"final": false,
"amountUsd": "25.00",
"coin": "USDT",
"network": "tron",
"address": "DEPOSIT_ADDRESS",
"amountCrypto": "25.000137",
"rate": "1.00",
"paymentUri": "PAYMENT_URI",
"expiresAt": "2026-10-05T14:33:11Z",
"txidDeadline": "2026-10-08T14:33:11Z",
"confirmationsRequired": 20,
"confirmations": 7,
"txid": "9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"txidSubmittedAt": "2026-10-05T14:09:42Z",
"amountReceivedCrypto": "25.000137",
"explorerUrl": "https://tronscan.org/#/transaction/9d2e5c0b1f7a4e3d8c6b2a1f0e9d8c7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f41c7",
"creditedUsd": null,
"creditedAt": null,
"rejection": null,
"purchase": {
"planId": "res-10",
"planName": "Local team",
"quantity": 1,
"options": {},
"promoCode": null,
"total": "7.50",
"status": "pending",
"orderId": null,
"failureReason": null
},
"createdAt": "2026-10-05T14:03:11Z"
}
],
"pagination": {
"page": 1,
"perPage": 20,
"total": 1,
"totalPages": 1
}
}Contoh kode
curl -s "https://localserpproxy.com/api/v1/topups" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/topups", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';
const res = await fetch(`${API}/topups`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());