> ## Documentation Index
> Fetch the complete documentation index at: https://docs.turtle.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# User Positions

> Current on-chain DeFi positions for a wallet across supported protocols.

<Note>
  Send your API key via the `X-API-Key` header. See [Authentication](/sdk/authentication/api-keys).
</Note>

## Overview

Return a wallet's **current** DeFi positions across every supported protocol (Uniswap, Aave, Euler, Morpho, Curvance, Pendle), grouped by protocol with per-position and total USD valuations. Positions are derived from on-chain state.

<Info>
  This is a point-in-time snapshot. For transaction history (deposits and withdrawals over time) use [Wallet Activity](/sdk/portfolio/activity).
</Info>

## Endpoint

<CodeGroup>
  ```bash curl theme={null}
  curl -X GET "https://earn.turtle.xyz/v1/wallet/0xe84ef330b7b5c02fb3fbe05f2a31cb331c2b874c/portfolio" \
    -H "X-API-Key: pk_live_xxxxx"
  ```

  ```typescript TypeScript theme={null}
  const res = await fetch(
    'https://earn.turtle.xyz/v1/wallet/0xe84ef330b7b5c02fb3fbe05f2a31cb331c2b874c/portfolio',
    { headers: { 'X-API-Key': 'pk_live_xxxxx' } }
  );
  const { total_stats, protocols } = await res.json();
  ```
</CodeGroup>

**Path Parameters**

<ParamField path="address" type="string" required>
  EVM wallet address.
</ParamField>

**Response**

```json theme={null}
{
  "total_stats": {
    "asset_usd_value": "50000.00",
    "debt_usd_value": "0.00",
    "net_usd_value": "50000.00"
  },
  "protocols": [
    {
      "id": "morpho",
      "name": "Morpho",
      "site_url": "https://morpho.org",
      "logo_url": "https://...",
      "stats": { "asset_usd_value": "50000.00", "debt_usd_value": "0.00", "net_usd_value": "50000.00" },
      "portfolio_item_list": [
        {
          "type": "yield",
          "name": "Gauntlet USDC Core",
          "detail": {
            "supply_token_list": [
              { "address": "0xa0b8...eb48", "chain": "1", "symbol": "USDC", "name": "USD Coin", "decimals": 6, "amount": "50000.0", "price": "1.00", "logo_url": "https://..." }
            ]
          },
          "stats": { "asset_usd_value": "50000.00", "debt_usd_value": "0.00", "net_usd_value": "50000.00" },
          "pool": { "id": "0x...", "chain": "1" }
        }
      ]
    }
  ]
}
```

<ResponseField name="total_stats" type="object">
  Wallet-wide totals across all protocols: `asset_usd_value`, `debt_usd_value`, `net_usd_value`.
</ResponseField>

<ResponseField name="protocols" type="array">
  One entry per protocol the wallet holds positions in.
</ResponseField>

<ResponseField name="protocols[].id" type="string">
  Protocol slug (e.g. `morpho`, `aave3`, `uniswap3`).
</ResponseField>

<ResponseField name="protocols[].stats" type="object">
  Protocol-level USD totals (`asset_usd_value`, `debt_usd_value`, `net_usd_value`).
</ResponseField>

<ResponseField name="protocols[].portfolio_item_list" type="array">
  Individual positions within the protocol.
</ResponseField>

<ResponseField name="protocols[].portfolio_item_list[].type" type="string">
  Position type: `yield`, `lending`, `collateral`, or `liquidity`.
</ResponseField>

<ResponseField name="protocols[].portfolio_item_list[].detail" type="object">
  Token lists for the position: `supply_token_list`, and where relevant `borrow_token_list` / `reward_token_list`. Each token carries `address`, `chain`, `symbol`, `name`, `decimals`, `amount`, `price`, `logo_url`.
</ResponseField>

<ResponseField name="protocols[].portfolio_item_list[].pool" type="object">
  Pool / vault identifier for the position: `id` (contract address) and `chain`.
</ResponseField>
