Accepting crypto on your site: one deposit address per order, and why it matters
How per-order deposit addresses work for BTC, USDT, USDC and other coins, the mistakes that lose customer funds, and how to confirm a payment safely.
The simplest way to take crypto is to post one wallet address and ask customers to send money to it. It works until two customers pay the same amount on the same day and you cannot tell whose payment is whose. A per-order deposit address solves that: every order gets its own address, so a payment arriving there can only belong to that order.
How it works
- Your server creates an order for a named coin on a named chain, for example
polygon/usdcortrc20/usdt, with the amount and your receiving address. - The customer is shown a fresh deposit address, ideally as a QR code, together with the exact amount.
- When the deposit confirms on-chain, the funds are forwarded to your address and your callback is called.
{"ticker": "trc20/usdt","amount": 25,"wallet": "T…your address","callbackUrl": "https://shop.tld/hook","reference": "order-1042"}
The three mistakes that lose money
- Wrong network. USDT on TRON and USDT on Ethereum are different assets. Sent to an address on the wrong chain, the funds are gone. Show the network next to the address, in words.
- Reusing an address. A second payment to an address whose order already settled is not credited automatically. Create a new order for every payment.
- Sending less. The order expects the amount shown. Ask customers to send it in one transfer, and remind them that exchanges often take a withdrawal fee from the amount.
Confirming before you deliver
Treat the callback as a nudge, not a receipt. When it arrives, fetch the order with GET /v1/orders/:id, check that the status is paid, then deliver. Make the handler safe to run twice, because callbacks can repeat.
Which coins
BTC, ETH, XMR, SOL, TRX, LTC, and stablecoins such as USDC on Polygon and USDT on TRON and Ethereum. Pick the few your customers actually hold: a checkout with thirty coins is harder to use than one with four. Full request and response examples are in the crypto section of the docs.
No application, no reserve. Money settles to your own wallet.
