Bills
Inquire and pay customer bills (currently Telkomsel OMNI).
Connection settings
No credentials set.
Bill payment flow
Illustrates the two steps used to pay a bill rather than a top-up.
- Inquiry: send the bill product + customer number. The platform returns the amount owed, fees, and a payment window (
expiredTime). - Pay: re-send the same
transactionId+customerId+productIdto settle the pending inquiry. It is accepted asPendingfrom201and finishes via webhook.
Match the inquiry
The platform only accepts a Pay when a matching Inquiry status bill exists for the same transactionId and customerId. Always inquire first, then pay within the returned expiry.
POST
/api/v2/bill/inquiry
Requires auth
Queries the biller for the outstanding amount of a customer's bill.
Headers
| Header | Required | Description |
|---|---|---|
userid | Required | Account user ID. |
api-key | Required | Account client API key. |
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
transactionId | string | Required | Identifier for this billing request. |
customerId | string | Required | Customer number / account to inquire (e.g. Telkomsel number for OMNI). |
productId | string | Required | Bill product code, e.g. telkomselomni. |
curl -X POST "http://localhost:4907/api/v2/bill/inquiry" \ -H "userid:" \ -H "api-key: " \ -H "Content-Type: application/json" \ -d '{ "transactionId": "BILL-20260907-0001", "customerId": "+628123456789", "productId": "telkomselomni" }'
Example response
{
"code": 200,
"status": "Success",
"data": {
"action": "Inquiry",
"balance": 984000,
"category": "Mobile",
"date": "2026-09-07T08:00:00.000Z",
"customerId": "+628123456789",
"id": "B220907000001",
"message": "",
"notes": "",
"status": "Inquiry",
"transactionId": "BILL-20260907-0001",
"type": "Bill",
"userId": "",
"product": {
"paymentCode": "09123456",
"customerId": "+628123456789",
"customerName": "BUDI SANTOSO",
"price": 150000,
"expiredTime": "2026-09-07T09:00:00.000Z",
"name": "OMNI Paket Serba 1",
"info": "Paket Serba 1",
"detail": "Rp 150.000",
"allowance": "Bulanan",
"validity": "30 Hari",
"fee": 2000
},
"price": 150000,
"priceAdminFee": 1000,
"priceDisclaimer": 1000,
"priceSubTotal": 152000,
"user": {
"userId": "",
"name": "",
"email": "ops@example.com",
"status": "Active",
"validate": true,
"platform": { "key": "***", "balance": 984000 }
}
}
}
| Field | Type | Description |
|---|---|---|
product.paymentCode | string | Biller payment code for this bill. |
product.customerName | string | Bill holder name as registered at the biller. |
product.price | number | Outstanding bill amount in IDR. |
product.expiredTime | string | ISO 8601 deadline; pay before this time. |
product.fee | number | Total admin fee (priceAdminFee + priceDisclaimer). |
priceSubTotal | number | Total charged from the account balance on pay. |
status | string | Inquiry, later Pending, Success, or Error. |
Try it
POST
/api/v2/bill/pay
Requires auth
Pays a bill that was previously confirmed with an inquiry. Accepted as Pending; finishes via webhook.
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
transactionId | string | Required | Same value used in the inquiry. |
customerId | string | Required | Customer number from the inquiry. |
productId | string | Required | Bill product code from the inquiry. |
curl -X POST "http://localhost:4907/api/v2/bill/pay" \ -H "userid:" \ -H "api-key: " \ -H "Content-Type: application/json" \ -d '{ "transactionId": "BILL-20260907-0001", "customerId": "+628123456789", "productId": "telkomselomni" }'
Example response
{
"code": 201,
"status": "Pending",
"data": {
"action": "Pay",
"balance": 832000,
"category": "Mobile",
"date": "2026-09-07T08:05:00.000Z",
"customerId": "+628123456789",
"id": "B220907000001",
"message": "",
"notes": "",
"status": "Pending",
"transactionId": "BILL-20260907-0001",
"type": "Bill",
"userId": "",
"product": {
"paymentCode": "09123456",
"customerId": "+628123456789",
"customerName": "BUDI SANTOSO",
"price": 150000,
"expiredTime": "2026-09-07T09:00:00.000Z",
"name": "OMNI Paket Serba 1",
"info": "Paket Serba 1",
"detail": "Rp 150.000",
"allowance": "Bulanan",
"validity": "30 Hari",
"fee": 2000
},
"price": 150000,
"priceAdminFee": 1000,
"priceDisclaimer": 1000,
"priceSubTotal": 152000,
"user": {
"userId": "",
"name": "",
"email": "ops@example.com",
"status": "Active",
"validate": true,
"platform": { "key": "***", "balance": 832000 }
}
}
}
Try it