# Get user balances across ERC-4626 vaults

Endpoint reference for the 1delta API. Index: https://docs.1delta.io/llms.txt · every endpoint: https://docs.1delta.io/llms-full.txt

---

### GET /v1/data/vaults/user

- operationId: `vaults-user`
- docs: https://docs.1delta.io/1delta-api/vaults-user/
- markdown: https://docs.1delta.io/1delta-api/vaults-user.md
- tags: Vaults (Data)

Get user balances across ERC-4626 vaults

Returns per-vault balances for `account` across the supplied ERC-4626 share-token addresses. Static vault metadata (underlying, decimals, share-price ratio) is sourced from the cached `/v1/data/vaults` public-data fetch, so this endpoint's only on-chain footprint is exactly one `balanceOf(account)` per vault.

**Why this exists**

Vault shares are plain ERC-20s, so `/v1/data/token/balances` can read them — but it can't convert shares → assets. This endpoint folds that conversion in so the frontend doesn't have to redo `shares * totalAssets / totalSupply` math (and get the rounding subtly wrong).

**Scope**

Vault addresses must be tracked by `/v1/data/vaults` (the 5 supported providers — `fluid`, `gearbox`, `morpho`, `silo`, `euler-earn`). Unknown addresses are listed back to the caller in the response's `unknown` field; a request that contains *only* unknown addresses returns 400. Untracked vaults are intentionally not auto-included — the 1delta data layer only surfaces vaults that have passed risk review.

**Per-item fields** (naming mirrors `/v1/data/token/balances` — `<thing>Raw` is a stringified uint, `<thing>` is the formatted human-readable string)

| field | meaning |
|---|---|
| `vault` | share-token address (echoes the input) |
| `underlying` | result of `vault.asset()` |
| `symbol`, `name`, `decimals` | from the token registry / on-chain `decimals()` |
| `sharesRaw` / `shares` | raw uint + formatted balance in vault tokens |
| `assetsRaw` / `assets` | shares converted to underlying at the current fair share price (via `convertToAssets`) — raw uint + formatted |
| `priceUSD` | unit price of the underlying |
| `balanceUSD` | `assets * priceUSD` — USD value of the position |

**Resilience**

Failed reads (e.g. a non-ERC-4626 address slipped into the list, or a vault that reverts on `convertToAssets`) are silently dropped from the response — the whole request is not failed. Vaults the user hasn't deposited into (zero shares) are kept in the response so the caller can render a deterministic table.

**Scope**

This is for passive ERC-4626 vaults (Fluid fTokens, MetaMorpho, Gearbox V3 pools, Silo, Euler Earn). For Fluid's NFT-position **margin vaults**, use `/v1/data/lending/user-positions` instead — it understands the `FLUID_<chainId>_<vaultId>` lender keys and the NFT-per-position model.

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `chainId` | query | string | yes | Chain ID See the `ChainId` schema for the full set of supported chains. |
| `account` | query | string | yes | User address (EOA or contract) |
| `vaults` | query | string | yes | CSV of ERC-4626 share-token addresses to query. Duplicates are de-duped; invalid addresses are skipped. |

**Response `200`** — Per-vault balances joined with underlying prices. Items with failed reads are omitted; zero-share entries are kept.

| Field | Type | Description |
| --- | --- | --- |
| `success` | true |  |
| `data` | object | Informational payload. `null` when the endpoint only builds calldata. |
| `actions` | null |  |

**Example response**

```json
{
  "success": true,
  "data": {}
}
```

**Response `400`** — Validation error

**Response `429`** — Rate limited. Unauthenticated callers share a per-IP budget; send an `x-api-key` header to lift it. Retry with exponential backoff.

**Response `500`** — Unexpected server error. Safe to retry with backoff.

**Response `502`** — An upstream data source or protocol origin failed (`error.code` is `ORIGIN_FAILED`). `error.details` carries the per-origin status. This is also what a missing or malformed required parameter currently returns, rather than a 400.
