Orders
Membuat order H2H, idempotency partner_ref, dan mengecek status.
Endpoint inti untuk transaksi H2H.
Base URL: https://api.t4topup.id/v1/member-api
Membuat order
POST /v1/member-api/ordersBody
Kirim salah satu identitas produk:
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
product_code | string | Ya* | Kode produk, contoh MLBB_ID_5 |
product_id | UUID | Ya* | ID produk |
partner_ref | string | Disarankan | Ref unik dari sistem Anda (max 64) |
data | object | Ya | Data target, mis. user/server ID |
callback_url | string | Tidak | Override URL webhook untuk order ini |
* Wajib salah satu: product_code atau product_id.
Contoh payload
{
"product_code": "MLBB_ID_5",
"partner_ref": "ORDER-1001",
"data": {
"user_id": "348553128",
"server_id": "943"
},
"callback_url": "https://partner.example/webhook"
}Request
curl -sS -X POST "https://api.t4topup.id/v1/member-api/orders" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_code": "MLBB_ID_5",
"partner_ref": "ORDER-1001",
"data": {
"user_id": "348553128",
"server_id": "943"
}
}'const res = await fetch('https://api.t4topup.id/v1/member-api/orders', {
method: 'POST',
headers: {
'x-api-key': process.env.H2H_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_code: 'MLBB_ID_5',
partner_ref: 'ORDER-1001',
data: { user_id: '348553128', server_id: '943' },
}),
});
console.log(await res.json());$payload = json_encode([
'product_code' => 'MLBB_ID_5',
'partner_ref' => 'ORDER-1001',
'data' => ['user_id' => '348553128', 'server_id' => '943'],
]);
$ch = curl_init('https://api.t4topup.id/v1/member-api/orders');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'x-api-key: ' . getenv('H2H_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $payload,
]);
echo curl_exec($ch);import os, requests
print(requests.post(
'https://api.t4topup.id/v1/member-api/orders',
headers={
'x-api-key': os.environ['H2H_API_KEY'],
'Content-Type': 'application/json',
},
json={
'product_code': 'MLBB_ID_5',
'partner_ref': 'ORDER-1001',
'data': {'user_id': '348553128', 'server_id': '943'},
},
).json())body := strings.NewReader(`{
"product_code": "MLBB_ID_5",
"partner_ref": "ORDER-1001",
"data": {"user_id": "348553128", "server_id": "943"}
}`)
req, _ := http.NewRequest("POST", "https://api.t4topup.id/v1/member-api/orders", body)
req.Header.Set("x-api-key", os.Getenv("H2H_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
io.Copy(os.Stdout, res.Body)Respons sukses (ringkas)
{
"invoice_number": "API...",
"partner_ref": "ORDER-1001",
"status": "PENDING",
"amount": 1500,
"target": "348553128(943)",
"product_name": "...",
"serial_number": null,
"created_at": "2026-07-22T00:00:00.000Z",
"success_at": null
}Idempotency dengan partner_ref
Sangat disarankan selalu mengirim partner_ref.
Jika Anda mengirim order lagi dengan partner_ref yang sama, API mengembalikan order yang sudah ada — bukan membuat transaksi baru. Ini melindungi dari double charge saat retry jaringan.
Validasi target
Sebelum saldo dipotong, sistem dapat memvalidasi ID game / region (bergantung produk).
- ID tidak valid → biasanya HTTP
400 - Validator nickname sedang down → order tetap jalan; nickname bisa
null
Cek status order
GET /v1/member-api/orders/:ref:ref bisa berupa partner_ref atau invoice_number.
curl -sS "https://api.t4topup.id/v1/member-api/orders/ORDER-1001" \
-H "x-api-key: YOUR_API_KEY"Saldo
Pastikan saldo cukup sebelum order. Jika tidak, request gagal dengan INSUFFICIENT_BALANCE.
Profil
Cek identitas & saldo kapan saja:
GET /v1/member-api/profileLihat juga Contoh kode untuk simulasi multi-bahasa.