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.

1 Content
https://
No registration required Unlimited QR codes No watermark Free high-resolution downloads
2 Design
Shape
Pattern
Eyes
3 Preview
Copied!

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 KoloQR designer with a QR code being styled - shape, colors and center logo

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
A phone scanning a printed QR code to test it before the print run

Where PromptPay QR Codes Are Used

PromptPay reached the parts of Thai commerce a card terminal never did, and the printed code is how:

Street Food Carts and Night Markets

A laminated code clipped to the cart takes payment from a customer with no cash, in the ten seconds before the queue moves.

Counter Standees in Shops and Cafés

An acrylic tent card beside the till, with the shop's name printed under the code so the customer can check it against their app.

Delivery Riders and Home Drop-Offs

A code on the bag settles the bill at the door with no change to carry and no terminal to charge.

Salons, Massage Shops and Clinics

A code on the price card, paid while the next customer is already being seated.

Temple and Community Donations

A printed code on the donation box reaches the visitor who stopped carrying notes, which is now most of them.

Freelance Invoices and Rent

A code on the invoice removes the step where someone retypes a thirteen-digit ID and drops a digit.

How to Create a PromptPay QR Code

From bank app to printed standee in four steps:

Generate QR Code
  1. 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. 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. 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. 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.

The KoloQR generator with a QR code being designed and ready to download

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 Code

Best 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.

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
Generate QR Code
A plain black QR code beside the same code restyled as a circle with brand colors