# GET /api/v1/flows.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 /flows.json`: what the ETFs read daily from their issuers' files bought and sold on the latest complete market close, from their share counts: the largest net additions and reductions, index entries and exits, the last 20 closes; under the history terms. Every security moved: /api/v1/flows.csv. Feed: https://tickerinside.com/feeds/flows.xml. https://tickerinside.com/api/v1/flows.json

## Response

What the US ETFs read daily from their issuers' files bought and sold, security by security, from the change in shares held between each fund's previous file and its file of date, each file placed at the market close it reflects: the largest net additions and reductions by value, in percent and beyond the funds' own growth, the securities that entered or exited funds tracking the same index, the corporate actions, and each of the last 20 closes. Its CSV twin, /api/v1/flows.csv, lists every security moved on date.

```json
{
  "date": "2026-10-12",
  "newest_file": "2026-10-16",
  "…": "2 more fields",
  "coverage": {"funds_read_daily": 624, "funds_counted": 609, "issuers": ["Global X", "Invesco", "SPDR", "iShares"], "net_assets_usd": 6248330747647, "share_of_stock_etf_assets_pct": 71.6, "not_counted": {"fund_of_funds": 10, "no_file_for_date": 5, "no_longer_read": 7, "not_daily": 2}},
  "added_by_value": [{"ticker": "NVDA", "name": "Nvidia", "funds_adding": 31, "funds_trimming": 13, "funds_entered": 0, "funds_exited": 0, "net_shares": 1306360, "net_shares_pct": 0.0911, "net_shares_beyond_growth": -113612, "net_value_usd": 293512213, "net_value_beyond_growth_usd": -25718871, "withheld": null}, {"ticker": "AAPL", "name": "Apple Inc.", "funds_adding": 29, "funds_trimming": 13, "funds_entered": 0, "funds_exited": 0, "net_shares": 752399, "net_shares_pct": 0.0882, "net_shares_beyond_growth": -82252, "net_value_usd": 254598223, "net_value_beyond_growth_usd": -28050983, "withheld": null}, "… 8 more"],
  "reduced_by_value": [{"ticker": "EBS.AT", "name": "Erste Group Bank AG", "funds_adding": 1, "funds_trimming": 3, "funds_entered": 0, "funds_exited": 1, "net_shares": -94268, "net_shares_pct": -1.2742, "net_shares_beyond_growth": null, "net_value_usd": -11492074, "net_value_beyond_growth_usd": null, "withheld": {"net_shares_beyond_growth": "one_fund_dominant", "net_value_beyond_growth_usd": "one_fund_dominant"}}, {"ticker": "DB1.DE", "name": "Deutsche Boerse AG", "funds_adding": 3, "funds_trimming": 2, "funds_entered": 0, "funds_exited": 0, "net_shares": -21329, "net_shares_pct": -0.4402, "net_shares_beyond_growth": null, "net_value_usd": -7110849, "net_value_beyond_growth_usd": null, "withheld": {"net_shares_beyond_growth": "one_fund_dominant", "net_value_beyond_growth_usd": "one_fund_dominant"}}, "… 8 more"],
  "…": "4 more fields",
  "index_events": [{"date": "2026-10-09", "ticker": "MRNA", "change": "entered", "funds": ["QQQ", "QQQM"], "same_index_as": "QQQ", "group_funds": 8, "text": "entered 2 of the 8 funds tracking the same index as QQQ on 2026-10-09"}, {"date": "2026-10-08", "ticker": "MRNA", "change": "entered", "funds": ["QYLD", "IQQ", "QNDX", "QYLG", "QRMI", "QTR"], "same_index_as": "QQQ", "group_funds": 8, "text": "entered 6 of the 8 funds tracking the same index as QQQ on 2026-10-08"}, "… 31 more"],
  "…": "12 more fields",
  "cite_as": "TickerInside, ETF flows of the close of 2026-10-12 from the issuers' files, https://tickerinside.com/api/v1/flows.json",
  "…": "5 more fields"
}
```

