Dokumentasi REST API & Interactive Sandbox
Spesifikasi lengkap integrasi REST API H2H, otentikasi signature MD5, dan testing real-time.
BASE URL PRODUCTION
https://h2h.zavopay.web.id/api/h2h/
FORMAT OTENTIKASI
HMAC-SHA256 (Canonical Body Sorted A-Z & Secret: api_key)
CONTENT TYPE
application/json (UTF-8)
1. Interactive Live API Sandbox Console
Live MD5 Calculated Signature:
md5(...)
HTTP 200 OK
// Klik "Kirim API Request Sekarang" untuk melihat hasil response JSON...
2. Spesifikasi Endpoint & Contoh Code Multi-Bahasa
Eksekusi Order Top-Up Transaksi H2H
Mengirimkan request pengisian pulsa, paket data, PLN token, atau saldo e-wallet secara instant ke sistem Zavopay H2H.
Parameter Request Body (JSON):
| Field Parameter | Tipe Data | Wajib | Deskripsi & Contoh |
|---|---|---|---|
| member_id | STRING | YA | ID Member Reseller Anda (Contoh: ZV88901) |
| api_key | STRING | YA | API Key Publik dari dashboard Reseller |
| buyer_sku_code | STRING | YA | Kode SKU Produk dari Katalog (Contoh: S10, PLN20) |
| customer_no | STRING | YA | Nomor Handphone / No Meter PLN / ID Game Tujuan |
| ref_id | STRING | YA | ID Unik Transaksi dari server Anda (Anti Duplicate) |
| timestamp | INTEGER | YA | Unix Timestamp dalam detik saat request dikirim (Toleransi selisih waktu max 5 menit) |
| signature | STRING | YA | Hasil HMAC-SHA256 dari canonical string payload (Urutkan key A-Z: key1=val1&key2=val2...) dengan Secret api_key |
Contoh Kode Request (HMAC-SHA256):
<?php
$apiKey = "zv_key_88901";
$payload = [
"member_id" => "ZV88901",
"api_key" => $apiKey,
"buyer_sku_code" => "S10",
"customer_no" => "081234567890",
"ref_id" => "ORDER-" . time(),
"timestamp" => time()
];
// 1. Urutkan key payload A-Z
ksort($payload);
$pairs = [];
foreach ($payload as $k => $v) {
if ($k !== 'signature') $pairs[] = "$k=$v";
}
$stringToSign = implode('&', $pairs);
// 2. Hitung HMAC-SHA256
$payload['signature'] = hash_hmac('sha256', $stringToSign, $apiKey);
$ch = curl_init("https://h2h.zavopay.web.id/api/h2h/transaksi.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
Contoh Response Sukses (JSON):
{
"response_code": "00",
"message": "Transaksi Berhasil",
"data": {
"trx_id": "TRX-20260817-84910",
"ref_id": "ORDER-TEST-1001",
"buyer_sku_code": "S10",
"customer_no": "081234567890",
"price": 10180,
"status": "SUCCESS",
"sn": "1829-4910-2948-1029",
"balance_remaining": 1489820
}
}
3. Standar Otentikasi & Keamanan (Security Rules)
- Header Protocol: Semua request API wajib menggunakan header
Content-Type: application/json. - Formula MD5 Signature: Dihitung dengan algoritma MD5 string tanpa spasi:
md5(member_id + api_key + ref_id). Khusus endpoint profile menggunakanmd5(member_id + api_key + 'PROFILE'). - Format Member ID: Menggunakan format resmi
ZV(KODE ACAK)(contoh:ZV88901) yang didapatkan dari Portal Mitra. - Proteksi Whitelist IP: Request API ditolak (RC 403) jika IP Address server pengirim tidak terdaftar di Whitelist IP Reseller.
- Anti Duplicate (Deduplikasi): Pengiriman request dengan
ref_idyang sama akan mengembalikan data status transaksi terdahulu tanpa memotong saldo ulang.
4. Tabel Kode Status Respons (Response Codes / RC)
| RC | HTTP Status | Keterangan Status | Tindakan Sistem Reseller |
|---|---|---|---|
| 00 | 200 OK | SUCCESS - Transaksi Berhasil Diproses & SN Diterbitkan | Potong saldo pengguna reseller & simpan Serial Number (SN) |
| 01 | 200 OK | PENDING - Transaksi Dalam Pemrosesan Antrean Upstream | Tunggu push Webhook Callback atau lakukan polling Cek Status |
| 400 | 400 Bad Request | Signature Invalid / Parameter Wajib Tidak Lengkap | Perbaiki skema MD5 Signature atau periksa nama parameter JSON |
| 401 | 401 Unauthorized | API Key Tidak Valid atau Reseller Tidak Ditemukan | Periksa kembali API Key / Secret Key di halaman profil reseller |
| 403 | 403 Forbidden | IP Address Server Pengirim Tidak Terdaftar di Whitelist | Daftarkan IP Server Anda di Portal Reseller |
| 404 | 404 Not Found | Kode SKU Produk Tidak Ditemukan | Periksa kembali SKU produk melalui endpoint Pricelist |
| 97 | 400 Bad Request | Stok Produk Sedang Kosong | Gagal transaksi, infokan ke pengguna stok sedang habis |
| 98 | 400 Bad Request | Produk Sedang Gangguan / Maintenance Upstream | Gagal transaksi, alihkan ke produk jalur alternatif |
| 99 | 400 Bad Request | Saldo Deposit Reseller Tidak Cukup | Lakukan Top Up Saldo Deposit H2H di Zavopay Server |
5. Spesifikasi Webhook Callback Push Notification
Ketika status order pending berubah menjadi SUCCESS atau FAILED, server Zavopay akan mengirimkan HTTP POST JSON secara realtime ke URL callback Anda.
{
"event": "transaction_status_updated",
"data": {
"trx_id": "TRX-20260817-84910",
"ref_id": "ORDER-TEST-1001",
"buyer_sku_code": "S10",
"customer_no": "081234567890",
"status": "SUCCESS",
"sn": "1829-4910-2948-1029",
"message": "Transaksi Sukses",
"timestamp": "2026-08-17T20:00:00+07:00"
}
}