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:

Important

“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


Share on
Did you find this page useful?

Join our Discord