Stablecoins UX Best Practices
Let Users Choose Chain — but Only When It Adds Value
Default to a recommended chain (e.g., Tron or BSC) based on speed and fee efficiency
If advanced users want control, expose a "Select Network" dropdown, populated from Stablecoins Supported Chains rather than a hardcoded list, with:
Network name (e.g., Solana (SPL))
Token type (e.g., USDT)
Withdrawal fee (a flat $1 on every chain)
Average confirmation time (e.g., ~10s)
Educate the user at the moment of decision, not in a separate guide.
Always Show Status Clearly
For every transfer or deposit:
Show “Pending” with a live progress bar (e.g., “6/15 confirmations”)
Auto-update to “Confirmed” when Bitnob emits the webhook
On failure (transfer.failed) — see the error responses for the codes you may receive — surface:
Error summary (e.g., "Transaction reverted. Try again with a higher gas limit.")
Reference ID for support
Option to retry or contact support
Transaction feedback is critical. Never leave users in a “did it work?” state.
Display Fees Transparently
The withdrawal fee is a flat $1, the same on every chain and for any amount. It is added on top of the amount sent — the recipient always receives the full amount you specify — and it is not an estimate, so you can show the exact total before the user confirms. No quote or estimate call is required.
Before submitting a send:
You’re sending: $100 USDT
Network: Polygon (USDT)
Network Fee: $1.00
You will be charged: $101.00
After confirmation:
Display the amount and chain from the Create Withdrawal response, and read fee (with fee_formatted) plus the on-chain hash from Get Transaction By ID Or Reference — the create response does not carry a fee field.
Let users click to view the transaction in a block explorer
Reuse the Reference Field for Trust & Transparency
Show users their reference when initiating a send
Reuse the same reference in receipts, webhooks, logs, and support tickets
Encourage merchants to share that reference with customers when automating payouts
This improves user trust and makes internal debugging much faster.
Surface the Chain and Token Format
Check the destination with Validate Address before submitting, and always show:
Chain (e.g., Ethereum)
Token format (e.g., ERC-20)
Wallet address format (e.g., 0x..., T..., 3...)
Warn users:
“Make sure you're sending USDT using the TRC-20 format. Sending USDT from the wrong chain may result in permanent loss of funds.”
QR Code Generation
For deposits:
Show a QR code containing:
The blockchain address returned by Generate Addresses
Optionally: metadata (e.g., chain type in the URI)
Label it clearly:
“Scan to send USDT on Tron (TRC-20)”
Mobile UX
Use action sheets for selecting chain/token Include touch-friendly copy buttons for wallet addresses
Show transaction history with clear icons:
Received → Green
Sent → Red
Pending → Yellow
Error and Edge Case UX
If a user sends to the wrong address or chain:
Don’t promise recovery
Offer an “Unverified Deposit” view for manual follow-up with support
Surface a support contact flow with:
txHash
address used
chain and token
Real-Time Alerts
Integrate Bitnob webhooks with:
Toasts/snackbars on successful deposits or transfers
In-app notifications
Email/SMS if applicable for higher-value transfers