Payments infrastructure for platforms in Asia
Accept cards, Apple Pay, Google Pay and local wallets with one integration. apay routes every payment to the best processor or partner bank, runs 3‑D Secure and tokenisation, and tells your server what happened with a signed webhook.
This checkout is live. Pay it with test card 4242 4242 4242 4242, any future date, any CVC, and watch the webhook arrive.
Secured by apay · 3‑D Secure · PCI DSS SAQ A
Everything you need to get paid, on one platform
apay is a payment switch: your app talks to one API and one checkout, and apay handles processors, banks, wallets, 3‑D Secure, vaulting and reconciliation behind it. Switch processors on in the dashboard; nothing changes in your code.
Cards, done properly
Visa, Mastercard, American Express, JCB and UnionPay with automatic or manual capture, partial refunds, disputes and 3‑D Secure decided per payment.
Take a card paymentApple Pay and Google Pay
Wallet buttons on web and in‑app. Certificates, domain verification and token decryption handled by apay, so a card added to the phone works at once.
Set up walletsLocal methods and routing
PayNow, FPS, GCash, GrabPay, UPI and bank transfers through partner processors, routed by country, currency and amount, with automatic retry on a second processor.
Configure routingCreate. Confirm. Verify.
Your server talks to apay twice: once to open a payment, once when the webhook lands. Card entry, wallets and 3‑D Secure happen inside the checkout, so card data never touches your page or your server.
-
1
Create the payment on your server
Post the amount and currency with your secret key. You get back a
client_secretfor the browser.# server POST /api/payments api-key: sk_… { "amount": 2999, "currency": "SGD", "authentication_type": "three_ds" } → "status": "requires_payment_method", "client_secret": "pay_…_secret_…"
-
2
Confirm it in the browser
Mount the checkout with the
client_secret. The customer pays with a card or a wallet; a 3‑D Secure challenge appears only when you ask for one.// browser const hyper = Hyper(publishableKey); const widgets = hyper.widgets({ clientSecret }); widgets.create("payment", { wallets: { applePay: "auto", googlePay: "auto" } }) .mount("#checkout"); await hyper.confirmPayment({ widgets, confirmParams: { return_url } });
-
3
Verify the webhook, then fulfil
apay signs every event with HMAC‑SHA512 over the raw body. Check the signature, read the status, ship the order.
# your endpoint POST https://shop.example/webhook x-webhook-signature-512: 3f9a… { "event_type": "payment_succeeded", "content": { "object": { "payment_id": "pay_…", "status": "succeeded" } } }
Integrate in an afternoon, not a quarter
Create a payment from your server, mount the checkout in the browser, listen for the webhook. The API is documented, versioned and portable, with predictable objects and idempotent requests, so there is nothing exotic to learn and nothing to unwind later.
# create a payment (server side) curl https://apay.to/api/payments \ -H "api-key: $APAY_SECRET_KEY" \ -H "Content-Type: application/json" \ -d '{ "amount": 2999, "currency": "SGD", "customer_id": "cus_123", "capture_method": "automatic", "authentication_type": "three_ds", "return_url": "https://shop.example/thanks" }' # → { "payment_id": "pay_…", # "client_secret": "pay_…_secret_…" }
// server: create a payment, return the client_secret const r = await fetch("https://apay.to/api/payments", { method: "POST", headers: { "api-key": process.env.APAY_SECRET_KEY, "Content-Type": "application/json" }, body: JSON.stringify({ amount: 2999, currency: "SGD", customer_id: "cus_123", capture_method: "automatic" }) }); const { client_secret } = await r.json();
<!-- browser: mount the checkout --> <script src="https://apay.to/web/0.133.0/v1/HyperLoader.js"></script> <div id="checkout"></div> <script> const hyper = Hyper("pk_snd_…"); const widgets = hyper.widgets({ clientSecret }); widgets.create("payment", { layout: "tabs", wallets: { applePay: "auto", googlePay: "auto" } }).mount("#checkout"); await hyper.confirmPayment({ widgets, redirect: "if_required" }); </script>
Every way your customers already pay
One checkout shows the right methods for each customer, filtered by country, currency and amount. Add a market by switching on a processor or partner bank; the checkout updates itself.
Bring your licence. We bring the platform.
apay connects licensed banks and processors in Asia and the CIS to platforms that need modern payments. Partners plug in through one connector contract and get a merchant pipeline, a hosted checkout and an operations dashboard on day one.
Acquiring & wallets
Card acquiring, Apple Pay and Google Pay tokenisation and local schemes exposed through the apay API.
Virtual accounts & payouts
Collection accounts and disbursements for marketplaces and wallets, reconciled automatically.
Cards‑as‑a‑service
Instant virtual cards for platform users, provisioned to Apple Wallet and Google Wallet through the partner's issuing processor.
Start a proof of concept this week
Get sandbox keys, run the demo checkout on your phone, and see payments and webhooks flow end to end. When you are ready, we switch on the processor or bank for your market.
- Sandbox keys and dashboard access the same day
- Test cards for success, decline and 3‑D Secure
- Signed webhooks with a sample receiver
- Wallets on real processor sandboxes
- Two‑week PoC playbook with success criteria