---
title: "13F filer portfolio history"
method: GET
path: "/13f/filers/{bw_filer_id}/portfolio"
tags: ["13F Filers"]
---

# 13F filer portfolio history

`GET /13f/filers/{bw_filer_id}/portfolio`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/13f/filers/{bw_filer_id}/portfolio`
- Auth: HTTP bearer

Per-filer portfolio time series from per-filer ds_portfolio.zarr. One row per teo (quarter-end) with diagnostics, AUM, ERM3 coverage, and portfolio style attribution. Return components are NULL until D.8 Phase 2 (the security-master ↔ ERM3 attribution bridge). Each row carries its `filing_date` (knowledge-time stamp; null until the per-quarter data fill lands). `as_of` filters to rows known by that date (`filing_date <= as_of`, falling back to `teo <= as_of` on panels without filing dates; basis echoed as `as_of_basis`).

## Path parameters

- `bw_filer_id` string, required

## Query parameters

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

## Response `200`

Portfolio history rows (each with `filing_date`). Additive quality fields (2026-10-06), keyed on the book each row was built from (`ds_ph`'s accession for the quarter): per row `original_filing_date` (first EDGAR filing for the quarter), `filing_date_is_amendment` (the row's book is not that first filing), `n_amendments`, `accession_number`, `book_complete`, `mapped_share` (share of the book's reported value whose security identifiers resolved), `erm3_universe_share` (= `coverage_in_erm3`), `is_partial_period` (the row's teo → next quarter-end window ends after the data's `returns_window_end`), `is_stub` (returns with no holdings snapshot), `repair_status` (most severe of `rows_quarantined` > `amendment_restated` > `units_repaired` > `reparsed`, `none`, or null when the repair ledger is unavailable), `repair_rows_affected` and `repair_detail` (rows per repair kind). At the root: `missing_quarters` (quarter-ends inside the window with no book), `data_vintage` (store schema version, identifier-window fingerprint, returns window end) and `quality_sources` (`ok` / `unpublished` / `error` for the vintage store, repair ledger and store attributes).

- object

## Other responses

- `402`: Insufficient prepaid balance.
- `404`: Filer not found, or no portfolio history available.
- `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)
