---
title: "One fund's holdings history"
method: GET
path: "/history/{ticker}.json"
---

# One fund's holdings history

`GET /history/{ticker}.json`

## Request

- Base URL: `https://tickerinside.com/api/v1`
- URL: `https://tickerinside.com/api/v1/history/{ticker}.json`
- Auth: none required

Each file date the archive holds for the fund, with its position count and top 10 weight. Then each step from a file to the next: the lines that entered and exited with their weights, the lines whose weight moved by 0.05 points or more, and three measures of the step. Then how its overlap with its ten closest funds moved. Every step names the file it is compared with, so a gap in the archive or a monthly file shows. A step across a change of the keys is restated, not read as trades: it has no entered, exited or moved, so read them with a default. Weights only: no share count, market value or fund size is served. weights_moved_pp is not turnover, since prices move every weight; traded_pp, from share counts, is. Not under CC BY 4.0: the history terms apply (license, terms). Fetch it per request, one fund at a time; fetching many funds' history on a schedule to store it is not allowed.

## Path parameters

- `ticker` string, required

## Response `200`

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

- FundHistory
  - `ticker` string, required: The fund's ticker.
  - `name` string, nullable, required: The fund's name.
  - `source_layer` 'issuer', required: Always issuer: the history is read from the issuers' own files. The other funds known from SEC filings have none.
  - `key_scheme` integer, required: The keys the holdings are given in: 2, the scheme of today's files, where a line listed abroad carries its market (7203.JP). Older files are read in these keys.
  - `first` string, required: The date of the oldest file of the fund in the archive.
  - `last` string, required: The date of the newest.
  - `file_dates` integer, required: How many file dates the archive holds for the fund.
  - `cadence` 'daily' | 'monthly' | 'irregular' | 'null', nullable, required: daily, monthly or irregular, from the gaps between the file dates; null with a single file.
  - `snapshots` object, required: One row per file date, oldest first, with the columns named in columns.
    - `columns` string[], required: The names of the columns of each row. holdings_as_of: the file date. positions: the lines in the file. top10_weight: the weight of its ten largest lines, in percent; null for the files of a fund of funds before its file kept the funds it holds apart from its own lines. key_scheme: the keys the file was written in, 1 or 2. Scheme 1 is for files read before the switch to keys with a market, late in September 2026. The switch date varies by fund (SPY's first scheme 2 file is dated 2026-09-25), and the first scheme 2 step is restated. unplaced: for a file of scheme 1, the old keys that cannot be read as one line today because they stood for two companies in that file (SAN for Santander and Sanofi); null for a file of scheme 2.
    - `rows` array[], required: The rows, oldest first.
      - union[]
        - union
          - string
          - number
  - `moved_threshold_pp` number, required: How far a weight has to move, in percentage points, for its line to be listed under moved: 0.05.
  - `traded_min_pairs` integer, required: How many steps with share counts on both sides a fund needs before traded_pp is published: 20.
  - `traded_pairs` integer, required: How many of the fund's steps have share counts on both sides.
  - `traded_pp_from` string, nullable, required: The date of the first of those steps; null when there is none.
  - `traded_pp_reason` string, nullable, required: Why traded_pp is null in every step: fewer_than_20_pairs_with_share_counts. Null once it is published.
  - `changes` HistoryChange[], required: One entry per step from a file to the next, oldest first; its fields are described below.
    - `date` string, required: The date of the file the step leads to.
    - `previous` string, required: The date of the file it is compared with: the fund's file before it in the archive, days or a month earlier.
    - `entered` array[]: The lines in this file that were not in the previous one, as [key, weight percent], heaviest first. Absent from a restated step, which does not say what entered or exited that day; the snapshots give only its count of positions. Read it with a default, such as step.get("entered", []). A key of digits and a letter is a code the issuer's file gives in place of a ticker. When a ticker exits and such a code enters at about the same weight, and the reverse follows, it is the same security re-keyed, not a trade.
      - union[]
        - union
          - number
          - string
    - `exited` array[]: The lines in the previous file that are not in this one, as [key, weight percent in the previous file], heaviest first. Absent from a restated step.
      - union[]
        - union
          - number
          - string
    - `moved` array[]: The lines in both files whose weight moved by moved_threshold_pp or more, as [key, weight before, weight after], largest move first. Absent from a restated step.
      - union[]
        - union
          - number
          - string
    - `moved_below_threshold` integer: How many other lines in both files moved by less. Absent from a restated step.
    - `names_turnover_pp` number, nullable, required: Half the weight that entered plus the weight that exited, in percentage points: what the change of names carried. Null on a restated step.
    - `weights_moved_pp` number, nullable, required: Half the sum of the absolute changes of weight over every line of either file, in percentage points. It includes price drift, which moves every weight a little each day, so it is not turnover. Null on a restated step.
    - `traded_pp` number, nullable, required: What the share counts say was traded, in percentage points of assets, when both files carry them and the fund has traded_min_pairs such steps; null otherwise. A line held in both counts its weight times the change of its quantity beyond the fund's own growth, a line that entered or exited its weight, and the sum is halved.
    - `splits_seen` string[]: The lines whose quantity moved by a split ratio while their weight did not, left out of traded_pp. Present when there is one.
    - `reverted` string[]: The entered lines the fund held two files earlier, most often a line the issuer's file left out for a day. That exit and this entry are a glitch in the file, not trades, and so is a key of digits and a letter that stood in for the line in the file between. Present when there is one.
    - `restated` boolean: true on a step that is a change of the keys or of the reading of the files, not a trade; absent otherwise. A restated step has no entered, exited, moved or moved_below_threshold, so read them with a default. It is set on the step to a file of the current key scheme, where the parser also reads lines the old one dropped. It is set on the first file of a fund of funds that lists the funds it holds apart from their look-through, and on two files whose weights add up to totals 50 points or more apart. It is also set on the first file that keys apart the preferred shares a file writes under their issuer's common ticker (JPM.PFD rather than JPM), and on a date listed after a fix of the reading.
    - `reason` string: Why the step is restated. key_scheme_2: the first file in keys with a market. own_lines_separated: a fund of funds whose earlier files listed the funds it holds beside their look-through, about 200% in all. weight_total_changed: the two totals are 50 points or more apart. weights_from_market_values: weights from market values, or the reverse. preferred_keyed_apart: the preferred shares the file writes under their issuer's common ticker are keyed as that ticker and .PFD, at the weight the common ticker carried. Otherwise, the reason given with a listed date.
    - `rekeyed` array[]: On a restated step, the old keys that read as other keys today, as [old key, [new keys]]. It covers a spelling brought together (A005930 is 005930.KR), a Toronto code under its New York ticker, and a key that stood for several lines, with the lines the new file holds. It also covers a common ticker whose preferred shares took a key of their own (JPM as [JPM.PFD], or [WFC, WFC.PFD] where the fund holds both).
      - string[]
    - `market_added` integer: On a restated step, how many old keys only took their market (7203 became 7203.JP). Each is in the aliases of the holders shard of its first character.
    - `coverage_added_pp` number, nullable: On a restated step, the weight the new file covers beyond the previous one, in percentage points: lines the old reading dropped, or, below zero, weight the old reading counted twice.
  - `overlap_history` object, required: How the fund's overlap by weight with its ten closest funds moved; its fields are described below.
    - `with_top_funds_by_overlap` integer, required: How many funds are followed: the funds whose overlap by weight with this one is highest on the latest files, up to ten.
    - `series` object, required: For each followed fund, most overlapping first, [date, overlap by weight in percent] on every file date of either fund from the first date both have a file. Each fund is taken at its latest file on or before the date. It is the overlap by weight the comparisons print, computed here from the archived files. A file of the old key scheme is read in today's keys, so a point can differ from what a comparison printed on the day. A series can step where either fund's history is restated.
  - `holdings_at` string, nullable, required: The address of the fund's holdings at any date, with {date} to fill, once it is served; null until then.
  - `fund` string, nullable, required: The fund's current file, with its holdings today, cost, returns and risk.
  - `ended` object, nullable, required: Null while read; once not, last_file, source_layer and note.
    - `last_file` string, required
    - `source_layer` string, nullable, required
    - `note` string, required
  - `cite_as` string, required: A citation line: the fund, the dates of its oldest and newest files, 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 terms the history is published under: TickerInside's 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, a link to the file where the medium allows one and the name where it does not, then what the history terms allow.

## Other responses

- `301`: The address was not written the way the file is: an upper case ticker, a share class written BRK-B or BRK/B, a missing .json, or punctuation at the end. Follow the Location header (curl -L).
- `304`: Not modified: the ETag of your copy, sent in If-None-Match, is still current. Files are cached five minutes.
- `404`: reason not_in_archive: the fund has no history (see history). A dated address under the fund answers its latest quarterly SEC report on or before the date, or before_first_report, holdings_at_date_not_enabled (a fund that files none) or invalid_date.
- `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/66a3e0d66a02?raw)
