USDC invoices · Non-custodial · Verified onchain
Know exactly which invoice got paid.
Create a USDC invoice, send a payment link, and let Payrail match the onchain payment to the right invoice. Funds land in your wallet, not ours.
No holding account. No matching bank statements by hand.
Getting paid is easy.
Knowing which invoice got paid is not.
A USDC transfer carries an amount and a sender, and nothing else. Try matching one yourself: that step is the whole product.
Tap the transfer you think is Acme's.
Send the link.
Receive USDC. Marked paid.
‹ Invoices
Pay INV-0231
Payment progress
- 1Approve USDCThe wallet grants the contract an allowance for exactly this amount.
- 2pay(invoiceId)One call. USDC goes straight to the merchant; the contract keeps nothing.
- 3Verify onchainThe backend reads the receipt and the PaymentReceived event, never the browser's claim.
- 4Marked PAIDID, merchant and amount match. The invoice closes itself.
Three steps.
One transaction.
You write the invoice. The buyer pays from their wallet. Payrail matches the ID, merchant and amount from the onchain event, then closes the invoice without you touching anything.
Create your first invoice- 01POST /api/invoices
INVOICE description + amount · unique onchain ID
- 02/pay/:id
LINK one URL · any wallet
- 03PaymentReceived
PAID matched onchain · history + CSV
Verified from the chain,
not from anyone's word.
Screenshots can be faked. Bank statements can be misread. An onchain event can be neither, and it is the only source of truth Payrail trusts.
Stop matching statements.
Start sending links.
- pay()1transactionFrom the buyer: approve USDC, then pay. Nothing else to do.
- custody0USDC heldNot by the contract, not by us. Funds land in your wallet in the same block.
- txHash · indexer2ways to verifyThe receipt from the browser, and an indexer watching the chain as the safety net.
- Free · Arc · Robinhood ChainGet startedConnect a wallet. No account, no KYC to send a link.
