Coverage Check
Check whether a ticker is covered for current and historical data.
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.
When historical current-endpoint data is available, it comes from the last cached snapshot on or before the requested date rather than from data after that date.
Query parameters
Example
curl "https://etf-holdings.com/api/v1/current/holdings" \
--get \
--data-urlencode "ticker=VOO" \
-H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"Output
Successful current-endpoint responses return one row per holding. That keeps the exact security name or identifier the source used for each row visible in the response instead of collapsing everything into a ticker-only summary.
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": "VOO",
"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 below 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=VOO" \
--data-urlencode "tickerMapping=none" \
-H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"Output
Successful historical-endpoint responses also return one row per holding. The original field preserves the raw filing identifier or security name for that row, and the rest of the 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"
}
}