Dokumentasi API

Dokumentasi lengkap untuk integrasi API layanan Pulsa Plus

Getting Started

Base URL

https://api.pulsaplus.co.id

Jabber ID

info@pulsaplus.co.id

OID Center

019008

Whatsapp Center

085888444608

📞 Hubungi Kami

Untuk informasi lebih lanjut tentang API, silakan hubungi tim kami di info@pulsaplus.co.id

API Endpoints

GET/trx

Melakukan transaksi (Asynchronous)

Query Parameters:

product Kode produk (contoh: DN50)
qty Quantity/jumlah (default: 1)
dest Nomor tujuan
refID Reference ID unik dari Anda
memberID Member ID Anda
sign (Opsional) Signature untuk keamanan
pin (Jika tidak pakai sign) PIN member
password (Jika tidak pakai sign) Password member

Response Success:

status=1&message=Transaksi DN50.081234567890 Harga=50.090 akan diproses..

Response Callback (Success):

?t=190554&refid=44474&status=20&price=0&message=DN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/2025101410121481030100166869912144199.. Saldo 14.324.472 - 50.090 = 14.274.382

Response Callback (Failed):

?t=190554&refid=44474&status=40&price=0&message=DC12.081234567890 GAGAL. . Saldo 1.244.692. @19.06.42
GET/balance

Mengecek saldo dan informasi akun member

Query Parameters:

memberID Member ID Anda
sign Signature untuk keamanan

Response Success:

Informasi Akun Anda

 Nama	: John Doe
 ID Agen	: AGT123456
 Saldo	: 14.324.472
 Bonus	: 250.000
 Debet	: 0
GET/ticket

Request tiket deposit dengan informasi rekening bank

Query Parameters:

memberID Member ID Anda
amount Jumlah deposit yang diinginkan
sign Signature untuk keamanan

Response Success:

Silahkan Transfer Sesuai Nominal Rp.1.002.154
BCA : 2453913333
PT.Pulsa Plus 
BNI : 2020211038
PT.Pulsa Plus
BRI : 008401003726300
PT.Pulsa Plus
MANDIRI : 1630004353028
PT.Pulsa Plus

Format Whatsapp

Tiket Deposit

TIKET.[nominal].[pin]

Format untuk request tiket deposit

Cek Saldo

SALDO

Format untuk request cek saldo

Cek Harga

CH.[kodeproduk]

Format untuk request cek harga

Ubah PIN

GP.[pinbaru].[pinlama]

Format untuk request ubah PIN

Ubah Password

PASSIP*[oldpassword]*[newpassword]*[pin]

Format untuk request ubah password

Ubah Alamat IP

IPADDRESS*[newip]*[pin]

Format untuk request ubah alamat IP

Ubah URL Callback

REPORTURL*[newurl]*[pin]

Format untuk request ubah URL callback

Generate Signature

Signature untuk Keamanan Transaksi

Signature digunakan untuk meningkatkan keamanan transaksi. Jika tidak menggunakan signature, gunakan parameter pin dan password.

PHP - Generate Signature untuk Transaksi:

<?php
// For transaction
$str = 'OtomaX|' . $memberId . '|' . $product . '|' . $dest . '|' . $refID . '|' . $pin . '|' . $password;

$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));
echo $sign;
// result $sign = 'vlrN9Yuu4xHAT8_bXIUHKw2NjHo'
?>

Signature untuk Operasi Lainnya:

<?php
// For deposit ticket
// $str = 'OtomaX|ticket|' . $memberId . '|' . $pin . '|' . $password . '|' . $amount;

// For check balance
// $str = 'OtomaX|CheckBalance|' . $memberId . '|' . $pin . '|' . $password;
?>

Contoh Request

Transaksi dengan Signature (PHP)

<?php
$memberId = 'YOUR_MEMBER_ID';
$product = 'DN50';
$dest = '085934284792';
$refID = 'TRX' . time();
$pin = 'YOUR_PIN';
$password = 'YOUR_PASSWORD';

// Generate signature
$str = 'OtomaX|' . $memberId . '|' . $product . '|' . $dest . '|' . $refID . '|' . $pin . '|' . $password;
$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));

// Build URL
$url = "https://api.pulsaplus.co.id/trx?product=" . $product . "&qty=1&dest=" . $dest . 
       "&refID=" . $refID . "&memberID=" . $memberId . "&sign=" . $sign;

