KHQR Payment Gateway API

Accept payments in Cambodia with one API call.

Tola Saint lets merchants create KHQR payments and payment links, then track every transaction from one dashboard. Built for developers — clean REST, signed webhooks, and predictable responses.

No setup fees · KHQR · USD & KHR

# Create a KHQR payment
curl -X POST https://api.tolasaint.com/v1/payment \
  -H "x-api-key: sk_live_..." \
  -H "content-type: application/json" \
  -d '{"amount":"1.00","currency":"USD"}'

# → 201 Created
{
  "id": "AbC123xyz789",
  "status": "pending",
  "amount": "1.00",
  "currency": "USD",
  "qr_link": "https://api.tolasaint.com/qr/uQH8...",
  "expires_at": "2026-01-01T00:03:00Z"
}
~

Everything you need

One platform for payments, links, and tracking

From your first test payment to production scale — a clean API and a dashboard that keeps up.

Payment Links

Generate a shareable payment link in one API call — no checkout code required.

KHQR Payments

Accept KHQR payments in USD or KHR, verified against the EMVCo/CRC standard.

Transaction Tracking

Real-time status: pending, scanned, processing, approved, failed, expired.

API Keys

Issue and rotate scoped keys per environment. Every request is authenticated.

Signed Webhooks

HMAC-signed, auto-retried webhooks notify your backend the moment a payment settles.

Developer API

Predictable REST, clear errors, and copy-paste examples in the docs.

How it works

Live in four steps

1

Create account

Sign up and open your dashboard in seconds.

2

Generate API key

Create a key and add it to the x-api-key header.

3

Create a payment

POST an amount and currency to get a QR and link.

4

Track the status

Poll the status endpoint or receive a webhook.

Developer-first

Verify a webhook in a few lines

Every event carries an HMAC-SHA256 signature and a timestamp. No SDK required — verify with the standard library and you're done.

verify-webhook.ts
import { createHmac } from "node:crypto";

export function verify(headers, rawBody, secret) {
  const ts = headers["x-webhook-timestamp"];
  const sig = headers["x-webhook-signature"];
  const mac = createHmac("sha256", secret)
    .update(ts + "." + rawBody)
    .digest("hex");
  return sig === "sha256=" + mac;
}

Dashboard

See every payment at a glance

dashboard — overview

Volume (30d)

$12,480

8.2%

Transactions

1,204

3.1%

Success rate

98.6%

0.4%

Pending

7

live

FAQ

Common questions

What merchants ask before integrating KHQR payments.

What is Tola Saint?

Tola Saint is a KHQR payment gateway API for Cambodia. You create a payment with one HTTPS request and get back a scannable KHQR code, a hosted QR link, and an expiry, then track the result from the same API or from the dashboard.

What do I need before I can accept payments?

An ABA PayWay hosted merchant link. You add it under Merchant Settings in the dashboard, and Tola Saint uses it to issue QR codes on your behalf. ABA fixes each link to a single currency, so add one link per currency you want to charge in.

Which currencies are supported?

USD and KHR. USD amounts allow up to two decimal places; KHR amounts must be whole numbers. Every QR is verified against the amount and currency you asked for before it is returned to you.

How do I know when a payment succeeds?

Two ways. Poll the status endpoint with the payment id, or register a webhook URL and receive a signed POST on every status change: scanned, processing, approved, failed and expired. Webhooks are HMAC-SHA256 signed and retried up to five times.

Do I have to build a checkout page?

No. Every payment comes back with a hosted QR link you can share or embed directly with an img tag, so you can take a payment without writing any checkout UI.

Is there a setup fee?

No. Creating an account, issuing API keys and using the API carry no setup fee. You settle through your own ABA merchant account, so payouts and any bank charges stay between you and ABA.

Start accepting payments today

Create your account, grab an API key, and send your first KHQR payment in minutes.