- `date` (string or null): The market close of the figures: the newest close that nine in ten of the funds counted have a file of. Each file is placed at the close it reflects (Invesco dates a Friday's file on the Saturday), and each fund's change runs from its previous file to its file of this close.
- `newest_file` (string or null): The newest close a file read reflects. A close is published once every fund still publishing has a file of it or of a later close, so date can be older.
- `first_date` (string or null): The first close with a counted change: the first files carrying share counts in today's keys.
- `method` (string): The method of the figures, ti-flows/1.
- `coverage` (object): Which funds are counted; its fields are described below.
- `added_by_value` (array of object): The ten securities with the largest net additions in dollars on date, the securities in not_ranked left out; a row is described below.
- `reduced_by_value` (array of object): The ten with the largest net reductions in dollars.
- `added_by_shares_pct` (array of object): The ten largest net additions in percent of the shares the funds held before.
- `reduced_by_shares_pct` (array of object): The ten largest net reductions in percent.
- `added_beyond_growth_by_value` (array of object): The ten largest net additions beyond the funds' own growth, in dollars: rebalancing and index changes rather than the creations of the funds' shares.
- `reduced_beyond_growth_by_value` (array of object): The ten largest net reductions beyond the funds' own growth.
- `index_events` (array of object): Securities that entered or exited two or more funds tracking the same index on the same close, in the last 20 trading days, newest first; described below.
- `corporate_actions` (array of object): Mergers, spin-offs, takeovers, splits and uniform changes the files show in the last 20 trading days, newest first: no trades, so the lines a merger, a spin-off or a split moved are left out of the sums. Described below.
- `not_ranked` (array of object): The securities moved on date that the six lists leave out, each with its reason: converted (both securities of a merger paid in shares), acquired_or_delisted, distribution, split or uniform_change (within three closes of a corporate action, or on a close where a line of theirs is left out for one), or fund_shares (the shares of a fund the site covers, held by another fund).
- `funds_most_changed` (array of object): The ten funds whose step to date entered or exited the most lines; described below.
- `days` (array of object): Each close of the last 20, newest first: how many funds have a step to it, whether nine in ten do (complete), how many securities moved, and its five largest net additions and reductions as [ticker, dollars, shares], the securities not ranked left out.
- `not_counted` (array of object): The funds read daily that are not counted on date, each with its reason and its last file: fund_of_funds, whole_fund_counts (a file that counts every share class of a fund with mutual fund classes), no_share_counts, no_file_for_date, restated (a change of keys), no_previous_file or unreadable_file.
- `file_gaps` (integer): How many lines the window leaves out because an issuer's file dropped them for a day and they came back with the same count.
- `security` (string): The address of one security's flows, with {ticker} to fill.
- `csv` (string): Every security moved on date, one row each, largest net value first.
- `feed` (string): This summary as an RSS feed, one item per complete close.
- `feed_fund` (string): One fund's holdings changes as an RSS feed, from its history, with {ticker} to fill.
- `feed_stock` (string): One security's flows as an RSS feed, with {ticker} to fill.
- `note` (string): How to read the figures.
- `cite_as` (string): A citation line: the close and this file's address.
- `cite_html` (string): The credit as HTML: a link to this file, then its address.
- `docs` (string): Where the file is documented.
- `license` (string): The terms the flows are published under: TickerInside's history terms, not CC BY 4.0, as they are computed from the archive.
- `terms` (string): The terms in full, on the legal notice.
- `attribution` (string): How to credit it, then what the history terms allow.

The coverage object:

- `funds_read_daily` (integer): The funds read from their issuers' files every business day.
- `funds_counted` (integer): How many of them have a step to date that is counted.
- `issuers` (array of string): The issuers of the funds counted.
- `net_assets_usd` (integer or null): The counted funds' net assets, as their issuers' files state them.
- `share_of_stock_etf_assets_pct` (number or null): The counted funds' share of the assets of the covered US stock ETFs, measured as the universe's share of assets is; null when not measured.
- `not_counted` (object): How many funds of the archive are not counted, by reason, not_daily for a fund whose issuer publishes monthly.

A row of the six lists:

- `ticker` (string): The security's key: a US ticker, or a local code and market for a line listed abroad (7203.JP).
- `name` (string or null): Its name, where known.
- `funds_adding` (integer): How many funds hold more shares of it than in their previous file.
- `funds_trimming` (integer): How many hold fewer.
- `funds_entered` (integer): How many of those adding did not hold it before.
- `funds_exited` (integer): How many of those trimming hold none now.
- `net_shares` (integer or null): The change in shares held, summed over the funds. Null when fewer than three funds moved it or one fund makes more than 80% of it, as withheld says: a fund's share count is never published.
- `net_shares_pct` (number or null): net_shares in percent of the shares the funds held before; null when fewer than three funds held it before or after, or one fund held more than 80% of it.
- `net_shares_beyond_growth` (integer or null): The same change less the part in proportion to each fund's own growth across its step (b minus k times a, k the fund's median ratio of share counts).
- `net_value_usd` (integer or null): net_shares valued at each file's own price per share: market value over shares, or weight times the fund's stated net assets over shares. Never an outside price.
- `net_value_beyond_growth_usd` (integer or null): net_shares_beyond_growth valued the same way.
- `withheld` (object or null): Why each null sum is null, as {field: reason}, or null: fewer_than_3_funds, one_fund_dominant (one fund makes more than 80% of the sum, or of the difference two published sums give, such as net_shares less net_shares_beyond_growth), gives_back_a_fund_count (the sums as printed, taken as one or two funds' own or compared with the figures published before for the same close, would give back a fund's share count) or not_all_valued.

