# PromptPay QR

> Source: https://docs.barcoder.ai/docs/standards/promptpay-qr
> research date 2026-05-28 · extracted at 2026-10-03
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [PromptPay — Bank of Thailand](https://www.bot.or.th/en/financial-innovation/digital-finance/digital-payment/promptpay.html)
- [EMV QR Code Specifications — EMVCo (Merchant-Presented Mode, July 2017)](https://www.emvco.com/emv-technologies/qr-codes/)

## Overview

PromptPay is Thailand's national real-time interbank payment system, launched in **December 2016** by the National ITMX (NITMX) under Bank of Thailand oversight <sup>[1][1], [2][2]</sup>. The **PromptPay QR** standard is its merchant-presented QR profile, based on the EMVCo MPM specification with a Thailand-specific assigned tag (TAC 30) <sup>[3][3], [4][4]</sup>. By December 2025 the system handled **~74 million daily transactions across 82.2 million registrations** (90 M+ cumulative), with **2.26 billion transactions in a single month (November 2025) worth THB 4.19 trillion** — making it one of the highest per-capita transaction-rate digital-payment rails in Southeast Asia, with ~400,000 registered businesses on PromptPay <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>. PromptPay QR is cross-border-linked with seven ASEAN neighbours <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>.

The underlying real-time switch was built by **Vocalink** (Mastercard), drawing on Vocalink's UK Faster Payments and India IMPS lineage <sup>[5][5]</sup>.

## History

In **December 2016** the National Interbank Transaction Management and Exchange (NITMX, the Thai interbank switch) launched PromptPay as a person-to-person interbank credit transfer service operating 24/7/365 <sup>[1][1]</sup>. The interbank credit transfer service was activated on **27 January 2017** for general public use <sup>[1][1]</sup>. The original launch enabled transfers using a registered proxy (mobile phone number, national citizen ID, or business registration number) rather than requiring full bank account details — the same proxy-based addressing model that India's UPI uses with VPAs <sup>[2][2]</sup>.

The QR-based payment overlay, branded **MyPromptQR**, was introduced in **September 2019**, enabling merchant-presented and consumer-presented QR payments on top of the underlying PromptPay rail <sup>[1][1]</sup>. The QR layer adopted the EMVCo Merchant-Presented Mode specification with Thailand-specific extensions.

**Vocalink's role**: Vocalink (then a Mastercard subsidiary) was contracted by the Thai Bankers' Association to design and build the underlying Real-Time Payments Switch and Multi-Proxy Platform. Vocalink spent 12 months in business-requirements assessment and built on its experience with the UK Faster Payments Service and India's IMPS <sup>[5][5]</sup>.

**Cross-border milestones** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>:
- **April 2021**: PromptPay ↔ PayNow (Singapore) live for instant cross-border P2P.
- 2022–2024: PromptPay ↔ DuitNow (Malaysia), QRIS (Indonesia), KHQR (Cambodia), LaoQR (Laos).
- 2024–2025: Japan and China connectivity under development.

## Technical specification

PromptPay QR is an **EMVCo Merchant-Presented Mode (MPM)** profile with a Thailand-specific application identifier <sup>[3][3], [4][4]</sup>.

**EMVCo MPM foundation** <sup>[6][6]</sup>:
- Payload format: **TLV (Tag-Length-Value)** plain-text string
- Integrity: CRC-16/CCITT-FALSE appended as field `63`
- Static and dynamic QR variants supported
- Underlying symbology: [QR Code](https://docs.barcoder.ai/docs/standards/qr-code)

**Thailand-specific extensions** <sup>[4][4]</sup>:
- EMVCo reserves tag numbers **26–52** for local card schemes; PromptPay uses **TAC 30** for the Thai-PromptPay merchant-account-information template
- Internal switch messaging uses **ISO 20022** <sup>[5][5]</sup>
- Currency code: 764 (THB)

**Proxy identifier types** for the PromptPay account encoded in the QR <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>:
- **Mobile phone number** (Thailand-formatted)
- **Citizen ID** (13-digit Thai national ID)
- **Business registration number** (for merchants)
- **E-wallet ID**

**Settlement** uses the underlying PromptPay rail (NITMX switch operated under Bank of Thailand supervision) <sup>[1][1]</sup>. Person-to-person transfers are **fee-free**; merchant fees are minimal compared to card rails <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>.

## Use cases

- **Person-to-person transfers** — the launch use case. Free, instant, replaces cash for splitting bills, paying friends <sup>[2][2]</sup>.
- **Retail point of sale** — every shop from street stalls to large chains displays a static PromptPay QR; market-share grew from negligible in 2017 to **42.7 % of 2024 transaction value via QR** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>.
- **Tourism** — the 7-country cross-border QR mesh (SG, MY, ID, LA, KH, CN, JP-planned) makes PromptPay one of the most internationally interoperable national QR rails; tourists from member countries scan Thai PromptPay QRs with their home banking app <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>.
- **Government and tax payments** — disbursements and collection between citizens and government <sup>[2][2]</sup>.
- **Bill payments** — utilities, telecom, insurance.
- **E-commerce checkout** — dynamic PromptPay QR generated per-cart on Thai e-commerce sites.

Adoption metric: **92 % of the Thai population uses digital payments** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup> — a remarkable transition from a cash-dominant economy in under a decade.

## Implementations

PromptPay's open EMVCo TLV structure produced a strong open-source library ecosystem.

**Encoders / decoders:**
- **JavaScript** — [dtinth/promptpay-qr][7] — **314★**, 2022. The most-starred PromptPay library. Ships as a web app at `promptpay2.me`, a CLI, and a JavaScript library. Encodes the EMV QRCPS Merchant Presented Mode payload, embeds a PromptPay proxy (mobile or citizen ID) and optional amount <sup>[7][7]</sup>.
- **C# / .NET Standard 2.0** — [saladpuk/PromptPay][8] — 91★, 2021. Read, write, and validate PromptPay QR codes per the EMVCo standard. Supports static and dynamic QR generation for credit transfers and bill payments <sup>[8][8]</sup>.
- **Go** — [Frontware/promptpay][9] — Go library for generating PromptPay QR codes <sup>[9][9]</sup>.
- **Dart/Flutter** — `emv_qr_builder` package on pub.dev — EMVCo TLV builder with PromptPay support <sup>[10][10]</sup>.

**Bank apps** (canonical production implementations): **K PLUS** (Kasikornbank), **SCB EASY**, **Bangkok Bank Mobile**, **Krungthai NEXT**, **KMA** (Krungsri), plus e-wallets **TrueMoney**, **Rabbit LINE Pay**, **ShopeePay** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>. All major Thai bank apps both scan and generate PromptPay QRs.

**Decoders:** any QR scanner produces the TLV string; the EMVCo parse is generic. The C# library above does full parse + validate.

## Comparison

**vs. [SGQR](https://docs.barcoder.ai/docs/standards/sgqr) (Singapore) and [DuitNow QR](https://docs.barcoder.ai/docs/standards/duitnow-qr) (Malaysia)** — Same EMVCo MPM technical foundation; same launch era (2018–2019); same central-bank-affiliated operator model. SGQR uniquely combines many schemes (card networks + e-wallets + bank rails) under one QR; PromptPay is bank-rail-only via NITMX; DuitNow is bank + e-wallet <sup>[Singapore report](https://docs.barcoder.ai/docs/payments/SG), [Malaysia report](https://docs.barcoder.ai/docs/payments/MY), [Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>. All three are connected in a multilateral ASEAN cross-border QR network.

**vs. [UPI QR](https://docs.barcoder.ai/docs/standards/upi-qr) (India)** — Both are central-bank-driven national instant-payment rails with proxy-based addressing (Pix key / VPA / PromptPay ID). UPI uses a `upi://pay?...` deep link rather than EMVCo TLV; PromptPay uses EMVCo TLV. UPI scale is two orders of magnitude larger (250B vs ~28B annual transactions), reflecting India's population but also UPI's earlier launch and zero merchant fee <sup>[India report](https://docs.barcoder.ai/docs/payments/IN), [Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>.

**vs. [Pix](https://docs.barcoder.ai/docs/standards/pix) (Brazil)** — Both used Vocalink/Mastercard advisory work in their design phase; both adopted EMVCo MPM for the QR layer; both are bank-rail-only proxy-addressed instant payment systems. Pix launched later (2020) but scaled faster due to mandatory bank participation [[pix-ref]].

## Fun facts

PromptPay's growth made Thailand one of Southeast Asia's leading per-capita digital-payment markets, with **~74 million daily transactions across 82 million registrations** (~1+ transaction per day per Thai resident) and **2.26 billion transactions in a single month (November 2025)** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>. (Note: a previous version of this entry cited "538 transactions per person per year"; that figure actually describes Malaysia's 2025 cashless-payment-per-capita statistic and has been removed.)

The PromptPay rail was built by **Vocalink, the same Mastercard subsidiary that built the UK's Faster Payments Service (FPS) and India's IMPS** <sup>[5][5]</sup>. The 12-month design phase explicitly drew on those earlier implementations — PromptPay is the third instance of the same architectural lineage, and arguably the most successful per-capita of the three.

PromptPay was an unusually **government-led top-down rollout**: the Bank of Thailand and Thai Bankers' Association coordinated a single nationwide proxy registry (mobile/citizen-ID → bank account) and required all member banks to participate. This is part of why adoption was faster than India's UPI (which is also broad but multi-app from day one) and Brazil's Pix (which similarly mandated bank participation). The proxy-registry approach is now the reference pattern for new national instant-payment systems <sup>[5][5]</sup>.

## Status

**Active, dominant, and internationally connected.** Most recent transaction volumes:
- **77 million PromptPay registrations** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>
- **75.9 million daily transactions** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>
- **~74 million daily transactions** across 82 million registrations <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>
- **41.6 % of mobile payment market share** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>
- **42.7 % of 2024 transaction value via QR code** <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>

Cross-border integrations remain a focus — Japan and China connections are under development; eight ASEAN+ countries are currently live or rolling out <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>. Thailand is piloting a CBDC (digital baht) alongside, but this is positioned as complementary rather than a replacement for PromptPay <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>.

No deprecation planned. Tourism-driven cross-border QR growth has been a particular driver: foreign tourists from connected countries can scan a Thai PromptPay QR with their home banking app and pay in local currency, removing one of the historical friction points of inbound tourism payment <sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>.

## Sources

[1]: https://www.bot.or.th/en/financial-innovation/digital-finance/digital-payment/promptpay.html
[2]: https://en.wikipedia.org/wiki/PromptPay
[3]: https://www.emvco.com/emv-technologies/qr-codes/
[4]: https://medium.com/mobiletopup/does-promptpay-have-a-future-a3c35efa6bb5
[5]: https://fastpayments.worldbank.org/sites/default/files/2021-09/World_Bank_FPS_Thailand_PromptPay_Case_Study.pdf
[6]: https://www.emvco.com/knowledge-hub/the-what-why-and-how-of-emv-qr-codes/
[7]: https://github.com/dtinth/promptpay-qr
[8]: https://github.com/saladpuk/PromptPay
[9]: https://github.com/Frontware/promptpay
[10]: https://pub.dev/packages/emv_qr_builder/versions/1.0.1
[th-cro]: https://docs.barcoder.ai/docs/payments/TH
[sg-cro]: https://docs.barcoder.ai/docs/payments/SG
[my-cro]: https://docs.barcoder.ai/docs/payments/MY
[in-cro]: https://docs.barcoder.ai/docs/payments/IN
[pix-ref]: https://docs.barcoder.ai/source/standards/pix

1. [PromptPay — Bank of Thailand][1]
2. [PromptPay — Wikipedia][2]
3. [EMV QR Code Specifications — EMVCo][3]
4. [Does PromptPay have a future? — Medium / MobileTopUp][4]
5. [Thailand PromptPay Case Study — World Bank Fast Payments][5]
6. [The What, Why and How of EMV QR Codes — EMVCo][6]
7. [dtinth/promptpay-qr — GitHub][7]
8. [saladpuk/PromptPay — GitHub][8]
9. [Frontware/promptpay — GitHub][9]
10. [emv_qr_builder — pub.dev][10]
11. [TH-thailand.md]<sup>[Thailand report](https://docs.barcoder.ai/docs/payments/TH)</sup>
12. [Pix entry][pix-ref] — comparison

## Deployments

Found in the following country reports (grep across `reports/countries/`):

- **LA** — [LA-laos.md](https://docs.barcoder.ai/docs/payments/LA)
- **TH** — [TH-thailand.md](https://docs.barcoder.ai/docs/payments/TH)
