Setiap permintaan ke endpoint harus mengirimkan header client-id dan client-secret. Pastikan untuk selalu menggunakan kredensial yang valid.
Content-Type: application/json
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
Name | Type | Endpoint | Description |
---|---|---|---|
Content-Type | Header | semua endpoint | application/json |
client-id | Header | semua endpoint | string - di generate oleh server |
client-secret | Header | semua endpoint | string - di generate oleh server |
username | Body | semua endpoint | string - di generate oleh server |
password | Body | semua endpoint | string - di generate oleh server |
pin | Body | semua endpoint | string - di generate oleh server |
signature | Body | /transaction | string (opsional) - di generate oleh client |
product | Body | /transaction | string - diisi dengan kode produk |
qty | Body | /transaction | integer - default nilai adalah 1 . isi sesuai nominal untuk produk open denom seperti e-wallet dan trf-bank |
dest | Body | /transaction | string - diisi dengan tujuan transaksi. panjang minimal 5 karakter dan maksimal 25 karakter. |
trxid | Body | /transaction | string - diisi dengan ID transaksi unik untuk setiap transaksi |
amount | Body | /ticket | integer - isi sesuai nominal deposit (endpoint /ticket) |
http://103.135.49.166:5857
Noted : Silahkan tanyakan ke admin untuk mendapatkan base url
/transaction
format request transaksi tanpa Signature.
curl --location '{base_url}/api/transaction' \
-H "Content-Type: application/json" \
-H "client-id: YOUR_CLIENT_ID" \
-H "client-secret: YOUR_CLIENT_SECRET" \
-d '{
"username": "[username]",
"password": "[password]",
"pin": "[pin]",
"product": "[kode_produk]",
"qty": "[qty]",
"dest": "[tujuan]",
"trxid": "[trxid]"
}' \
format request transaksi dengan Signature.
curl --location '{base_url}/api/transaction' \
-H "Content-Type: application/json" \
-H "client-id: YOUR_CLIENT_ID" \
-H "client-secret: YOUR_CLIENT_SECRET" \
-d '{
"username": "[username]",
"sign": "[signature]",
"product": "[kode_produk]",
"qty": "[qty]",
"dest": "[tujuan]",
"trxid": "[trxid]"
}' \function generateSignatureTransaction(username, product, dest, trxid, pin, password) {
const str = `OtomaX|${username.toUpperCase()}|${product.toUpperCase()}|${dest}|${trxid}|${pin}|${password}`;
// Hash string menggunakan SHA-1 dan konversi ke Base64
const hash = crypto.createHash('sha1').update(str, 'utf8').digest();
const base64UrlSafe = Buffer.from(hash).toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '');
return base64UrlSafe;
}
/balance
format request cek saldo tanpa Signature.
curl --location '{base_url}/api/balance' \
-H "Content-Type: application/json" \
-H "client-id: YOUR_CLIENT_ID" \
-H "client-secret: YOUR_CLIENT_SECRET" \
-d '{
"username": "[username]",
"password": "[password]",
"pin": "[pin]"
}' \
format request cek saldo dengan Signature.
curl --location '{base_url}/api/balance' \
-H "Content-Type: application/json" \
-H "client-id: YOUR_CLIENT_ID" \
-H "client-secret: YOUR_CLIENT_SECRET" \
-d '{
"username": "[username]",
"sign": "[signature]"
}' \function generateSignatureBalance(username, pin, password) {
const str = `OtomaX|CheckBalance|${username.toUpperCase()}|${pin}|${password}`;
// Hash string menggunakan SHA-1 dan konversi ke Base64
const hash = crypto.createHash('sha1').update(str, 'utf8').digest();
const base64UrlSafe = Buffer.from(hash).toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '');
return base64UrlSafe;
}
/ticket
format request tiket deposit tanpa Signature.
curl --location '{base_url}/api/ticket' \
-H "Content-Type: application/json" \
-H "client-id: YOUR_CLIENT_ID" \
-H "client-secret: YOUR_CLIENT_SECRET" \
-d '{
"username": "[username]",
"password": "[password]",
"pin": "[pin]",
"amount": "[amount]"
}' \
format request tiket deposit dengan Signature.
curl --location '{base_url}/api/ticket' \
-H "Content-Type: application/json" \
-H "client-id: YOUR_CLIENT_ID" \
-H "client-secret: YOUR_CLIENT_SECRET" \
-d '{
"username": "[username]",
"sign": "[signature]",
"amount": "[amount]"
}' \ function generateSignatureTicket(username, pin, password) {
const str = `OtomaX|Ticket|${username.toUpperCase()}|${pin}|${password}`;
// Hash string menggunakan SHA-1 dan konversi ke Base64
const hash = crypto.createHash('sha1').update(str, 'utf8').digest();
const base64UrlSafe = Buffer.from(hash).toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '');
return base64UrlSafe;
}
/product
format cek produk.
curl --location '{base_url}/api/product' \
--header 'client-id: xxx' \
--header 'client-secret: xxx'
format cek produk berdasarkan operator.
curl --location '{base_url}/api/product?operator=telkomsel' \
--header 'client-id: xxx' \
--header 'client-secret: xxx'
format cek produk berdasarkan kode produk.
curl --location '{base_url}/api/product?kode=S5' \
--header 'client-id: xxx' \
--header 'client-secret: xxx'
{
"status": "error",
"message": "Headers client-id are invalid"
}
{
"status": "error",
"message": "Headers client-secret are invalid"
}
{
"status": "error",
"message": "Transaction not processed",
"response": {
"rc": 99,
"data": null,
"details": "Member not found"
}
}
{
"status": "error",
"message": "Transaction not processed",
"response": {
"rc": 99,
"data": null,
"details": "Invalid Signature"
}
}
{
"status": "success",
"message": "Transaction processed successfully",
"response": {
"rc": 00,
"data": {
"qty": 1,
"produk": "xxx",
"tujuan": "xxx",
"status": "Pending",
"sn": null,
"ket": "Transaksi Sedang Di Proses",
"hrg": 0,
"sal": 0,
"cid": 0,
"sid": 0
},
"details": "xxx"
}
}
{
"status": "success",
"message": "Transaction processed successfully",
"response": {
"rc": 20,
"data": {
"qty": 1,
"produk": "xxx",
"tujuan": "xxx",
"status": "Pending",
"sn": null,
"ket": "Transaksi Sedang Di Sukses",
"hrg": 0,
"sal": 0,
"cid": 0,
"sid": 0
},
"details": "xxx"
}
}
{
"status": "success",
"message": "Transaction processed successfully",
"response": {
"rc": 40,
"data": {
"qty": 1,
"produk": "xxx",
"tujuan": "xxx",
"status": "Gagal",
"sn": null,
"ket": "Transaksi Sedang Di Gagal",
"hrg": 0,
"sal": 0,
"cid": 0,
"sid": 0
},
"details": "xxx"
}
}
post to url callback :
{
"rc": "20",
"data": {
"qty": 1,
"produk": "xxx",
"tujuan": "xxx",
"status": "Sukses",
"ref": "xxx",
"ket": null,
"hrg": 0,
"sal": 0,
"cid": "10010002",
"sid": 32887950
},
"details": "xxx"
}
Code | Status | Description |
---|---|---|
0-5 | Pending | Transaction is being processed |
20 | Success | Transaction completed successfully |
40 | Failed | Undefined biller |
44 | Failed | Invalid product |
45 | Failed | Out of stock |
47 | Failed | Product error |
50 | Failed | Cancelled |
51 | Failed | Insufficient balance |
52 | Failed | Invalid target number |
53 | Failed | Out of coverage area |
54 | Failed | Area code mismatch |
55 | Failed | Undefined biller |
56 | Failed | Blacklisted number |
58 | Failed | Inactive number |
59 | Failed | Incorrect price |
60 | Failed | No data available |
61 | Failed | Incorrect quantity |
62 | Failed | Daily limit reached |
63 | Failed | Reseller suspended |
65 | Failed | Insufficient units |
67 | Failed | Group disallowed |
69 | Failed | Cutoff |
Default | Unknown | Status not registered |