Every Myanmar wallet, one webhook.
MMQR, mobile wallets, cards, USDT and bank transfers behind a single API. When money lands, your server hears it once — signed, retried, replayable. Your users’ balances stay in your database; H Pay never holds them.
MMQR, 18 wallet, bank and card channels, crypto and bank transfer
A channel that goes down is a switch, not a rebuild.Three calls, no balances to reconcile
You name what’s being bought; H Pay prices it from your catalogue, takes the money, and hands you one fact — paid — that you can trust and act on once.
Create a payment
From your server, with your user's id and a package. You get back what to show: a QR, a hosted page, or bank details.
POST /api/v1/payments
{ "externalUserId": "user_42",
"provider": "KBZPay",
"packageId": "starter",
"idempotencyKey": "user_42:8f3a" }
→ 201 { "reference": "HP-…",
"kind": "QR", "qrCode": "0002…",
"amountMMK": 5000,
"creditAmount": 1100 }The buyer pays
They scan a QR in their wallet app, tap through the bank's secure page, pay a USDT invoice, or transfer and upload a slip. Your page polls; the buyer sees it flip.
GET /api/v1/payments/HP-…
{ "status": "PENDING" } …
{ "status": "PAID",
"paidAt": "2026-09-20T08:14:03Z",
"gatewayTransactionId": "…" }You get told, once
A signed payment.paid reaches your endpoint. Verify the HMAC, credit the user, dedupe on the reference. Retries and replays carry the same reference.
POST https://yoursite.com/webhooks
X-HivePay-Signature: t=…,v1=…
{ "event": "payment.paid",
"livemode": true,
"data": { "reference": "HP-…",
"externalUserId": "user_42",
"creditAmount": 1100 } }Integrate the way your team works
Four paths to the same webhook. Pick by who’s doing the work, not by what H Pay prefers.
Hosted top-up link
Mint a session from your server, send the buyer to H Pay's page, get them back when it's paid. No checkout UI to build.
POST /api/v1/checkout-sessions
{ "externalUserId": "user_42",
"returnUrl": "https://…/wallet" }
→ { "url": "https://pay…/topup/cs_…" }See the page →Your own checkout
Plain JSON over HTTPS. Signature verification is ten lines in Node, PHP or Python — all three are in the guide.
expected = HMAC_SHA256( secret, t + "." + rawBody) // compare, check |now − t| ≤ 300sIntegration guide →
Let an AI agent do it
A spec written for agents — exact contracts, MUST rules, eight acceptance tests — served from this domain so the agent can fetch it itself.
Integrate H Pay top-ups into this project following https://pay…/llms.txtOpen the spec →
No code with n8n
Three workflows: mint a top-up link, receive the webhook, credit the user. The receiver verifies by asking H Pay, so no crypto node is needed.
Webhook → Is it PAID? → Skip if seen → Credit the user (yours)n8n guide →
A top-up page your users already understand.
Mint a session from your server, send the buyer to H Pay, and get them back with the result. On a phone, channels that offer an in-app or hosted flow open that way rather than showing a QR the buyer can’t scan from the same screen.

user_42
Every state of the hosted page
One card, eight screens: choose, QR wait, hosted redirect, bank slip, slip received, paid, expired, and the card billing step. Nothing ever moves between states — only the middle of the card changes.

for 1,100 HCoin · scan with KBZ Pay
HP-8F3A2C · QR expires in 12:47

for 6,000 HCoin · with Wave Pay
HP-4B19E7

transfer to KBZ Bank

HP-71C0AA

Payment confirmed
5,000 MMK received. Hive DJ has been told to add 1,100 HCoin to your account.
Taking you back in 6s · HP-8F3A2C

This top-up link has expired
Go back to hivedjs.com and start the top-up again — nothing was charged.

Pay with Visa
The card network needs a billing address.
Choose a different way to pay

Which website are you topping up?
Pick it, enter your account id, and pay with your wallet, bank, card or USDT.
Have a top-up link? Just open it — you’ll land on the right page.
Most buyers top up at night on a phone. The checkout follows the device theme — same layout, same button positions, just inverted ink.

user_42

for 1,100 HCoin · scan with KBZ Pay
HP-8F3A2C · expires in 12:47

Payment confirmed
5,000 MMK received. Hive DJ has been told to add 1,100 HCoin to your account.
Taking you back in 6s · HP-8F3A2C
Built so a paid signal is never lost
Payments are money. The rules below are enforced in code, not in a runbook.
After 10 consecutive failures spanning an hour the endpoint is paused — deliveries are held, never dropped, and released with a fresh 8-attempt budget when you resume it.
Questions people ask first
No. H Pay collects a payment and tells you it's confirmed. Your users' balances, coins or subscriptions live in your own database and are credited by your code when the webhook arrives. That's also why refunds of credits are yours to decide.
MMQR and direct wallet channels — KBZ Pay, AYA Pay, Wave Pay, CB Pay and more — plus MPU, Visa, Mastercard and JCB cards, USDT (TRC-20), and manual bank or wallet transfers with a slip that a person reviews. Which of these your project offers is set per project.
The webhook is retried with backoff for over two days. If your endpoint keeps failing it's paused and everything is held, not dropped. When you're back, you resume it — or replay any event from the portal. Every retry carries the same reference, so your side stays idempotent.
Yes. A test-mode instance runs the whole pipeline with a simulated gateway: create a payment, fire a callback, receive your webhook with livemode: false. Bank-slip payments can be exercised end to end, including the review step.
Yes. Send buyers to a hosted top-up link and receive the result in n8n with the importable workflows, or hand the integration spec to an AI coding agent. The developer portal shows you what happened either way.
Start collecting
Get a project registered — you’ll receive an API key and a webhook secret, and your first test payment can go through today.