Dokumentasi API H2H

Referensi lengkap API Host-to-Host H2H.ID untuk integrasi otomatis

1 Pendahuluan

API H2H H2H.ID memungkinkan Anda melakukan transaksi produk digital secara otomatis dari sistem Anda.

Produk yang Didukung

• Pulsa — All operator (Telkomsel, Indosat, XL, Three, Smartfren, dll)
• Paket Data — Kuota internet semua operator
• Token PLN — Listrik prabayar (nominal fixed: 20rb–5jt)
• Voucher Game — Mobile Legends, Free Fire, PUBG, Genshin Impact, dll
• E-Wallet (Topup Fixed) — GoPay, OVO, DANA, ShopeePay, LinkAja (nominal fixed)
• Telp & SMS — Paket nelpon dan SMS
• SMM — Social Media Marketing (followers, likes, views, comments)

Produk dengan Flow Khusus / Tidak Didukung di Order Reguler

Status dukungan H2H API:

• Pascabayar / PPOB / Tagihan — didukung via H2H, tetapi wajib flow /trx/inquiry lalu order /trx dengan inquiry_id
• Open Denomination (qty) — didukung untuk produk nominal_bebas (DANA, OVO, GOPAY, ShopeePay, dll). Wajib kirim parameter qty (kelipatan 1.000)
• Produk harga dinamis tanpa inquiry — ditolak sampai inquiry dilakukan
• Kode CEK (contoh CPLA) — hanya untuk inquiry, tidak bisa langsung di endpoint order

Base URL

https://api.h2h.id/api/trx

Format

  • • Method: GET (semua endpoint)
  • • Response: JSON (semua endpoint)
  • • Content-Type: application/json

Langkah Memulai

  1. Daftar akun di h2h.id
  2. Login ke Dashboard, buka menu Pengaturan → API H2H
  3. Aktifkan H2H, atur Password H2H dan PIN
  4. Tambahkan IP Whitelist (IP server Anda)
  5. Opsional: isi Callback URL untuk menerima notifikasi otomatis
  6. 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

GET /balance
GET https://api.h2h.id/api/trx/balance?memberID={username}&pin={pin}&password={h2h_password}

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.

GET /
GET https://api.h2h.id/api/trx?product={kode}&dest={tujuan}&refID={ref}&memberID={id}&pin={pin}&password={pass}

Parameters

Parameter Wajib Keterangan
productYaKode produk dari Daftar Harga (contoh: T5, XD10, PLN50, ML86, GOPAY20)
destYaNomor tujuan sesuai jenis produk:
  • Pulsa/Data/Telp SMS: Nomor HP (08xxx, 628xxx)
  • Token PLN Prabayar: Nomor meter (10-15 digit)
  • E-Wallet: Nomor HP terdaftar e-wallet
  • Voucher Game: User ID game (untuk ML format: userid atau userid|zoneid)
refIDYaReference ID unik dari sistem Anda. Tidak boleh duplikat (untuk mencegah double order & sebagai referensi callback)
memberIDYaUsername akun H2H Anda
pinYaPIN transaksi
passwordYaPassword H2H
qtyKondisionalWajib 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_idKondisionalWajib 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 transaksi
  • ref_id — Reference ID yang Anda kirim
  • price — Harga dalam Rupiah (integer)
  • HCoin langsung terpotong saat order berhasil dibuat
  • Jika transaksi gagal, HCoin otomatis dikembalikan (refund)

Contoh per Kategori

Pulsa: https://api.h2h.id/api/trx?product=T5&dest=08123456789&refID=ref001&memberID=user1&pin=123456&password=h2hpass
Paket Data: https://api.h2h.id/api/trx?product=XD10&dest=08123456789&refID=ref002&memberID=user1&pin=123456&password=h2hpass
Token PLN Prabayar: https://api.h2h.id/api/trx?product=PLN50&dest=12345678901&refID=ref003&memberID=user1&pin=123456&password=h2hpass
Voucher Game (Mobile Legends): https://api.h2h.id/api/trx?product=ML86&dest=123456789&refID=ref004&memberID=user1&pin=123456&password=h2hpass
E-Wallet Topup (Nominal Fixed): https://api.h2h.id/api/trx?product=GOPAY20&dest=08123456789&refID=ref005&memberID=user1&pin=123456&password=h2hpass
E-Wallet Topup (Open Denomination / Nominal Bebas): 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.

