withdrawal flow handles the entire card withdrawal in one session: the user picks the origin Uphold account, links or selects a card, enters the amount, reviews a live quote, confirms the transaction and sees its status — all without your backend creating a quote or a second session.
If you need to build the amount entry and review screens yourself, see Select for Withdrawal instead. To compare all flows, see Flows.
Prerequisites
- The user has completed onboarding and has the required capabilities enabled.
- The Payment Widget is set up in your frontend. See Installation and setup.
@uphold/enterprise-payment-widget-web-sdkis on a version that supports the end-to-end flows.
Walkthrough
Complete the withdrawal in the widget
The widget session takes the user from account and card selection through the amount, quote and authorization.Create a widget session
Call Create widget session to start thewithdrawal flow. No data is required — the widget gathers everything from the user. Use options to customize the Widget’s theme and layout, as well as the flow itself. See the example here and the SDK reference for all available options.
session object with a url field that loads the widget. Return response.session to your frontend as is.
Set up the widget
Both examples above are for web applications — either creating the iframe yourself or letting the SDK do it. For native apps using a WebView, see Native apps with the SDK for the SDK’s native-bundling pattern, or Setup with JavaScript for the no-SDK approach that loads the session
url directly as the WebView’s top-level page.Handle the complete event
Thecomplete event fires when the user closes the terminal status screen. Its value is the authorization result — the transaction plus what triggered the completion.
account and the destination is the external-account representing the card. The transaction status is initially processing and updates to completed once the transfer settles.
Handle cancellations
Thecancel event fires when the user closes the widget before authorizing. No transaction exists at that point.
Handle errors
The widget recovers from quote and authorization failures internally by returning the user to the review screen with an appropriate action — change the amount, change the payment method, or try again. Insufficient balance is handled this way rather than as anerror event.
These are the known errors:
Monitor for settlement
Card withdrawal transactions may remain inprocessing while the payout settles. Monitor until the transaction reaches a terminal state.
- Webhook events (recommended):
- core.transaction.created —
status: processing→ transaction created, pending settlement - core.transaction.status-changed —
status: completed→ funds settled;status: failed→ irrecoverable error
- 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 end-to-end card withdrawals via the Payment Widget.