Dokumentasi API H2H Kontera.ME

Versi 1 · format OtomaX

Untuk pemilik server (OtomaX, iRS, R-One, atau software sendiri) yang mengambil stok Kontera.ME. Format permintaan dan tanda tangannya sama dengan H2H OtomaX, jadi bisa dipasang tanpa koding.

1. Persiapan

Mitra didaftarkan oleh admin Kontera.ME. Anda membutuhkan akun member Kontera.ME. Saldo akun inilah yang dipotong untuk setiap transaksi, dan diisi lewat deposit seperti biasa. Dari admin Anda menerima:

Semua alamat memakai https://. Permintaan http:// dialihkan ke https.

2. Transaksi

GET https://mitra.kontera.me/h2h/trx?product=[kode]&qty=1&dest=[tujuan]&refID=[id transaksi Anda]&memberID=[member ID]&sign=[sign]

POST juga diterima, dalam bentuk form atau JSON dengan nama parameter yang sama. Huruf besar/kecil pada nama parameter tidak berpengaruh (refID = refid).

ParameterWajibAturan
productyaKode produk Kontera.ME (lihat daftar harga), 1–32 karakter A–Z 0–9 . _ -. Dibaca sebagai huruf besar.
destyaNomor/ID tujuan, 4–40 karakter 0–9 A–Z a–z . -. Spasi dibuang. Nomor HP ditulis 08… (tanpa +62).
refIDyaID transaksi di sistem Anda, unik, 4–64 karakter A–Z a–z 0–9 . _ -. Lihat bagian 4.
memberIDyaMember ID Anda (4–16 huruf/angka).
signya*Tanda tangan, lihat bagian 3. *Sebagai ganti sign boleh dikirim pin dan password (hanya lewat https).
qtytidakDefault 1. Hanya produk bebas nominal yang memakai qty sebagai nominal (contoh qty=50000). Untuk produk lain qty selain 1 ditolak (RC 47).
checktidakcheck=1 hanya menanyakan status refID, tidak pernah membuat transaksi.
formattidakformat=json untuk jawaban JSON. Default jawaban berupa teks.

Server menjawab setelah supplier merespons. Biasanya beberapa detik, kadang lebih lama. Atur timeout klien Anda minimal 60 detik. Kalau koneksi putus atau habis waktu, kirim ulang dengan refID yang sama: itu aman dan tidak membuat transaksi kedua.

E-money bebas nominal (DANA, OVO, GoPay, ShopeePay, dan lain-lain)

Top up e-money dengan nominal bebas cukup satu langkah, tanpa cek tagihan. Kodenya adalah produk dengan "open_amount":true di daftar harga, misalnya DANAD (TOP UP DANA).

https://mitra.kontera.me/h2h/trx?product=DANAD&qty=50000&dest=081234567890&refID=INV9&memberID=[member ID]&sign=[sign]
R#INV9 DANAD.081234567890 SUKSES. SN:DNID DANA - 081234567890/BUD***/50000/SERIAL:2026101112345 TRXID:W1A2B3C4D5E HRG:50340 SALDO:449660 @2026-10-11 20:40:00
R#INV10 DANAD.081234567890 GAGAL. KET:Nominal top up untuk TOP UP DANA harus antara Rp1.000 dan Rp500.000. RC:47 SALDO:500000 @2026-10-11 20:41:00

Isi SN mengikuti format supplier e-money; contoh di atas hanya ilustrasi.

3. Tanda tangan (sign)

Sama dengan tanda tangan H2H OtomaX:

sign = base64url( sha1( "OtomaX|" + memberID + "|" + product + "|" + dest + "|" + refID + "|" + PIN + "|" + password , raw biner ) )

Contoh PHP

$sign = rtrim(strtr(base64_encode(sha1("OtomaX|$memberID|$product|$dest|$refID|$pin|$password", true)), '+/', '-_'), '=');
$url  = 'https://mitra.kontera.me/h2h/trx?' . http_build_query(compact('product', 'dest', 'refID', 'memberID', 'sign') + ['qty' => 1]);

Contoh Python

import base64, hashlib
raw  = f"OtomaX|{member_id}|{product}|{dest}|{ref_id}|{pin}|{password}".encode()
sign = base64.urlsafe_b64encode(hashlib.sha1(raw).digest()).decode().rstrip("=")

4. refID & cek status

5. Format jawaban

Teks (default)

R#ABC123 TEL10.081234567890 sedang diproses. TRXID:W1A2B3C4D5E HRG:11270 SALDO:488730 @2026-10-11 15:30:00
R#ABC123 TEL10.081234567890 SUKSES. SN:0412345678901234 TRXID:W1A2B3C4D5E HRG:11270 SALDO:488730 @2026-10-11 15:30:08
R#ABC124 TEL10.081234567890 GAGAL. KET:Nomor tujuan salah. RC:40 TRXID:W9F8E7D6C5B HRG:11270 SALDO:500000 @2026-10-11 15:31:02
R#ABC125 TEL10.081234567890 GAGAL. KET:Saldo tidak mencukupi. RC:42 SALDO:9000 @2026-10-11 15:32:10

JSON (format=json)

