Creating a withdrawal reserves funds but does not guarantee the final payout. Morpho exits are normally synchronous, while Syrup USDC, the U.S. Treasury Bill Vault, and JTRSY may settle asynchronously. JTRSY USDC redemptions are instant through Basin when available; otherwise JTRSY typically takes 1-2 banking days and up to 3.
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 resolves the maximum available balance and returns that amount in amountRequestedUsd:
withdrawableUsd on the wallet object and in preview are related but different:
- Wallet
withdrawableUsdis the wallet-level conservative gross amount that can be withdrawn now before plan-specific fees. - Preview
withdrawableUsdis the destination-specific gross amount that can safely start right now. - Preview
withdrawableUsdcan be lower than the wallet object’swithdrawableUsd.
Initiate a withdrawal
To withdraw exact amounts from selected positions, disable automatic rebalancing and send the same
sources array to preview and create:
GET /v2/wallets/{id}. Ground does not fall back
to another position when a selected source cannot cover its requested amount.
Wallets with automatic rebalancing do not support explicit sources in V1.
When withdraw succeeds, Ground has accepted the gross debit and reserved liquidity against the wallet. The destination receives the gross amountUsd minus execution fees and any partner fee. Ground snapshots the partner fee and recipient for that withdrawal and sends the customer payout and partner fee atomically. The payout legs remain the source of truth for what was actually delivered, especially for asynchronous exits.
Sandbox notes:
- Sandbox USDC destinations include
ethereum_sepoliaandsolana_devnet, plusstellar_testnet. - Sandbox USDT withdrawals require
token: "usdt"withdestinationChain: "ethereum_sepolia"or"tron_shasta", matching the funded allocation group. destinationAddressmust match the selected chain format: EVM hex for EVM chains, base58 for Solana, a G-address for Stellar, and checksummed TRON base58 for TRON.
Solana Devnet withdrawal
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:
If realized redemption proceeds are not enough to pay the committed partner fee while leaving a positive customer payout, the withdrawal fails before payout with
failureReason: "insufficient_proceeds_after_partner_fee". No customer payout or partner fee is sent, and the realized proceeds remain available in the portfolio wallet. Submit a new withdrawal with a lower or zero partner fee.
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.
Fund and destination compatibility
Withdrawals source cash and eligible yield positions compatible with the requested stablecoin and destination network. Whensources is omitted, cash is used first and positions are unwound when additional liquidity is needed. For manual wallets with explicit sources, the withdrawal uses only the selected positions.
Use
token: "usdc" or "usdt" and the exact destinationChain key for your environment. Sandbox uses ethereum_sepolia, solana_devnet, stellar_testnet, and tron_shasta according to Supported Chains. Destination addresses must follow the selected network’s format. The destination Stellar account must be active and able to receive Circle USDC.
Use the preview response to determine the amount available for your destination and its estimated completion time. Source redemption can depend on market liquidity, provider settlement, and transaction confirmation. Payouts follow the same approval workflow across supported networks; track the withdrawal until completed.