Thailand · PromptPay · Thai QR Payment
PromptPay API for businesses accepting payments in Thailand
A PromptPay API is a programmatic way to create a Thai QR Payment request and be told when it is paid. PromptPay is Thailand's account-to-account rail, launched in 2016 and settled in THB. Boldrails provides that API, the completion webhook and the payout side. Thailand is on request.
- Collection and payout
- THB settlement
- Server-side completion webhook
- KYB in 3 to 14 days
Onboarding takes 3 to 14 days, depending on your case.
Overview
What is the PromptPay API?
A PromptPay API is a programmatic way to create a Thai QR Payment request and find out when it has been paid. PromptPay is Thailand's account-to-account rail. The Bank of Thailand says it launched in 2016 as national payment infrastructure. It moves money in THB only. Boldrails provides that API, plus the completion webhook behind it and the THB payout side. Thailand is on request, and we confirm the route for your business at onboarding.
Payers are identified by a proxy instead of an account number. The Bank of Thailand lists five: citizen ID, mobile number, another identification number, bank account number and e-Wallet ID. All of it runs on shared national infrastructure the Bank of Thailand oversees. Thai QR Payment is the QR service inside that family. That is what your customer scans.
So a PromptPay API is really two halves: the QR your payer sees, and the server-side confirmation your finance team can reconcile. Almost all of the engineering sits in the second half.
Sources: Bank of Thailand, PromptPay
Routes
Is there an official PromptPay API for merchants?
No. PromptPay has no open public merchant API you can sign up for and call. What you find when you search for one falls into three routes, and only one of them tells you that you got paid.
| Route | What it gives you | What it does not give you |
|---|---|---|
| Open-source QR library (free, npm or PHP) | An EMVCo merchant-presented QR payload you can render anywhere, in a few lines of code. | No confirmation, no reconciliation, no webhook, no settlement and no refund path. The payload carries your PromptPay ID in clear, so every payer sees the phone number, national ID or e-Wallet ID behind it. |
| A Thai bank's own API | A real API, bound to that bank's own accounts, and mostly built for outbound transfers and corporate cash management. | Requires a Thai bank account at that bank. It is a disbursement rail, not a general collection API. |
| A licensed payment gateway | Collection, completion webhook, reconciliation, settlement and payouts under one integration. | Requires KYB and an onboarding review before you can go live. |
Two more things worth knowing. The PromptPay QR follows the EMVCo merchant-presented QR specification, with a national standard set by the Bank of Thailand. That is why any Thai bank app can read it. And the amount field in that payload is optional, so a static QR built by a free library will not tell your system what the payer actually sent. Gateways such as Omise/Opn and Stripe sit in the third route. So does Boldrails, with collection and bulk THB payout on one integration.

