Create the order
Create a one-time order from your server with the API, then share its hosted payment link.
Order + exact amountStart with one USDC or USDT address you already control. Customers pay through a clear hosted checkout, funds go directly to your wallet, and every payment arrives already reconciled.
You remain responsible for your own tax, sanctions, and customer due-diligence obligations.
0x71E4…9A20One product, two doors
Checkout brings the payment in.Reconciliation closes it out.From order to books
No second system and no spreadsheet handoff after checkout.
Create a one-time order from your server with the API, then share its hosted payment link.
Order + exact amountThey scan the QR code or connect their own wallet, review the exact transfer, and sign it themselves.
QR or connect walletFunds land in your wallet. MainPay confirms the transfer, sends a signed webhook, and matches the books.
Paid + reconciledThe non-custodial wedge
Connect a public receiving address. Your customer signs from their wallet and the stablecoins settle directly to yours. MainPay observes and records the transfer; it never holds keys or moves funds.
No pooled balance, payout wait, or MainPay-controlled account.
No MainPay custody or KYC onboarding step sits between your wallet and a test checkout.
Stablecoin transfers settle on-chain. Refunds are initiated by you from your own wallet—MainPay cannot pull funds back.
The built-in advantage
Every MainPay order carries its customer, amount, wallet, transaction, and reference into one operational record. Revenue is matched as it arrives, exceptions are flagged, and accountant-ready CSV exports support QuickBooks or Xero.
USDC · Base$4,800.00 ReconciledUSDT · TRON$2,500.00 ReconciledUSDC · Ethereum$1,175.00 ReconciledBuilt for developers
Keep your API key on the server, return only the hosted URL, then fulfill from a verified t=,v1= webhook.
const response = await fetch(
"https://api.mainpay.com/v1/invoices",
{
method: "POST",
headers: {
"X-API-Key": process.env.MAINPAY_API_KEY,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json"
},
body: JSON.stringify({
fiat_amount: "25.00",
asset: "USDC",
network: "base",
receiving_account_id: process.env.MAINPAY_WALLET_ID,
customer_name: "user_42",
client_reference_id: "user_42"
})
}
);
const order = await response.json();
// Return only this public URL to your browser.
return order.hosted_url;Honest scope
MainPay supports one-time orders and prepaid credit top-ups today. Your app owns and grants the credit balance after a verified paid event.
Create an order, collect one wallet-signed transfer, and fulfill from the paid webhook.
Use a one-time credit_topup order, then grant credits in your own database.
No auto-charge subscriptions. A non-custodial checkout cannot pull the next payment from a customer's wallet.
Accept, match, close