Catatan: Untuk PPOB/tagihan (PLN Pascabayar, BPJS, PDAM, Telkom, dll), lakukan /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).
Notice verifikasi: Jika setting proteksi aktif, produk e-wallet dan nominal bebas hanya bisa dipesan oleh merchant dengan KYC dan KYB berstatus approved. Cek status requirement melalui field 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.

GET /status
GET https://api.h2h.id/api/trx/status?refID={ref}&memberID={id}&pin={pin}&password={pass}

Parameters

Parameter Wajib Keterangan
refIDYaReference ID yang digunakan saat order
memberIDYaUsername akun H2H Anda
pinYaPIN transaksi
passwordYaPassword H2H

Response

Sukses:
{
  "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"
  }
}
Pending:
{
  "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": ""
  }
}
Gagal:
{
  "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_number berisi SN / token PLN
  • pending — Sedang diproses oleh provider
  • failed — Transaksi gagal. reason berisi alasan, is_refunded menandakan dana dikembalikan

Field tambahan:

  • status_label — Label status dalam Bahasa Indonesia (Sukses / Menunggu / Diproses / Gagal / Dikembalikan)
  • status_description — Deskripsi status transaksi dalam Bahasa Indonesia
  • provider_message — Pesan dari provider (SN, token, atau keterangan error)

6 Daftar Harga

GET /pricelist
GET https://api.h2h.id/api/trx/pricelist?memberID={id}&pin={pin}&password={pass}

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"
    }
  ]
}
Catatan: Field 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

POST 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

POST 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"
}
Tips: Gunakan endpoint ini untuk validasi ID pelanggan/game sebelum mengirim transaksi, agar mengurangi risiko transaksi gagal karena ID salah.

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.

POST https://api.h2h.id/api/bill/check
Autentikasi wajib: Sertakan header 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"
}
Masa berlaku: token default berlaku 24 jam. Kirim "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"
}
Catatan: Response menggunakan key 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.
Social Media Marketing (SMM)

8 Order SMM

Untuk order followers, likes, views, comments, dan layanan social media lainnya.

GET /
GET https://api.h2h.id/api/trx?type=smm&service={id}&target={url}&quantity={qty}&refID={ref}&memberID={id}&pin={pin}&password={pass}

Parameters

Parameter Wajib Keterangan
typeYaHarus bernilai smm
serviceYaID layanan SMM (lihat Daftar Harga SMM). Bisa menggunakan ID internal atau external ID
targetYaURL atau username target (contoh: https://instagram.com/p/xxxxx)
quantityYaJumlah pesanan (harus di antara min dan max layanan)
refIDYaReference ID unik dari sistem Anda
custom_commentsKondisionalWajib untuk layanan tipe "Custom Comments". Pisah setiap komentar dengan \n (newline)
memberIDYaUsername akun H2H Anda
pinYaPIN transaksi
passwordYaPassword 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

GET /pricelist?type=smm
GET https://api.h2h.id/api/trx/pricelist?type=smm&memberID={id}&pin={pin}&password={pass}

Parameter Opsional

platformFilter 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
    }
  ]
}
Catatan: Field 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.

GET https://api.h2h.id/api/trx/status?refID={ref}&memberID={id}&pin={pin}&password={pass}

Nilai transaction_status

