Treat withdrawal creation as acceptance and reservation of a request, not as a universal price lock across every yield source. Morpho ERC-4626 vaults exposed by the live catalog are synchronous exits without a normal queue window. Syrup USDC and the U.S. Treasury Bill Vault are asynchronous exits: if the underlying protocol settles at a lower value before processing, the final payout can be lower than the amount originally requested. Syrup withdrawals can be partially processed while the remainder stays pending; U.S. Treasury Bill Vault redemptions progress through request, process, and claim stages as Superstate liquidity becomes available.
Withdrawal lifecycle
The typical flow is: preview -> initiate -> track -> complete.- Preview — call
withdrawal-previewto see what’s available and get a sourcing plan. - Initiate — call
withdrawalsto create the withdrawal. The system reserves liquidity and begins sourcing. - Track — poll the withdrawal or subscribe to webhooks. The withdrawal moves through statuses as positions unwind, funds bridge, and payouts execute.
- Complete — the withdrawal reaches
completedwhen all funds have been delivered.
Preview a withdrawal
Before initiating, preview what balance is available for a given destination.
With an explicit
amountUsd, amountRequestedUsd echoes the requested amount:
amountUsd is omitted, the preview reflects the maximum available balance and amountRequestedUsd is null:
withdrawableUsd on the wallet object and in preview are related but different:
- Wallet
withdrawableUsdis the wallet-level conservative amount that can be withdrawn now. - Preview
withdrawableUsdis the destination-specific amount that can safely start right now. - Preview
withdrawableUsdcan be lower than the wallet object’swithdrawableUsd.
Initiate a withdrawal
When
withdraw succeeds, Ground has accepted the request and reserved liquidity against the wallet. The requested amountUsd remains the target amount for the withdrawal, but the payout legs are the source of truth for what was actually delivered. Integrators should set end-user expectations based on the underlying yield source, especially for asynchronous exits.
Sandbox notes:
- In sandbox, use explicit testnet keys such as
destinationChain: "ethereum_sepolia". - Sandbox USDT withdrawals require
token: "usdt"withdestinationChain: "ethereum_sepolia". destinationAddressmust match the selected chain format: EVM hex for EVM chains, base58 forsolana.
List withdrawals
Fetch a withdrawal
The
payoutLegs array contains the individual legs of the withdrawal. Each leg moves funds from one representation (from) to another (to) through one or more onchain steps:
Use
portfolio_wallet.withdrawal.payout.status_changed for per-leg progress, including the redeem and payout-transfer steps. When a step enters pending_customer_approval, fetch the pending Turnkey activity and verify it before approving — see Transaction Approvals.
Payout statuses
WithdrawalpayoutLegs[].status and payoutLegs[].steps[].state use the workflow status set:
Withdrawal statuses
Withdrawals move through five public statuses:Timing expectations
Withdrawal time depends on which yield positions need to unwind and whether cross-chain bridging is required.
Cross-chain delivery (CCTP) adds time on top of the unwind. Withdrawal previews currently estimate this CCTP leg at about 20 minutes (
PT20M); live settlement can vary with chain and Circle attestation conditions.
For precise per-position estimates to a specific destination, use the withdrawal preview endpoint.
Withdrawal webhooks
Subscribe toportfolio_wallet.withdrawal.status_changed for real-time withdrawal tracking.
See Webhooks for registration and payload details.
Bridge domains reference
A bridge domain is a hard boundary for where liquidity can come from. The withdrawal engine never crosses bridge domain boundaries.USDC unified (CCTP)
USDC on CCTP-supported chains forms a singleusdc:unified domain:
- Arbitrum, Base, Ethereum, Polygon, Solana