How PromptPay Works – Complete Guide
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 fundamentally 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 sender only needs to know the PromptPay ID; the ITMX switching network routes the payment to the correct bank account automatically.
All Thai banks with significant customer bases are required by the Bank of Thailand to participate. PromptPay is free for consumers — and since 2019 the BOT eliminated interbank transfer fees entirely for PromptPay transactions, making it the default way Thais move money domestically.
A PromptPay QR Code encodes the payment using the same EMV Merchant Presented Mode (MPM) standard used by Brazil's PIX and Indonesia's QRIS. The payload is a TLV (Tag-Length-Value) encoded string with the PromptPay AID A000000677010111 and a CRC16-CCITT checksum that banks verify before processing any payment.
How PromptPay Works – Step by Step
- 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
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
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
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
Payer authenticates (biometric or PIN)
Authentication happens entirely within the banking app. The PromptPay QR contains no passwords, PINs or sensitive banking credentials.
- 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
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.
| Key Type | Format | Example | Best For |
|---|---|---|---|
| Phone Number | 06/08/09 + 7 digits | 0812345678 | Individuals, easiest to share |
| National ID | 13 digits | 1234567890123 | Formal registration, individuals |
| Tax ID | 13 digits (starts 0) | 0105543012345 | Companies and juristic entities |
| E-Wallet ID | 00 + 13–15 digits | 0012345678901234 | Digital 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 string. Here is a formatted example (line breaks added for readability):
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
| Tag | Example Value | Description |
|---|---|---|
| 00 | 01 | Payload Format Indicator – always 01 |
| 01 | 11 / 12 | Point of Initiation: 11 = static, 12 = dynamic (with amount) |
| 29 | … | Merchant Account Information (PromptPay sub-fields) |
| 29.00 | A000000677010111 | PromptPay Application ID (AID) |
| 29.01 | 0066812345678 | Normalized recipient key (phone or national ID) |
| 52 | 0000 | Merchant Category Code (0000 = uncategorized) |
| 53 | 764 | Transaction Currency – ISO 4217 code for THB |
| 54 | 100.00 | Transaction Amount (omitted in static QR) |
| 58 | TH | Country Code – ISO 3166-1 alpha-2 |
| 59 | N/A | Merchant Name (optional in PromptPay) |
| 60 | Bangkok | Merchant City (optional) |
| 62 | … | Additional Data Field Template (transaction ref) |
| 63 | ABCD | CRC16-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 is straightforward:
- 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
The resulting string (e.g. 0066812345678) is embedded as sub-tag 01 inside the tag-29 merchant account field. National IDs and Tax IDs are used as-is (13 digits, no transformation). Here is the normalization logic in TypeScript:
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 a purely domestic system. Thailand has established bilateral QR payment linkages with seven countries, allowing citizens to send and receive money across borders by scanning a QR code in their local banking app — with automatic currency conversion at interbank rates.
These linkages use each country's existing instant payment infrastructure, avoiding international wire transfer fees and delays. The framework is championed by the Bank for International Settlements (BIS) and the ASEAN central banks as a model for regional payment interoperability.
Singapore
PayNow
Malaysia
DuitNow
Indonesia
QRIS
Vietnam
VietQR
Cambodia
Bakong
Japan
JCB QR
China
WeChat / Alipay
The most active corridor is Thailand–Singapore via the PromptPay–PayNow linkage, which enables Thai visitors to Singapore (and vice versa) to pay at any merchant that accepts the local QR code. The transaction is debited in the sender's currency and credited in the recipient's currency, with no hidden fees beyond the interbank exchange rate.
The China connection (WeChat Pay and Alipay, active since 2018) is particularly significant for Thai tourism, as Chinese tourists represent one of Thailand's largest visitor groups. Thai merchants displaying a PromptPay QR code can automatically accept payments from Chinese visitors without installing any additional hardware.
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.
PromptPay's Impact on Thailand
- 💸Interbank fees eliminated: The Bank of Thailand mandated free PromptPay transfers for amounts up to ฿5,000 in 2018, then extended this to all amounts in 2019 — effectively ending domestic transfer fees across all Thai banks.
- 📈Digital payment acceleration: Thailand jumped from primarily cash-based to one of the most digitally-transacting populations in Southeast Asia in just a few years, driven almost entirely by PromptPay adoption.
- 🏛️Government stimulus via PromptPay: During the COVID-19 pandemic, the Thai government distributed welfare and relief payments to millions of citizens directly via their National ID-linked PromptPay accounts — faster and cheaper than any alternative.
- 🛒Commerce transformation: From street food vendors and market stalls to major e-commerce platforms like Lazada and Shopee Thailand, PromptPay QR became the default checkout option — eliminating the need for card readers.
- 🌏Regional leadership: Thailand's PromptPay is cited by the Bank for International Settlements as one of the model systems for ASEAN payment interoperability, and has directly inspired similar linkages across the region.
Ready to generate your PromptPay QR Code?
Free, instant, works with all Thai banking apps. No sign-up required.