Payment intents.
One POST.
PromptPay QR, cash, bank transfer — wired into any Kasion app in five lines.
Drop-in payment service for SEA-first products. Generates real EMVCo PromptPay QR payloads in-worker (no Stripe wrap, no PSP minimums), keeps a shared D1 ledger, exposes a CORS-clean JSON API on every kasion subdomain.
Four ways to take money
PromptPay QR
flagshipReal EMVCo QR payload generated in the worker (CRC16, no deps). Customer scans with any Thai banking app — exact amount baked in.
Cash
Pickup or pay-on-delivery. Status stays pending until admin marks it paid.
Bank transfer
Returns the merchant account block. Slip-upload + manual confirm via /mark-paid.
Card
soonStripe / Omise adapter on the roadmap. Today returns a "pick another method" placeholder.
JSON in, JSON out
Three endpoints. No SDK. CORS allow-list covers the four kasion subdomains + localhost.
{
"appId": "rachada-restaurant",
"orderRef": "o_abc123",
"amount": 320,
"method": "promptpay",
"metadata": { "items": 4 }
}
{
"id": "pay_…",
"status": "pending",
"amount": 320,
"method": "promptpay",
"instructions": {
"promptpayId": "0810000001",
"qrPayload": "00020101021229370016A000000677010111…"
}
}
{ "txnId": "BANK-REF-123" } // optional
Built for SEA-first founders
Most Thai PSPs gate at ฿2k–10k/mo + KYC. PromptPay QR rails are free at the bank level — this just generates the right payload.
Restaurant, AI app, mobile checkout — all post to /v1/charge with their own appId. One D1 query reconciles everything.
Cloudflare Workers + D1. ~50ms global p99 for create-intent. No cold starts, no servers.
Free during beta
Internal kasion-dev apps run on the shared infra.
Card rails, webhook fan-out, multi-tenant ledger separation.
Wire it into your app today
Live on https://pay.kasion.dev. CORS-allowed for Kasion subdomains. DM us for an external key.