POST /api/check/transaction
Request
| Name | Type | Required | Description |
|---|---|---|---|
| merchant_transaction_id | string | false | Merchant-provided transaction identifier. |
| rrn | string | false | Retrieval Reference Number from the payment transaction. When rrn is provided, it takes priority in the search. |
{
"merchant_transaction_id": "INQ12300456",
"rrn": "015221245517"
}
Response
| Name | Description |
|---|---|
| status | Request status indicator. true indicates success, false indicates failure. |
| data.status | Current transaction status: Success, Pending, or Fail. Returned in TitleCase. See Status Values. |
| data.transaction_id | System-generated unique transaction identifier. |
| data.merchant_transaction_id | Merchant-provided transaction identifier. |
| data.amount | Transaction amount as a string with 2 decimal places (e.g., "100000.00"). |
| data.channel | Payment channel used for the transaction. The format depends on the payment type. See Channel Values. |
| data.payment_channel | Normalized payment channel, one format for every payment type and provider: a value such as QRIS, VA_BRI, BANK_BCA, or EWALLET_DANA (payment type prefix + code from the Appendix). null when the channel cannot be determined. Prefer this over channel. |
| data.created_at | Transaction creation timestamp. |
| data.updated_at | Last update timestamp for the transaction. |
| data.service_fee_rate | Percentage fee rate applied to amount, e.g. "4.00" means 4%. See Fee Calculation. |
| data.service_fee_amount | Fixed fee charged per transaction. This is not the total fee; see service_fee_final. |
| data.service_fee_final | Total fee deducted from the transaction: the percentage fee plus service_fee_amount. |
| data.nett_amount | Amount credited to the merchant: amount minus service_fee_final. |
| data.rrn | Retrieval Reference Number from the payment transaction. |
| data.expired_at | Payment expiry datetime. Format depends on channel: QRIS uses ISO 8601 UTC; other channels use server time (UTC+7), no offset, YYYY-MM-DD HH:MM:SS. null if no payment or not applicable. |
{
"status": true,
"data": {
"status": "Success",
"transaction_id": "0aa59d5a-2a10-45be-a174-f7b954113d12",
"payment_channel": "QRIS",
"created_at": "2025-01-01T00:00:00.000000Z",
"updated_at": "2025-01-01T12:00:00.000000Z",
"merchant_transaction_id": "INQ12300456",
"amount": "100000.00",
"channel": "QRIS",
"service_fee_rate": "4.00",
"service_fee_amount": "0.00",
"service_fee_final": "4000.00",
"nett_amount": "96000.00",
"rrn": "987654321",
"expired_at": "2025-02-26T12:00:00.000000Z"
}
}
{
"status": false,
"data": null,
"message": "Error description"
}
Fee Calculation
All fees are borne by the merchant and deducted from amount.
service_fee_final = amount × service_fee_rate / 100 + service_fee_amount
nett_amount = amount − service_fee_final
The percentage part is rounded half up to 2 decimal places, then service_fee_amount is added.
In the example above, 100000.00 × 4 / 100 + 0.00 = 4000.00, so nett_amount is 96000.00.
Status Values
This endpoint returns data.status in TitleCase: Success, Pending, or Fail. Payment webhooks (V1 and V2) send the same statuses in lowercase (success, fail).
Channel Values
The format of data.channel depends on the payment type:
| Payment type | Format | Example |
|---|---|---|
| QRIS | QRIS |
QRIS |
| Virtual Account | Bank code without a prefix (see Virtual Account codes) | BCA, BRI, MDR |
| Bank Account | BANK_ followed by the bank code (see Bank Account codes) |
BANK_BCA |
| E-Wallet | E-wallet code (see E-Wallet codes) | DANA, OVO |