Status Final? Keterangan
pendingTidakOrder masuk antrian, belum diproses
processingTidakSedang diproses. Menyertakan progress (%) dan delivered jika tersedia
completedYaOrder selesai. delivered berisi jumlah terkirim
partialYaSebagian terkirim. Menyertakan delivered dan refund_amount jika ada
failedYaDibatalkan / 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
  }
}
Catatan: Saat cek status SMM, sistem secara otomatis meng-polling status terbaru dari provider SMM jika order masih aktif.

11 Deposit — Daftar Metode Pembayaran

Mendapatkan daftar metode pembayaran yang tersedia untuk top up HCoin via API.

GET https://api.h2h.id/api/trx/deposit/methods?memberID={id}&pin={pin}&password={pass}
ParameterWajibDeskripsi
memberIDYaUsername akun H2H
pinYaPIN transaksi
passwordYaPassword 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:

TypeDeskripsi
vaVirtual Account — bayar via ATM, mobile/internet banking
ewalletE-Wallet — OVO, ShopeePay, dll
qrisQRIS — scan QR Code dari aplikasi e-wallet manapun
bank_transferTransfer 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.

GET https://api.h2h.id/api/trx/deposit?amount={nominal}&method={kode}&memberID={id}&pin={pin}&password={pass}
ParameterWajibDeskripsi
amountYaNominal deposit dalam Rupiah (min: 10.000)
methodYaKode metode pembayaran dari /trx/deposit/methods
memberIDYaUsername akun H2H
pinYaPIN transaksi
passwordYaPassword 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 (termasuk unique_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.

GET https://api.h2h.id/api/trx/deposit/status?invoice={invoice}&memberID={id}&pin={pin}&password={pass}
ParameterWajibDeskripsi
invoiceYaNomor invoice deposit (dari response deposit)
memberIDYaUsername akun H2H
pinYaPIN transaksi
passwordYaPassword 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:

StatusDeskripsi
pendingMenunggu pembayaran
successPembayaran berhasil, HCoin sudah masuk
expiredDeposit kadaluarsa (belum dibayar)
failedPembayaran gagal
cancelledDibatalkan

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)

GET Dikirim sebagai HTTP GET (gaya OkeConnect)
GET {callback_url}?refid={ref_id}&message={pesan}&key={webhook_key}

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

POST Content-Type: application/json
POST {callback_url}

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, passwordSalah satu atau semua parameter auth tidak dikirim
Member ID tidak ditemukanmemberID tidak terdaftar di sistem
Akun diblokir. Hubungi admin.Akun Anda diblokir oleh admin
Akses H2H belum diaktifkan. Aktifkan di Dashboard > Pengaturan APIFitur H2H belum diaktifkan di profil
Password salahPassword H2H tidak cocok
PIN salah. Sisa percobaan: {n}xPIN 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 APIIP pengirim tidak ada di whitelist

Order Transaksi

message Penyebab
Parameter product diperlukanKode produk tidak dikirim
Parameter dest (tujuan) diperlukanNomor tujuan / ID pelanggan tidak dikirim
Parameter refID diperlukanReference ID tidak dikirim
R#{refID} sudah pernah digunakan. Gunakan refID yang berbeda.refID sudah pernah dipakai (duplikat)
Produk {kode} tidak tersediaKode produk tidak ada atau sedang tidak aktif
Saldo tidak cukupSaldo kurang (menyertakan data.balance dan data.price)

Order SMM

message Penyebab
Parameter service (ID layanan SMM) diperlukanService ID tidak dikirim
Parameter target (URL/username) diperlukanTarget URL/username tidak dikirim
Parameter quantity harus lebih dari 0Quantity 0 atau negatif
Quantity minimal {min} untuk layanan iniJumlah order di bawah minimum
Quantity maksimal {max} untuk layanan iniJumlah order melebihi maksimum
Layanan SMM #{id} tidak tersediaService ID tidak ada atau tidak aktif
Parameter custom_comments diperlukan untuk layanan iniLayanan custom comments tapi parameter tidak dikirim

Cek Status

message Penyebab
Parameter refID diperlukanrefID tidak dikirim
Transaksi dengan refID {refID} tidak ditemukanrefID 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.