# GET /api/v1/holders.json

One endpoint of the TickerInside API, with data through 2026-10-16. Contents of the reference, each section and endpoint as a file: https://tickerinside.com/api/sections/index.md. The whole reference as Markdown: https://tickerinside.com/api/index.md

`GET /holders.json`: the reverse index of the 626 issuer files: every security their funds hold, and which of them hold it, in one file of 3.9 MB. https://tickerinside.com/api/v1/holders.json

## Response

The reverse index of the 626 issuer files: for each of the 16,724 securities their funds hold, which of them hold it and at what weight. One file of 3.9 MB, the right shape for a client that loads it once and walks it. SEC-layer funds are not in it. A stock's SEC-layer holders are in /api/v1/sec/{ticker}.json, under holders_sec_nport, and those of a key with no stock file are in the shard of its first character, /api/v1/holders/{c}.json.

```json
{
  "as_of": "2026-10-16",
  "holdings_as_of": {"CNRG": "2026-10-15", "CWI": "2026-10-15", "…": "624 more"},
  "…": "1 more field",
  "securities": 16724,
  "…": "2 more fields",
  "holders": {"NVDA": [["GXPT", 19.88], ["IYW", 16.5999], "… 158 more"], "…": "16,723 more securities"},
  "…": "4 more fields"
}
```

- `as_of` (string): The price date.
- `holdings_as_of` (object): The date of each issuer-layer fund's holdings file, keyed by ticker.
- `funds` (object): Ticker to fund name for the issuer-layer funds, and for a few other funds the price data names, and for other funds the price data names. Use index.json tickers, not this map, as the list of covered funds.
- `securities` (integer): How many distinct securities the issuer-layer funds hold between them, the length of holders.
- `names` (object): Ticker to company name for every security the data can name: from the price data for the stocks with a history, from the issuer files for the rest.
- `note` (string): How to read the holders map.
- `holders` (object of arrays of [ticker, weight]): The index itself: for each security, the issuer-layer funds that hold it, as [fund ticker, weight percent], heaviest first. A security is one listed line. A US line is keyed by its ticker, and a dot and one letter mark a US share class (BRK.B). Any other line is keyed by its local code and its market, a dot and a two letter country code (7203.JP, SAN.FR). The Toronto line of a Canadian company that also trades in New York is the same shares, under the US ticker (RY). Preferred shares a file writes under their issuer's common ticker are under that ticker and .PFD, three letters and never a market (JPM.PFD). That key holds every series of JPMorgan's preferred stock a fund holds, and in a preferred stock fund any other income security filed under the ticker, such as a business development company's listed notes. It is a US line of its own, so a preferred stock fund is never listed among the holders of the common stock.
- `aliases` (object): The keys written before lines listed abroad were keyed with their market, when a local code alone was the key. Each maps to the keys it reads as now, the US line first and then the heaviest: 7203 reads as 7203.JP (Toyota) and 7203.SA (Elm), A005930 as 005930.KR. A key that became several was several companies or lines under one code. The shard of each old key's first character lists them all. This file leaves out a key that reads only as itself with its market after it (NESN as NESN.CH).
- `license` (string): The licence the data is published under.
- `attribution` (string): How to credit the data: a link to this file where the medium allows one, the name where it does not.
- `source` (string): Where the method behind these figures is written down.

## Errors and redirects

| Status | reason | Meaning | Next request |
|---|---|---|---|
| 200 |  | The file. | Read it. Every file carries its dates. |
| 204 |  | A browser's CORS preflight, an `OPTIONS` request, answered before any redirect: GET and HEAD from any origin, with the headers asked for, kept up to a day. | Nothing to do. |
| 301 |  | An upper case ticker, a share class written `BRK-B` or `BRK/B` (the file is `brk.b.json`), an address without `.json`, `/api/v1` alone, or punctuation copied from a sentence at its end. A key listed abroad with a hyphen, such as `SQM-B`, keeps it. A written comparison asked for in the other order leads to its file: `vym-vs-vig` to `vig-vs-vym.json`. A fund with no file under `/etf/` leads to its file under `/fund/`: `etf/voo.json` to `fund/voo.json`. `/stock/`, the name of the pages, leads to the stock files under `/sec/`: `stock/nvda.json` to `sec/nvda.json`. | Follow it (`curl -L`). `Location` gives the address. |
| 304 |  | Your `If-None-Match` matches the file's `ETag`. | Keep your copy. |
| 404 | `no_such_endpoint` | No endpoint at this address. | `covered`: `index.json`. |
| 503 |  | The file could not be served just then. The body's `error` is `unavailable`, with `Retry-After: 60`. | Retry after a minute. `uptime`: `uptime.json` says whether the site fails its own checks. |

Every 404 body is JSON. It holds `error`, always `not_covered`; `reason`, a code /contract/ lists; `ticker`, as asked for, or null when the address names no ticker; `message`; `docs`; and the follow-up address named above. Under /history/, it also holds `date` when a date was asked for. `before_history`, for a date before a fund's first file, is answered only once holdings at a date are served. A 400 body holds `error` (`bad_request`), `reason`, `message`, `docs`, and `parameter`, or `limit` and `asked`.
