When it fires
The customer sent a payment to the deposit address, but the amount received (data.payment.amount) is less than the invoice amount (data.invoice.amount).
What to do
Do not fulfill the order. The full payment has not been received. You have three options:- Wait for a top-up. The deposit address remains active. If the customer sends the remaining amount, Settlx will detect it and the invoice will proceed to settlement automatically. Best for situations where the shortfall may be due to a wallet fee deduction.
- Accept the partial payment. Via the merchant dashboard, you can manually accept the partial amount as full payment. This triggers settlement for the amount received. Best for digital goods where you are willing to accept a slightly lower amount.
- Contact support for a refund. If you want to return the funds to the customer, contact Settlx support. Do not create a new invoice until the original is resolved.
The deposit address stays active after
invoice.underpaid fires. Any additional payment sent to the same address will be detected and applied to the invoice automatically.How much the customer still owes
The webhook payload tells you the shortfall directly — the amount of the payment currency (e.g.BNB) the customer still needs to send to the same deposit address to complete the invoice.
Multiple top-up payments to the same deposit address are supported and added cumulatively. As long as the invoice hasn’t expired, the customer can keep sending until the cumulative total clears the 1% tolerance window — at which point
invoice.confirmed fires automatically and settlement begins.
Payload
Includes:invoice, payment, fees (estimated — final fees are confirmed in invoice.settled).
shortfall_currency will be the payment currency (BNB), not the settlement currency (USDC).
Handler example
Node.js
Related events
invoice.settled— Fires after the full payment is completed and funds are in your wallet.invoice.expired— Fires if the invoice expires before the shortfall is resolved.