Fetch a wallet
The
positions array includes cash positions and yield sources in your strategy allocation.
yield_source— a strategy position. These entries includeyieldSourceIdandpct.cash— idle USDC or USDT sitting in the wallet’s deposit addresses. Cash positions includetokenandchain; configured cash targets may includepct.
positions[].valueUsd equals balance.totalUsd.
Balances are computed from refreshed onchain holdings + price feeds and cached for fast reads. They may briefly lag deposits or withdrawals.
When idle stablecoins move into yield
Idle cash is swept into yield positions through rebalances. USDC follows the USDC strategy and USDT follows the USDT strategy; Ground does not convert between them. Rebalances only run when the available idle balance can produce executable yield-entry legs.Rebalance minimums are environment-configured and applied per executable leg. Sandbox uses small minimums (e.g. 5 stablecoin units per leg) so you can test with small amounts; production minimums are typically higher. If idle cash cannot produce executable legs above the configured threshold, those funds remain idle and withdrawable instead of being swept into yield — no error is returned.
Balance definitions
totalUsdanswers: “How much value does the customer own?”withdrawableUsdanswers: “How much can the customer withdraw now?”reservedUsdanswers: “How much customer-owned value is currently reserved by active wallet work?”earnedUsdanswers: “How much lifetime yield has this wallet earned?”
totalUsd, withdrawableUsd, and reservedUsd are intentionally not interchangeable. Value can remain customer-owned while still being unavailable to withdraw immediately, for example when a withdrawal or rebalance is settling.
Internally, Ground keeps that value represented through explicit transfer boundaries. When funds move from one representation to another, the transfer row stays active until the destination representation is durably written or observed. That is what keeps totalUsd from dipping during internal protocol steps.
reservedUsd timing
reservedUsd reflects the amount reserved by active withdrawal and rebalance work. It is set when the system reserves liquidity for a wallet workflow.
The reservation is not always cleared immediately when a transaction broadcasts. It stays active until Ground’s ledger and holdings refresh confirm the next representation of the funds. In practice:
- Workflow initiated:
reservedUsdincreases,withdrawableUsddecreases by the same amount,totalUsdstays the same. - Workflow completed:
reservedUsdmay remain briefly while the next ledger or holdings refresh catches up. - Refresh catches up:
reservedUsddecreases back toward zero, andtotalUsdreflects the settled holdings. - Workflow cancelled:
reservedUsddecreases,withdrawableUsdincreases back to its pre-workflow level.
0 <= withdrawableUsd <= totalUsd always holds.
The invariant “customer-owned value is always represented somewhere” also always holds.
Customer-facing valuation notes
syrup-usdcis valued from live onchain share-to-assets conversion and can move continuously.- Morpho ERC-4626 vaults exposed by the live catalog are valued from live onchain ERC-4626 conversion reads.
- Treat NAV-based positions as protocol valuations, not guaranteed 1:1 stablecoin marks at every instant.
POST /v2/wallets/:id/withdrawal-preview (see Withdraw Funds).
Yield metrics
You can monitor yield through the wallet response:balance.earnedUsd— lifetime yield earned since wallet creationbalance.totalUsd— total value including accumulated yield
GET /v2/wallets/:id/yield (see Calculating Yield Accrual).
List wallets
nextCursor field for fetching subsequent pages. See API Conventions for details.
Look up a wallet
Look up a wallet byrequestId, id, label, search, status, or createdAtGte using the list endpoint’s filters. Filters can be combined when you want to narrow the result set:
{ "data": [...], "nextCursor": ... }); a matching wallet appears in data.
Balance and workflow webhooks
Subscribe to workflow lifecycle events and fetch the wallet when you need a fresh balance snapshot:portfolio_wallet.deposit.status_changed— fires when an external deposit posts to the walletportfolio_wallet.rebalance.status_changed— fires as Ground deploys cash or adjusts strategy positionsportfolio_wallet.withdrawal.status_changed— fires when withdrawals change the wallet’s available balance