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.
curl https://khqrpay.dev/v1/payments \
-H "Authorization: Bearer kp_test_…" \
-d '{"amount": 16.88,
"reference_id": "INV-2048"}'{
"id": "pFQ3xV8aN2rL7kTm9sB4cWd6hJ1yZ0eU",
"status": "pending",
"amount": "16.88",
"qr_string": "00020101021230…",
"checkout_url": "https://khqrpay.dev/pay/pFQ3xV8aN2rL7kTm9sB4cWd6hJ1yZ0eU"
}$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
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 paperworkCreate 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-KeyFulfil 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
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.
By signing up you agree to the Terms and Privacy Policy.