Make a Printable PromptPay QR Code
Take the PromptPay payload from your bank app, paste it in, and style the code. Export it print-ready for a counter standee, a market stall, or a delivery bag.
Opens in Google Maps. Coordinates work too - "37.4224, -122.0841".
The code opens your business's "Write a review" form. Paste the Place ID, or a Google Maps link that carries one.
A UPI link carries no checksum, so a mistyped ID produces a code that scans perfectly and pays somebody else. Paste the ID from your payment app rather than typing it, and send yourself one rupee before printing.
Paste it exactly as copied. KoloQR does not assemble the payload - it encodes the one your bank issued, and checks it before you print it.
SVG, PNG, JPG • Max 2 MB
What Is a PromptPay QR Code?
A PromptPay QR code is a QR code that stores a Thai QR Payment string - Thailand's national payment format, written in the EMVCo merchant-presented layout. Scanning it in a Thai banking app opens a transfer already addressed to the receiver's PromptPay ID, with the amount filled in if the code carries one. Every Thai bank app reads the same code, which is the whole point of the standard.

The Code Carries a PromptPay ID, Not an Account Number
PromptPay works by proxy: a short identifier is registered against a bank account, and the code carries the identifier. The payload names which kind it is holding:
- Mobile Number - the common one for individuals, written in the payload as 0066 followed by the number without its leading zero, so 081 234 5678 becomes 0066812345678.
- National ID or Tax ID - thirteen digits, used by people registering their citizen ID and by sole traders registering a tax ID.
- e-Wallet ID - fifteen digits, for accounts held with an e-money issuer rather than with a bank.
All three sit inside the payload under the PromptPay application identifier A000000677010111, which is what tells a Thai bank app that this is a PromptPay transfer rather than any of the other schemes the same EMVCo container can carry. Registered billers use a different identifier and a Biller ID instead, which is why a code from a utility company looks similar but is not the same thing. What matters for a printed code is the choice above: a mobile number is easy to check against a sign, and a national ID is not something to print in a public place.
KoloQR Encodes the Payload Your Bank Issued
A Thai QR Payment string is a sequence of length-prefixed fields - the PromptPay ID, currency 764 for the baht, country TH, a static or dynamic flag, an optional amount - and it closes with a CRC16 checksum over everything before it. One altered character breaks the checksum and the payer's app refuses the code, which is the correct behaviour and also the reason a design tool has no business assembling one. Your bank app already produces a valid payload: open the receive-by-QR section, generate the code, and take the payload string it exposes. Paste that string into KoloQR and you get the same payment encoded in a pattern you control - your shape, your colours, your logo in the middle - exported at a size and quality a print shop can actually use, which is the part the banking app was never going to do for you.
Generate QR Code
Where PromptPay QR Codes Are Used
PromptPay reached the parts of Thai commerce a card terminal never did, and the printed code is how:
- 1
Register a PromptPay ID
Link your mobile number or your national ID to your Thai bank account in the bank's app. For a code that will be printed and left in public, a mobile number is the safer of the two to have on display.
- 2
Generate the Code in Your Bank App
Open the receive-by-QR section and generate a PromptPay code. Set an amount if the sign is for one fixed price; leave it blank if the payer decides what to send.
- 3
Paste the Payload and Design the Code
Choose the PromptPay type in KoloQR and paste the payload exactly as it was issued - no trimming, no line breaks. KoloQR recomputes the checksum and reads the payload back, so you can check the receiver name and the amount before anything goes to print. Then style the code, and keep contrast high; this is a code scanned outdoors in bright sun.
- 4
Pay Yourself One Baht Before Printing
Scan the finished code with a Thai bank app and take it to the confirmation screen. Check the receiver name shown is yours, send one baht, then export SVG or PDF for print.

