strategy object defining your yield allocation. You can source allocations from POST /v2/wallets/quote (see Yield Sources & Strategy Quoting) or specify them manually using yield source IDs from GET /v2/wallets/yield-sources.
Create a portfolio wallet
| Field | Required | Description |
|---|---|---|
requestId | Yes | UUID v4 idempotency key |
label | No | Human-readable wallet name (defaults to null if omitted) |
strategy | Yes | Object containing allocations array |
strategy.allocations | Yes | Array of { yieldSourceId, pct }. Percentages must sum to 100. |
yieldSourceId (from the yield source catalog, e.g. resolv-lp, syrup-usdc, usdz) and pct (integer, 0-100).
The endpoint returns 201 for a new wallet creation, or 200 for an idempotent replay of the same requestId.
Wallet response
The canonical wallet response (GET /v2/wallets/:id) provides a clean, neobank-style shape with balances and current positions:
Key fields
| Field | Description |
|---|---|
balance.totalUsd | Total wallet value (principal + yield) across all positions |
balance.withdrawableUsd | Amount available for immediate withdrawal (totalUsd - pendingWithdrawalUsd) |
balance.pendingWithdrawalUsd | Value currently encumbered by active withdrawal(s) |
balance.inTransitUsd | Value currently in transit (e.g. funds being bridged or deployed into a yield position) |
balance.earnedUsd | Cumulative yield earned |
depositAddresses | Per-chain addresses to fund the wallet (deposit rails only) |
positions | Current holdings with USD values and target allocations per yield source |
Rebalancing
Portfolio wallets are best-effort targets. Over time (or after deposits/withdrawals), holdings can drift from target allocations. The system periodically rebalances to bring positions back toward the strategy targets. Small deposits may remain as cash until it is economically worth deploying (considering gas, minimum trade sizing, and protocol constraints).Sandbox notes
In sandbox, deposit address keys include the network suffix (e.g.ethereum_sepolia instead of ethereum). See Supported Chains for details. The yieldSourceId values and request shapes are identical to production.
usdz is simulated in sandbox because the M0 position is not available on testnets. The yieldSourceId remains usdz for integration parity.