01 / 04
Paid to your wallet, by design
The deposit address is computed from your payout wallet and the fees. Change either one and it becomes a different address. Nobody can redirect a payment.
Built forgame top up stores
Every invoice gets its own deposit address that can only pay out to you. Your customer pays the network fee, so you never need to hold BNB.
Total to send
25.05
USDT · BEP20
Deposit address · BEP20 only
0x7a3E91cB04d5e1F0a8C2b6D9e47F3c5A29F4c91F
BEP20 only
Paid straight to Qamar Topups. Mals Pay never holds it.
01 / 04
Your customer scans and pays
One address for this invoice only. Any wallet or exchange that sends USDT on BNB Smart Chain works.
USDT · BEP20
Examples of wallets and exchanges that send BEP20 USDT. Not affiliated with Mals Pay.
01 / 04
The deposit address is computed from your payout wallet and the fees. Change either one and it becomes a different address. Nobody can redirect a payment.
02 / 04
Our relayer pays the gas and takes 0.05 USDT back inside the same transaction. Your customers send USDT, you receive USDT.
03 / 04
No exact amounts to match. Customers can pay from any wallet or exchange, in one payment or several, and it all counts.
04 / 04
Idempotency keys on every write, signed webhooks with timestamps, and invoice states you can trust after a crash or a double click.
Your customer pays. The contract splits it. Your wallet receives it. Nobody holds it in between.
Send the amount and your order id. You get a deposit address and a checkout link.
POST /v1/invoices01
curl https://api.pay.mals.app/v1/invoices \
-H "Authorization: Bearer sk_test_…" \
-H "Idempotency-Key: order-4817" \
-d '{"amount": "25", "external_ref": "order-4817"}'A hosted page with the QR code, the exact total, a countdown and live status. Works on any phone.
201 Created → redirect02
{
"id": "inv_01a0ce8407a2736f…",
"status": "pending",
"total": "25.05",
"deposit_address": "0x7a3E91cB04d5…29F4c91F",
"checkout_url": "https://pay.mals.app/i/inv_01a0…"
}
// send the customer there
res.redirect(invoice.checkout_url);invoice.confirmed arrives signed with your secret. Ship the order. The money is already on its way to your wallet.
Webhook-Signature03
// invoice.confirmed → ship the order
const [t, v1] = parse(req.headers["webhook-signature"]);
const ok = hmacSha256(secret, t + "." + rawBody) === v1
&& Date.now() / 1000 - t < 300;The rules live in a small smart contract that nobody can upgrade. Our key can only choose where our own fee goes, never your share. The code will be public and verified on BscScan at launch.
The payout wallet is part of the deposit address itself.
Platform fee is capped at 2% and the network fee at 0.50 USDT, in the contract.
Anyone can trigger the split, including you. If our wallets ever fail, their share goes to you instead.
Wallet changes will need 2FA, an email link and a 24 hour wait, with a notice to your old email. It ships with the merchant dashboard.
Plus a 0.05 USDT network fee per payment, paid by your customer. No setup fee, no withdrawal fee. Invoices start at 1 USDT.
Free
Pro
1%per payment
No monthly fee
0.5%per payment
29 USDT per month
No. Payments go to an address that can only send to your payout wallet, and the split to you happens in the same transaction that moves the funds.
No. Our relayer pays the gas. It is covered by the 0.05 USDT network fee your customer pays, or that you pay if you choose to absorb it.
That works. Any USDT (BEP20) sent to the invoice address counts, in one transfer or several. Make sure the customer picks BNB Smart Chain (BEP20) as the network.
One hour by default, and you can set anything from 10 minutes to 24 hours. If a payment arrives after that, within 30 days, it is still forwarded to your wallet and you get an invoice.late_paid webhook.
You send it back from your own wallet, like any transfer. Mals Pay never holds the money, so there is nothing for us to reverse. The invoice keeps the sender's address to help you.
Not to start. Accounts with high volume may be asked to verify, and accounts used for fraud get frozen. A frozen account stops creating invoices; money already paid still goes to its wallet.
Up to 1% short still counts as paid (you can set 0 to 5%). If more is missing, checkout asks for the rest. Anything extra goes to you and is reported in the webhook.
The contract is designed so the same deposit address can be recreated on other EVM networks, which makes tokens sent there recoverable to your wallet. Send us the transaction and we will handle it.
A payment shows as detected within seconds and confirmed after 30 blocks, about 15 seconds. Funds reach your wallet shortly after.
Yes. Test keys use BNB Smart Chain testnet with test USDT and the same API as live keys.
With the merchant dashboard, changes will need 2FA plus an email confirmation and a 24 hour wait, with a notice to your old email. And already created invoices can never change: the wallet is part of their address.
We are onboarding our first merchants now. Leave your email and we will send your test keys.
Get early access