Dokumentasi API H2H
Referensi lengkap API Host-to-Host H2H.ID untuk integrasi otomatis
Daftar Isi
1 Pendahuluan
API H2H H2H.ID memungkinkan Anda melakukan transaksi produk digital secara otomatis dari sistem Anda.
Produk yang Didukung
Produk dengan Flow Khusus / Tidak Didukung di Order Reguler
Status dukungan H2H API:
/trx/inquiry lalu order /trx dengan inquiry_idqty (kelipatan 1.000)Base URL
https://api.h2h.id/api/trx
Format
- • Method: GET (semua endpoint)
- • Response: JSON (semua endpoint)
- • Content-Type:
application/json
Langkah Memulai
- Daftar akun di h2h.id
- Login ke Dashboard, buka menu Pengaturan → API H2H
- Aktifkan H2H, atur Password H2H dan PIN
- Tambahkan IP Whitelist (IP server Anda)
- Opsional: isi Callback URL untuk menerima notifikasi otomatis
- Beli HCoin via menu Deposit
Format Response
Semua response menggunakan format JSON yang konsisten:
// Sukses { "status": true, "message": "...", "data": { ... } } // Error { "status": false, "message": "Pesan error..." }
2 Autentikasi
Semua request memerlukan 3 parameter autentikasi yang dikirim sebagai query string:
| Parameter | Tipe | Keterangan |
|---|---|---|
| memberID | string | Username akun H2H.ID Anda |
| pin | string | PIN transaksi, diatur di menu Profil |
| password | string | Password H2H (berbeda dari password login), diatur di Pengaturan → API H2H |
Penting:
- Aktifkan H2H terlebih dahulu di menu Pengaturan → API H2H setelah login.
- PIN akan terkunci selama 15 menit setelah 5 kali percobaan gagal.
- IP address pengirim harus terdaftar di IP Whitelist (jika whitelist diisi). Jika whitelist kosong, semua IP diizinkan.
3 Cek HCoin
/balance
Response
{ "status": true, "message": "Cek saldo berhasil", "data": { "balance": 1234567, "balance_formatted": "1.234.567", "verification": { "protected_wallet_requires_kyc_kyb": true, "kyc_status": "approved", "kyb_status": "approved", "kyc_approved": true, "kyb_approved": true, "notice": "Produk e-wallet dan nominal bebas memerlukan KYC dan KYB yang disetujui sebelum order dapat diproses." } } }
4 Order Transaksi (Reguler)
Untuk order pulsa, paket data, token PLN, voucher game, e-wallet topup (nominal fixed maupun open denomination), dan paket telp/SMS. Produk PPOB/tagihan dapat diproses via H2H jika didahului /trx/inquiry lalu order menggunakan inquiry_id. Produk open denomination (nominal bebas, mis. DANA/OVO/GOPAY/ShopeePay) wajib mengirim parameter qty.
/
Parameters
| Parameter | Wajib | Keterangan |
|---|---|---|
| product | Ya | Kode produk dari Daftar Harga (contoh: T5, XD10, PLN50, ML86, GOPAY20) |
| dest | Ya | Nomor tujuan sesuai jenis produk:
|
| refID | Ya | Reference ID unik dari sistem Anda. Tidak boleh duplikat (untuk mencegah double order & sebagai referensi callback) |
| memberID | Ya | Username akun H2H Anda |
| pin | Ya | PIN transaksi |
| password | Ya | Password H2H |
| qty | Kondisional | Wajib untuk produk open denomination / nominal bebas (DANA, OVO, GOPAY, ShopeePay, dll). Tidak boleh dikirim untuk produk nominal fixed. Format: integer, kelipatan 1.000, range 10.000 – 10.000.000. Total tagihan = qty + admin fee. |
| inquiry_id | Kondisional | Wajib untuk produk pascabayar/PPOB. Dapatkan dari endpoint /trx/inquiry. |
Response
{ "status": true, "message": "Order berhasil dibuat", "data": { "invoice": "INV20260228001", "ref_id": "ref001", "product_name": "Telkomsel 5.000", "product_code": "T5", "destination": "08123456789", "price": 5650, "balance_before": 1000000, "balance_after": 994350, "transaction_status": "pending" } }
Keterangan:
invoice— Nomor invoice transaksiref_id— Reference ID yang Anda kirimprice— Harga dalam Rupiah (integer)- HCoin langsung terpotong saat order berhasil dibuat
- Jika transaksi gagal, HCoin otomatis dikembalikan (refund)
Contoh per Kategori
https://api.h2h.id/api/trx?product=T5&dest=08123456789&refID=ref001&memberID=user1&pin=123456&password=h2hpass
https://api.h2h.id/api/trx?product=XD10&dest=08123456789&refID=ref002&memberID=user1&pin=123456&password=h2hpass
https://api.h2h.id/api/trx?product=PLN50&dest=12345678901&refID=ref003&memberID=user1&pin=123456&password=h2hpass
https://api.h2h.id/api/trx?product=ML86&dest=123456789&refID=ref004&memberID=user1&pin=123456&password=h2hpass
https://api.h2h.id/api/trx?product=GOPAY20&dest=08123456789&refID=ref005&memberID=user1&pin=123456&password=h2hpass
https://api.h2h.id/api/trx?product=BBSDN&dest=08123456789&refID=ref006&qty=50000&memberID=user1&pin=123456&password=h2hpass
Contoh di atas top up DANA Rp 50.000. Total tagihan = qty + admin fee (lihat Daftar Harga). Response akan menambahkan field qty dan admin_fee.
/trx/inquiry terlebih dahulu lalu kirim inquiry_id saat order /trx. Order langsung tanpa inquiry akan ditolak dengan kode error seperti INQUIRY_REQUIRED. Untuk produk open denomination (nominal bebas), kirim parameter qty (kelipatan 1.000, range 10.000–10.000.000); jangan kirim qty pada produk nominal fixed (akan ditolak VALIDATION_ERROR).
verification pada endpoint /trx/balance atau /trx/pricelist. Setiap item pricelist juga menyertakan flag requires_kyc_kyb.
5 Cek Status Transaksi
Berlaku untuk transaksi reguler maupun SMM — sistem otomatis mendeteksi berdasarkan refID.
/status
Parameters
| Parameter | Wajib | Keterangan |
|---|---|---|
| refID | Ya | Reference ID yang digunakan saat order |
| memberID | Ya | Username akun H2H Anda |
| pin | Ya | PIN transaksi |
| password | Ya | Password H2H |
Response
{ "status": true, "message": "Status transaksi", "data": { "invoice": "INV20260228001", "ref_id": "ref001", "product_name": "Telkomsel 5.000", "product_code": "T5", "destination": "08123456789", "price": 5650, "balance": 994350, "time": "28/02 14:31", "transaction_status": "success", "status_label": "Sukses", "status_description": "Transaksi berhasil diproses", "serial_number": "0812xxxx1234", "provider_message": "SN=0812xxxx1234" } }
{ "status": true, "message": "Status transaksi", "data": { "invoice": "INV20260228001", "ref_id": "ref001", "product_name": "Telkomsel 5.000", "product_code": "T5", "destination": "08123456789", "price": 5650, "balance": 994350, "time": "28/02 14:30", "transaction_status": "pending", "status_label": "Menunggu", "status_description": "Transaksi sedang diproses provider", "provider_message": "" } }
{ "status": true, "message": "Status transaksi", "data": { "invoice": "INV20260228001", "ref_id": "ref001", "product_name": "Telkomsel 5.000", "product_code": "T5", "destination": "08123456789", "price": 5650, "balance": 1000000, "time": "28/02 14:32", "transaction_status": "failed", "status_label": "Gagal", "status_description": "Transaksi gagal, saldo dikembalikan", "reason": "Gangguan provider", "is_refunded": true, "provider_message": "TRANSAKSI GAGAL" } }
Nilai transaction_status:
- success — Transaksi berhasil. Field
serial_numberberisi SN / token PLN - pending — Sedang diproses oleh provider
- failed — Transaksi gagal.
reasonberisi alasan,is_refundedmenandakan dana dikembalikan
Field tambahan:
status_label— Label status dalam Bahasa Indonesia (Sukses / Menunggu / Diproses / Gagal / Dikembalikan)status_description— Deskripsi status transaksi dalam Bahasa Indonesiaprovider_message— Pesan dari provider (SN, token, atau keterangan error)
6 Daftar Harga
/pricelist
Parameter Opsional
| type | Filter berdasarkan tipe produk. Nilai yang tersedia:pulsa
paket_data
pln
voucher_game
e_wallet
pascabayar
tagihan
streaming
paket_telp_sms
cetak_voucher
nominal_bebas
lainnya
Gunakan type=smm untuk daftar layanan SMM (lihat bagian 9)
|
Response
{ "status": true, "message": "Daftar harga berhasil diambil", "member_id": "username", "total": 150, "data": [ { "code": "T5", "name": "Telkomsel 5.000", "description": "Pulsa Telkomsel 5.000 masa aktif 7 hari", "operator": "Telkomsel", "price": 5650, "status": "OPEN", "provider_status": "active" } ] }
price adalah harga jual dalam Rupiah (bilangan bulat, tanpa desimal). Harga untuk produk PPOB tagihan (BPJS, PLN Pascabayar, PDAM, dll) bisa bernilai 0 karena harga ditentukan saat transaksi berdasarkan tagihan pelanggan. Field description berisi deskripsi produk (bisa kosong "" jika belum diisi).
7 Cek ID Pelanggan (PLN, Game & Tagihan)
Endpoint publik (tanpa autentikasi) untuk memverifikasi data pelanggan sebelum melakukan transaksi.
Cek Pelanggan PLN
https://api.h2h.id/api/pln/check
Parameters (JSON Body)
| Param | Keterangan |
|---|---|
| meter_id | Nomor Meter / ID Pelanggan PLN (10–15 digit angka). *wajib |
Contoh Request
POST https://api.h2h.id/api/pln/check
Content-Type: application/json
{
"meter_id": "530000123456"
}
Contoh Response Sukses
{
"success": true,
"data": {
"meter_id": "530000123456",
"name": "NAMA PELANGGAN",
"tariff": "R1",
"power": "900",
"power_formatted": "900 VA"
},
"message": "Data pelanggan ditemukan"
}
Cek Akun Game
https://api.h2h.id/api/game/check
Parameters (JSON Body)
| Param | Keterangan |
|---|---|
| game | Kode game: mobile-legends free-fire pubg-mobile *wajib |
| user_id | User ID game (3–20 karakter). *wajib |
| zone_id | Zone ID / Server ID. *wajib untuk Mobile Legends |
Contoh Request (Mobile Legends)
POST https://api.h2h.id/api/game/check
Content-Type: application/json
{
"game": "mobile-legends",
"user_id": "123456789",
"zone_id": "1234"
}
Contoh Response Sukses
{
"success": true,
"data": {
"game": "mobile-legends",
"user_id": "123456789",
"zone_id": "1234",
"username": "NamaPlayer"
},
"message": "Akun ditemukan"
}
Cek Tagihan Pascabayar (Bill Check)
Endpoint untuk mengecek tagihan pascabayar sebelum melakukan pembayaran. Memerlukan autentikasi menggunakan Sanctum Bearer token, dan HCoin akun harus lebih dari 0.
https://api.h2h.id/api/bill/check
Authorization: Bearer {token}. Token diperoleh setelah login (lihat Cara Memperoleh Token di bawah). Field memberID, pin, dan password (skema H2H/OkeConnect) tidak berlaku di endpoint ini — gunakan GET /api/trx/inquiry bila ingin memakai skema tersebut.
Cara Memperoleh Token
{your_token} adalah Sanctum personal access token — token yang sama dengan sesi saat Anda login ke dashboard web/aplikasi H2H. Dapatkan lewat endpoint login:
POST https://api.h2h.id/api/v1/auth/login
Content-Type: application/json
{
"username": "akun_anda",
"password": "password_login_anda"
}
Ambil nilai data.token dari response, lalu kirim sebagai header Authorization: Bearer {token}:
{
"success": true,
"data": {
"user": { "id": 1, "username": "akun_anda", "balance": 0 },
"token": "12|AbCdEf123XyZ...",
"token_type": "Bearer",
"expires_at": "2026-06-22T11:00:00.000000Z"
},
"message": "Login berhasil"
}
"remember": true pada body login untuk token berumur 90 hari. Endpoint login dilindungi Cloudflare Turnstile, sehingga token sebaiknya diperoleh melalui proses login di website/aplikasi H2H.
Parameters (JSON Body)
| Param | Keterangan |
|---|---|
| buyer_sku_code | Kode produk pascabayar (contoh: CPLA, CBPJS, CTEL). *wajib |
| customer_no | Nomor pelanggan (5–30 digit angka). *wajib |
| payment_sku_code | Kode produk bayar (opsional). Untuk PLN pascabayar gunakan BPLA. Bila diisi, response menyertakan biaya_layanan & grand_total. |
Contoh Request
POST https://api.h2h.id/api/bill/check
Authorization: Bearer {your_token}
Content-Type: application/json
{
"buyer_sku_code": "CPLA",
"customer_no": "530000123456"
}
Contoh Response Sukses
{
"success": true,
"data": {
"inquiry_id": 12345,
"customer_name": "NAMA PELANGGAN",
"customer_no": "530000123456",
"bill_amount": 350000,
"admin_fee": 2500,
"total_amount": 352500,
"biaya_layanan": 1000,
"grand_total": 353500,
"period": "JAN 2026",
"description": "...",
"ref_id": "BIL-xxxxxxxx",
"expired_at": "2026-06-21T12:30:00+07:00"
},
"message": "Tagihan ditemukan"
}
Contoh Response Gagal (belum login / token tidak valid)
{
"success": false,
"message": "Tidak terautentikasi. Silakan login terlebih dahulu.",
"error": "unauthenticated"
}
success (bukan status). total_amount = bill_amount + admin_fee; grand_total = total_amount + biaya_layanan. Gunakan inquiry_id dari response ini sebagai parameter inquiry_id saat order /trx untuk membayar tagihan. Hasil inquiry berlaku 30 menit (lihat expired_at). Field biaya_layanan & grand_total bernilai sesuai produk bayar bila payment_sku_code dikirim.
8 Order SMM
Untuk order followers, likes, views, comments, dan layanan social media lainnya.
/
Parameters
| Parameter | Wajib | Keterangan |
|---|---|---|
| type | Ya | Harus bernilai smm |
| service | Ya | ID layanan SMM (lihat Daftar Harga SMM). Bisa menggunakan ID internal atau external ID |
| target | Ya | URL atau username target (contoh: https://instagram.com/p/xxxxx) |
| quantity | Ya | Jumlah pesanan (harus di antara min dan max layanan) |
| refID | Ya | Reference ID unik dari sistem Anda |
| custom_comments | Kondisional | Wajib untuk layanan tipe "Custom Comments". Pisah setiap komentar dengan \n (newline) |
| memberID | Ya | Username akun H2H Anda |
| pin | Ya | PIN transaksi |
| password | Ya | Password H2H |
Response
{ "status": true, "message": "Order SMM berhasil dibuat", "data": { "order_number": "SMM20260228001", "ref_id": "ref001", "service_name": "IG Followers [Real]", "service_id": 1, "target": "https://instagram.com/user", "quantity": 1000, "price": 50000, "balance_before": 1000000, "balance_after": 950000, "transaction_status": "pending" } }
Perhitungan Harga: harga = ceil(price_per_1k × quantity / 1000)
Contoh: rate Rp 50.000/1K, order 500 unit = Rp 25.000
9 Daftar Harga SMM
/pricelist?type=smm
Parameter Opsional
| platform | Filter platform: instagram, tiktok, youtube, twitter, facebook, telegram, dll |
Response
{ "status": true, "message": "Daftar harga SMM berhasil diambil", "member_id": "username", "total": 85, "data": [ { "id": 1, "name": "IG Followers [Real]", "category": "Instagram Followers", "platform": "instagram", "price_per_1k": 50000, "min": 100, "max": 10000, "type": "Default", "refill": false } ] }
price_per_1k adalah harga per 1.000 unit. Harga order dihitung: ceil(price_per_1k × quantity / 1000)
10 Cek Status SMM
Menggunakan endpoint yang sama dengan cek status reguler (/status). Sistem otomatis mendeteksi order SMM berdasarkan refID.
Nilai transaction_status
| Status | Final? | Keterangan |
|---|---|---|
| pending | Tidak | Order masuk antrian, belum diproses |
| processing | Tidak | Sedang diproses. Menyertakan progress (%) dan delivered jika tersedia |
| completed | Ya | Order selesai. delivered berisi jumlah terkirim |
| partial | Ya | Sebagian terkirim. Menyertakan delivered dan refund_amount jika ada |
| failed | Ya | Dibatalkan / refund penuh |
Contoh Response
{ "status": true, "message": "Status order SMM", "data": { "order_number": "SMM20260228001", "ref_id": "ref001", "service_name": "IG Followers [Real]", "target": "https://instagram.com/user", "quantity": 1000, "price": 50000, "balance": 950000, "time": "28/02 14:35", "transaction_status": "completed", "status_label": "Selesai", "status_description": "Order SMM telah selesai", "delivered": 1000 } }
11 Deposit — Daftar Metode Pembayaran
Mendapatkan daftar metode pembayaran yang tersedia untuk top up HCoin via API.
https://api.h2h.id/api/trx/deposit/methods?memberID={id}&pin={pin}&password={pass}
| Parameter | Wajib | Deskripsi |
|---|---|---|
| memberID | Ya | Username akun H2H |
| pin | Ya | PIN transaksi |
| password | Ya | Password H2H |
Response:
{ "status": true, "message": "Daftar metode deposit", "data": { "methods": [ { "code": "BR", "name": "BRI VA", "type": "va", "fee_type": "flat", "fee_amount": 4000, "min_amount": 10000, "max_amount": 50000000 }, { "code": "BANK_1", "name": "BCA", "type": "bank_transfer", "fee_type": "flat", "fee_amount": 0, "min_amount": 10000, "max_amount": 50000000, "bank_account": { "bank_name": "BCA", "account_number": "1234567890", "account_name": "PT H2H Indonesia" } } ] } }
Tipe Metode:
| Type | Deskripsi |
|---|---|
| va | Virtual Account — bayar via ATM, mobile/internet banking |
| ewallet | E-Wallet — OVO, ShopeePay, dll |
| qris | QRIS — scan QR Code dari aplikasi e-wallet manapun |
| bank_transfer | Transfer manual ke rekening bank |
12 Deposit — Top Up HCoin
Membuat request deposit untuk mengisi HCoin akun. Setelah berhasil, lakukan pembayaran sesuai metode yang dipilih. HCoin otomatis masuk setelah pembayaran dikonfirmasi.
https://api.h2h.id/api/trx/deposit?amount={nominal}&method={kode}&memberID={id}&pin={pin}&password={pass}
| Parameter | Wajib | Deskripsi |
|---|---|---|
| amount | Ya | Nominal deposit dalam Rupiah (min: 10.000) |
| method | Ya | Kode metode pembayaran dari /trx/deposit/methods |
| memberID | Ya | Username akun H2H |
| pin | Ya | PIN transaksi |
| password | Ya | Password H2H |
Response (Virtual Account):
{ "status": true, "message": "Deposit berhasil dibuat. Silakan lakukan pembayaran.", "data": { "invoice": "DEP260410A1B2C3D4", "amount": 100000, "total_amount": 104000, "fee": 4000, "payment_method": "BR", "payment_method_name": "BRI VA", "status": "pending", "va_number": "88810012345678", "expired_at": "2026-04-10T14:30:00+07:00" } }
Response (Bank Transfer Manual):
{ "status": true, "message": "Deposit berhasil dibuat. Transfer tepat Rp 100.123 ke rekening tujuan.", "data": { "invoice": "TRF260410X1Y2Z3W4", "amount": 100000, "total_amount": 100123, "fee": 0, "unique_code": 123, "transfer_note": "H2HX1Y2Z3W4", "payment_method": "BANK_1", "payment_method_name": "BCA", "status": "pending", "bank_account": { "bank_name": "BCA", "account_number": "1234567890", "account_name": "PT H2H Indonesia" }, "expired_at": "2026-04-10T14:30:00+07:00" } }
Penting:
- Untuk bank transfer manual, transfer tepat sesuai
total_amount(termasukunique_code) agar terdeteksi otomatis. - Sertakan berita transfer (
transfer_note) jika diminta oleh bank. - Maksimal 5 deposit pending sekaligus per akun.
- Deposit yang belum dibayar akan otomatis expired sesuai
expired_at. - HCoin masuk otomatis setelah pembayaran berhasil diverifikasi.
13 Deposit — Cek Status
Mengecek status deposit yang sudah dibuat.
https://api.h2h.id/api/trx/deposit/status?invoice={invoice}&memberID={id}&pin={pin}&password={pass}
| Parameter | Wajib | Deskripsi |
|---|---|---|
| invoice | Ya | Nomor invoice deposit (dari response deposit) |
| memberID | Ya | Username akun H2H |
| pin | Ya | PIN transaksi |
| password | Ya | Password H2H |
Response:
{ "status": true, "message": "Status deposit", "data": { "invoice": "DEP260410A1B2C3D4", "amount": 100000, "total_amount": 104000, "fee": 4000, "unique_code": 0, "payment_method": "BR", "status": "success", "va_number": "88810012345678", "expired_at": "2026-04-10T14:30:00+07:00", "created_at": "2026-04-10T13:30:00+07:00" } }
Status Deposit:
| Status | Deskripsi |
|---|---|
| pending | Menunggu pembayaran |
| success | Pembayaran berhasil, HCoin sudah masuk |
| expired | Deposit kadaluarsa (belum dibayar) |
| failed | Pembayaran gagal |
| cancelled | Dibatalkan |
14 Callback (Webhook)
Setelah transaksi selesai diproses, sistem secara otomatis mengirim notifikasi ke Callback URL yang Anda atur di Pengaturan → API H2H. Format pengiriman berbeda antara transaksi reguler dan order SMM.
Transaksi Reguler (Pulsa, Data, PLN, E-Wallet, Game, Pascabayar/Tagihan)
Parameter message berisi teks status (URL-encoded). Baca di server Anda via $_GET['refid'] dan $_GET['message']. Parameter key hanya dikirim bila Anda mengisi Webhook Key.
Contoh isi message (setelah di-decode)
PENDING : T#INV20260228001 R#ref001 Telkomsel 5.000 T5.08123456789 akan diproses. Saldo 1.000.000 - 5.650 = 994.350 @28/02 14:30 SUKSES : T#INV20260228001 R#ref001 Telkomsel 5.000 T5.08123456789 SUKSES. SN/Ref: 0812xxxx1234. Saldo 994.350 @28/02 14:31 GAGAL : T#INV20260228001 R#ref001 Telkomsel 5.000 T5.08123456789 GAGAL. Nomor tujuan salah. [REFUND] Saldo 1.000.000 @28/02 14:32
Untuk produk pascabayar/tagihan, bagian SN/Ref berisi detail tagihan dalam format TAG/{id_pelanggan}/{kode}/{nominal_tagihan}/{admin}.
Query string yang sudah ada pada Callback URL Anda tetap dipertahankan (mis. token auth), namun parameter refid, message, dan key selalu diisi oleh sistem — jadi cukup isi base URL saja, jangan menaruh nilai refid/message statik di URL.
Order SMM
Contoh Callback Body (SMM Selesai)
{ "ref_id": "ref001", "order_number": "SMM20260228001", "service_name": "IG Followers [Real]", "target": "https://instagram.com/user", "quantity": 1000, "price": 50000, "balance": 950000, "time": "28/02 14:35", "transaction_status": "completed", "delivered": 1000 }
Catatan Penting:
- Transaksi reguler (termasuk pascabayar/tagihan) dikirim via GET dengan parameter
refid&message— baca via$_GET - Order SMM dikirim via POST dengan body JSON
- Callback reguler dikirim saat transaksi SUKSES atau GAGAL; SMM saat status akhir (completed / partial / failed)
- Callback otomatis di-retry hingga 3 kali jika gagal terkirim (interval: 5 detik, 30 detik, 2 menit)
- Server Anda harus merespons dengan HTTP 2xx agar dianggap berhasil terkirim
- Anda juga bisa polling status secara berkala menggunakan endpoint Cek Status tanpa menunggu callback
- Callback URL bisa menggunakan HTTP atau HTTPS (HTTPS disarankan)
15 Kode Error
Semua error dikembalikan sebagai JSON dengan status: false:
{ "status": false, "message": "Pesan error..." }
Autentikasi
| message | Penyebab |
|---|---|
| Parameter tidak lengkap. Diperlukan: memberID, pin, password | Salah satu atau semua parameter auth tidak dikirim |
| Member ID tidak ditemukan | memberID tidak terdaftar di sistem |
| Akun diblokir. Hubungi admin. | Akun Anda diblokir oleh admin |
| Akses H2H belum diaktifkan. Aktifkan di Dashboard > Pengaturan API | Fitur H2H belum diaktifkan di profil |
| Password salah | Password H2H tidak cocok |
| PIN salah. Sisa percobaan: {n}x | PIN tidak cocok (menampilkan sisa percobaan sebelum terkunci) |
| PIN terkunci karena 5x percobaan gagal. Coba lagi dalam 15 menit. | PIN terkunci setelah 5 kali gagal |
| PIN belum diatur. Silakan buat PIN di Dashboard. | Anda belum membuat PIN |
| IP Address {ip} tidak terdaftar. Tambahkan di Dashboard > Pengaturan API | IP pengirim tidak ada di whitelist |
Order Transaksi
| message | Penyebab |
|---|---|
| Parameter product diperlukan | Kode produk tidak dikirim |
| Parameter dest (tujuan) diperlukan | Nomor tujuan / ID pelanggan tidak dikirim |
| Parameter refID diperlukan | Reference ID tidak dikirim |
| R#{refID} sudah pernah digunakan. Gunakan refID yang berbeda. | refID sudah pernah dipakai (duplikat) |
| Produk {kode} tidak tersedia | Kode produk tidak ada atau sedang tidak aktif |
| Saldo tidak cukup | Saldo kurang (menyertakan data.balance dan data.price) |
Order SMM
| message | Penyebab |
|---|---|
| Parameter service (ID layanan SMM) diperlukan | Service ID tidak dikirim |
| Parameter target (URL/username) diperlukan | Target URL/username tidak dikirim |
| Parameter quantity harus lebih dari 0 | Quantity 0 atau negatif |
| Quantity minimal {min} untuk layanan ini | Jumlah order di bawah minimum |
| Quantity maksimal {max} untuk layanan ini | Jumlah order melebihi maksimum |
| Layanan SMM #{id} tidak tersedia | Service ID tidak ada atau tidak aktif |
| Parameter custom_comments diperlukan untuk layanan ini | Layanan custom comments tapi parameter tidak dikirim |
Cek Status
| message | Penyebab |
|---|---|
| Parameter refID diperlukan | refID tidak dikirim |
| Transaksi dengan refID {refID} tidak ditemukan | refID tidak ada di log |
16 Keamanan
- Gunakan IP Whitelist untuk membatasi akses API hanya dari server Anda. Jika whitelist kosong, semua IP diizinkan.
- Buat Password H2H yang kuat dan berbeda dari password login Anda
- Jangan membagikan Member ID, PIN, atau Password H2H kepada pihak lain
- Pastikan Callback URL menggunakan HTTPS untuk keamanan data
- Gunakan refID yang unik untuk setiap transaksi — sistem menolak refID duplikat untuk mencegah double order
- PIN akan terkunci 15 menit setelah 5 kali percobaan gagal
17 Contoh Integrasi (PHP)
Berikut contoh integrasi sederhana menggunakan PHP:
Cek HCoin
<?php $baseUrl = 'https://api.h2h.id/api/trx'; $params = [ 'memberID' => 'username_anda', 'pin' => '123456', 'password' => 'password_h2h_anda', ]; $url = $baseUrl . '/balance?' . http_build_query($params); $response = json_decode(file_get_contents($url), true); if ($response['status']) { echo "HCoin: " . $response['data']['balance_formatted']; } else { echo "Error: " . $response['message']; }
Order Pulsa
<?php $baseUrl = 'https://api.h2h.id/api/trx'; $params = [ 'product' => 'T5', 'dest' => '08123456789', 'refID' => 'TRX' . time(), 'memberID' => 'username_anda', 'pin' => '123456', 'password' => 'password_h2h_anda', ]; $url = $baseUrl . '?' . http_build_query($params); $response = json_decode(file_get_contents($url), true); if ($response['status']) { $data = $response['data']; echo "Invoice: {$data['invoice']}, Harga: {$data['price']}, Sisa HCoin: {$data['balance_after']}"; } else { echo "Error: " . $response['message']; }
Cek ID Pelanggan PLN
<?php $url = 'https://api.h2h.id/api/pln/check'; $data = json_encode(['meter_id' => '530000123456']); $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data, CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_RETURNTRANSFER => true, ]); $response = json_decode(curl_exec($ch), true); curl_close($ch); if ($response['success']) { $pelanggan = $response['data']; echo "Nama: {$pelanggan['name']}, Tarif: {$pelanggan['tariff']}, Daya: {$pelanggan['power_formatted']}"; } else { echo "Tidak ditemukan: " . $response['message']; }
Cek Status
<?php $baseUrl = 'https://api.h2h.id/api/trx'; $params = [ 'refID' => 'TRX1740700000', 'memberID' => 'username_anda', 'pin' => '123456', 'password' => 'password_h2h_anda', ]; $url = $baseUrl . '/status?' . http_build_query($params); $response = json_decode(file_get_contents($url), true); if ($response['status']) { $data = $response['data']; switch ($data['transaction_status']) { case 'success': echo "Berhasil! SN: {$data['serial_number']}"; break; case 'failed': echo "Gagal: {$data['reason']}"; break; default: echo "Masih pending, cek lagi nanti"; } }
Terima Callback
<?php // File: callback.php (di server Anda) // URL: https://server-anda.com/callback.php // Callback reguler dikirim via GET: ?refid=...&message=...&key=... $refId = $_GET['refid'] ?? ''; $message = $_GET['message'] ?? ''; // Log callback file_put_contents('callback.log', date('Y-m-d H:i:s') . " | " . $refId . " | " . $message . "\n", FILE_APPEND); // Tentukan status dari isi message if (stripos($message, 'SUKSES') !== false) { // Transaksi sukses — SN ada di message (SN/Ref: ...) } elseif (stripos($message, 'GAGAL') !== false) { // Transaksi gagal, HCoin sudah di-refund } echo 'OK'; // Response 200 agar tidak di-retry
Deposit Saldo via API
<?php $baseUrl = 'https://api.h2h.id/api/trx'; $params = [ 'amount' => 100000, 'method' => 'BR', // Kode dari /deposit/methods 'memberID' => 'username_anda', 'pin' => '123456', 'password' => 'password_h2h_anda', ]; // Buat deposit $url = $baseUrl . '/deposit?' . http_build_query($params); $response = json_decode(file_get_contents($url), true); if ($response['status']) { $data = $response['data']; echo "Invoice: {$data['invoice']}\n"; echo "Total bayar: Rp {$data['total_amount']}\n"; if (isset($data['va_number'])) { echo "VA Number: {$data['va_number']}\n"; } if (isset($data['bank_account'])) { echo "Transfer ke: {$data['bank_account']['bank_name']} {$data['bank_account']['account_number']}\n"; } } else { echo "Error: " . $response['message']; } // Cek status deposit $statusParams = [ 'invoice' => $data['invoice'], 'memberID' => 'username_anda', 'pin' => '123456', 'password' => 'password_h2h_anda', ]; $statusUrl = $baseUrl . '/deposit/status?' . http_build_query($statusParams); $statusResponse = json_decode(file_get_contents($statusUrl), true); echo "Status: " . $statusResponse['data']['status'];
Siap Mulai Integrasi?
Daftar akun, aktifkan H2H, dan mulai transaksi otomatis dalam hitungan menit.