Canadia Bank Payment Gateway

Build payments
into anything.

A complete REST API for integrating KHQR, mobile deeplinks, and digital payments into your web and mobile apps — backed by Cambodia's leading bank.

JWT AuthKHQRMobile DeeplinkWebhooksRefundsAndroid · iOS · Web · Flutter
API Reference

Six areas, fully documented

Every endpoint you need to integrate Canadia Bank payments into any web, mobile, or POS application.

01 — Authentication

Authentication

Authenticate with your credentials to receive a JWT token required for all API access.

POST/api/authenticate
02 — Payments

Payments

Initiate KHQR Landing Page, Mobile Deeplink, or QR Image flows — all via a single endpoint.

POST/tps/api/payment/init
POST/tps/api/payment/generate-qr-image
03 — Refunds

Refunds

Full or partial refunds using the bank's transaction ID. Valid for Canadia Bank transactions only.

POST/tps/api/payment/refund
04 — Transactions

Transaction Status

Verify real-time payment status via externalId. Returns PENDING, SUCCESS, FAILED, or CANCELLED.

POST/tps/api/payment/status
05 — Webhooks

Webhooks

Receive real-time server-side notifications when a payment is completed by the customer.

POST/your-callback-url
06 — Design

UI/UX Guidelines

Figma design specs — spacing, color, typography, responsive layouts, and form validation standards.

Interactive Figma Spec →
Quick Start

Four steps to your first payment

From credentials to a live KHQR transaction — the fastest path through the integration.

01

Get Credentials

Contact Canadia Bank to receive your merchant username and password for API access.

02

Authenticate

Exchange your credentials for a JWT token used in all subsequent API requests.

POST/api/authenticate
03

Initiate a Payment

Choose your flow — KHQR Landing Page, Mobile Deeplink, or QR Image — and submit a request.

POST/tps/api/payment/init
04

Verify & Notify

Poll the status endpoint or configure a webhook to receive instant payment success callbacks.

POST/tps/api/payment/status
SDKs & Sample Code

All major platforms covered

Open-source GitHub repos for every platform — hashing & signature logic and full payment flow demos built in.

Security library SDKs also available for iOS (Swift/Obj-C), Android (Kotlin), and Java — covering hashing & signature methods.

Error Handling

Clear error codes, every time

Every error returns a structured JSON response with a code, message, and errorCode string for easy logging and debugging.

Payment Gateway Reference Error Log Codes Table
StatusError CodeDescription
401PG_UNAUTHORIZEDNot authorized. Check your JWT token.
200PG_INVALID_REQUESTRequest parameters are invalid or missing.
200PG_EXTERNAL_ID_EXISTThe externalId provided already exists.
200PYM_NOT_FOUNDPayment not found.
200PG_GET_STATUS_FAILEDThe KHQR payment has expired.
200PG_GENERATE_DEEPLINK_FAILEDFailed to generate a mobile deeplink URL.
200PG_MERCHANT_INACTIVEThe merchant account is inactive.
200PG_MERCHANT_NOT_EXISTThe merchant does not exist.
200PG_MERCHANT_UNAUTHORIZEDThe merchant is unauthorized for this operation.
200PG_SYSTEM_UNDER_MAINTENANCESystem under maintenance — retry after a short delay.

Ready to build your
payment integration?

Open the Developer Suite and start with authentication — your first API call takes minutes.