DocsFundamentals

Fundamentals REST endpoints

Company reference and share-structure data for US and EU stocks under /fundamentals: free float, shares outstanding, sector, ownership, short interest, and liquidity.

Authx-api-key headerBase path/fundamentalsWebSocketREST onlySymbol formatCC:SYMBOL (e.g. US:AAPL)
Fundamentals is a standalone data product: it requires the Fundamentals permission on your account and works with or without live market data products. Coverage today is the full US stock universe served by Stocks, plus the European markets we serve: Germany (DE), Spain (ES) and France (FR). Page through a market with ?market=DE.

How it works

Values are maintained continuously by our aggregation layer and served from TickerLayer storage, so responses are fast and unaffected by upstream conditions. Share-structure figures (float, shares outstanding, short interest, volumes) refresh daily; company profile fields (name, venue, sector, industry, country) refresh monthly. Every item carries its own as_of vintage, which tracks the share-structure figures and only advances when they are genuinely refreshed.

Share-structure figures are also written as one set, never mixed across refreshes. If an upstream restatement temporarily leaves one of them unavailable, the whole set keeps its previous values and its previous as_of rather than pairing a new count with an older one. That is what makes float_ratio and short_float_ratio safe to rely on.

Responses never contain null: a field our aggregation layer has no reliable value for is omitted from the payload. Ratios such as float_ratio and short_float_ratio are computed from the counts in the same payload, so they are always internally consistent.

Depositary receipts get one extra safeguard. Reference data for them often arrives denominated in the issuer's home-market ordinary shares rather than the receipts that actually trade, and sometimes at a stale vintage on top. We cross-check every reported count against the listing's market cap and live traded price; a count that fails is withheld, and the payload instead carries shares_listed_est and free_float_est, listing-level estimates clearly named as such. Filter on the reported fields when you need exact counts, and fall back to the estimates when you only need the order of magnitude, as in low-float screening.

GET/fundamentals/stocks/{symbol}

Fundamentals for one symbol

Returns the full fundamentals item for one market-qualified symbol. 404 when the symbol is unknown or has no fundamentals coverage yet (very fresh listings can lag a day).

ParameterTypeDescription
symbolreqstringMarket-qualified symbol (CC:SYMBOL, e.g. US:AAPL or DE:RHM). Fundamentals currently cover the US, DE, ES and FR markets.
curl -sS "https://api.tickerlayer.com/fundamentals/stocks/US:KO" \
  -H "x-api-key: <YOUR_API_KEY>"

Response 200 OK

JSON
{
  "symbol": "US:KO",
  "base_symbol": "KO",
  "market": "US",
  "company": "The Coca-Cola Company",
  "exchange": "NYSE",
  "mic": "XNYS",
  "country": "United States",
  "country_code": "US",
  "sector": "Consumer Defensive",
  "industry": "Beverages - Non-Alcoholic",
  "security_type": "Common Stock",
  "employees": 65900,
  "market_cap": 388735324105,
  "shares_total": 4303000000,
  "free_float": 3874015338,
  "float_ratio": 0.9003,
  "short_interest": 44821363,
  "short_float_ratio": 0.0116,
  "days_to_cover": 2.56,
  "insider_ownership": 0.099,
  "institutional_ownership": 0.686,
  "adv_10d": 12690023,
  "adv_90d": 15906204,
  "beta": 0.342,
  "as_of": "2026-08-20T11:56:49.392Z"
}
GET/fundamentals/stocks?symbols=...

Batch lookup

Returns fundamentals for up to 100 symbols in one call. Symbols without coverage are listed under missing instead of appearing as empty items.

ParameterTypeDescription
symbolsstringComma-separated market-qualified symbols, at most 100 per request. When present, the response is a batch lookup and market, cursor and limit are ignored.
curl -sS "https://api.tickerlayer.com/fundamentals/stocks?symbols=US:KO,US:SOUN,US:ZZZZ" \
  -H "x-api-key: <YOUR_API_KEY>"

