
A crypto invoice says "send 15.00 USDT", and 14.00 arrives. It happens more often than you would think: many exchanges deduct their withdrawal fee from the amount the customer types in. Here is what SnapEX Pay does in that case and how your store should react.
What happens to the invoice
- Part of the amount arrives. The invoice becomes
underpaidand you receive theinvoice.underpaidwebhook. The invoice is not closed: the same address keeps waiting for the rest for a limited top-up window. - The customer tops up. If the rest arrives in time, the invoice becomes
paidand you receiveinvoice.paid, exactly as for a payment made in one go. - The customer does not top up. When the top-up window ends, the invoice ends as
partially_paid(final), the received part is credited to your balance, and you receiveinvoice.partially_paid.
What to do with the order
- Ship only on
invoice.paid. It is sent only when the full amount was paid.invoice.underpaidandinvoice.partially_paidmean the amount is incomplete. - On
invoice.underpaid, keep the order waiting and, if you can, tell the customer how much is missing: the same payment page and address accept the rest. - On
invoice.partially_paid, the decision is yours: ask for the rest with a new invoice, fulfil the order in part, or cancel it. Reconcile on the amount actually credited, not on the amount you expected.
Late payments
Expired does not always mean "never paid": the address is still watched for some time after the invoice expires, and a late transfer is credited. Another transfer that arrives after an invoice was already paid is credited separately and comes as invoice.extra_payment.
In the ready-made modules
The modules never apply a short payment blindly. In WHMCS a partial payment goes to the Gateway Log for you to review, in WooCommerce the order is put On hold, in BILLmanager nothing is credited and the log gets a "PARTIAL payment" entry. You check the payment in the SnapEX Pay cabinet and apply it by hand.
How to see fewer underpayments
- Show the exact amount from the payment page and ask customers to send exactly that amount.
- Remind them that some exchanges deduct the withdrawal fee from the amount they type in.
More on the signals your system receives: Crypto payment webhooks: verify the signature, handle retries and duplicates. Sign-up and modules: pay.snapex.pro.