Skip to main content

Daftar Produk

Endpoint untuk mengambil daftar produk prabayar, topup game, dan pascabayar.

Endpoint: POST /v1/products

Parameter Request​

ParameterTipeWajibKeterangan
api_idstring✅API ID dari pengaturan akun
timestampinteger✅Unix timestamp saat request dikirim
signaturestring✅HMAC-SHA256 — lihat cara membuat signature
cmdstring✅Tipe produk: prepaid, game, atau postpaid

Nilai cmd​

NilaiKeterangan
prepaid(Prabayar) Pulsa dan paket data (Telkomsel, Indosat, XL, Axis, Tri, dll)
game(Topup Game) Voucher game dan top-up (Mobile Legends, Free Fire, PUBG, dll)
postpaid(Pascabayar) Tagihan pascabayar (PLN, BPJS, PDAM, Telkom, dll)

Contoh Request​

<?php
header('Content-Type: application/json');

$api_id = 'your_api_id';
$api_key = 'your_api_key';
$secret_key = 'your_secret_key';
$timestamp = time();

// Business params
$businessParams = ['cmd' => 'prepaid']; // prepaid | game | postpaid

// Urutkan A ke Z (ksort)
ksort($businessParams);

$canonicalBody = json_encode($businessParams, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$bodyHash = hash('sha256', $canonicalBody);
$stringToSign = implode('|', [$api_id, $api_key, $timestamp, $bodyHash]);
$signature = hash_hmac('sha256', $stringToSign, $secret_key);

$payload = array_merge($businessParams, [
'api_id' => $api_id,
'timestamp' => $timestamp,
'signature' => $signature,
]);

$ch = curl_init('https://api.isikuota.com/v1/products');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$response = json_decode(curl_exec($ch), true);
// print_r($response);
echo json_encode($response, JSON_PRETTY_PRINT);

Contoh Response​

{
"success": true,
"code": "SUCCESS",
"message": "Ditemukan 2911 produk",
"data": [
{
"code": "TSEL10",
"name": "Telkomsel 10.000",
"brand": "TELKOMSEL",
"category": "Pulsa",
"type": "Umum",
"price": 11500,
"is_active": true,
"description": "",
"is_open_nominal": false,
"min_nominal": null,
"max_nominal": null,
"has_account_inquiry": false
},
{
"code": "TRFBANK",
"name": "Transfer Bank (Nominal Bebas)",
"brand": "TRANSFER",
"category": "Transfer Bank",
"type": "Umum",
"price": 2500,
"is_active": true,
"description": "Nominal bebas sesuai kebutuhan Anda",
"is_open_nominal": true,
"min_nominal": 10000,
"max_nominal": 5000000,
"has_account_inquiry": true
}
],
"errors": null,
"meta": null
}
Produk Nominal Terbuka (is_open_nominal: true)

Untuk produk seperti transfer bank atau sebagian e-wallet, nominalnya tidak tetap — pelanggan bebas menentukan sendiri (dibatasi min_nominal/max_nominal). Pada produk jenis ini, price bukan harga jual, melainkan biaya admin/fee saja. Total yang ditagihkan ke pelanggan = nominal yang dipilih + price (fee).

Field Response​

Prabayar (cmd=prepaid)​

FieldTipeKeterangan
codestringKode unik produk — dipakai saat order
namestringNama lengkap produk
brandstringBrand/operator produk
categorystringKategori produk (Pulsa, Data, Voucher, dll)
typestringTipe produk (Umum, diamond)
priceintegerJika is_open_nominal: false → harga jual dalam rupiah. Jika is_open_nominal: true → hanya biaya admin/fee, bukan harga jual (lihat catatan di bawah)
is_activebooleantrue = produk aktif
descriptionstringCara penggunaan / info tambahan
is_open_nominalbooleantrue jika nominal bebas ditentukan pelanggan (mis. transfer bank), false jika nominal tetap
min_nominalinteger|nullNominal minimum yang boleh dipilih pelanggan (hanya relevan jika is_open_nominal: true)
max_nominalinteger|nullNominal maksimum yang boleh dipilih pelanggan (hanya relevan jika is_open_nominal: true)
has_account_inquirybooleantrue jika brand produk ini mendukung cek nama pemilik akun sebelum transfer. false = tidak tersedia untuk produk ini
Kapan pakai has_account_inquiry

Untuk produk transfer bank/e-wallet (is_open_nominal: true biasanya termasuk kategori ini), cek has_account_inquiry dulu — kalau true, tampilkan tombol/alur "Cek Nama" ke pengguna sebelum konfirmasi transfer. Tidak semua brand didukung.

Menghitung Total Tagihan untuk Nominal Terbuka

Untuk produk dengan is_open_nominal: true, jangan memakai price sebagai harga jual. Total yang harus dibayar pelanggan = nominal pilihan pelanggan (antara min_nominal dan max_nominal) + price (fee). Nominal ini yang dikirim sebagai parameter saat membuat order.

Topup Game (cmd=game)​

FieldTipeKeterangan
codestringKode unik produk — dipakai saat order
namestringNama lengkap produk
brandstringBrand/operator produk
categorystringKategori produk (Pulsa, Data, Voucher, dll)
typestringTipe produk (Umum, diamond)
priceintegerHarga jual dalam rupiah
is_activebooleantrue = produk aktif
descriptionstringCara penggunaan / info tambahan
has_account_inquirybooleantrue jika brand game ini mendukung cek ID/nickname sebelum topup (mis. Free Fire, Mobile Legends). false = tidak tersedia untuk produk ini
info

Produk Topup Game tidak memiliki nominal terbuka — field is_open_nominal/min_nominal/max_nominal hanya muncul pada cmd=prepaid.

Pascabayar (cmd=postpaid)​

FieldTipeKeterangan
codestringKode produk — dipakai saat inquiry & pembayaran
namestringNama lengkap produk
brandstringBrand/operator
categorystringKategori (PLN, BPJS, PDAM, dll)
typestringTipe produk
adminintegerBiaya admin per transaksi dalam rupiah
is_activebooleantrue = produk aktif
descriptionstringCatatan tambahan
has_account_inquirybooleantrue jika brand ini mendukung cek nama pemilik akun. Untuk pascabayar, nama pelanggan biasanya sudah didapat lewat inquiry tagihan, jadi field ini umumnya false
Best Practice
  • Cache daftar produk dan update setiap 6–12 jam
  • Hanya tampilkan produk dengan is_active: true ke user
  • Tampilkan description jika tidak kosong — biasanya berisi petunjuk penggunaan
  • Untuk pascabayar, gunakan code dari endpoint ini saat inquiry tagihan
Alur Transaksi Pascabayar

Produk pascabayar tidak langsung dibeli — harus melalui inquiry dulu:

  1. Ambil daftar produk pascabayar (cmd=postpaid)
  2. Lakukan inquiry tagihan
  3. Konfirmasi ke user
  4. Bayar tagihan