Fetch a wallet
| Field | Description |
|---|---|
balance.totalUsd | Gross customer-owned wallet value, including economically-owned funds that are still in transit |
balance.withdrawableUsd | Conservative amount that can be withdrawn now |
balance.availableToInitiateUsd | Backwards-compatible alias of withdrawableUsd on wallet responses |
balance.pendingWithdrawalUsd | Value currently encumbered by active withdrawal(s) (see timing note below) |
balance.inTransitUsd | Value currently in transit (e.g. funds being bridged or deployed into a yield position) |
balance.earnedUsd | Lifetime yield earned |
positions[] | Per-position balances with USD values and target allocations |
positions array always includes one entry per yield source in your strategy allocation. It may also include two additional system-managed entries:
cash— idle USDC sitting in the wallet’s deposit addresses that has not yet been deployed into a yield position. This typically appears briefly after a deposit or withdrawal, before the next rebalance cycle invests the funds.in-transit— funds currently being bridged between chains as part of a rebalance or deposit flow.
pct field (since they are not part of the strategy allocation). The sum of all 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.
Balance definitions
totalUsdanswers: “How much value does the customer own?”withdrawableUsdanswers: “How much can the customer withdraw now?”availableToInitiateUsdanswers: “Same aswithdrawableUsdon the wallet response.”pendingWithdrawalUsdanswers: “How much value is already committed to active withdrawals?”earnedUsdanswers: “How much lifetime yield has this wallet earned?”
totalUsd, withdrawableUsd, and pendingWithdrawalUsd are intentionally not interchangeable. Value can remain customer-owned while still being unavailable to withdraw immediately, for example when a prior unwind, bridge, or payout boundary is still 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.
pendingWithdrawalUsd timing
pendingWithdrawalUsd reflects the total amount encumbered by active withdrawal reservations. It is set when a withdrawal is initiated and the system reserves liquidity.
The reservation is not cleared immediately when the withdrawal broadcasts or even when the withdrawal reaches a terminal status. It stays active until Ground’s holdings refresh confirms the observed balances have caught up to the payout. In practice:
- Withdrawal initiated:
pendingWithdrawalUsdincreases,withdrawableUsddecreases by the same amount,totalUsdstays the same. - Withdrawal completed: the withdrawal can already be terminal, but
pendingWithdrawalUsdmay remain temporarily while the next holdings refresh catches up. - Holdings refresh catches up:
pendingWithdrawalUsddecreases back toward zero, andtotalUsdreflects the delivered amount. - Withdrawal cancelled:
pendingWithdrawalUsddecreases,withdrawableUsdincreases back to its pre-withdrawal level.
0 <= withdrawableUsd <= totalUsd always holds.
The invariant withdrawableUsd <= totalUsd - pendingWithdrawalUsd also always holds.
On wallet responses, availableToInitiateUsd = withdrawableUsd.
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 USDC 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 or label:
Balance and position webhooks
Subscribe to these events for real-time balance updates:portfolio_wallet.balance.updated— fires when wallet balance changesportfolio_wallet.position.updated— fires when a position’s value or weight changes