How PromptPay Works – Complete Guide to Thai Payments

Everything about Thailand's instant payment system: PromptPay keys, EMV QR payload, phone normalization, ASEAN cross-border network and supported banks.

What is PromptPay?

PromptPay (พร้อมเพย์) is Thailand's national instant payment system, jointly developed by the Bank of Thailand (BOT) and the Thai Bankers' Association (TBA). Launched in January 2017 as part of the government's National e-Payment Master Plan, PromptPay changed how Thais send and receive money — replacing slow inter-bank transfers with a system that settles in under five seconds, around the clock, every day of the year. The core innovation is the PromptPay ID — an alias linked to a bank account. Instead of sharing a bank account number and branch code, a recipient registers their Thai mobile phone number (starting with 06, 08 or 09) or their 13-digit National ID. Businesses register using a Tax ID. The ITMX switching network routes the payment to the correct bank account automatically. All Thai banks are required by the Bank of Thailand to participate; PromptPay is free for consumers.

How PromptPay Works – Step by Step

  1. 1

    Recipient shares PromptPay QR or key

    The payee provides a phone number, National ID or a PromptPay QR code. Static QR codes work for any amount; dynamic QR codes include a pre-set amount for invoices and e-commerce.

  2. 2

    Payer opens any Thai banking app

    All 30+ participating banks are fully interoperable. A payment from KBank arrives instantly in an SCB account — there is no lock-in to any specific institution.

  3. 3

    Payer scans QR or enters phone/ID

    The app activates the camera for QR scanning, or the payer types the PromptPay key manually. The recipient's name is shown for confirmation.

  4. 4

    Payment details confirmed on screen

    The recipient's name (as registered with ITMX) is displayed. If a dynamic QR is used, the amount is pre-filled. Static QR requires the payer to enter the amount.

  5. 5

    Payer authenticates (biometric or PIN)

    Authentication happens entirely within the banking app. The PromptPay QR contains no passwords, PINs or sensitive banking credentials.

  6. 6

    Transfer completes instantly

    The ITMX infrastructure routes the payment through the PromptPay network. Funds settle in real time between the two bank accounts — typically within 5 seconds.

  7. 7

    Both parties receive app notification

    Sender and recipient both get instant push notifications. The payer's app shows a receipt with a transaction reference number for records.

PromptPay Keys – Phone vs National ID

A PromptPay key is an alias registered in the ITMX NPCI (National Payment Central Infrastructure) directory that maps to a specific bank account. Individuals typically use their phone number (easiest to share) or National ID (most stable). Companies use their Tax ID. E-wallet accounts use an E-Wallet ID format. Each key type has different formatting rules — phone numbers are normalized to the 0066XXXXXXXXX format in the QR payload.

Key TypeFormatExampleBest For
Phone Number06/08/09 + 7 digits0812345678Individuals, easiest to share
National ID13 digits1234567890123Formal registration, individuals
Tax ID13 digits (starts 0)0105543012345Companies and juristic entities
E-Wallet ID00 + 13–15 digits0012345678901234Digital wallet accounts

The PromptPay QR Payload – EMV Format

PromptPay QR codes follow the EMV Merchant Presented QR Code (MPM) specification — the same international standard used by Brazil's PIX and India's BharatQR. Thailand's version uses merchant account tag 29 (vs. tag 26 for PIX) and the PromptPay AID A000000677010111. The payload is a continuous TLV (Tag-Length-Value) string. A CRC16-CCITT checksum at the end (tag 63) guarantees data integrity.

000201                              ← Tag 00: Payload Format Indicator
010211                              ← Tag 01: Static QR (11)
2937                                ← Tag 29: Merchant Account (length 37)
  0016A000000677010111                ← Sub-tag 00: PromptPay AID
  01130066812345678                   ← Sub-tag 01: Normalized phone key
