---
title: "Per-cell cohort portfolio time series"
method: GET
path: "/funds/style/{slug}/portfolio"
tags: ["Funds"]
---

# Per-cell cohort portfolio time series

`GET /funds/style/{slug}/portfolio`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/funds/style/{slug}/portfolio`
- Auth: HTTP bearer

Time series of cohort portfolio metrics from Slice 6's per-cell `ds_portfolio.zarr` on GCS. Each row carries both EW and MV blocks side-by-side. Optional inclusive `start_date` / `end_date` params trim the panel.

## Path parameters

- `slug` string, required

## Query parameters

- `start_date` string, date
- `end_date` string, date

## Response `200`

Cohort time series rows.

- CohortPortfolioHistoryResponse: Per-cell cohort portfolio time series from Slice 6's per-cell ds_portfolio.zarr. Each row carries both EW and MV blocks.
  - `equity_style_9box` string, required
  - `slug` string, required
  - `n_periods` integer, required
  - `start_teo` string, date, required
  - `end_teo` string, date, required
  - `rows` CohortPortfolioRow[], required
    - `teo` string, date, required
    - `ew` StyleCohortReturnsBlock: Portfolio return components + diagnostics for one weighting in a cohort.
      - `portfolio_gross_return` number, float, nullable
      - `portfolio_market_return` number, float, nullable
      - `portfolio_sector_return` number, float, nullable
      - `portfolio_subsector_return` number, float, nullable
      - `portfolio_idiosyncratic_return` number, float, nullable
      - `identity_residual` number, float, nullable
      - `weight_sum` number, float, nullable: Cohort coverage (fraction of cohort AUM in mapped symbols).
      - `n_holdings_active` integer, nullable
      - `effective_n` number, float, nullable
      - `top10_weight_sum` number, float, nullable
    - `mv` StyleCohortReturnsBlock: Portfolio return components + diagnostics for one weighting in a cohort.
      - `portfolio_gross_return` number, float, nullable
      - `portfolio_market_return` number, float, nullable
      - `portfolio_sector_return` number, float, nullable
      - `portfolio_subsector_return` number, float, nullable
      - `portfolio_idiosyncratic_return` number, float, nullable
      - `identity_residual` number, float, nullable
      - `weight_sum` number, float, nullable: Cohort coverage (fraction of cohort AUM in mapped symbols).
      - `n_holdings_active` integer, nullable
      - `effective_n` number, float, nullable
      - `top10_weight_sum` number, float, nullable

## Other responses

- `400`: Invalid slug or malformed date params.
- `402`: Insufficient prepaid balance.
- `404`: No cohort portfolio history available for this cell.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/riskmodels/apis/riskmodels-api.md) · [All operations](https://skmtc.dev/riskmodels/apis/riskmodels-api/llms.txt) · [OpenAPI document](https://skmtc.dev/riskmodels/apis/riskmodels-api/revisions/1a034cad408a?raw)
