Authentication
All API requests must include your partner credentials in the request headers. Credentials are issued when your partner account is created in the system.
Keep your API Secret confidential — never expose it in client-side code or public
repositories. Contact your system administrator if your secret is compromised.
Required Headers
| Header | Required | Description | Example |
|---|---|---|---|
Content-Type |
Required | Media type of the request body | application/json |
X-API-KEY |
Required | Your partner API key | kpc_0f5aa8c64875c0e7… |
X-API-SECRET |
Required | Your partner API secret | 7d88acd8d97e319c… |
Base URL
https://your-domain.com
QR MPM Generate
POSTEndpoint
POST
/qris/v1/qr-mpm-generate
Generates a dynamic QR code for QRIS (Quick Response Code Indonesian Standard) payments
using the Merchant Presented Mode (MPM). The returned qrContent is a QRIS-compliant string
that can be rendered as a QR image for customers to scan.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
merchantId |
string | Required | Your registered Merchant ID |
terminalId |
string | Required | Terminal / POS identifier |
amount.value |
string | Required | Transaction amount as decimal string (e.g. "1500.00") |
amount.currency |
string | Required | ISO 4217 currency code (e.g. "IDR") |
Request Body Schema
JSON
{
"merchantId": "000071005161714",
"terminalId": "74259915",
"amount": {
"value": "1500.00",
"currency": "IDR"
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
responseCode |
string | Result code — "2004700" indicates success |
responseMessage |
string | Human-readable result description |
qrContent |
string | QRIS-compliant QR code string — render this as a QR image |
trxId |
string (UUID) | Internal transaction identifier |
referenceNo |
string | System-generated reference number |
partnerReferenceNo |
string | Partner-side reference number |
externalId |
string | External session identifier |
terminalId |
string | Terminal identifier echoed from request |
qrDecoded |
object | Parsed QRIS payload fields for inspection |
additionalInfo |
object | Extra metadata including merchantId |
Example Request
cURL
curl -i -X POST https://your-domain.com/qris/v1/qr-mpm-generate \
-H "Content-Type: application/json" \
-H "X-API-KEY: <your-api-key>" \
-H "X-API-SECRET: <your-api-secret>" \
-d '{
"merchantId": "000071005161714",
"terminalId": "74259915",
"amount": { "value": "1500.00", "currency": "IDR" }
}'
Example Response
JSON — 200 OK
{
"responseCode": "2004700",
"responseMessage": "Successful",
"trxId": "d16bf8f5-1a58-4a67-b79b-2107b93aba8b",
"referenceNo": "612320645679",
"partnerReferenceNo": "26050313920962574000",
"externalId": "202605033500000",
"terminalId": "74259915",
"qrContent":
"00020101021226690021ID.CO.BANKMANDIRI.WWW01189360000801005161710211710051617140303UME52041520530336054041500580
2ID5925QRIS API MPM PT INTI KESL6013Jakarta Barat61051185062280708742599155012612320645679630432DF",
"qrDecoded": {
"payload_format_indicator": "01",
"point_of_initiation_method": "DYNAMIC",
"merchant_name": "QRIS API MPM PT INTI KESL",
"merchant_city": "Jakarta Barat",
"merchant_postal_code": "11850",
"country_code": "ID",
"mcc": "1520",
"transaction_amount": 1500,
"transaction_currency": "RUPIAH",
"crc": "32DF",
"merchant_information_26": {
"merchant_information_26": {
"global_unique_identifier": "ID.CO.BANKMANDIRI.WWW",
"merchant_criteria": "UME",
"merchant_pan": "936000080100516171",
"mid": "71005161714"
}
},
"additional_data": {
"additional_data": { "terminal_label": "74259915" }
}
},
"additionalInfo": { "merchantId": "000071005161714" }
}
Get Transactions
GETEndpoint
GET
/qris/v1/transactions
Returns a paginated list of QRIS transactions associated with your partner account. Use query parameters to filter by status and control page size.
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
limit |
integer | Optional | 20 |
Number of records to return per page |
offset |
integer | Optional | 0 |
Number of records to skip (for pagination) |
status |
string | Optional | — | Filter by transaction status (see values below) |
Transaction Status Values
generated
QR created, not yet paid
paid
Payment successful
cancelled
Transaction cancelled
failed
Payment failed
expired
QR expired before payment
refund
Transaction refunded
Example Request
cURL
curl -i -X GET
"https://your-domain.com/qris/v1/transactions?limit=10&offset=0&status=paid" \
-H "X-API-KEY: <your-api-key>" \
-H "X-API-SECRET: <your-api-secret>"
Response Schema
JSON — 200 OK
{
"transactions": [
{
"id": 1,
"trxId": "d16bf8f5-1a58-4a67-b79b-2107b93aba8b",
"referenceNo": "612320645679",
"partnerReferenceNo": "26050313920962574000",
"externalId": "202605033500000",
"merchantId": "000071005161714",
"terminalId": "74259915",
"amountValue": "1500.00",
"amountCurrency": "IDR",
"feeValue": "0.00",
"feeCurrency": "IDR",
"qrContent": "000201010212...",
"responseCode": "2004700",
"responseMessage": "Successful",
"status": "paid",
"cancelReferenceNo": "",
"cancelTime": "",
"approvalCode": "123456",
"latestTransactionStatus": "00",
"transactionStatusDesc": "Success",
"customerName": "John Doe",
"customerNumber": "6281234567890",
"issuerName": "Bank Mandiri",
"issuerReferenceId": "MANDIRI123456",
"bankCode": "008",
"createdAt": "2026-05-03T12:00:00Z",
"updatedAt": "2026-05-03T12:30:00Z"
}
],
"total": 1,
"limit": 10,
"offset": 0,
"summary": [
{ "status": "paid", "count": 1 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
transactions |
array | Array of transaction objects for the current page |
total |
integer | Total number of matching records (across all pages) |
limit |
integer | Page size used for this response |
offset |
integer | Offset used for this response |
summary |
array | Aggregated count per status value |