Live · all channels operational

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.

19
channels, switch per project
8
retries, 1 min → 24 h
0
balances we hold
HP-8F3A2COPEN
APIYour server
HH Pay
QRBuyer wallet
→Creating payment+00:00s
your server → H Pay · idempotencyKey user_42:8f3a
00:00POST /api/v1/payments
bash — create a payment
$curl -X POST $HIVEPAY_URL/api/v1/payments \
-H "Authorization: Bearer $HIVEPAY_API_KEY" \
-d '{ "externalUserId": "user_42",
"provider": "KBZPay",
"packageId": "starter",
"idempotencyKey": "user_42:8f3a" }'
$
step 1 of 9

MMQR, 18 wallet, bank and card channels, crypto and bank transfer

A channel that goes down is a switch, not a rebuild.
QRMMQRKPKBZ PayAPAYA PayWPWave PayCPCB PayCPCitizens PayMPMytel PaySSPSai Sai PayOOnePayMMPitesanUPUAB PayMPMPT PayODOK DollarKDPKBZ Direct PayMCMPU CardMBMAB BankVVisaMMastercardJJCB₮USDT (TRC-20)BTBank transfer

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.

1

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 }
2

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": "…" }
3

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

Any stack · fastest

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

Developers · HTTP, any language

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| ≤ 300s
Integration guide →

Let an AI agent do it

Claude Code, Cursor, ChatGPT

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.txt
Open the spec →

No code with n8n

Operators · importable workflows

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 →
Hosted top-up

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.

Priced by you, never by the pageThe session names a package; your catalogue sets the price.
Switch wallets without a new linkA failed KBZ attempt retries on Wave; the abandoned one closes cleanly.
Double-taps don't double-chargeThe same choice replays the same payment.
Bank slips, reviewed by a personThe buyer uploads the transfer right there.
Your branding, your users' namesThe page says whose account is being topped up.
Or no link at allSwitch on the public Top Up page and buyers find you themselves.
Hive DJvia H Pay
Topping up
user_42
Choose a package
Pay with a wallet, bank or card
Pay 5,000 MMK with KBZ Pay
A double-tap replays the same payment, never a second charge.
Same page, after dark

Most buyers top up at night on a phone. The checkout follows the device theme — same layout, same button positions, just inverted ink.

Built so a paid signal is never lost

Payments are money. The rules below are enforced in code, not in a runbook.

Retry schedule · 8 attempts over 2 days

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.

Late success still wins. A gateway that confirms after a timeout flips the payment to paid and tells you — money moved.
Written in one transaction. A paid payment cannot exist without a queued webhook beside it.
Retries back off 1m → 24h over eight attempts; replay any event from the portal afterwards.
A failing endpoint is paused, not abandoned — deliveries are held until it's fixed.
Idempotent everywhere. Same key, same payment. Same reference on every retry. Atomic status guards on callbacks.
Several endpoints per project, each with its own secret and event filter — your site, your n8n, your Slack.
Test events can't be mistaken for real ones: test: true, livemode: false, an HP-TEST- reference.
A developer portal where your team sees every API call and delivery, with the payload and your server's reply.

Questions people ask first

Does H Pay hold my users' money or credits?

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.

Which wallets and banks work?

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.

What happens if my server is down when a payment completes?

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.

Can I try it without real money?

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.

I don't have developers. Can I still use it?

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.