---
title: "Get fund (registry + latest snapshot)"
method: GET
path: "/data/funds/{bw_fund_id}"
tags: ["Funds Data Plane"]
---

# Get fund (registry + latest snapshot)

`GET /data/funds/{bw_fund_id}`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/data/funds/{bw_fund_id}`
- Auth: one of:
  - HTTP bearer
  - none

Returns the registry row from `public.funds` joined with the latest knowledge-mode snapshot from `public.funds_latest`. Bitemporal lineage surfaces as response headers `X-Data-As-Of` (= `report_date`) and `X-Data-Filing-Date` (= `filing_date`).

v1 returns the latest knowledge-mode answer only (no `?as_of=` / `?mode=` query params — deferred to v2 per ARCHITECTURE_FUNDS_API.md §3.5).

## Path parameters

- `bw_fund_id` string, required

## Response `200`

Fund + latest snapshot.

- FundWithLatest: Fund registry row joined with the latest knowledge-mode snapshot.
  - `fund` Fund, required: Mutual fund registry row from `public.funds`. One row per `bw_fund_id`. Latest temporal triple (`latest_report_date` / `latest_filing_date` / `latest_extracted_at`) reflects the most recent N-PORT snapshot known for this fund. Q5 lock: `primary_bw_fund_id` is reserved as a nullable column; NULL means this row IS the primary share class (or no primary chosen yet). See ARCHITECTURE_FUNDS_API.md §4.1.
    - `bw_fund_id` string: Funds_DAG canonical fund id. Format `BW-FUND-{series_id}`.
    - `series_id` string, nullable: SEC series id.
    - `ticker` string, nullable
    - `cik` string, nullable
    - `fund_name` string, nullable
    - `morningstar_category` string, nullable
    - `equity_style_9box` 'Large Value' | 'Large Blend' | 'Large Growth' | 'Mid Value' | 'Mid Blend' | 'Mid Growth' | 'Small Value' | 'Small Blend' | 'Small Growth', nullable
    - `style_link_method` string, nullable
    - `primary_bw_fund_id` string, nullable
    - `latest_report_date` string, date, nullable: Period end of the most recent reported holdings (= "fund_date").
    - `latest_filing_date` string, date, nullable: SEC acceptance date for the latest filing (= "release_date").
    - `latest_extracted_at` string, date-time, nullable
    - `latest_total_adj_mv` number, float, nullable
    - `latest_n_holdings` integer, nullable
    - `latest_effective_n` number, float, nullable
    - `last_in_eligible_universe_at` string, date, nullable
    - `status` 'active' | 'delisted', nullable: Fund lifecycle status. Null when not yet classified. Direct lookups return dead funds; list and search endpoints filter to active funds by default.
    - `death_date` string, date, nullable: Date the fund ceased operations; null for live funds.
    - `is_etf` boolean, nullable
    - `is_etf_source` string, nullable
    - `is_money_market` boolean, nullable
    - `metadata` object, nullable
  - `latest` FundLatest: Wide-row latest knowledge-mode snapshot from `public.funds_latest`. One row per `bw_fund_id`. Returns and diagnostics flatten the per-fund `ds_portfolio.zarr` (Funds_DAG Slice 8). Multi-quarter history lives in GCS Zarr (Stage B+). See ARCHITECTURE_FUNDS_API.md §4.2.
    - `bw_fund_id` string, required
    - `report_date` string, date, required
    - `filing_date` string, date, required
    - `extracted_at` string, date-time, required
    - `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: ERM3 universe coverage (fraction of fund AUM mapping to in-universe symbols).
    - `n_holdings_active` integer, nullable
    - `effective_n` number, float, nullable: HHI-derived diversification (1 / sum(w_i^2)).
    - `top10_weight_sum` number, float, nullable
    - `total_adj_mv` number, float, nullable
    - `equity_style_9box` string, nullable
    - `n_funds_in_cell_at_report_date` integer, nullable
    - `model_version` string, nullable
    - `factor_set_id` string, nullable
    - `last_synced_at` string, date-time, required
    - `metadata` object, nullable

## Other responses

- `404`: Fund not found.

---

[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)
