---
title: "List DeFi positions"
method: GET
path: "/v1/portfolios/{portfolioSlug}/defi-positions"
tags: ["Portfolios"]
---

# List DeFi positions

`GET /v1/portfolios/{portfolioSlug}/defi-positions`

## Request

- Base URL: `https://api.tokenbooks.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tokenbooks.io/v1/portfolios/{portfolioSlug}/defi-positions`
- Auth: API key in header `x-api-key`

Lists every DeFi position in the portfolio with its wallet, contract, protocol, and aggregate transfer totals, and takes no query parameters. This is a breaking change: the path previously returned a single position selected by walletChainId, walletAddress, and positionKey, and that selector form moved to GET :portfolioSlug/defi-positions/by-selector. Each list item now carries its own positionRef for GET :portfolioSlug/defi-positions/:positionRef. Token snapshot history is excluded, so fetch a single position by its ref to get it.

## Path parameters

- `portfolioSlug` string, required

## Response `200`

- DefiPositionListResponseDto
  - `data` object[], required
    - `positionRef` string, required: Stable public DeFi position reference
    - `positionKey` string, required: Protocol-defined stable logical position key
    - `positionType` 'LP' | 'STAKE' | 'LEND' | 'BORROW' | 'NATIVE_STAKE' | 'PROTOCOL' | 'VAULT', required: DeFi position type
    - `status` 'ACTIVE' | 'CLOSED' | 'PARTIAL', required: DeFi position status
    - `openedAt` string, date-time, required: Position opened timestamp
    - `closedAt` string, date-time, nullable, required: Position closed timestamp, if closed
    - `tokenAddresses` string[], required: Token addresses involved in the position
    - `custodyAddresses` string[], required: Custody addresses involved in the position
    - `protocol` object, required: Protocol metadata
      - `name` string, required: Protocol display name
      - `slug` string, required: Protocol slug
      - `type` 'DEX' | 'LENDING' | 'LIQUIDITY_POOL' | 'STAKING' | 'YIELD_FARMING' | 'NATIVE_STAKING' | 'OTHER', required: DeFi protocol type
      - `description` string, nullable, required: Protocol description
    - `contract` object, required: Protocol contract metadata
      - `address` string, required: Protocol contract address
      - `chainId` string, required: Contract chain ID
      - `chain` object, required: Contract chain display metadata
        - `id` string, required: Chain ID
        - `name` string, required: Chain display name
      - `type` 'MAIN' | 'POOL' | 'TOKEN' | 'STAKING' | 'REWARDS' | 'OTHER', required: DeFi contract type
      - `rewardMode` string, nullable, required: Reward distribution mode
      - `custodyShift` boolean, required: Whether this contract shifts custody
    - `wallet` object, required: Public wallet metadata
      - `name` string, required: Wallet display name
      - `chainId` string, required: Wallet chain ID
      - `chain` object, required: Wallet chain display metadata
        - `id` string, required: Chain ID
        - `name` string, required: Chain display name
      - `address` string, required: Wallet address
    - `transferSummaries` object[], required: Aggregated transfer totals for this position
      - `tokenAddress` string, required: Token contract address
      - `totalStaked` string, required: Raw total amount sent into the position
      - `totalReceived` string, required: Raw total amount received from the position
      - `lastUpdated` string, date-time, required: Last transfer timestamp

---

[API](https://skmtc.dev/tokenbooks/apis/tokenbooks-public-api.md) · [All operations](https://skmtc.dev/tokenbooks/apis/tokenbooks-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tokenbooks/apis/tokenbooks-public-api/revisions/180622e6255e?raw)
