all or nothing, unless you ask
on every network, a withdrawal larger than what the hotwallet can send is refused with 400 insufficient_balance. nothing leaves. on tron, where our fees are set aside in the hotwallet until they are collected, the error carries balance, available, reserved_for_fees and a hint, so you can size the payout or top up by the difference.
the refusal is also an event: withdraw.failed with reason: insufficient_balance goes to your webhook and your team's telegram, so a payout queue can top up and retry.
on tron you can still choose to send what fits: pass allow_partial: true. the response and the webhook then say recipient_receives and capped_for_fees: true. without that flag, a payout is never sent partially. details in the api reference.
a warning before the hotwallet runs dry
after each tron withdrawal, if what is free in the hotwallet drops under a floor, your team chat gets a hotwallet.low alert with the balance, what is free and what is reserved. it is telegram-only, no webhook, and free.
the floor starts at $200 and is yours to change, in three places that set the same value: the hotwallet floor field in the panel's alerts tab, PUT /v1/alerts/profile with hotwallet_low_usd, or /floor 500 typed in a team chat (/floor default goes back to the platform value). customer chats cannot change it.
fixes and improvements
- the ledger records the amount that actually left the hotwallet; the requested amount is kept alongside.