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

# tRPC Strategy Instances API

> Portfolio dashboard and legacy strategy-instance read surfaces.

The `strategyInstances.*` namespace contains legacy strategy-instance reads and
the web dashboard's normalized portfolio payload.

* Base endpoint: `POST /v1/trpc`
* Namespace: `strategyInstances.*`
* Auth: wallet session

## Dashboard Normalized Data

`strategyInstances.getDashboardNormalizedData` returns a normalized portfolio
payload for dashboard views. Callers can tune each subgraph through `include` so
portfolio lists, positions, assets, prices, vaults, and dashboard-only summaries
can be fetched independently. By default, `assetPrices`, `assets`,
`portfolioAssetBalances`, and `portfolioInstances` are included, while
`dashboardAssetSummaries`, `performanceSeries`, `positions`, and `vaults` are
off until requested.

`includeInvestingAccount` defaults to `false`. Dashboard shells that need the
owner's active Investing Account in the initial normalized seed should set it to
`true`; this keeps the Investing Account in the same cached payload as the rest
of the owner dashboard data.

`include.dashboardAssetSummaries` is off by default. When true, the response
includes `dashboardAssetSummaries`, a dashboard-owned read model that groups
held route assets by canonical crypto asset when the asset-taxonomy graph has an
explicit relationship. Routes that do not resolve to a canonical group remain
concrete rows.

```json theme={null}
{
  "archiveStatus": "all",
  "strategyInstanceIds": ["<portfolio-id>"],
  "include": {
    "assetPrices": false,
    "assets": false,
    "dashboardAssetSummaries": true,
    "performanceSeries": false,
    "portfolioAssetBalances": false,
    "portfolioInstances": false,
    "positions": false,
    "vaults": false
  },
  "includeInvestingAccount": true,
  "limit": 100
}
```

Each `dashboardAssetSummaries[]` row has:

* `id`: stable row id scoped to portfolio and canonical/concrete asset
* `portfolioId`: owning portfolio id
* `displayKind`: `canonical` when grouped by taxonomy, otherwise `concrete`
* `assetCanonicalId`: canonical asset id for canonical rows
* `sourceAssetIds`: concrete held asset ids represented by the summary
* `sourcePositionIds`: source position rows represented by the summary
* `displayName`, `symbol`, `iconUrl`: display identity owned by the backend
* `quantity`: summed display quantity as a string, or `null` when it cannot be
  safely represented
* `quantityDisplay`: the summed quantity string when available, otherwise a
  position-count label
* `valueUsd`, `priceUsd`, `priceChange1hPercent`, `priceChange24hPercent`, `marketCapUsd`: dashboard
  valuation and market data fields
* `chainCount`, `positionCount`: count metadata for grouped rows
* `updatedAt`: latest source update timestamp in milliseconds

Dashboard clients should render `dashboardAssetSummaries` directly when present.
Portfolio detail views should continue using concrete positions/assets and
should not use this dashboard summary model.

## Top Performing Portfolios

`strategyInstances.getTopPerformingPortfolios` returns the ranked portfolio rows
used by the Explore top-portfolios rail. Each row includes the strategy blueprint
that created the displayed portfolio and the canonical strategy blueprint route
id that clients should use when linking to the strategy page.

Relevant navigation fields:

* `blueprint_id`: strategy blueprint id attached to the displayed portfolio
* `canonical_strategy_blueprint_id`: canonical strategy blueprint id for
  `/strategy/:blueprintId` links
* `forked_from_blueprint_id`: parent blueprint id when the row belongs to a
  forked strategy, otherwise `null`

Explore clients should link top-performing portfolio rail items with
`canonical_strategy_blueprint_id` so clicks land on the canonical strategy page
for that portfolio.
