Coverage Check
Check whether a ticker is covered for current and historical data.
Check current endpoint coverage.
Check supported historical years.
Current
/api/v1/current/holdingsThe current endpoint uses issuer-reported holdings and weights. It is the more granular path because issuers can update holdings more frequently than public filing cycles.
The current endpoint only supports a limited issuer set.
- ARK...
- Dimensional...
- Fidelity...
- First Trust...
- Global X...
- Invesco...
- iShares...
- Schwab...
- State Street...
- VanEck...
- Vanguard...
- WisdomTree...
Historical coverage is limited. Historical current-endpoint responses are served from cached results created by earlier queries rather than from a fully backfilled archive.
The current endpoint returns the latest cached snapshot on or before the requested date.
Query parameters
Example
curl "https://etf-holdings.com/api/v1/current/holdings" \
--get \
--data-urlencode "ticker=SPY" \
-H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"Output
Current-endpoint responses return one row per holding. Each row preserves the source security name or identifier in identifiers.original.
When the API has a ticker for a row, it also tries to include stable ticker-level identifiers such as cik, compositeFigi, and shareClassFigi. CUSIP and ISIN may be omitted from the response due to licensing restrictions even when the source data includes them.
ticker- The ETF or fund ticker that was requested.
asOf- The holdings date that the API resolved for the response.
holdings[]- The returned holdings rows, sorted by descending weight. If
limitis set, the API truncates this array after sorting. holdings[].weight- The holding weight as a decimal fraction of the portfolio.
holdings[].identifiers- A sparse object containing only the identifiers the API could confidently attach to that holding row. Ticker-level
cik,compositeFigi, andshareClassFigiare included when the API can resolve the ticker. Depending on licensing and availability,cusipandisinmay also be present. holdings[].identifiers.original- The raw identifier or name seen in the source row before any ticker mapping. Some identifier types may be omitted from the response due to licensing restrictions.
Success example
{
"ticker": "SPY",
"asOf": "2026-06-10",
"holdings": [
{
"weight": 0.0712,
"identifiers": {
"ticker": "AAPL",
"name": "Apple Inc.",
"cik": "0000320193",
"compositeFigi": "BBG000B9XRY4",
"shareClassFigi": "BBG001S5N8V8",
"original": "Apple Inc."
}
},
{
"weight": 0.0631,
"identifiers": {
"ticker": "MSFT",
"name": "Microsoft Corp.",
"cik": "0000789019",
"compositeFigi": "BBG000BPH459",
"shareClassFigi": "BBG001S5TD05",
"original": "Microsoft Corp."
}
}
]
}Unavailable example
{
"error": {
"code": "holdings_unavailable",
"message": "Holdings are not available for that request",
"requestId": "req_123"
}
}Historical
/api/v1/historical/holdingsThe historical endpoint returns the latest supported holdings snapshot on or before the requested date.
Responses return a holdings array. Each holding includes its weight plus an identifiers object with any identifiers the API could confidently attach to that row, along with an original string that preserves the raw identifier or name shown in the original row before any ticker mapping.
Use the coverage checker above to see which historical years are currently supported for a ticker.
Query parameters
Example
curl "https://etf-holdings.com/api/v1/historical/holdings" \
--get \
--data-urlencode "ticker=SPY" \
--data-urlencode "tickerMapping=none" \
-H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"Output
Historical-endpoint responses return one row per holding. identifiers.original preserves the raw filing identifier or security name for that row, and the remaining identifier fields stay sparse unless the API can resolve them confidently. When the API resolves a ticker for a filing row, it also tries to include identifiers such as cik, compositeFigi, and shareClassFigi. CUSIP and ISIN may be omitted from the response due to licensing restrictions even when the source data includes them.
ticker- The ETF or fund ticker that was requested.
asOf- The holdings date that the API resolved for the historical snapshot.
source- A source label for the resolved historical snapshot.
holdings[]- The returned holdings rows, sorted by descending weight. If
limitis set, the API truncates this array after sorting. holdings[].weight- The holding weight as a decimal fraction of the reported portfolio.
holdings[].identifiers- A sparse object containing only the identifiers the API could confidently attach to that holding row, such as
ticker,cik,compositeFigi,shareClassFigi, orname. Depending on licensing and availability,cusipandisinmay also be present. holdings[].identifiers.original- The raw identifier or name seen in the original row before any ticker mapping. Some identifier types may be omitted from the response due to licensing restrictions. This is the best field to use if you want to apply your own mapping later.
Success example
{
"ticker": "IWM",
"asOf": "2008-06-30",
"holdings": [
{
"weight": 0.000231345924,
"identifiers": {
"name": "Gaiam Inc.",
"original": "Gaiam Inc."
}
},
{
"weight": 0.000373316479,
"identifiers": {
"name": "Greenfield Online Inc.",
"original": "Greenfield Online Inc."
}
}
]
}Unavailable example
{
"error": {
"code": "holdings_unavailable",
"message": "Holdings are not available for that request",
"requestId": "req_123"
}
}