52040000                            ← Tag 52: Merchant Category Code
5303764                             ← Tag 53: Currency (THB = 764)
5406100.00                          ← Tag 54: Amount
5802TH                              ← Tag 58: Country Code
5903N/A                             ← Tag 59: Merchant Name
6007Bangkok                         ← Tag 60: Merchant City
62070503***                         ← Tag 62: Additional Data
6304ABCD                            ← Tag 63: CRC16 Checksum
TagExample ValueDescription
0001Payload Format Indicator – always 01
0111 / 12Point of Initiation: 11 = static, 12 = dynamic (with amount)
29Merchant Account Information (PromptPay sub-fields)
29.00A000000677010111PromptPay Application ID (AID)
29.010066812345678Normalized recipient key (phone or national ID)
520000Merchant Category Code (0000 = uncategorized)
53764Transaction Currency – ISO 4217 code for THB
54100.00Transaction Amount (omitted in static QR)
58THCountry Code – ISO 3166-1 alpha-2
59N/AMerchant Name (optional in PromptPay)
60BangkokMerchant City (optional)
62Additional Data Field Template (transaction ref)
63ABCDCRC16-CCITT Checksum – 4 uppercase hex characters

Phone Number Normalization

PromptPay QR codes do not embed the raw Thai phone number — they use a normalized international format. The rule: start with a local Thai number (e.g. 0812345678), remove the leading 0, then prepend the country code prefix 0066. Result: 0066812345678. If the input already starts with +66, replace the + with 00. National IDs and Tax IDs (13 digits) are used as-is without transformation.

  • 1️⃣Start with a local Thai number: 0812345678
  • 2️⃣Remove the leading 0: 812345678
  • 3️⃣Prepend the country code prefix 0066: 0066812345678
  • 🔁If the input starts with +66 (international format), replace the + with 00: +66812345678 → 0066812345678
function normalizePromptPayKey(key: string): string {
  const digits = key.replace(/\D/g, '');

  // National ID or Tax ID (13 digits) — use as-is
  if (digits.length === 13) return digits;

  // Phone number normalization
  if (digits.startsWith('0') && digits.length === 10) {
    return '0066' + digits.slice(1);   // 0812345678 → 0066812345678
  }
  if (digits.startsWith('66') && digits.length === 11) {
    return '00' + digits;              // 66812345678 → 0066812345678
  }
  return digits;
}

PromptPay's ASEAN Cross-Border Network

PromptPay is no longer purely domestic. Thailand has established bilateral QR payment linkages with seven countries — Singapore (PayNow), Malaysia (DuitNow), Indonesia (QRIS), Vietnam (VietQR), Cambodia (Bakong), Japan (JCB QR) and China (WeChat/Alipay). These linkages allow citizens to send and receive money across borders by scanning a local QR code, with automatic currency conversion at interbank rates and no international wire transfer fees. The framework is championed by the BIS and ASEAN central banks as a model for regional payment interoperability.

🇸🇬

Singapore

PayNow

Since 2021
🇲🇾

Malaysia

DuitNow

Since 2022
🇮🇩

Indonesia

QRIS

Since 2023
🇻🇳

Vietnam

VietQR

Since 2023
🇰🇭

Cambodia

Bakong

Since 2020
🇯🇵

Japan

JCB QR

Since 2023
🇨🇳

China

WeChat / Alipay

Since 2018

Supported Banks

All Thai banks authorized by the Bank of Thailand are required to offer PromptPay. This includes every commercial bank, savings bank and specialized financial institution with significant retail operations. Full interoperability is guaranteed by the ITMX network — a payment sent from any participating bank app arrives in any other participating bank account within seconds. There is no need for both parties to use the same bank or app.

Bangkok Bank
KBank
SCB
Krungthai
ttb
Krungsri
CIMB Thai
UOB Thailand
GSB
BAAC
LH Bank
KKP
30+ more…

PromptPay's Impact on Thailand

👥
55M+
Registered users
🔄
~1B
Transactions / month
🏦
30+
Participating banks
🌏
7
ASEAN connections

PromptPay has transformed Thailand's payment landscape: 55M+ registered users, ~1 billion transactions per month, 30+ participating banks, and connections to 7 ASEAN countries. The Bank of Thailand eliminated all interbank transfer fees for PromptPay in 2019. During the COVID-19 pandemic, the Thai government distributed welfare payments directly via National ID-linked PromptPay accounts. Thailand jumped from primarily cash-based to one of the most digitally-transacting populations in Southeast Asia, driven almost entirely by PromptPay adoption.

Ready to generate your PromptPay QR Code?

Free, instant, works with all Thai banking apps. No sign-up required.