{"success":true,"rc":"00","status":"success","refID":"ABC123","trxid":"W1A2B3C4D5E","product":"TEL10","dest":"081234567890",
 "sn":"0412345678901234","price":11270,"balance":488730,"msg":"R#ABC123 TEL10.081234567890 SUKSES. SN:… @2026-10-11 15:30:08"}

status bernilai processing, success, atau error. success bernilai false hanya bila status error. msg berisi jawaban teks yang sama.

6. Kode RC

RCArtiStatus
00Suksessukses
68Sedang diproses, tunggu callback atau cek ulang dengan refID yang samadiproses
40Gagal (alasan di KET). Kalau saldo sudah dipotong, otomatis di-refundgagal
41Produk tidak tersedia: kode tidak ada, stok kosong, tidak dijual lewat H2H, atau tidak termasuk produk akun Andagagal
42Saldo tidak mencukupigagal
44refID tidak ditemukan (jawaban check=1), atau bayar tagihan tanpa cek tagihan dulugagal
45Member ID salah/tidak aktif, sign salah, atau PIN/password salahgagal
46IP server Anda tidak terdaftar (IP-nya disebut di KET)gagal
47Parameter salah: refID, produk, tujuan, nominal bebas nominal di luar batas, qty untuk produk biasa, kode tagihan dikirim tanpa cek tagihan, atau hasil cek tagihan kedaluwarsagagal
50Server sedang maintenance, coba lagi nantigagal

Untuk RC 41, 42, 44, 45, 46, 47, dan 50 tidak ada transaksi yang dibuat dan saldo tidak dipotong. Jawaban "sedang diproses" tidak menampilkan RC di teks, tetapi di JSON bernilai 68.

7. Laporan (callback)

Kalau URL callback Anda terdaftar, hasil akhir setiap transaksi dikirim ke URL itu:

GET [URL callback]?refid=ABC123&trxid=W1A2B3C4D5E&status=sukses&rc=00&product=TEL10&dest=081234567890
    &sn=0412345678901234&price=11270&balance=488730&message=[jawaban teks seperti bagian 5]

8. Cek saldo

GET https://mitra.kontera.me/h2h/trx?product=SALDO&dest=0&refID=[bebas]&memberID=[member ID]&sign=[sign]

Sign dihitung dengan product=SALDO serta dest dan refID yang dikirim. SAL atau S juga diterima. Cek saldo tidak membuat transaksi.

R#S1 SUKSES. SN:Saldo 488730 SALDO:488730 @2026-10-11 15:40:00

9. Daftar harga

GET https://mitra.kontera.me/h2h/price?memberID=[member ID]&sign=[sign]

Sign dihitung dengan product=PRICE, dest=0, refID=0, yaitu sha1("OtomaX|memberID|PRICE|0|0|PIN|password"). Boleh juga dengan pin dan password. Jawabannya selalu JSON:

{"success":true,"rc":"00","balance":488730,"count":2,"data":[
 {"code":"TEL10","name":"Telkomsel 10.000","category":"pulsa-reguler","brand":"TELKOMSEL","price":11270,"status":"tersedia"},
 {"code":"DANAD","name":"TOP UP DANA","category":"dompet-digital","brand":"BEBAS DENOM","price":340,"status":"tersedia",
  "open_amount":true,"min":10000,"max":500000,"note":"harga = nominal (qty) + biaya ini"}]}

10. Pascabayar (tagihan)

Tagihan (PLN pascabayar, BPJS, PDAM, telepon/internet, angsuran, dan lain-lain) dibayar dalam dua langkah dengan refID yang sama: cek tagihan, lalu bayar. Kode tagihan yang dikirim sebagai transaksi biasa ditolak (RC 47).

Langkah 1 — cek tagihan (tidak memotong saldo)

Kirim seperti transaksi biasa, dengan salah satu penanda ini (pilih yang sesuai software Anda):

GayaCek tagihanBayar
OtomaX (kode)product=CEK+kode, mis. CEKTAGPLNproduct=BAYAR+kode, mis. BAYARTAGPLN (PAY… juga diterima)
iRS / R-Oneproduct=TAGPLN&jenis=5product=TAGPLN&jenis=6
Parameterproduct=TAGPLN&cmd=inqproduct=TAGPLN&cmd=pay

dest = nomor/ID pelanggan. Sign dihitung dengan nilai product persis seperti yang dikirim (mis. CEKTAGPLN).

R#INV001 CEKTAGPLN.530000000001 CEK TAGIHAN SUKSES. SN:BUDI SANTOSO/Oktober 2026 NAMA:BUDI SANTOSO PERIODE:Oktober 2026 LEMBAR:1
  TARIF:R1/1300 TAGIHAN:300000 DENDA:0 ADMIN:2500 TOTAL:302500 BAYAR SEBELUM:20:15 HRG:301740 SALDO:500000 @2026-10-11 19:45:00

Langkah 2 — bayar

Produk pascabayar dengan nominal

Di daftar harga, produk pascabayar ditandai "postpaid":true dan price-nya adalah biaya layanan. Harga final selalu dari cek tagihan.

11. Harga, saldo & produk

12. Setelan di OtomaX

13. Keamanan

Butuh bantuan atau perubahan (IP, URL callback, daftar produk)? Hubungi admin Kontera.ME. Data rahasia hanya dikirim lewat jalur pribadi.