---
title: "ETF Ownership Index, daily history"
method: GET
path: "/ownership-index/history.json"
---

# ETF Ownership Index, daily history

`GET /ownership-index/history.json`

## Request

- Base URL: `https://tickerinside.com/api/v1`
- URL: `https://tickerinside.com/api/v1/ownership-index/history.json`
- Auth: none required

One row per market close of the market line and of each sector line: the levels of the night the close was first published, and the change of ETF ownership ending on the close over 1, 5 and 20 market days, weighted by market cap. Then each stock's changes ending on the latest close, in percentage points of its shares outstanding, from the net shares the funds read daily bought and sold, as the ETF flows publish them. Its CSV twin, /api/v1/ownership-index/history.csv, has the rows of every line. A row is written the first night its close is published and never rewritten. The rows before the first night are rebuilt from the flows of that night: their changes only. Not under CC BY 4.0: the history terms apply.

## Response `200`

The file. The example is a real answer, shortened: long lists and maps keep their first entries.

- OwnershipIndexHistory
  - `name` string, required: The history's name.
  - `method` string, required: The method of the index, ti-ownership-index/1.
  - `flows_method` string, required: The method of the flows the changes are read from, ti-flows/1.
  - `methodology` string, required: The methodology page.
  - `first_close` string, nullable, required: The first close of the history.
  - `last_close` string, nullable, required: The close of the changes in stocks: the flows' latest close.
  - `windows` object, required: For 1d, 5d and 20d: from, the close the change starts after, to, the close it ends on, and covered, whether every close between is a complete close of the flows.
  - `series_columns` string[], required: The names of the places of each row of market and sectors.
  - `market` array[], required: The market line, one row per close, oldest first.
    - union[]
      - union
        - string
        - number
        - integer
        - boolean
  - `sectors` object, required: Each sector's line, one row per close, by sector.
  - `stocks_columns` string[], required: The names of the places of each row of stocks.
  - `stocks` array[], required: Each stock's changes over 1, 5 and 20 market days ending on last_close, in percentage points of its shares outstanding, and the reason each null one is null; a null reason with a null change means the window is not covered.
    - union[]
      - union
        - string
        - number
        - integer
        - boolean
  - `not_measured` object, required: For each window, how many stocks have no change, by reason.
  - `null_reasons` object, required: Each reason a change is null, in words.
  - `index` string, required: The index file.
  - `csv` string, required: market and sectors as CSV rows, with the line's name in line.
  - `note` string, required: How to read the file.
  - `cite_as` string, nullable, required: A citation line: the closes and this file's address.
  - `cite_html` string, required: The credit as HTML: a link to this file, then its address.
  - `docs` string, required: Where the file is documented.
  - `license` string, required: The history terms, not CC BY 4.0.
  - `terms` string, required: The terms in full, on the legal notice.
  - `attribution` string, required: How to credit it, then what the history terms allow.

## Other responses

- `304`: Not modified: the ETag of your copy, sent in If-None-Match, is still current. Files are cached five minutes.
- `503`: The file could not be served just then: retry after a minute. uptime says whether the site fails its own checks.

---

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