---
title: "ETF universe with capabilities (free)"
method: GET
path: "/data/etf/universe"
tags: ["Funds Data Plane"]
---

# ETF universe with capabilities (free)

`GET /data/etf/universe`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/data/etf/universe`
- Auth: one of:
  - HTTP bearer
  - none

Every ETF the API knows, with three capabilities, any combination per fund: `cascade` (SPY, sector and subsector ETFs the ERM3 cascade hedges with), `priced` (daily returns, covariance and beta to SPY, from `priced_from`) and `holdings` (look-through holdings and benchmark fit), plus `factor_role` and identifiers (FIGI, CIK and BW ids only). Built from the holdings catalog, the ETF return store's symbol list and the weekly hedge snapshot's cascade ETFs; cached for an hour. `holdings_as_of` is null in this list — read it from `/data/etf/{ticker}`. Free public read; per-IP data-gateway rate limit. See docs/ETF_COVERAGE.md.

## Query parameters

- `cascade` boolean
- `priced` boolean
- `holdings` boolean
- `factor_role` string

## Response `200`

The filtered universe.

- object
  - `n_results` integer
  - `counts` object
    - `total` integer
    - `cascade` integer
    - `priced` integer
    - `holdings` integer
  - `filters` object
  - `sources` object: Which inputs were readable for this build (false = that capability may be under-reported).
    - `catalog` boolean
    - `priced_store` boolean
    - `cascade_store` boolean
    - `register` boolean
  - `reason_codes` string[]
  - `built_at` string, date-time
  - `results` EtfUniverseRow[]
    - `ticker` string
    - `name` string, nullable
    - `capabilities` EtfCapabilities: What the API can do with an ETF. Three capabilities, any combination per fund (docs/ETF_COVERAGE.md).
      - `cascade` boolean: Hedge leg in the ERM3 SPY / sector / subsector cascade.
      - `priced` boolean: Daily returns in the ETF return store: /ticker-returns, covariance, beta to SPY.
      - `priced_from` string, date, nullable: First date with a daily return.
      - `holdings` boolean: Look-through holdings: /data/etf/{ticker}/holdings, benchmark fit.
      - `holdings_as_of` string, date, nullable: Latest holdings report date (/data/etf/{ticker} only; null in lists).
      - `factor_role` string: market, sector, subsector, style, macro:<factor> or none.
    - `identifiers` EtfIdentifiers: Open identifiers only (FIGI, CIK, BW ids); null where unknown.
      - `bw_sym_id` string, nullable
      - `bw_etf_id` string, nullable
      - `figi` string, nullable
      - `cik` string, nullable: 10-digit zero-padded SEC CIK.
      - `ticker` string

---

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