An index event:

- `date` (string): The close.
- `ticker` (string): The security.
- `change` (string): entered or exited.
- `funds` (array of string): The funds of the group it entered or exited on that close.
- `same_index_as` (string): The group's largest fund. Two funds track the same index when they overlap by 98% or more by weight on their latest files.
- `group_funds` (integer): How many funds the group has.
- `text` (string): The event in words, to quote.

A corporate action:

- `date` (string): The first close the funds show it on; funds that book it later show it a close or two after.
- `kind` (string): converted (a merger paid in shares: from exited while to rose, or entered, by the same ratio in funds of three or more indexes), distribution (a spin-off: to entered at the same ratio of from in funds of three or more indexes), acquired_or_delisted (from left the funds of two or more issuers with nothing replacing it, and half its holders left it or its price per share stood still), split (three quarters or more of the funds holding from changed their counts by one ratio within three closes, while its price per share in the files moved by the inverse ratio: a split, a reverse split, a bonus issue or a stock dividend) or uniform_change (the same ratio with no price move to match: named and not ranked, its lines kept in the sums).
- `from` (string): The security converted, the parent of a distribution, the security taken over or delisted, or the security split or changed.
- `to` (string or null): The security received: from itself for a split; null for acquired_or_delisted and uniform_change.
- `ratio` (number or null): Shares of to per share of from, as the funds' counts show it (1.2 for a 6-for-5 bonus issue, 0.5 for a 1-for-2 reverse split); null for acquired_or_delisted.
- `text` (string): The action in words, to quote.

A security not ranked:

- `ticker` (string): The security.
- `reason` (string): converted, acquired_or_delisted, distribution, split, uniform_change or fund_shares.

A fund of funds_most_changed:

- `fund` (string): The fund's ticker.
- `name` (string or null): Its name.
- `previous` (string): The date its issuer gives the file its step is compared with.
- `date` (string): The date its issuer gives its file, which can be a day after the close it reflects.
- `entered` (integer): Lines that entered.
- `exited` (integer): Lines that exited.
- `increased` (integer): Lines whose share count rose.
- `decreased` (integer): Lines whose share count fell.
- `growth_pct` (number): The fund's own growth across the step, in percent: the median change of its share counts, mostly creations and redemptions of its shares.
- `not_trusted` (integer): Lines left out of every sum, as no trade (see not_trusted in one security's flows).

A day of days:

- `date` (string): The close.
- `funds` (integer): How many funds have a counted step to it.
- `complete` (boolean): true when nine in ten of the funds counted on date do.
- `securities_changed` (integer): How many securities a fund moved on it.
- `added_by_value` (array of array of string): Its five largest net additions, as [ticker, dollars, shares].
- `reduced_by_value` (array of array of string): Its five largest net reductions.

A change in shares held mixes the creations and redemptions of a fund's own shares with its rebalancing: read beyond_growth for the second. Only the funds read daily from their issuers are counted, never the funds known from SEC filings, and only common shares: futures, options and short positions are left out. A split, a bonus issue or a stock dividend, a count in other units, a line a file dropped for a day, a change of ticker and the lines a merger or a spin-off moved are left out as no trade. A sum is published only when three or more funds make it and no one fund more than 80% of it; withheld says why one is null. Feeds: /feeds/flows.xml, /feeds/fund/{ticker}.xml, /feeds/stock/{ticker}.xml (RSS 2.0). Not under CC BY 4.0: the history terms apply. A feed reader may poll the feeds; fetching the shards or many securities' answers on a schedule to keep them is systematic extraction.

## 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`.
