tickerbot.io

Get a ticker's holdings

GEThttps://api.tickerbot.io/v2/tickers/{ticker}/holdings

Returns an ETF's constituents and their weights, heaviest first, and its sector weights.

stringrequired

ETF symbol. Case-insensitive.

integerdefault 500

Max holdings returned. Max 5000. When the cap cuts the list, the response sets truncated: true and total (the ETF's full holding count) — raise limit to at least total to get the full set, possible whenever total is within the 5000 cap (an over-cap limit is clamped to 5000, not an error). No truncated in the response means the list is complete.

as_ofstring

Server time this response was assembled (ISO 8601).

tickerstring

The ETF you asked for.

is_etfboolean

Whether the symbol is an ETF, from the instrument type on its ticker record.

countnumber

Holdings in this page.

totalnumber

Total constituents held, before limit.

truncatedboolean

true when limit cut the list short.

holdingsarray

Constituents, heaviest first, each with its weight.

sectorsarray

Sector weights, heaviest first, in the vendor's ETF-profile vocabulary. Always complete: limit, count, total and truncated are about holdings.

CodeMeaning
200Success — the response shape is documented under Returns above.
400Invalid ticker (malformed symbol).
404not_found: not a ticker we track. A tracked non-ETF answers 200 with is_etf: false instead.
  • is_etf: true with count: 0 means a real ETF whose holdings have not been ingested yet.
  • The other direction, which ETFs hold a stock, is the etf_holders signal on every ticker (GET /v2/tickers/NVDA lists them, the biggest position first), and a screen: POST /v2/scan with q set to 'SMH' = ANY(etf_holders) returns everything SMH holds.
  • Sector NAMES here are the vendor's ETF-profile vocabulary (INFORMATION TECHNOLOGY, CONSUMER DISCRETIONARY, MATERIALS), NOT the values the sector signal carries on a ticker (Technology, Consumer Cyclical, Basic Materials). The two line up conceptually but not as strings, so passing a value from here into a screen's q matches nothing.
  • Holdings and sector data come from a nightly post-close refresh of ETF profile data, so expect them to be up to a day behind.
  • Path history: GET /v2/etf/{ticker}/holdings is the older spelling of this read and keeps working, permanently, with the same response. GET /v2/tickers/{ticker}/sectors and GET /v2/etf/{ticker}/sectors keep serving the sector mix alone (count counts sectors there). All three carry a Link header naming this path.