When your customer pays a crypto invoice from an exchange
Many people keep their crypto on an exchange, not in a wallet app. When they pay your invoice, they open the exchange's "Withdraw" screen and paste the address from the checkout. That works, but an exchange withdrawal has three traps a wallet payment does not: the network menu, the withdrawal fee and the memo field. This post shows what each one does to a payment with easyway, what the checkout already tells the customer, and what you can set on your side.
Trap 1: the network menu
An exchange asks which network to withdraw on, and the same coin is often offered on several. USDT alone is accepted on 7 networks here. The customer picks the network on the checkout first, and the checkout says: "Pick the network your wallet or exchange will send on. Sending on a different network loses the funds." A payment is only credited when it arrives on the network of the chosen coin. A BNB Smart Chain address looks exactly like an Ethereum, Polygon or Avalanche one (0x…), so an exchange will not stop the customer from choosing the wrong one. These are the networks and names to match:
| Network on the checkout | Coins | Memo or tag needed | Confirmations |
|---|---|---|---|
| TRON | USDT, TRX | No | 19 |
| BNB Smart Chain | USDT, BNB, USDC, FDUSD, CAKE, TWT | No | 15 |
| TON | USDT, GRAM, NOT, DOGS, CATI, HMSTR | Memo / comment | 1 |
| Ethereum | USDT, ETH, USDC, DAI, SHIB, PEPE, PYUSD, LINK, UNI, AAVE, ONDO, ENA, CRV, GRT, SKY, USDS | No | 12 |
| Bitcoin | BTC | No | 2 |
| Litecoin | LTC | No | 4 |
| Dogecoin | DOGE | No | 6 |
| XRP Ledger | XRP | Destination tag | 1 |
| Solana | SOL, USDT, USDC, BONK, WIF, RENDER, JUP, PYTH, JTO, RAY, W | No | 1 |
| Polygon | POL, USDT, USDC | No | 64 |
| Avalanche C-Chain | AVAX, USDT, USDC | No | 10 |
| Dash | DASH | No | 4 |
Exchanges label networks in their own words ("BEP20", "BSC", "TRC20"…). If your customers mostly pay from one exchange, check that it supports withdrawals on the networks you offer, and limit the invoice to those with allowed_assets (API docs). The full fee list per coin is on the pricing page.
Trap 2: the withdrawal fee comes off the amount
Some exchanges subtract their withdrawal fee from the amount the user types. The customer enters 50 USDT, the exchange keeps 1 USDT, and 49 USDT arrives. The checkout warns about this next to the amount: "The amount that ARRIVES must be … If you pay from an exchange, add its withdrawal fee on top."
If too little still arrives, nothing is lost. Your underpayment tolerance (Dashboard → Settings: 0 %, 0.5 %, 1 %, 2 %, 3 % or 5 %; 1 % by default) decides what happens. A payment short by less than the tolerance counts as paid. Anything shorter makes the invoice underpaid: the checkout shows "Partial payment received", how much is still owed and a "Send the remaining" amount, and you get an invoice.underpaid webhook. In the example above, 49 of 50 USDT is 2 % short, so with the default 1 % the customer is asked for 1 USDT more. The details and a handler you can copy are in handling underpaid and late payments. If you sell to people who mostly pay from exchanges, a 2 % or 3 % tolerance saves many small top-ups, at the cost of accepting slightly less now and then.
Sending too much is not a problem either. The extra is credited, and the checkout tells the customer it went to the seller and to contact you if they want it back.
Trap 3: the memo or destination tag
On TON and the XRP Ledger, every invoice is paid to one shared address, and the invoice is identified by a memo (TON) or a destination tag (XRP). Exchanges show this as an optional field called "Memo", "Tag", "Comment" or "Destination tag", and an optional field is easy to skip. The checkout marks it "(required)" and warns: "Without it we can't match the payment to your order and the funds may be lost." A transfer without it is not credited to any invoice and needs manual help. If your customers pay from exchanges a lot, consider steering them to a network without a memo, such as USDT on TRON or BNB Smart Chain. Wallet users are less at risk on TON: the checkout's QR code fills in the memo for them.
Slow withdrawals and paying twice
An exchange withdrawal can sit in a queue or a review for a while. The crypto amount is locked when the customer picks the coin, and the address stays watched until 7 days after the invoice expires, so a slow withdrawal still turns the invoice paid, with the usual webhook. The risk is the customer losing patience and paying again. Once the payment is seen, the checkout shows "Payment detected" and "Do not send again". If they try to switch to another coin, it first asks whether they have already sent anything. Matching is by address (or memo), not by sender, so it does not matter that an exchange sends from its own shared wallet.
What to put on your side
One line on your order page helps: "Paying from an exchange? Choose the same network as on the checkout, add the withdrawal fee on top, and fill in the memo or tag if one is shown." Fulfil orders only on the signed invoice.paid webhook (how to verify it), not on the customer's screenshot of a withdrawal. Every payment pays the same 0.5% fee, and you can try each case above with test keys first: sandbox mode lets you simulate a short payment and its top-up.
The same applies in reverse when you withdraw your balance to an exchange. easyway holds your balance until you withdraw it to an address you whitelisted with two-factor authentication. If your exchange gave you a destination tag (XRP) or memo (TON) with its deposit address, include it (see XRP and TON).