Sources: promptpay-qr, EMVCo payload reference; Krungsri, PromptPay API
Integration
How to accept PromptPay payments with Boldrails
Six steps, and the code is the short part. This is how a Thai QR Payment API integration runs with us.
- 1
Apply and complete KYB
Send us your company documents, your vertical and your processing history. Onboarding takes 3 to 14 days, depending on your case.
- 2
Get sandbox keys
You get test credentials before production. Run the whole flow in test mode: create a request, render the QR, fire the callback, then check what your system does with a duplicate.
- 3
Create a THB payment request
Call our API with the amount in THB and your own order reference. We return the Thai QR Payment payload for that request.
- 4
Render the QR
Show it in checkout, or hand it to the payer in your app. Any Thai bank app reads it, so your customer installs nothing.
- 5
Take the completion callback
We post the result to your endpoint. Match it to your order reference and mark the order paid. The webhook, not the QR, is the source of truth.
- 6
Go live and reconcile
Switch to live keys, then watch charge status and settlement in the dashboard. Our REST API works from PHP, Node, Python or anything that speaks HTTPS.
Most PromptPay API callback questions come down to one rule: register your endpoint once, verify the signature, and treat that event as final. The same integration also carries bulk THB payouts. Money you collect and money you send out share one set of credentials.
Provider comparison
PromptPay refunds, expiry and limits differ by provider
Nobody publishes this side by side, so here it is. Every populated cell is what that provider publishes; "not published" means the provider publishes nothing, not that the capability is missing.
PromptPay is one national rail, but refunds are not. On the same rail, one provider publishes that PromptPay charges cannot be voided or refunded, another supports full and partial refunds but only when the payer supplies their originating bank account number, and a third lists refunds as not available. Refund capability on PromptPay is a provider decision, not a property of the rail.
| Capability | Omise/Opn | Stripe | Xendit | Krungsri (bank) | Boldrails |
|---|---|---|---|---|---|
| Direction | Collection | Collection | Collection | Payout, direct credit | Collection and payout |
| Refunds | Cannot be voided or refunded | Full and partial, payer must supply the originating bank account | Listed as not available | Not applicable, outbound | Confirmed per account at onboarding |
| Published min amount | THB 20.00 | not published | not published | not published | not published |
| Published max amount | THB 150,000.00 per charge | not published | not published | THB 2,000,000 per transaction | not published |
| Published QR expiry | 24 hours by default, configurable, capped at 24 hours | not published | not published | Not applicable | not published |
| Settlement timing | not published | not published | Instant in Thailand | not published | Confirmed at onboarding |
| Disputes | not published | Documented as "not applicable" | not published | Not applicable | No card-style dispute mechanism on this rail |
| Foreign-entity eligibility | Thailand, enablement by request | Thailand-based accounts, US accounts in private preview | not published | Requires an account at that bank | Route confirmed per business at onboarding |
Every cell above was read from that provider's own published documentation on 1 August 2026. And providers change these terms without notice. Check the refund path against the current documentation before you write a line of code.
PromptPay carries no card-style chargeback mechanism, because the payer authorises the payment inside their own bank app. Exceptional cases still get reviewed by the provider. For merchants carrying card-dispute exposure, that is the reason to run a QR rail next to cards.
Eligibility
Can a foreign company accept PromptPay?
Ask this before you plan the build. Every publicly documented route presupposes a Thai-registered entity, a Thai bank account, or both. One global provider documents eligibility as Thailand-based accounts, with US-based accounts in private preview. A Thai bank's PromptPay API requires an account at that bank.
So what does the law actually say? Payment services in Thailand are regulated under the Payment System Act B.E. 2560 (2017). Accepting electronic payment for and on behalf of others is a designated payment service under that Act, licensed by the Minister of Finance on the Bank of Thailand's advice and supervised by the Bank of Thailand. Operating a designated payment system is restricted to licensed or registered juristic persons. That restriction is about who may run the system, not a ban on foreign ownership. The practical constraint on a foreign merchant is the entity and bank relationship each route asks for.
Boldrails is a licensed principal and holds the necessary licences required in the markets we serve. Thailand is on request. Tell us your entity, your volume and your vertical, and we confirm the route for your business at onboarding.
This Thailand eligibility and regulatory framing reflects Bank of Thailand materials and provider documentation as of 1 August 2026.

Pricing
What does it cost to accept PromptPay?
Two different costs get mixed up here, so we separate them. The Bank of Thailand publishes a standard transfer fee schedule for consumers sending money. That is not a merchant rate. Merchant acceptance pricing is a per-transaction rate set by each provider. In Thailand it is almost always quoted privately.
| Cost | Who pays it | Amount band | Fee |
|---|---|---|---|
| Bank of Thailand standard transfer fee | The consumer sending the transfer | Up to THB 5,000 | Free |
| Bank of Thailand standard transfer fee | The consumer sending the transfer | THB 5,000 to 30,000 | Under THB 2 |
| Bank of Thailand standard transfer fee | The consumer sending the transfer | THB 30,000 to 100,000 | Under THB 5 |
| Bank of Thailand standard transfer fee | The consumer sending the transfer | Above THB 100,000 | Under THB 10 |
| Merchant acceptance rate (MDR) | The merchant | Per transaction | Set by each provider, quoted privately |
| Published payout fee, one provider | The merchant | Up to THB 2,000,000 | THB 20 per transfer |
| Published payout fee, one provider | The merchant | Above THB 2,000,000 | THB 150 per transfer |
The Bank of Thailand notes on that same fee page that most banks have waived the consumer fees since 2018. Thai pricing is customarily quoted exclusive of 7% VAT. Payout fees are charged separately from acceptance. We quote your THB rate once we have seen your volume, your vertical and your refund pattern.
Who it's for
Who we serve in Thailand
We build for merchants that mainstream Thai onboarding tends to turn away, and for platforms moving THB in both directions.
E-commerce stores and marketplaces
Brokers and trading platforms
Crypto businesses and exchanges
Subscription and digital-goods platforms
Platforms running bulk THB payouts
High-volume merchants declined elsewhere
Thailand is on request. We confirm the route for your business at onboarding. We would rather say that plainly than list a market we cannot serve you in. PromptPay sits alongside our other mobile money and wallet rails, and the same credentials carry bulk THB payouts. Wallet money moves differently from bank money, so the TrueMoney wallet route sits on its own page. Holding stablecoin balances and need THB out the other side? Our crypto-to-fiat settlement desk handles the conversion.
FAQ
PromptPay API questions
Reviewed by Claude Igrow, Payments Specialist. Last updated: 1 August 2026.