Partner Integration API

Integrate QRIS payment capabilities into your application using the Kesles Payment Core API. All endpoints require authentication via API key and secret.

REST API API Key Auth JSON QRIS MPM

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

POST
Endpoint
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

GET
Endpoint
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