KHQR payments API · Cambodia

Get paid by every bank app in Cambodia.

Create a KHQR with one API call. Customers pay from any Bakong app, and funds go straight to your ABA account.

Read the docs
cURL · POST /v1/payments
curl https://khqrpay.dev/v1/payments \
  -H "Authorization: Bearer kp_test_…" \
  -d '{"amount": 16.88,
       "reference_id": "INV-2048"}'
Response · 201 Created
{
  "id": "pFQ3xV8aN2rL7kTm9sB4cWd6hJ1yZ0eU",
  "status": "pending",
  "amount": "16.88",
  "qr_string": "00020101021230…",
  "checkout_url": "https://khqrpay.dev/pay/pFQ3xV8aN2rL7kTm9sB4cWd6hJ1yZ0eU"
}
Payment lifecycle
Payment slip KHQR

$16.88

Merchant
Nita Pharmacy
Reference
INV-2048
Paid with
—

pending · waiting for a scan

Payable from every KHQR app

  • Sathapana Bank
  • Vattanac Bank
  • ACLEDA Bank
  • Foreign Trade Bank of Cambodia
  • Cambodia Post Bank
  • KB Prasac Bank
  • AMK Microfinance
  • Prince Bank
  • AEON Specialized Bank
  • ABA Bank
  • AEON
  • Alpha Bank
  • Amret
  • Agricultural and Rural Development Bank
  • APD Bank
  • Asia Wei Luy
  • BIC Bank
  • Bank for Investment and Development of Cambodia
  • Bank of China
  • Booyoung Khmer Bank
  • BRED Bank
  • Bridge Bank
  • Cambodia Asia Bank
  • Cambodian Public Bank (Campu)
  • Canadia Bank
  • Cathay United Bank
  • Chief Bank
  • Chip Mong Bank
  • CIMB Bank
  • CoolCash
  • Dara Sakor
  • DGB Bank
  • E-Money
  • First Commercial Bank
  • Hattha Bank
  • Hengfeng Bank
  • Hong Leong Bank
  • IBK Bank
  • ICBC
  • iPay88
  • J Trust Royal Bank
  • Kess
  • Lanton
  • LOLC
  • Ly Hour Pay Pro
  • Maybank
  • MB Bank
  • Moha
  • Oriental Bank
  • Phillip Bank
  • Pi Pay
  • Phnom Penh Commercial Bank
  • RHB Bank
  • Sacombank
  • SBI Ly Hour Bank
  • Shinhan Bank
  • TrueMoney
  • Union Commercial Bank
  • uPay
  • Woori Bank
  • Wing Bank

The fine print, in numbers

KHQRPay fee per payment
0%
Free plan, paid transactions every 30 days
100
A payment’s QR expires after
about 3 min
Late approvals still watched after expiry
up to 60 min
Webhook retries if your server is down
8, over about 16 h
API limit per key
60 creates · 600 reads / min

How it works

  1. Connect your ABA payment link

    ABA Merchant apponce

    Create a payment link in the ABA Merchant app and paste it into KHQRPay. No bank paperwork and no API contract with the bank.

    KHR or USD linkno paperwork
  2. Create a payment from your server

    POST /v1/paymentsone call

    Send an amount and your order ID. You get back a KHQR string and a hosted checkout URL, valid for about 3 minutes.

    kp_live_ · kp_test_Idempotency-Key
  3. Fulfil the order on the webhook

    payment.completedsigned

    When the customer pays, we POST a signed payment.completed event to your server, and the money is already in your account.

    HMAC-SHA2568 retries

Everything a shop needs(6)

Signed webhooks

Scanned, completed, expired and failed events, HMAC-SHA256 signed, retried for about 16 hours, with one-click resend and a test button.

Your brand on checkout

Your logo, colour and support email on a mobile checkout page with a live countdown and redirect back to your site.

Test mode

kp_test_ keys create payments that never touch the bank, and their events go only to your test endpoints. Simulate scanned, paid or expired to test your whole flow.

Khmer and English

Your checkout and payment links speak Khmer and English. Pick your store’s language, and customers can switch with one tap.

Telegram alerts

Add our bot to your shop’s group chat and see every payment the moment it lands.

Payment links, no code

Not a developer? Make a shareable link for a product or a tip jar and post it on Facebook or Telegram.

Pricing(5)

Pay for paid transactions only: a flat price per 30 days, with no percentage fee on top.

Free

$0 forever

Paid transactions
100
Stores
3
Support
Community

Starter

popular

$7 / 30 days

Paid transactions
1,500
Stores
10
Support
Email

Pro

$25 / 30 days

Paid transactions
7,500
Stores
25
Support
Priority

Scale

$49 / 30 days

Paid transactions
20,000
Stores
100
Support
Priority

Enterprise

$179 / 30 days

Paid transactions
120,000
Stores
500
Support
Priority + Telegram

Every plan includes

  • Signed webhooks
  • Branded checkout
  • Test mode
  • Khmer and English checkout
  • Telegram alerts
  • Payment links

Pay for your plan by KHQR. Renew early and unused transactions carry over.

By signing up you agree to the Terms and Privacy Policy.

Questions(5)

Do you hold my money?

No. Customers pay straight into the ABA account behind your payment link. KHQRPay only creates the QR and watches its status, so we can’t move, freeze or refund your funds.

Which apps can my customers pay with?

Any app that scans KHQR: ABA, ACLEDA, Wing, Canadia, Prince, Chip Mong, Sathapana, TrueMoney, Bakong and other member banks and wallets.

What do I need to start?

An ABA account with the ABA Merchant app, where you create the payment link. Sign in with Google, paste the link and create a live API key. You can build in test mode before you connect a link.

How do I know a payment succeeded?

Add a webhook endpoint and listen for payment.completed. You can also poll GET /v1/payments/:id, or watch the Telegram group. If a customer pays at the last second, KHQRPay is designed to catch it and sends payment.completed with late: true after payment.expired, so don’t treat expired as final for anything you can’t undo.

What counts towards my plan?

Only paid payments. Expired and failed QRs, and everything in test mode, are free. A paid plan is a one-time KHQR payment that covers 30 days from the day the bank approves it. It doesn’t renew by itself: when it ends, you’re back on Free with 100 paid transactions every 30 days. Pay again before it ends and its unused transactions carry over.

Ready to build?

Start in test mode now. Connect your ABA link when you’re ready to take real payments.

Read the API docs

By signing up you agree to the Terms and Privacy Policy.