Which File Format Should You Download?
KoloQR exports your PromptPay QR code in three formats. Pick by where it will be seen:
- PNG for invoices sent by LINE or email, and for a code shown on a screen at one fixed size.
- SVG for standees, laminated cards, and stall signage - anything a printer scales without softening the edges.
- PDF for handing to a print shop, or for a card you print and laminate yourself.
A PromptPay payload is short by payment-code standards - a mobile-number code with no amount is often under 60 characters, which is a noticeably coarser pattern than a Pix or a UPI code carrying the same information. Spend that margin on size rather than on decoration: a sparser grid tolerates a larger centre logo and a heavier module shape without losing scans, and a market stall is exactly where that tolerance gets used up.
Generate QR CodeBest Practices for PromptPay QR Codes
A printed payment code is attacked more than any other kind, and in Thailand the attack usually comes at the moment the customer shows you the slip:
Read the Slip, Don't Glance at It
Forged payment slips are an ordinary scam, and a screenshot is trivial to edit. Check your own bank notification or balance before handing over goods, especially for anything expensive.
Print Your Name Beside the Code
The payer's app shows the receiver's name before they confirm. Printing the same name under the code turns that screen into a check the customer can actually make.
Prefer a Mobile Number Over a National ID
Both work. Only one of them is a document number you have printed on a sign that anyone in the street can photograph.
Watch for Stickers Placed Over Yours
Covering a real payment code with a fraudulent one is the standard attack on unattended signage. Use tamper-evident laminate and check your own signs at the start of each day.
Preset the Amount Where There Is One
A code per price removes the mistyped total and the argument about who got it wrong. A code with no amount belongs on a donation box, not on a menu.
Laminate Against Sun and Rain
A code taped to a cart lives through wet season and full afternoon sun. Ink fades and paper cockles, and a cockled code is a code that stops scanning at an angle.
Reprint When the Registration Changes
A PromptPay ID can be moved to another bank or deregistered. A printed code built on an ID you no longer hold is a sign that quietly stops taking money.
Make It Bigger Than You Think
Roughly a tenth of the reading distance is the floor - about 10 cm for a code read from a metre. Payment codes are scanned one-handed, in a hurry, over a counter.
Keep the Modules Dark on Light
Inverted or low-contrast payment codes fail in exactly the light where money changes hands. Dark on light, always, with four modules of clear quiet zone on every side.
Test With a Bank App, Not a Scanner App
A generic scanner only tells you the string decoded. A Thai bank app tells you the checksum passed, the PromptPay ID resolved, and the name on the confirmation screen is yours.
Why Your PromptPay QR Code Isn't Working
A payment code fails in front of a customer who is already holding their phone, so these are worth checking before the sign goes up rather than after.
The Bank App Says the Code Is Invalid
- Cause
- The payload was altered after the bank issued it - a trimmed space, a line break introduced by copy-paste, or a lost character. The closing CRC16 checksum no longer matches the rest of the string.
- Fix
- Copy the payload again straight from the bank app and paste it without editing anything. Do not retype it, and do not pass it through a word processor.
A Phone Camera Reads It but Nothing Happens
- Cause
- That is expected. A Thai QR Payment string is not a link, so a native camera has nothing to open and shows the raw characters instead.
- Fix
- Test with a Thai banking app's scanner. If it opens a transfer addressed to you, the code is correct, whatever the camera app did with it.
A Foreign Visitor Can't Pay With It
- Cause
- Cross-border PromptPay scanning depends on a link between Thailand and the visitor's own scheme, and on their bank supporting it. Several such links exist, but no single code works for every foreign wallet.
- Fix
- Keep a second payment route for visitors rather than assuming the code covers everyone, and check with your bank which cross-border schemes your code is reachable from.
The Customer Showed a Slip but No Money Arrived
- Cause
- Either the transfer is genuinely still settling, or the slip is a forged screenshot - a common scam wherever payment is confirmed by showing a receipt.
- Fix
- Confirm against your own bank notification or account balance, never against the customer's screen. For larger amounts, wait for your own confirmation before handing anything over.
Still not sure whether the fault is the file or the print? Drop the exported image into the QR code scanner - if it decodes on a desktop and not on paper, the fault entered after the file.
Questions? Answered
A PromptPay QR code stores a Thai QR Payment string - Thailand's national payment format in the EMVCo layout. Scanning it in a Thai bank app opens a transfer addressed to the receiver's PromptPay ID, with the amount filled in if the code carries one.
No. A PromptPay payload ends in a checksum the payer's bank validates, so it has to come from a source the scheme trusts. Generate it in your bank app, then use KoloQR to encode, style and print that exact payload.
A mobile number, a national ID or tax ID, or an e-wallet ID. All three identify a bank account without exposing the account number. For a code left on display, a mobile number is the safer choice to print.
Yes. Your bank app offers an amount field when generating the code, and the payer sees it already filled in. Leave it blank for donations and tips, where the payer decides what to send.
A static code does not - it works as long as the PromptPay ID stays registered to your account. Codes generated for a single transaction can expire, so print the static kind and keep the dynamic ones on screens.
A PromptPay payload is not a link, so a native camera has nothing to open and usually shows the raw string. That is not a fault in the code. Test it with a Thai banking app instead.
Sometimes. Cross-border links connect PromptPay to schemes such as Singapore's PayNow, but coverage depends on the visitor's bank and country. Keep a second payment route rather than assuming every foreign phone can pay.
Check your own bank notification or balance. A payment slip on the customer's screen is a screenshot, and forged slips are a routine scam - the customer's phone is evidence of nothing on its own.
About a tenth of the reading distance, so roughly 10 cm for a code read from a metre away. PromptPay payloads are short and print small well, so use the margin for size rather than trimming the code.
Yes, and a PromptPay code tolerates it better than most payment codes because the payload is short and the pattern coarse. Keep the logo under roughly a fifth of the width, raise the error correction level, and test the printed proof with a bank app.
Keep Exploring
Pages that pick up where this one leaves off - the same setting, the same kind of code, or the next thing worth deciding.
PayPal QR Code
Take a payment from a printed code by sending the scan to your PayPal.me link.
Pix QR Code
Encode the Pix Copia e Cola string your bank issued as a code you can style and print.
Bitcoin QR Code
Turn a Bitcoin address into a code any wallet app can scan, with an optional amount.
Restaurant Menus
Table cards and takeaway packaging that open the current menu in one scan - update a price and every table shows it, with nothing reprinted.
Retail Stores
Product details, stock and review links on shelf labels, shop windows and checkout signs.
UPI QR Code
Encode your UPI ID as a code any Indian payment app can scan, styled and print-ready.
Why KoloQR?
- Create QR codes for websites, menus, Wi-Fi, PDFs, and business cards
- Customize colors, logos, and unique shapes
- Download high-quality PNG and SVG files
- Built for both print and digital
