Favicon
Sea InDevelopment Blog
Thai QR Code Payments: The 10,000 Ft. View

Thai QR Code Payments: The 10,000 Ft. View

Get a concise overview of Thai QR Code payments—how they work, why they matter, and step-by-step integration options for businesses.

Thailand Tech Scene, FinTech, Digital Payments, Innovation
8 min read
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

  1. 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).
  2. 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.
  3. 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 and promptparse, 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:

  1. 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.
  2. 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.
  3. Build the flows — Choose integration partner based on capabilities:
    1. Bank Direct Integration
    2. PSP Integration
    3. Build your own static implementation
  4. Choose implementation — Choose between library-only, direct bank integration, or payment service provider (PSP) aggregation.
  5. Presenting the code
    1. At counter – laminate a static code or show dynamic code on the POS secondary screen; lock screen brightness for easier scanning.
    2. In-app / web – render the QR in an HTML <img> or Canvas; provide a “Copy payload” fallback for users paying on the same phone.
  6. Verification & reconciliation
    1. Automated Verification (Dynamic QR)
    2. Manual Verification (Static QR):
      1. Integrate slip verification APIs (ITMX, SlipOK, EasySlip)
      2. Use bank mobile apps (Krungthai NEXT, K Plus) to verify mini-QR codes.
      3. Staff review payment screenshots (with fraud risk awareness)
        1. Scan mini-QR codes on payment slips rather than trusting screenshots
        2. Verify transaction amount, timestamp, and reference numbers
        3. Implement transaction limits and stay on high alert for suspicious patterns
        4. Use automated verification to reduce human error
  7. Test, monitor, secure
    1. Log every transaction_id, amount, promptpay_id, and webhook payload for audit and refund purposes.
    2. Whitelist webhook IP ranges and verify signatures where provided. Test webhook reliability and timeout scenarios.
    3. Support procedures for payment issues and disputes

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 OptionDescriptionProsCons / ConsiderationsBest For
Direct-to-Bank APIIntegrate directly with major Thai banks’ APIs for QR code generation, webhooks, and reconciliation.Full control, Real-time confirmation, Refund support, High scalabilityRequires onboarding/certification, Technical complexityMedium–large businesses, custom POS
PSP AggregatorUse payment service providers (e.g., Stripe, Omise, Xendit) offering unified APIs/SDKs.Fast setup, Unified settlements, Multi-method support, Lower overheadFees may be higher, Less control over UXSMEs, 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 readyManual verification, No real-time confirmation, Limited automationMicro-business, offline retail
Share:
Sea's InDevelopment Profile

About Sea, the Author

Hi! I'm a cloud engineer exploring how technology can connect people and enhance quality of life. From Thailand's digital frontier, I share insights on making tech more accessible and meaningful for everyday people across Southeast Asia.

Comments

I'm looking for testers for a new commenting system! Interested? E-mail me here with subject of ‘Comment System Tester’.