Prerequisites
- The user has completed onboarding and has the required capabilities enabled.
Walkthrough
Check available rails
Call List rails to confirm the asset and network the user wants to withdraw to, and verify thewithdraw feature is enabled.
features array — only proceed with networks that include "withdraw". For assets supported by multiple networks, require an explicit network selection from the user. Use the network’s reference field to determine whether to show a destination tag or memo input in your UI.
Select source account
Crypto withdrawals can be sourced from any account. If the selected account is not in the withdrawal asset, the balance will be converted at the time of the transaction using Uphold’s prevailing rate. Make sure the origin asset has the necessary features enabled. Call List accounts to retrieve the user’s accounts and let them choose one with sufficient balance for the withdrawal.Create a quote
Create a quote for the withdrawal using the Create quote endpoint.quote object with details about the withdrawal, including fees and expiration.
Quotes typically expire quickly. Prompt for user confirmation within the expiry window and regenerate if needed.
Handle quote requirements
When the quote is returned, check therequirements array. If non-empty, resolve each requirement before creating the transaction.
Travel Rule
If therequirements array contains travel-rule, you must collect the required originator and beneficiary information before creating the transaction. For the full step-by-step implementation, see the Travel Rule withdrawal guide.
Create a transaction
Once the user confirms the quote, create the transaction using the Create transaction endpoint.If the quote required Travel Rule, include the data collected by the widget under
params.travelRule. See the Travel Rule withdrawal flow guide.crypto-address node reflecting the recipient’s on-chain address.
Execution modes
Crypto withdrawals support different execution modes depending on the destination and environment:- On-chain execution: The transaction is processed directly on the blockchain network. The
destination.node.execution.modewill beonchainand include blockchain-specific details such as transaction hashes upon completion. - Off-chain execution: When both the sender and recipient are Uphold users, the transaction is processed internally within Uphold’s infrastructure. This eliminates network fees and is faster than onchain processing. The
destination.node.execution.modewill beoffchain. For offchain transactions, theexecutionobject includes additional properties:accountOwnerId(the recipient user ID) andaccountId(the recipient account ID). - Simulated execution: Used in development environments for testing purposes. The transaction appears processed but does not affect actual blockchain state (user balances will be affected though). The
destination.node.execution.modewill besimulated.
Monitor for settlement
Prefer webhooks for real-time updates, or fall back to polling if webhooks are not feasible.- Webhook events (recommended):
- core.transaction.created
status: processing→ initiated but not yet broadcast
- core.transaction.status-changed
status: completed→ broadcast and confirmedstatus: on-hold→ transaction checks paused (e.g., pending RFIs)status: failed→ transaction failed, checkstatusDetailsfor more info
- core.transaction.created
- Polling (fallback): Get transaction
Notify the user
Display an in-app confirmation when the transaction iscompleted, and send an email if applicable.
You now support crypto withdrawals with the Enterprise API Suite.