Generate KHQR Code (With Merchant Info)
Quick reference for generating a KHQR code including merchant profile data in a single request.
Endpoint: POST /khqr/generate-with-merchant
Auth Headers
http
x-auth-type: api-key
x-api-key: <your-api-key>
Content-Type: application/jsonRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Transaction amount (> 0) |
currency | number | Yes | 840 = USD, 116 = KHR |
expiredAfter | number | Yes | Milliseconds until expiry |
meta | object | No | Custom metadata (echoed + webhook) |
merchantInfo.acquiringBank | string | Yes | Bank name (e.g. Acleda) |
merchantInfo.bakongAccountID | string | Yes | Bakong account ID |
merchantInfo.merchantName | string | Yes | Merchant display name |
merchantInfo.merchantCity | string | Yes | City (EN) |
merchantInfo.mobileNumber | string | Yes | Contact number (country code prefixed) |
merchantInfo.storeLabel | string | No | Store identifier |
merchantInfo.terminalLabel | string | No | Terminal identifier |
merchantInfo.merchantNameAlternateLanguage | string | No | Local language name |
merchantInfo.merchantCityAlternateLanguage | string | No | Local language city |
Minimal Example
json
{
"amount": 1,
"currency": 840,
"expiredAfter": 1000,
"meta": { "hello": "world" },
"merchantInfo": {
"acquiringBank": "Acleda",
"bakongAccountID": "reab_danet@aclb",
"merchantName": "RollaRide",
"merchantCity": "SIEM REAB",
"mobileNumber": "85593905339",
"storeLabel": "RollaRide",
"terminalLabel": "RollaRide",
"merchantNameAlternateLanguage": "រាប ដាណែត",
"merchantCityAlternateLanguage": "សៀមរាប"
}
}cURL
bash
curl --location 'http://localhost:3000/khqr/generate-with-merchant' \
--header 'x-auth-type: api-key' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your-api-key>' \
--data-raw '{
"amount": 1,
"currency": 840,
"expiredAfter": 1000,
"meta": { "hello": "world" },
"merchantInfo": {
"acquiringBank": "Acleda",
"bakongAccountID": "reab_danet@aclb",
"merchantName": "RollaRide",
"merchantCity": "SIEM REAB",
"mobileNumber": "85593905339",
"storeLabel": "RollaRide",
"terminalLabel": "RollaRide",
"merchantNameAlternateLanguage": "រាប ដាណែត",
"merchantCityAlternateLanguage": "សៀមរាប"
}
}'Success Response (Example)
json
{
"transactionId": "b75aebe1-5cbc-44d8-843e-6b2a9b546366",
"expiredAt": "2025-08-10T07:10:51.819Z",
"status": "PENDING",
"requestData": {
/* original request */
},
"data": {
"qr": "00020101021229...",
"md5": "145ffee1de4d5d8150eb2f3ada47873d"
}
}Notes
- Use this endpoint when you don't have merchant profile pre-registered.
- Metadata echoed back + webhooks.
- Keep
expiredAftershort for dynamic payments (e.g. 30s–5m). - Use
/khqr/checkwithmd5for status if webhook not yet received.
Related
Last updated: August 10, 2025
