---
title: "Composed cohort snapshot (JSON)"
method: GET
path: "/funds/style/{slug}/snapshot"
tags: ["Funds"]
---

# Composed cohort snapshot (JSON)

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

## Request

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

Composed JSON snapshot for a 9-box style cell — the differentiated wedge vs Morningstar. Bundles cohort metrics (EW + MV) + top-25 cohort holdings (MV) + 12-month cohort portfolio history (both weightings) + top-10 funds in cell (by 12-month gross return) + top-15 symbols in cell (by current weight, MV).

Matching server-rendered PDF is `/api/funds/style/{slug}/snapshot.pdf` (Stage D.2.d, ✅ shipped).

## Path parameters

- `slug` 'large-value' | 'large-blend' | 'large-growth' | 'mid-value' | 'mid-blend' | 'mid-growth' | 'small-value' | 'small-blend' | 'small-growth', required

## Response `200`

Composed cohort snapshot.

- CohortSnapshotResponse: Composed JSON snapshot for a 9-box style cell — the differentiated wedge surface. Bundles cohort metrics (EW + MV), top-25 cohort holdings, 12-month cohort portfolio history, top-10 funds in cell, and top-15 symbols in cell.
  - `equity_style_9box` string, required
  - `slug` string, required
  - `report_date` string, date, required
  - `filing_date_max` string, date, nullable
  - `n_funds_in_cell` integer, nullable
  - `metrics` object, required
    - `weightings` object
      - `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
  - `holdings` object, nullable
    - `weighting` 'ew' | 'mv'
    - `n_total_holdings` integer
    - `n_returned` integer
    - `top` CohortHolding[]
      - `bw_sym_id` string, required: Internal symbol id. Resolve to ticker via POST /api/data/symbols/batch with {"symbols": [...]}.
      - `weight` number, float, required: Cohort weight at this teo (sums to 1.0 within the chosen weighting).
      - `contribution_gross` number, float, nullable
      - `contribution_market` number, float, nullable
      - `contribution_sector` number, float, nullable
      - `contribution_subsector` number, float, nullable
      - `contribution_idiosyncratic` number, float, nullable
      - `n_funds_holding` integer, nullable: Number of funds in the cell holding this symbol.
  - `portfolio_history` object, required
    - `lookback_months` integer, required
    - `n_periods` integer, 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
  - `top_funds` CohortRankBlock: A ranked list scoped to one (metric, period_window, weighting) tuple.
    - `metric` string, required
    - `period_window` '1m' | '3m' | '12m' | '36m', required
    - `weighting` 'ew' | 'mv', required
    - `rows` CohortRankEntry[], required
      - `rank` integer, required
      - `entity_id` string, required
      - `value` number, float, nullable
      - `cohort_size` integer, nullable
  - `top_symbols` CohortRankBlock: A ranked list scoped to one (metric, period_window, weighting) tuple.
    - `metric` string, required
    - `period_window` '1m' | '3m' | '12m' | '36m', required
    - `weighting` 'ew' | 'mv', required
    - `rows` CohortRankEntry[], required
      - `rank` integer, required
      - `entity_id` string, required
      - `value` number, float, nullable
      - `cohort_size` integer, nullable
  - `_metadata` object, required
    - `model_version` string, nullable
    - `data_as_of` string, date
    - `data_freshness` string, date-time

## Other responses

- `400`: Invalid style slug.
- `402`: Insufficient prepaid balance.
- `404`: No cohort metrics 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)
