Accept stablecoin payments.
Your books close themselves.
Every payment arrives matched and ready for month-end review. Connect one USDC or USDT address you control and integrate in minutes.
Just getting paid in stablecoin? Keep a free income ledger →One operational layer for
The built-in advantage
Not just a checkout.
Already reconciled.
Each payment keeps its customer, order or invoice, exact amount, wallet, and transaction together. Exceptions are flagged, then accountant-ready CSV exports support QuickBooks or Xero.
MainPay connects the payment to the books—without touching the funds.
Explore reconciliationOne clean payment loop
From order to wallet
to closed books.
Create a one-time order
Create it from your server, then share the hosted payment link. Your API key stays private.
Let the customer pay
They scan the QR code or connect their own wallet, review the exact transfer, and sign it themselves.
Fulfill and close
MainPay confirms the transfer, sends a signed webhook, and reconciles the payment automatically.
Where MainPay is different
The books close behind the payment.
Revenue is matched to its customer and order as it arrives. Your team handles only the exceptions, then exports a clean, verifiable close record.
1,995.00 / 2,000.00 USDC received
850.00 USDT received on TRON
For developers
Accept a payment in ~5 lines.
Create a hosted checkout from your server with the Node SDK—non-custodial, funds settle straight to your own wallet. Test mode is free; go live when you're ready.
import MainPay from "@mainpay/node";
const mainpay = new MainPay(process.env.MAINPAY_API_KEY);
// Hosted checkout — funds settle to your own wallet.
const order = await mainpay.orders.create({
fiat_amount: "4800.00",
asset: "USDC",
network: "base",
receiving_account_id: process.env.MAINPAY_WALLET_ID,
client_reference_id: "INV-042",
});
return Response.redirect(order.hosted_url);Designed around control
Your money never enters MainPay.
Customers pay the receiving addresses you control.
MainPay only needs public wallet addresses to monitor payments.
Every record links back to its source transaction on-chain.
Already getting paid?
We reconcile
that too.
Already receiving USDC or USDT outside MainPay? Connect the public wallet addresses you control, match existing transfers to customers and invoices, and give your accountant a clean month-end trail.
Explore the founding reconciliation pilot or build with the API.