Skip to main content
Create a wallet with a 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

curl -X POST "$BASE_URL/v2/wallets" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "requestId": "0b7e3b4d-88a5-4a75-8c0f-3b7b4f9d9f1d",
    "label": "Treasury Portfolio",
    "strategy": {
      "allocations": [
        { "yieldSourceId": "resolv-lp", "pct": 40 },
        { "yieldSourceId": "usdz", "pct": 60 }
      ]
    }
  }'
FieldRequiredDescription
requestIdYesUUID v4 idempotency key
labelNoHuman-readable wallet name (defaults to null if omitted)
strategyYesObject containing allocations array
strategy.allocationsYesArray of { yieldSourceId, pct }. Percentages must sum to 100.
Each allocation must include 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:
{
  "id": "9d1a1c83-3a1c-4c14-9c5a-0c9a57a4a7db",
  "label": "Treasury Portfolio",
  "createdAt": "2026-02-05T08:15:00Z",
  "depositAddresses": {
    "arbitrum": "0x21246509968c4d24611f414560971AEc2e3A079B",
    "base": "0x21246509968c4d24611f414560971AEc2e3A079B",
    "ethereum": "0x21246509968c4d24611f414560971AEc2e3A079B",
    "polygon": "0x21246509968c4d24611f414560971AEc2e3A079B",
    "solana": "7nYzKxM3bP4oEFbqkPmA5E2rYJ8HqKz8vFg9abc1"
  },
  "balance": {
    "totalUsd": "82500.000000",
    "withdrawableUsd": "82500.000000",
    "pendingWithdrawalUsd": "0.000000",
    "inTransitUsd": "0.000000",
    "earnedUsd": "250.000000"
  },
  "positions": [
    { "yieldSourceId": "resolv-lp", "name": "Resolv LP", "valueUsd": "33000.000000", "pct": 40 },
    { "yieldSourceId": "usdz", "name": "T-Bills (M0)", "valueUsd": "49500.000000", "pct": 60 }
  ]
}

Key fields

FieldDescription
balance.totalUsdTotal wallet value (principal + yield) across all positions
balance.withdrawableUsdAmount available for immediate withdrawal (totalUsd - pendingWithdrawalUsd)
balance.pendingWithdrawalUsdValue currently encumbered by active withdrawal(s)
balance.inTransitUsdValue currently in transit (e.g. funds being bridged or deployed into a yield position)
balance.earnedUsdCumulative yield earned
depositAddressesPer-chain addresses to fund the wallet (deposit rails only)
positionsCurrent 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.