$response = file_get_contents($url);
echo $response;
?>

Transaksi tanpa Signature (dengan PIN & Password)

<?php
$url = "https://api.pulsaplus.co.id/trx?product=DN50&qty=1&dest=085934284792" .
       "&refID=TRX123456&memberID=YOUR_MEMBER_ID" .
       "&pin=YOUR_PIN&password=YOUR_PASSWORD";

$response = file_get_contents($url);
echo $response;
?>

JavaScript (Fetch API)

const params = new URLSearchParams({
  product: 'DN50',
  qty: '1',
  dest: '085934284792',
  refID: 'TRX' + Date.now(),
  memberID: 'YOUR_MEMBER_ID',
  pin: 'YOUR_PIN',
  password: 'YOUR_PASSWORD'
});

fetch(`https://api.pulsaplus.co.id/trx?${params}`)
  .then(response => response.text())
  .then(data => console.log(data))
  .catch(error => console.error(error));

Cek Saldo (PHP)

<?php
$memberId = 'YOUR_MEMBER_ID';
$pin = 'YOUR_PIN';
$password = 'YOUR_PASSWORD';

// Generate signature untuk check balance
$str = 'OtomaX|CheckBalance|' . $memberId . '|' . $pin . '|' . $password;
$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));

$url = "https://api.pulsaplus.co.id/balance?memberID=" . $memberId . "&sign=" . $sign;
$response = file_get_contents($url);
echo $response;

/* Response:
Informasi Akun Anda

 Nama	: John Doe
 ID Agen	: AGT123456
 Saldo	: 14.324.472
 Bonus	: 250.000
 Debet	: 0
*/
?>

Request Tiket Deposit (PHP)

<?php
$memberId = 'YOUR_MEMBER_ID';
$pin = 'YOUR_PIN';
$password = 'YOUR_PASSWORD';
$amount = '1000000'; // Jumlah deposit

// Generate signature untuk deposit ticket
$str = 'OtomaX|ticket|' . $memberId . '|' . $pin . '|' . $password . '|' . $amount;
$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));

$url = "https://api.pulsaplus.co.id/ticket?memberID=" . $memberId . "&amount=" . $amount . "&sign=" . $sign;
$response = file_get_contents($url);
echo $response;

/* Response:
Silahkan Transfer Sesuai Nominal Rp.1.002.154
BCA : 2453913333
PT.Pulsa Plus 
BNI : 2020211038
PT.Pulsa Plus
BRI : 008401003726300
PT.Pulsa Plus
MANDIRI : 1630004353028
PT.Pulsa Plus
*/
?>

Transaksi dengan cURL

# Transaksi tanpa signature (dengan pin & password)
curl "https://api.pulsaplus.co.id/trx?product=DN50&qty=1&dest=081234567890&refID=TRX123456&memberID=YOUR_MEMBER_ID&pin=YOUR_PIN&password=YOUR_PASSWORD"

# Cek Saldo
curl "https://api.pulsaplus.co.id/balance?memberID=YOUR_MEMBER_ID&sign=YOUR_SIGNATURE"

# Request Tiket Deposit
curl "https://api.pulsaplus.co.id/ticket?memberID=YOUR_MEMBER_ID&amount=1000000&sign=YOUR_SIGNATURE"

cURL dengan HTTPS (Lengkap)

# Transaksi dengan parameter lengkap
curl -X GET "https://api.pulsaplus.co.id/trx" \
  -G \
  --data-urlencode "product=DN50" \
  --data-urlencode "qty=1" \
  --data-urlencode "dest=081234567890" \
  --data-urlencode "refID=TRX123456" \
  --data-urlencode "memberID=YOUR_MEMBER_ID" \
  --data-urlencode "pin=YOUR_PIN" \
  --data-urlencode "password=YOUR_PASSWORD"

# Response:
# status=1&message=Transaksi DN50.081234567890 Harga=50.090 akan diproses..

Cara Menangkap Response

Gunakan regex pattern berikut untuk parsing response dari callback. Setiap response memiliki format yang berbeda, pastikan Anda menggunakan pattern yang sesuai.

Transaksi Masuk Antrian

Regex Pattern:

