---
title: "ETF flows, one security"
method: GET
path: "/flows/{ticker}.json"
---

# ETF flows, one security

`GET /flows/{ticker}.json`

## Request

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

One security's flows: on date, how many funds added and trimmed it, the net change in shares, in dollars at the files' own prices and beyond the funds' own growth, the funds with the largest changes, with their weights only, and the lines left out as no trade; then one row per close of the last 20, its index entries and exits and its corporate actions. Composed when asked from the shard of the key's first character, /api/v1/flows/shards/{c}.json. A key no fund read daily held or moved in the last 20 trading days answers 404, reason not_held_by_daily_funds. Not under CC BY 4.0: the history terms apply.

## Path parameters

- `ticker` string, required

## Response `200`

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

- SecurityFlows
  - `ticker` string, required: The security's key, as the holdings key it.
  - `name` string, nullable, required: Its name, where known.
  - `date` string, nullable, required: The close of latest, as in /api/v1/flows.json.
  - `newest_file` string, nullable, required: The newest close a file read reflects.
  - `funds_holding` integer, required: How many of the funds counted hold it in their newest file.
  - `funds_counted` integer, required: How many funds are counted on date.
  - `latest` object, nullable, required: Its flows on date; null when no fund moved it then. Described below.
    - `date` string, required: The close.
    - `funds_adding` integer, required: How many funds hold more shares of it than in their previous file.
    - `funds_trimming` integer, required: How many hold fewer.
    - `funds_entered` integer, required: How many of those adding did not hold it before.
    - `funds_exited` integer, required: How many of those trimming hold none now.
    - `single_fund` boolean, required: true when one fund alone moved it: every sum is then null.
    - `net_shares` integer, nullable, required: 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_beyond_growth` integer, nullable, required: 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_shares_pct` number, nullable, required: 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_value_usd` integer, nullable, required: 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, nullable, required: net_shares_beyond_growth valued the same way.
    - `valued_pct` number, nullable, required: The share of the change in shares that a file valued.
    - `withheld` object, nullable, required: 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.
    - `funds` object, required: The funds with the largest changes, largest by value first, at most eight, with the columns named in columns: fund, change (entered, exited, increased or decreased), weight_before and weight_after (percent of the fund, as its holdings files print them), previous and date (its two files, as its issuer dates them). No fund's share count is published, nor any figure of its own a count could be worked out from.
      - `columns` string[], required
      - `rows` array[], required
        - unknown[]
          - unknown
    - `not_trusted` array[], required: The funds whose line is left out of every sum, as [fund, reason]: price_per_share_jump (a split or a count in other units, by the file's own values), count_weight_mismatch (a count that moved against the weight), split_seen_in_other_files, price_unlike_other_funds (a price per share half again or more away from the other funds' line of the same key: another instrument under it), file_gap, rekeyed (a change of ticker), converted (a merger paid in shares), distribution (a spin-off) or split (a split, a bonus issue or a stock dividend found across the funds).
      - string[]
  - `series` object, required: One row per close of the last 20 it moved on, oldest first, with the columns named in columns: date, funds_adding, funds_trimming, funds_entered, funds_exited, net_shares, net_shares_beyond_growth, net_value_usd, and withheld, why the first null of the three sums is null (as in latest). No close newer than date is published.
    - `columns` string[], required
    - `rows` array[], required
      - unknown[]
        - unknown
  - `index_events` object[], required: Its entries and exits in funds tracking the same index, in the last 20 trading days, as in /api/v1/flows.json.
    - `date` string, required: The close.
    - `change` 'entered' | 'exited', required: entered or exited.
    - `funds` string[], required: The funds of the group it entered or exited on that close.
    - `same_index_as` string, required: 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, required: How many funds the group has.
    - `text` string, required: The event in words, to quote.
  - `corporate_actions` object[], required: The mergers, spin-offs, takeovers, splits and uniform changes it is part of in the last 20 trading days, as in /api/v1/flows.json; the lines a merger, a spin-off or a split moved are left out of its sums.
    - `date` string, required: The first close the funds show it on; funds that book it later show it a close or two after.
    - `kind` 'converted' | 'distribution' | 'acquired_or_delisted' | 'split' | 'uniform_change', required: 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, required: The security converted, the parent of a distribution, the security taken over or delisted, or the security split or changed.
    - `to` string, nullable, required: The security received: from itself for a split; null for acquired_or_delisted and uniform_change.
    - `ratio` number, nullable, required: 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, required: The action in words, to quote.
  - `method` string, required: The method of the figures, ti-flows/1.
  - `note` string, required: How to read the figures.
  - `summary` string, required: The night's summary.
  - `feed` string, required: This security's flows as an RSS feed.
  - `cite_as` string, required: A citation line: the security, the closes of the window and this answer's address.
  - `cite_html` string, required: The credit as HTML: a link to this answer, then its address.
  - `docs` string, required: Where the answer 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

- `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_held_by_daily_funds: no fund read daily from its issuer's files held the key or moved it in the last 20 trading days; summary names the night's summary.
- `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)
