Appearance
Index constituents
The for_index selector resolves a published index short id to its constituent ticker universe and drives the same per-symbol subscribe the symbol-first accessor argument ships. Operators no longer maintain a constituent table — the resolution happens inside the engine behind one builder call.
Supported indices
| Short id | Index | Constituents | Aliases |
|---|---|---|---|
SPX | S&P 500 | ~500 | SPY |
NDX | Nasdaq-100 | ~100 | QQQ |
DJI | Dow Jones Industrial Average | 30 | DIA |
SP400 | S&P MidCap 400 | ~400 | MDY |
SP600 | S&P SmallCap 600 | ~600 | SLY |
CUSTOM | Caller-supplied basket | n | (verbatim ticker list) |
The bare-string accept-shape canonicalises case — "spx", "Spx", and "SPX" resolve identically. Unrecognised names fall through to an empty custom payload; the subscribe-side materialiser surfaces a structured invalid-spec rejection citing the offending input.
The Russell 2000 (RUT / IWM) and Russell 3000 (R3K / IWV) are not in the constituent substrate today. Desks targeting those universes pass their own ticker list to the analytic accessor.
Hydration semantics
Hydration is lazy and per-index. The first for_index("SPX").subscribe(...) triggers one constituent fetch; subsequent subscribes against the same index reuse the cached symbol list with no further fetch. The cache is session-level — every analytic builder on a single client shares one constituent map.
The constituent source is offline after the first successful hydration: every constituent file lives in a local ETag-revalidated cache. The cache root defaults to a per-user cache directory and is overridable by environment variable for deployments that prefer a different location.
Tier-cap interaction
Index resolution happens before the cap-aware subscribe gate, and the gate is symbol-list-count agnostic — for_index("SPX") and a verbatim 500-symbol accessor argument produce identical gate paths once the universe is materialised. The published (security type, tier, subscription kind, subscribe mode) cap matrix decides the outcome; a broad index union can exceed a narrower tier's quote / trade cap. See tier quotas for the envelope and universe selection for the analytics that consume an index universe.
Over-cap subscribes surface as a structured subscription-cap rejection carrying the matched (analytic, security type, kind, observed tier, requested, cap) quad and a one-line operator-facing upgrade-path remediation.
Methodology and data sourcing
Constituent universes are resolved through a layered source ladder, ordered by priority so the most recent reliable layer wins:
- Sponsor CDNs (iShares / Invesco / SPDR) — forward-going daily holdings sheets, terms-of-service permitting.
- OSS GitHub mirrors — daily and monthly constituent histories (1996-present), permissively licensed, used as cross-check layers.
- Internet Archive Wayback Machine — patchy daily snapshots, fair use.
- SEC EDGAR N-PORT filings — the regulated baseline, under the Investment Company Act of 1940 Rule 30b1-7 (17 CFR section 270.30b1-7), public domain.
The N-PORT baseline is the regulated source for portfolio-composition disclosures of registered open-end ETFs (the IVV / QQQ / DIA tracking vehicles whose holdings stand in as a proxy for the SPX / NDX / DJI constituent universes). The 60–90 day N-PORT filing lag is an unavoidable regulatory constraint on the baseline; the sponsor CDN and GitHub mirror layers close the recency gap.
See also
- Universe selection — the
for_indexbuilder surface. - Sector constituents — the peer
for_sectorsurface over SEC SIC divisions. - Analytics catalogue — the full analytic surface.