Transaksi (?<kodeproduk>\w+)\.(?<tujuan>\d+) Harga=(?<harga>[.,\d]+) akan diproses
Captured Groups:
  • kodeproduk
  • tujuan
  • harga
Contoh Response:
status=1&message=Transaksi DN50.081234567890 Harga=10.000 akan diproses..
Transaksi Non Fisik Sukses

Regex Pattern:

(?<kodeproduk>\w+)\.(?<tujuan>\d+) SUKSES\. SN/Ref: (?<sn>.+?)\. Saldo (?<saldolama>[.,\d]+) - (?<harga>[.,\d]+) = (?<saldo>[.,\d]+)\s+#(?<namaproduk>.+)
Captured Groups:
  • kodeproduk
  • tujuan
  • sn
  • saldolama
  • harga
  • saldo
  • namaproduk
Contoh Response:
DN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/2025101410121481030100166869912144199. Saldo 14.324.472 - 10.000 = 14.314.472  #Telkomsel
Transaksi Fisik Sukses

Regex Pattern:

Trx(?<kodeproduk>\w+)\.(?<tujuan>\d+) SUKSES\. SN/Ref: (?<sn>.+?)\. Saldo (?<saldolama>[.,\d]+)-(?<harga>[.,\d]+)=(?<saldo>[.,\d]+) @(?<now>.+)
Captured Groups:
  • kodeproduk
  • tujuan
  • sn
  • saldolama
  • harga
  • saldo
  • now
Contoh Response:
TrxDN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/202510. Saldo 14.324.472-10.000=14.314.472 @14.10.25
Transaksi Gagal

Regex Pattern:

(?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. (?<keterangan>.+?)\. Saldo (?<saldo>[.,\d]+)\. @(?<systime>.+)
Captured Groups:
  • kodeproduk
  • tujuan
  • keterangan
  • saldo
  • systime
Contoh Response:
DN50.081234567890 GAGAL. Nomor tidak terdaftar. Saldo 1.244.692. @19.06.42
Transaksi Dibatalkan Operator

Regex Pattern:

(?<kodeproduk>\w+)\.(?<tujuan>\d+) pd (?<waktu>.+?) gagal, dibatalkan\. Saldo refund (?<harga>[.,\d]+)\. Sal (?<saldo>[.,\d]+)
Captured Groups:
  • kodeproduk
  • tujuan
  • waktu
  • harga
  • saldo
Contoh Response:
DN50.081234567890 pd 19.06.42 gagal, dibatalkan. Saldo refund 10.000. Sal 1.254.692
Transaksi Timeout

Regex Pattern:

R#(?<refid>\d+) (?<namaproduk>.+?) (?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL karena timeout\. Saldo (?<saldo>[.,\d]+) @(?<systime>.+)
Captured Groups:
  • refid
  • namaproduk
  • kodeproduk
  • tujuan
  • saldo
  • systime
Contoh Response:
R#44474 Telkomsel DN50.081234567890 GAGAL karena timeout. Saldo 1.244.692 @19.06.42
Transaksi Gagal Karena Daftar Hitam

Regex Pattern:

(?<namaproduk>.+?) (?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. Nomor tidak dapat diproses, mohon coba lagi besok\. Saldo (?<saldo>[.,\d]+)
Captured Groups:
  • namaproduk
  • kodeproduk
  • tujuan
  • saldo
Contoh Response:
Telkomsel DN50.081234567890 GAGAL. Nomor tidak dapat diproses, mohon coba lagi besok. Saldo 1.244.692
Saldo Tidak Cukup

Regex Pattern:

(?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. Saldo tidak cukup, Sisa Saldo Anda Rp\. (?<saldo>[.,\d]+),Silakan isi saldo
Captured Groups:
  • kodeproduk
  • tujuan
  • saldo
Contoh Response:
DN50.081234567890 GAGAL. Saldo tidak cukup, Sisa Saldo Anda Rp. 1.244.692,Silakan isi saldo anda terlebih dahulu
Transaksi Gagal Karena Dobel

Regex Pattern:

Trx (?<kodeproduk>\w+)\.(?<tujuan>\d+) sdh Terjadi Pada:(?<waktu>.+?), sts (?<status>\w+) SN: (?<sn>.+?)\. saldo=(?<saldo>[.,\d]+)
Captured Groups:
  • kodeproduk
  • tujuan
  • waktu
  • status
  • sn
  • saldo
Contoh Response:
Trx DN50.081234567890 sdh Terjadi Pada:19.06.42, sts SUKSES SN: DNID123. saldo=1.244.692
Transaksi Masih Dalam Proses

Regex Pattern:

Transaksi\.(?<kodeproduk>\w+)\.(?<tujuan>\d+) masih dalam proses
Captured Groups:
  • kodeproduk
  • tujuan
Contoh Response:
Transaksi.DN50.081234567890 masih dalam proses. Mohon ditunggu!!
Tunggu Transaksi Sebelumnya

Regex Pattern:

Yth (?<namareseller>.+?),Transaksi\.(?<kodeproduk>\w+)\.(?<tujuan>\d+) masih dalam proses
Captured Groups:
  • namareseller
  • kodeproduk
  • tujuan
Contoh Response:
Yth John Doe,Transaksi.DN50.081234567890 masih dalam proses. Mohon ditunggu!!

Contoh Parsing Response dengan PHP:

<?php
$response = "DN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/2025101410. Saldo 14.324.472 - 10.000 = 14.314.472  #Telkomsel";

// Check status transaksi
if (strpos($response, 'SUKSES') !== false) {
    // Transaksi Non Fisik Sukses
    $pattern = '/(?<kodeproduk>\w+)\.(?<tujuan>\d+) SUKSES\. SN\/Ref: (?<sn>.+?)\. Saldo (?<saldolama>[.,\d]+) - (?<harga>[.,\d]+) = (?<saldo>[.,\d]+)\s+#(?<namaproduk>.+)/';
    if (preg_match($pattern, $response, $matches)) {
        echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
        echo "Tujuan: " . $matches['tujuan'] . "\n";
        echo "Serial Number: " . $matches['sn'] . "\n";
        echo "Saldo Lama: " . $matches['saldolama'] . "\n";
        echo "Harga: " . $matches['harga'] . "\n";
        echo "Saldo: " . $matches['saldo'] . "\n";
        echo "Nama Produk: " . $matches['namaproduk'] . "\n";
    }
} elseif (strpos($response, 'GAGAL') !== false) {
    // Transaksi Gagal
    $pattern = '/(?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. (?<keterangan>.+?)\. Saldo (?<saldo>[.,\d]+)\. @(?<systime>.+)/';
    if (preg_match($pattern, $response, $matches)) {
        echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
        echo "Tujuan: " . $matches['tujuan'] . "\n";
        echo "Keterangan: " . $matches['keterangan'] . "\n";
        echo "Saldo: " . $matches['saldo'] . "\n";
        echo "System Time: " . $matches['systime'] . "\n";
    }
} elseif (strpos($response, 'akan diproses') !== false) {
    // Transaksi Masuk Antrian
    $pattern = '/Transaksi (?<kodeproduk>\w+)\.(?<tujuan>\d+) Harga=(?<harga>[.,\d]+) akan diproses/';
    if (preg_match($pattern, $response, $matches)) {
        echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
        echo "Tujuan: " . $matches['tujuan'] . "\n";
        echo "Harga: " . $matches['harga'] . "\n";
    }
} elseif (strpos($response, 'timeout') !== false) {
    // Transaksi Timeout
    $pattern = '/R#(?<refid>\d+) (?<namaproduk>.+?) (?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL karena timeout\. Saldo (?<saldo>[.,\d]+) @(?<systime>.+)/';
    if (preg_match($pattern, $response, $matches)) {
        echo "Ref ID: " . $matches['refid'] . "\n";
        echo "Nama Produk: " . $matches['namaproduk'] . "\n";
        echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
        echo "Tujuan: " . $matches['tujuan'] . "\n";
        echo "Saldo: " . $matches['saldo'] . "\n";
    }
}
?>

⚠️Penting - Harap Dibaca:

  • Response bersifat asynchronous - transaksi akan diproses dan hasilnya dikirim via callback
  • Response callback akan dikirim ke URL yang Anda daftarkan ke Admin
  • Gunakan refID yang unik untuk setiap transaksi
  • Pastikan Regex sudah anda test dengan response yang dikirim oleh API
  • Status response: 1 = diproses, 20 = sukses, 40 = gagal
  • Disarankan menggunakan signature untuk keamanan yang lebih baik