Skip to content

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/json

Request Body

FieldTypeRequiredDescription
amountnumberYesTransaction amount (> 0)
currencynumberYes840 = USD, 116 = KHR
expiredAfternumberYesMilliseconds until expiry
metaobjectNoCustom metadata (echoed + webhook)
merchantInfo.acquiringBankstringYesBank name (e.g. Acleda)
merchantInfo.bakongAccountIDstringYesBakong account ID
merchantInfo.merchantNamestringYesMerchant display name
merchantInfo.merchantCitystringYesCity (EN)
merchantInfo.mobileNumberstringYesContact number (country code prefixed)
merchantInfo.storeLabelstringNoStore identifier
merchantInfo.terminalLabelstringNoTerminal identifier
merchantInfo.merchantNameAlternateLanguagestringNoLocal language name
merchantInfo.merchantCityAlternateLanguagestringNoLocal 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 expiredAfter short for dynamic payments (e.g. 30s–5m).
  • Use /khqr/check with md5 for status if webhook not yet received.

Last updated: August 10, 2025