Response 200 OK

JSON
{
  "count": 2,
  "items": [
    { "symbol": "US:KO", "free_float": 3874015338, "shares_total": 4303000000, "...": "..." },
    { "symbol": "US:SOUN", "free_float": 400969014, "shares_total": 411574436, "...": "..." }
  ],
  "missing": ["US:ZZZZ"]
}
GET/fundamentals/stocks

Full universe, paged

Pages through fundamentals for every covered symbol, ordered by symbol. Built for screeners: pull the whole universe in a handful of requests instead of one call per ticker, then filter locally (for example free_float below 10M).

ParameterTypeDescription
marketstringMarket code to page through: US, DE, ES or FR. Defaults to US.
cursorstringResume marker from the previous page (next_cursor). Omit to start from the first symbol.
limitintegerRows per page, default 500, maximum 1000.
curl -sS "https://api.tickerlayer.com/fundamentals/stocks?limit=1000" \
  -H "x-api-key: <YOUR_API_KEY>"

Response 200 OK

JSON
{
  "market": "US",
  "count": 1000,
  "items": [ { "symbol": "US:A", "...": "..." } ],
  "next_cursor": "US:AVGO"
}
Pass next_cursor from each response as cursor on the next request; the last page omits it. With limit=1000 the full US universe is currently 8 requests.

Field reference

Identity fields are always present; every other field is optional and omitted when unknown. Ownership fields are fractions between 0 and 1.

Item fields

ParameterTypeDescription
symbol / base_symbol / marketstringIdentity of the listing, same convention as every other endpoint (US:AAPL, AAPL, US).
companystringIssuer name.
exchange / micstringListing venue and its MIC code (e.g. NYSE, XNYS).
country / sector / industrystringIssuer origin country and classification.
country_codestringISO 3166-1 alpha-2 code of the issuer origin country, derived from country. Distinct from the market prefix, which is the listing venue: a depositary receipt can trade on market US with country_code CN. Omitted when the origin cannot be resolved to a code.
security_typestringInstrument class, e.g. Common Stock.
employeesintegerReported headcount.
market_capnumberMarket capitalization in the listing currency. Withheld together with shares_total when the pair fails the live-price cross-check on an ordinary listing.
shares_totalintegerTotal shares outstanding, cross-checked against the market cap and the live traded price. On depositary receipts a count that contradicts the listing (reported on the ordinary-share base, or a stale vintage of it) is withheld and replaced by the estimates below. On ordinary listings a count and market cap that jointly contradict the live price by a wide margin (a stale pair, common on micro caps that reverse-split and re-dilute) are both withheld, with no substitute.
free_floatintegerShares available for public trading (free float). Omitted, together with the two ratios below, when the reported float is not reconcilable with the share count for that listing, which happens on some depositary receipts.
float_rationumberfree_float divided by shares_total, 0 to 1. Derived by our aggregation layer, always consistent with the counts in the same payload.
shares_listed_estintegerESTIMATE of the listing-level share count (market cap over the live traded price). Served only for depositary receipts whose reported counts failed validation, so a symbol never carries both a reported count and an estimate. An order-of-magnitude screening aid, not a reported figure.
free_float_estintegerESTIMATE of the listing-level float: shares_listed_est reduced by reported insider ownership. Same serving rule and the same caveat as shares_listed_est.
short_interestintegerShares currently sold short.
short_float_rationumbershort_interest divided by free_float. Derived, same guarantee as float_ratio.
days_to_covernumberShort interest expressed in days of average trading volume.
insider_ownership / institutional_ownershipnumberFraction of shares held (0 to 1).
adv_10d / adv_90dintegerAverage daily share volume over 10 and 90 sessions.
betanumberBeta versus the broad market.
as_ofstringISO-8601 vintage of the share-structure figures in this item. It moves only when those numbers are actually refreshed, so it never overstates how current they are. Share structure refreshes daily; profile fields refresh monthly.