How yield accrues
All yield sources are variable-rate. Rates change over time based on market conditions and protocol performance.Tokens and shares valued by an exchange rate
These positions appreciate in value over time. When Ground deploys USDC or USDT, the stablecoin is converted into a compatible yield token or vault shares at the current exchange rate. As the protocol earns yield, the NAV (net asset value) per share increases, making those shares worth more of the source’s deposit token. The wallet’sbalance.totalUsd reflects the current market value of all positions, so NAV appreciation is automatically captured in the balance.
Wallet-level earnings
Yield is reported at the wallet level, not per position. This is because rebalances move funds between positions over time, making per-position attribution misleading. TheearnedUsd field represents lifetime yield earned across all positions since the wallet was created. It is computed internally using per-position yield accrual tracking rather than a simple deposit/withdrawal accounting formula, so it accurately reflects actual yield even through rebalances and partial withdrawals.
Yield does not move on the same cadence for every source:
syrup-usdcupdates continuously from live onchain share-to-assets conversion.- Morpho ERC-4626 vaults exposed by the live catalog update continuously from live onchain ERC-4626 conversion reads.
balance.totalUsd = depositUsd + balance.earnedUsd to the supported accounting precision.
The yield endpoint
UseGET /v2/wallets/:id/yield for a detailed yield breakdown:
Response fields
Yield source fields
Displaying yield to users
Recommended approach
- Total earned — use
balance.earnedUsdfrom the wallet response orearnedUsdfrom the yield endpoint - Portfolio APY (30-day) — when all held sources have
denominationCurrency: "USD", compute a blended APY from the yield endpoint’spositionsarray:USD sources use the same historical 30-day APY as the yield-source catalog. Cash earns 0% and is included in the total balance used for the weights. This works for manual and auto-rebalancing wallets. If a held source is non-USD or has unavailable APY, show the blend as unavailable. - Yield breakdown — show each yield source’s
name,apyBps, andpctfrom the yield endpoint - Performance over time — for charts, use
GET /v2/accounting/yield/earned-series:cumulativeEarnedUsdper point for an earned-dollars line, and the precomputedblendedApyBpsper point for an APY line (same weighted-blend idea as above, computed server-side from trailing NAV growth at each historical point). See Balances and Yield.
Non-USD investments
When a wallet holds CETES or another non-USD investment, this endpoint returns the source’s APY indenominationCurrency and annualizedUsd: null. The earned-series endpoint
also returns blendedApyBps: null for dates when non-USD investments were held.
Display these rates as unavailable, not 0%. USD balances and earned amounts remain available.
Display CETES’s MXN APY separately, using the position’s denominationCurrency label.
Current rate previews
A catalog row may include an optionalcurrentApy with apyBps, asOf, and validUntil. Display this separately as Current APY and stop displaying it at validUntil. It is a source’s current rate preview; wallet earnings use actual position valuation, and portfolio APY uses historical apyBps. A current preview can be available while historical APY is still null.
See the yield-source details for each source’s valuation and rate methodology.
Important notes
apyBpsuses the historical 30-day basis. Source-specific valuation and annualization methods are described in the yield-source catalog.- Balances may briefly lag deposits or withdrawals due to caching. See Balances and Yield for valuation notes.
earnedUsdis lifetime. It remains monotonic even when individual source valuations update on different cadences.