Contents |
---|
What is it? |
Why do businesses integrate with it? |
How the integration works |
Getting started |
Wrap up |
What is it?
Thai Quick Response Code for Payment Transactions is a standardized digital payment technology used across industries to facilitate ease of doing business through mobile applications and devices, increasing convenience, safety, and reducing cash dependency while promoting mobile banking adoption. The QR code system is primarily used for payments and transactions, integrating with Thailand’s existing payment infrastructure including the PromptPay system.
The Bank of Thailand released a comprehensive policy guideline to standardize Thai QR code payments, ref. BOT.or.th: Policy Guideline : Standardized Thai QR Code for Payment Transactions, effective March 31, 2017, defining alignment with EMV QRCPS standards, reducing e-payment costs, enhancing convenience and safety of payment services, and enabling future innovation in financial services. This document represents a technical interpretation of the policy rather than legal guidance.
The highlighted intended outcome is to enable service providers to develop payment services that can be interconnected boundlessly between services, reducing payment system complexity and encouraging competition within the payment ecosystem. Users can utilize the Thai QR code as a standard norm for accepting payments from individuals across multiple payment channels. The policy encompasses various areas including interoperability across multiple financial institutions to avoid fragmentation, various QR code presentation modes, service provider responsibilities in risk management, consumer protection and education, and future innovation in improving QR code standards and Industry Standard APIs for Thai QR code payments.
Why do businesses integrate with it?
As of 2025, QR code payment has become the dominant payment method for all transaction types, from small to considerable amounts. According to Data Reportal, a leading platform for global statistics, a study conducted in 2024 on QR Code usage via smartphones among individuals aged 16 and above, Thailand ranks third globally in QR code usage, with 61.5% of its population using QR codes monthly ref. Nation Thailand: Thailand ranks third in the world for QR code usage. As mobile devices become ubiquitous with applications integrated with Thai QR code functionality, it’s increasingly difficult to imagine carrying cash in Thailand, ref. 2C2P: Thailand Payment Method and ref. Stripe: QR Codes in Thailand. The system has transformed wallets into e-wallets across generations, with even ATM withdrawals now working through mobile-banking applications.
How the integration works
Integrating Thai QR Payment can be as simple as printing a static code or as advanced as generating a one-time dynamic code driven by APIs and real-time webhooks. Both modes run on the EMV QRCPS data model and are accepted by every Thai mobile-banking app.
To implement QR payments, start by considering your physical setup and the user flow at the point of sale (PoS). Depending on your business needs, you can choose between two main payment modes:
Merchant-Presented Mode (C2B): Customers scan QR codes displayed by merchants.
- Supports both static and dynamic QR implementations
- Applications must be compatible with mobile devices (smartphones) capable of reading QR codes
- Most common implementation for retail and service businesses
Customer-Presented Mode (B2C): Merchants scan QR codes displayed by customers.
- Merchants scan QR codes displayed by customers (MyPromptQR system)
- Requires merchant POS systems capable of QR code scanning
Depending on your merchant needs, the QR code types are:
Static QR Codes: Created once and reused indefinitely
- Ideal for printing on paper, stickers, or laminated signs
- Customer inputs amount manually during payment
- Generated offline using open-source libraries
- Verification requires manual confirmation or slip scanning via ITMX API
Dynamic QR Codes: Generated fresh for each transaction
- Pre-filled payment forms reduce customer input to scan-and-confirm
- Each transaction with embedded amount and merchant details
- API-driven creation through bank endpoints (KBank QR API, Bangkok Bank QR Payment, Omise PromptPay)
- Real-time webhook notifications for automated payment confirmation
Implementation patterns
- Direct-to-bank API – Major Thai banks provide APIs that enable merchants to manage the entire QR payment workflow in-house and allow back-end systems to create both static and dynamic QR codes, receive notifications via webhooks, reconcile transactions, query payment status, and initiate refunds up to THB 2M per transaction. Integration requires bank onboarding, certification, and secure authentication (e.g., OAuth 2.0, JWT signatures).
- PSP aggregator – Payment service providers simplify QR payment integration for merchants: Stripe, Omise/OpnPayments, Airwallex, Nuvei and Xendit expose simplified support for PromptPay and other payment methods, consolidate settlement and support multiple payment methods in unified APIs or SDKs. Merchants benefit from easier setup and single-point reconciliation.
- Library-only (static) – For small merchants or simple implementations, open-source tools enable QR code generation without direct bank or PSP integration: generate the EMV-compliant QR string locally with open-source libraries, like
promptpay-qr
andpromptparse
, and embed in any QR generator. Payment verification is typically manual (by reviewing bank slips within Thai-banking mobile app) or automated via APIs like ITMX for slip validation. This approach is best suited for small-scale or offline merchants needing a lightweight solution.
Getting started
As a business owner looking to collect payments via the Merchant-Presented Mode:
- Register & license — Choose your identifier type based on your business structure.
- Individual Merchants: Register a PromptPay ID using your phone number, national ID, or tax ID
- Juristic Persons: Register using your 13-digit corporate tax ID for PromptPay business services
- Biller ID (Tag 30): Obtain a Biller ID/Merchant ID from your bank based on your corporate registration number or tax ID for bill payment structure
- If you will generate dynamic QR codes, sign the bank’s API/PSP service agreement and obtain sandbox keys.
- Choose the mode
- Static path – Print once, stick at counter, and verify manually. Suitable where exact amount is not critical and staff can verify slips or use slip-scanning APIs via Thai-banking app.
- Dynamic path – Generate per transaction, verify automatically. Integrate bank APIs or PSP services for real-time code generation, ideal for online checkout or POS. Locks the amount and eliminates manual slip checks for instant payment confirmation.
- Build the flows — Choose integration partner based on capabilities:
- Bank Direct Integration
- PSP Integration
- Build your own static implementation
- Choose implementation — Choose between library-only, direct bank integration, or payment service provider (PSP) aggregation.
- Presenting the code
- At counter – laminate a static code or show dynamic code on the POS secondary screen; lock screen brightness for easier scanning.
- In-app / web – render the QR in an HTML
<img>
or Canvas; provide a “Copy payload” fallback for users paying on the same phone.
- Verification & reconciliation
- Automated Verification (Dynamic QR)
- Manual Verification (Static QR):
- Integrate slip verification APIs (ITMX, SlipOK, EasySlip)
- Use bank mobile apps (Krungthai NEXT, K Plus) to verify mini-QR codes.
- Staff review payment screenshots (with fraud risk awareness)
- Scan mini-QR codes on payment slips rather than trusting screenshots
- Verify transaction amount, timestamp, and reference numbers
- Implement transaction limits and stay on high alert for suspicious patterns
- Use automated verification to reduce human error
- Test, monitor, secure
- Log every
transaction_id
,amount
,promptpay_id
, and webhook payload for audit and refund purposes. - Whitelist webhook IP ranges and verify signatures where provided. Test webhook reliability and timeout scenarios.
- Support procedures for payment issues and disputes
- Log every
Wrap up
End users can make transactions easily from their phones by scanning QR codes embedded in chatbots, websites, or invoices—anytime and anywhere. Thai QR payment is trusted and widely accepted, working seamlessly with all Thai banking apps and supported by every major bank including cross-border payment linkages for neighboring countries like Malaysia and Japan ref. BOT.or.th: Cross Border Payment. This standardization and regulatory backing ensure secure, convenient, and universally compatible payments, building customer confidence and loyalty.
Integration Option | Description | Pros | Cons / Considerations | Best For |
---|---|---|---|---|
Direct-to-Bank API | Integrate directly with major Thai banks’ APIs for QR code generation, webhooks, and reconciliation. | Full control, Real-time confirmation, Refund support, High scalability | Requires onboarding/certification, Technical complexity | Medium–large businesses, custom POS |
PSP Aggregator | Use payment service providers (e.g., Stripe, Omise, Xendit) offering unified APIs/SDKs. | Fast setup, Unified settlements, Multi-method support, Lower overhead | Fees may be higher, Less control over UX | SMEs, e-commerce, SaaS |
Library-Only (Static) | Generate static QR codes with open-source libraries; manual or semi-automated verification. | Easiest setup, No onboarding, Minimal cost, Offline ready | Manual verification, No real-time confirmation, Limited automation | Micro-business, offline retail |
Comments
I'm looking for testers for a new commenting system! Interested? E-mail me here with subject of ‘Comment System Tester’.