Skip to documentation

API reference

ETF holdings API

Current and historical holdings, availability checks, and full portfolio reports.

ContentsOverview

Authentication

Bearer authentication

All v1 endpoints require an API key in the Authorization header.

HeaderAuthorization: Bearer $ETF_HOLDINGS_API_KEY
Base URLhttps://etf-holdings.com/api/v1
Access

Holdings endpoints and reports are billable; coverage checks are not.

Errors

Error responses

Errors use a consistent JSON envelope. Include requestId when contacting support.

400Invalid or missing request parameters.
401Missing, malformed, or revoked API key.
402Account access or available balance cannot cover the request.
429Request rate exceeded; retry with backoff.
503No supported holdings or report snapshot was available for the request.
{
  "error": {
    "code": "holdings_unavailable",
    "message": "Holdings are not available for that request",
    "requestId": "req_123"
  }
}

Coverage

Coverage checker

Check current and historical availability for a ticker.

CurrentWaiting
Check current endpoint coverage

Check current endpoint coverage.

HistoricalWaiting
Check historical endpoint coverage

Check supported historical years.

Current

Current holdings

Issuer-provided snapshots and current availability.

Current source integrationsView supported issuer families

Availability varies by fund and date. Check coverage before requesting a snapshot.

  • Aberdeen...
  • AdvisorShares...
  • Alger...
  • ALPS...
  • American Century...
  • Amplify...
  • ARK...
  • Avantis...
  • Bitwise...
  • BNY Mellon...
  • Calamos...
  • Capital Group...
  • Davis...
  • Dimensional...
  • Eaton Vance...
  • Fidelity...
  • First Trust...
  • Global X...
  • GMO...
  • Goldman Sachs...
  • GraniteShares...
  • Grayscale...
  • Harbor...
  • Innovator...
  • Invesco...
  • iShares...
  • JPMorgan...
  • MarketDesk...
  • MicroSectors...
  • Neuberger...
  • ProShares...
  • Roundhill...
  • Schwab...
  • SEI...
  • Simplify...
  • Sprott...
  • State Street...
  • Strive...
  • T. Rowe Price...
  • USCF...
  • VanEck...
  • Vanguard...
  • WisdomTree...

Current holdings

Get the latest available holdings

Resolve an issuer-published holdings snapshot for an ETF. Use at to request the latest cached snapshot on or before a date.

GET/api/v1/current/holdings
API key requiredIssuer-backedBillable: per returned holding
Request

Query parameters

NameTypeDescription
tickerRequiredstringETF or fund ticker symbol.SPY
atOptionalISO 8601 dateOptional query time. The endpoint resolves the latest snapshot on or before it.2026-06-01
limitOptionalintegerMaximum holdings to return after descending-weight sorting.25
fallbackOptionalbooleanWhen true, fall back to the latest SEC filing-backed holdings if issuer holdings are unavailable. Defaults to false.false
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/current/holdings?ticker=SPY&limit=25' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
tickerstringThe ETF ticker that was resolved for this request.
asOfdateThe snapshot date that was returned.
filingDateOptionaldateThe SEC filing date for a filing-backed snapshot.
sourceOptionalstringA source label when the resolved snapshot has one.
fundFundProfileETF-level identity, provider, assets, listing, and source holdings count. Sparse fields are omitted when unavailable.
holdings[]Holding[]Holdings sorted by descending weight. The optional limit is applied after sorting.
Live request

Run this endpoint

ticker
ETF or fund ticker symbol.
at(optional)
Optional query time. The endpoint resolves the latest snapshot on or before it.
limit(optional)
Maximum holdings to return after descending-weight sorting.
fallback(optional)
When true, fall back to the latest SEC filing-backed holdings if issuer holdings are unavailable. Defaults to false.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/current/holdings" \
  --get \
  --data-urlencode "ticker=SPY" \
  --data-urlencode "limit=25" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Current coverage

Check issuer snapshot availability

Return issuer holdings snapshots within an as-of date range.

GET/api/v1/current/coverage
API key requiredAvailability onlyCurrent source
Request

Query parameters

NameTypeDescription
tickerRequiredstringETF or fund ticker symbol to check.SPY
fromOptionalYYYY-MM-DDEarliest holdings date to include. Defaults to 83 days before today.2026-08-30
toOptionalYYYY-MM-DDLatest holdings date to include. Defaults to today.2026-09-01
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/current/coverage?ticker=SPY&from=2026-08-30&to=2026-09-01' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
tickerstringRequested ETF ticker.
fromdateEarliest holdings date in the requested range.
todateLatest holdings date in the requested range.
snapshotsCurrentCoverageSnapshot[]Issuer holdings snapshots in the requested range.
Live request

Run this endpoint

ticker
ETF or fund ticker symbol to check.
from(optional)
Earliest holdings date to include. Defaults to 83 days before today.
to(optional)
Latest holdings date to include. Defaults to today.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/current/coverage" \
  --get \
  --data-urlencode "ticker=SPY" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Historical

Historical holdings

Filing-backed snapshots and historical-year availability.

Historical holdings

Resolve a filing-backed historical snapshot

Return the latest supported holdings snapshot on or before the requested date without lookahead.

GET/api/v1/historical/holdings
API key requiredFiling-backedBillable: per returned holding
Request

Query parameters

NameTypeDescription
tickerRequiredstringETF or fund ticker symbol.IWM
atOptionalISO 8601 dateOptional requested historical date. The API returns the latest supported snapshot on or before it.2008-06-30
limitOptionalintegerMaximum holdings to return after descending-weight sorting.25
tickerMappingOptionalnone | partial | fullControls identifier-to-ticker mapping. Use full when downstream analysis needs maximum ticker coverage.full
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/historical/holdings?ticker=IWM&at=2008-06-30&tickerMapping=full' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
tickerstringThe ETF ticker that was resolved for this request.
asOfdateThe snapshot date that was returned.
filingDateOptionaldateThe SEC filing date for a filing-backed snapshot.
sourceOptionalstringA source label when the resolved snapshot has one.
fundFundProfileETF-level identity, provider, assets, listing, and source holdings count. Sparse fields are omitted when unavailable.
holdings[]Holding[]Holdings sorted by descending weight. The optional limit is applied after sorting.
Live request

Run this endpoint

ticker
ETF or fund ticker symbol.
at(optional)
Optional requested historical date. The API returns the latest supported snapshot on or before it.
limit(optional)
Maximum holdings to return after descending-weight sorting.
tickerMapping(optional)
Controls identifier-to-ticker mapping. Use full when downstream analysis needs maximum ticker coverage.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/historical/holdings" \
  --get \
  --data-urlencode "ticker=SPY" \
  --data-urlencode "at=2024-06-30" \
  --data-urlencode "limit=25" \
  --data-urlencode "tickerMapping=full" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Historical coverage

Check filing-backed availability

Return SEC filings for supported holdings snapshots within a filing-date range.

GET/api/v1/historical/coverage
API key requiredAvailability onlyFiling coverage
Request

Query parameters

NameTypeDescription
tickerRequiredstringETF or fund ticker symbol to check.SPY
fromOptionalYYYY-MM-DDEarliest filing date to include. Defaults to the ETF listing date.2020-02-28
toOptionalYYYY-MM-DDLatest filing date to include. Defaults to today.2020-06-01
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/historical/coverage?ticker=SPY&from=2020-02-28&to=2020-06-01' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
tickerstringRequested ETF ticker.
fromdateEarliest filing date in the requested range.
todateLatest filing date in the requested range.
filingsHistoricalCoverageFiling[]SEC filings for supported holdings snapshots in the requested range.
Live request

Run this endpoint

ticker
ETF or fund ticker symbol to check.
from(optional)
Earliest filing date to include. Defaults to the ETF listing date.
to(optional)
Latest filing date to include. Defaults to today.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/historical/coverage" \
  --get \
  --data-urlencode "ticker=SPY" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Reports

Portfolio reports

Reports retain the complete holdings response and add portfolio or comparison statistics from ticker-mapped rows.

Current report

Return a complete current portfolio report

Get the full enriched holdings table plus portfolio statistics, classifications, and valuation analysis for the latest available snapshot.

GET/api/v1/reports/current
API key requiredFull holdings tableBillable: per returned holding
Request

Query parameters

NameTypeDescription
tickerRequiredstringETF or fund ticker symbol.SPY
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/reports/current?ticker=SPY' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
reportType"portfolio"Identifies a one-portfolio report.
endpoint"current" | "historical"The data family that produced the report.
requestedReportRequestNormalized ticker and optional requested historical date.
generatedAttimestampWhen the API assembled the report.
portfolioPortfolioReportThe full holdings table and derived analysis for the requested ETF.
Live request

Run this endpoint

ticker
ETF or fund ticker symbol.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/reports/current" \
  --get \
  --data-urlencode "ticker=SPY" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Historical report

Return a complete historical portfolio report

Get a filing-backed full holdings table and derived analysis for the latest supported snapshot on or before an optional historical date.

GET/api/v1/reports/historical
API key requiredFull holdings tableBillable: per returned holding
Request

Query parameters

NameTypeDescription
tickerRequiredstringETF or fund ticker symbol.SPY
dateOptionalYYYY-MM-DDOptional requested historical date. The API resolves the nearest supported snapshot on or before it.2024-06-30
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/reports/historical?ticker=SPY&date=2024-06-30' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
reportType"portfolio"Identifies a one-portfolio report.
endpoint"current" | "historical"The data family that produced the report.
requestedReportRequestNormalized ticker and optional requested historical date.
generatedAttimestampWhen the API assembled the report.
portfolioPortfolioReportThe full holdings table and derived analysis for the requested ETF.
Live request

Run this endpoint

ticker
ETF or fund ticker symbol.
date(optional)
Optional requested historical date. The API resolves the nearest supported snapshot on or before it.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/reports/historical" \
  --get \
  --data-urlencode "ticker=SPY" \
  --data-urlencode "date=2024-06-30" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Current comparison

Compare two current ETF portfolios

Return both complete current holdings tables plus shared positions, unique positions, weighted overlap, classifications, and valuation comparisons.

GET/api/v1/reports/current/comparison
API key requiredTwo full portfoliosBillable: both tables
Request

Query parameters

NameTypeDescription
tickerRequiredstringPrimary ETF ticker symbol.SPY
comparisonRequiredstringETF ticker symbol to compare with ticker.QQQ
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/reports/current/comparison?ticker=SPY&comparison=QQQ' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
reportType"comparison"Identifies a two-portfolio report.
endpoint"current" | "historical"The data family used for both portfolios.
requestedReportRequestNormalized primary ticker, comparison ticker, and historical date when applicable.
portfolios.tickerPortfolioReportFull enriched holdings table and analysis for ticker.
portfolios.comparisonPortfolioReportFull enriched holdings table and analysis for comparison.
analysisComparisonAnalysisShared and unique rows, overlap counts, allocation deltas, classifications, and valuations.
Live request

Run this endpoint

ticker
Primary ETF ticker symbol.
comparison
ETF ticker symbol to compare with ticker.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/reports/current/comparison" \
  --get \
  --data-urlencode "ticker=SPY" \
  --data-urlencode "comparison=QQQ" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Historical comparison

Compare two historical ETF portfolios

Resolve comparable filing-backed snapshots on or before a requested date and return both full portfolios with overlap analysis.

GET/api/v1/reports/historical/comparison
API key requiredTwo full portfoliosBillable: both tables
Request

Query parameters

NameTypeDescription
tickerRequiredstringPrimary ETF ticker symbol.SPY
comparisonRequiredstringETF ticker symbol to compare with ticker.QQQ
dateRequiredYYYY-MM-DDRequested historical date. Each ETF resolves to its latest supported snapshot on or before this date.2024-06-30
curl --request GET \
  --url 'https://etf-holdings.com/api/v1/reports/historical/comparison?ticker=SPY&comparison=QQQ&date=2024-06-30' \
  --header 'Authorization: Bearer $ETF_HOLDINGS_API_KEY'
Response

Response fields

FieldTypeDescription
reportType"comparison"Identifies a two-portfolio report.
endpoint"current" | "historical"The data family used for both portfolios.
requestedReportRequestNormalized primary ticker, comparison ticker, and historical date when applicable.
portfolios.tickerPortfolioReportFull enriched holdings table and analysis for ticker.
portfolios.comparisonPortfolioReportFull enriched holdings table and analysis for comparison.
analysisComparisonAnalysisShared and unique rows, overlap counts, allocation deltas, classifications, and valuations.
Live request

Run this endpoint

ticker
Primary ETF ticker symbol.
comparison
ETF ticker symbol to compare with ticker.
date
Requested historical date. Each ETF resolves to its latest supported snapshot on or before this date.

Loading request runner.

Example

curl "https://etf-holdings.com/api/v1/reports/historical/comparison" \
  --get \
  --data-urlencode "ticker=SPY" \
  --data-urlencode "comparison=QQQ" \
  --data-urlencode "date=2024-06-30" \
  -H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"

Schemas

Shared response objects

Fields shared by holdings and report responses. Enrichment is optional and may have a different as-of date.

Holding

The shared holding shape returned by current holdings, historical holdings, reports, and Explorer-backed portfolio responses.

FieldTypeDescription
weightnumber | nullPortfolio weight as a decimal fraction.
reportedPositionOptionalReportedPositionOptional source-reported position detail. Omitted when the source supplies weights without reliable position semantics.
identifiersHoldingIdentifiersSparse public identifiers for the source row.
classificationOptionalHoldingClassificationAvailable sector, industry-group, and industry enrichment.
valuationOptionalHoldingValuationAvailable valuation enrichment. Its asOf date can differ from the holdings snapshot.

ReportedPosition

Conservative position facts reported by the issuer or filing. Quantity units are only supplied when the source makes their meaning explicit.

FieldTypeDescription
quantityOptionalnumberReported position quantity.
quantityUnitOptionalstringExplicit quantity meaning, such as shares, principal, contracts, troy_ounces, shares_or_principal, or shares_or_contracts. Omitted when unknown.
priceOptionalnumberReported position price.
marketValueOptionalnumberReported position market value.
notionalValueOptionalnumberReported notional or exposure value.
currencyOptionalstringISO 4217 currency for reported monetary values when supplied by the source.

FundProfile

ETF-level facts normalized from reference metadata and the selected holdings snapshot. Fields are omitted when the source does not provide them.

FieldTypeDescription
nameOptionalstringFund name.
providerOptionalstringHoldings provider identifier.
assetClassOptionalstringIssuer-reported asset class.
inceptionDateOptionaldateIssuer-reported fund inception date.
listedAtOptionaldateReference-data listing date when available.
primaryExchangeOptionalstringPrimary listing exchange identifier.
expenseRatioOptionalnumberExpense ratio as a decimal fraction when reported by the source.
sharesOutstandingOptionalnumberETF shares outstanding when reported by the issuer or reference source.
totalAssetsOptionalFundAssetsAssets from the selected snapshot, a current ETF reference profile, or an estimate derived from position market values and weights.
holdingsCountintegerFull source holdings count before any response limit is applied.

FundAssets

Fund-level assets for the selected snapshot.

FieldTypeDescription
valuenumberTotal asset value.
currencystringISO 4217 currency code.
asOfOptionaldateEffective date when the source publishes one.
source"reported" | "reference_profile" | "derived_from_positions"Whether the total came from the snapshot, a current ETF profile, or a position-based estimate.
coverageOptionalnumberPortfolio-weight coverage used for a derived asset estimate.

HoldingIdentifiers

Resolved public identifiers. Fields are omitted when the source or reference data does not provide them.

FieldTypeDescription
tickerOptionalstringResolved security ticker.
nameOptionalstringResolved security name.
originalOptionalstringSource-row identifier or name retained for traceability.
cusipOptionalstringCUSIP when public identifier visibility permits it.
isinOptionalstringISIN when public identifier visibility permits it.
cikOptionalstringSEC central index key.
leiOptionalstringLegal entity identifier.
sedolOptionalstringSEDOL identifier.
figiOptionalstringFinancial Instrument Global Identifier.
compositeFigiOptionalstringComposite FIGI for the resolved security.
shareClassFigiOptionalstringShare-class FIGI for the resolved security.
identifierOptionalstringProvider-supplied identifier when available.

HoldingClassification

GICS-style classification enrichment for a mapped security.

FieldTypeDescription
sectorOptionalstringSector label.
industryGroupOptionalstringIndustry-group label.
industryOptionalstringIndustry label.

HoldingValuation

Point-in-time valuation enrichment for a mapped security.

FieldTypeDescription
priceToEarningsOptionalnumberPrice-to-earnings ratio.
priceToBookOptionalnumberPrice-to-book ratio.
priceToSalesOptionalnumberPrice-to-sales ratio.
asOfOptionaldateValuation provider as-of date.

CurrentCoverageSnapshot

An issuer holdings snapshot.

FieldTypeDescription
asOfdateHoldings date reported by the issuer.

HistoricalCoverageFiling

An SEC filing for a supported holdings snapshot.

FieldTypeDescription
filingDatedateDate the filing became publicly available through the SEC.
asOfdateHoldings date reported by the filing.

PortfolioReport

The portfolio object in a single report or either side of a comparison report.

FieldTypeDescription
tickerstringResolved ETF ticker.
asOfdateResolved snapshot date.
sourceOptionalstringSource label when available.
fundFundProfileETF-level facts for the selected holdings snapshot.
holdingsHolding[]Complete enriched public holdings table returned for this portfolio.
enrichmentReportEnrichmentEnrichment status plus ticker coverage counts.
analysisPortfolioAnalysisCounts, mapped-row coverage, statistics, and sector, industry-group, industry, and valuation analysis.

ReportEnrichment

Ticker-level enrichment coverage for a report portfolio.

FieldTypeDescription
status"ready" | "partial" | "empty" | "unavailable"Overall enrichment availability.
requestedTickersintegerMapped tickers requested from enrichment providers.
classifiedTickersintegerMapped tickers with classification data.
valuedTickersintegerMapped tickers with valuation data.

PortfolioAnalysis

Derived from the full holdings table after ticker-mapped rows are normalized. Classification and valuation side B is empty for a single portfolio.

FieldTypeDescription
holdingsCountintegerAll source rows in the returned holdings table.
mappedHoldingsCountintegerDistinct ticker-mapped positions after duplicate rows are combined.
mappedHoldingRowCountintegerSource rows with a mapped ticker.
unmappedHoldingRowCountintegerSource rows without a mapped ticker.
statisticsPortfolioStatistics | nullConcentration and exposure statistics when weighted mapped positions are present.
classificationsClassificationBreakdownSector, industry-group, and industry breakdowns.
valuationsValuationAnalysisP/E, P/B, and P/S aggregates and buckets.

PortfolioStatistics

Weight-based statistics for normalized mapped positions.

FieldTypeDescription
largestHoldingNormalizedHoldingLargest position by absolute weight.
topTenConcentrationnumberSum of absolute weights for the ten largest positions.
grossExposurenumberSum of absolute mapped weights.
netExposurenumberSum of signed mapped weights.

NormalizedHolding

A ticker-mapped position used for report analysis after duplicate source rows are combined.

FieldTypeDescription
tickerstringMapped security ticker.
namestringFirst available resolved security name; may be empty.
weightnumber | nullCombined position weight.

ClassificationBreakdown

Parallel sector, industry-group, and industry breakdowns. A is the requested ticker; B is the comparison ticker, or zero for a single portfolio.

FieldTypeDescription
sectorClassificationDimensionSector allocation and coverage.
industryGroupClassificationDimensionIndustry-group allocation and coverage.
industryClassificationDimensionIndustry allocation and coverage.

ClassificationDimension

Allocation buckets and classified-row coverage for one classification dimension.

FieldTypeDescription
bucketsClassificationBucket[]Classification labels, including Unclassified when present.
coverageClassificationCoverageClassified weight and row coverage for each side.

ClassificationBucket

One sector, industry group, or industry allocation bucket.

FieldTypeDescription
labelstringClassification label.
weightAnumberAbsolute mapped weight for the requested ticker.
weightBnumberAbsolute mapped weight for the comparison ticker.
countAintegerSource-row count for the requested ticker.
countBintegerSource-row count for the comparison ticker.

ClassificationCoverage

Classified weight and row counts for a classification dimension.

FieldTypeDescription
weightAnumberClassified absolute weight for the requested ticker.
weightBnumberClassified absolute weight for the comparison ticker.
countAintegerClassified source rows for the requested ticker.
countBintegerClassified source rows for the comparison ticker.
totalAintegerAll source rows for the requested ticker.
totalBintegerAll source rows for the comparison ticker.

ValuationAnalysis

Parallel valuation analysis for price-to-earnings, price-to-book, and price-to-sales.

FieldTypeDescription
priceToEarningsValuationMetricP/E aggregate and buckets.
priceToBookValuationMetricP/B aggregate and buckets.
priceToSalesValuationMetricP/S aggregate and buckets.

ValuationMetric

One valuation ratio for the requested ticker and comparison ticker, or an empty B side for a single portfolio.

FieldTypeDescription
labelstringDisplay label: P/E, P/B, or P/S.
aValuationMetricSideRequested ticker aggregate.
bValuationMetricSideComparison ticker aggregate; empty for a single portfolio.
bucketsValuationBucket[]Weight and row counts by valuation band.

ValuationMetricSide

Weighted valuation aggregate and provider coverage for one portfolio.

FieldTypeDescription
valuenumber | nullWeighted harmonic ratio when positive values are available.
coveragenumberShare of absolute row weight covered by the metric.
countintegerRows with a numeric metric.
totalintegerRows considered for the metric.
asOfdate | nullLatest valuation as-of date among covered rows.

ValuationBucket

One valuation-band allocation bucket.

FieldTypeDescription
labelstringValuation band label.
weightAnumberAbsolute mapped weight in the band for the requested ticker.
weightBnumberAbsolute mapped weight in the band for the comparison ticker.
countAintegerRows in the band for the requested ticker.
countBintegerRows in the band for the comparison ticker.

ComparisonAnalysis

Mapped-ticker comparison metrics. Full source rows remain available in both portfolio tables.

FieldTypeDescription
snapshotAComparisonSnapshotMapped-ticker summary for the requested ticker.
snapshotBComparisonSnapshotMapped-ticker summary for the comparison ticker.
sharedSharedHolding[]Mapped securities held by both portfolios, with both weights and their delta.
uniqueANormalizedHolding[]Mapped securities unique to the requested ticker.
uniqueBNormalizedHolding[]Mapped securities unique to the comparison ticker.
sharedTickerCountintegerNumber of shared mapped tickers.
uniqueTickerCountAintegerMapped tickers unique to the requested ticker.
uniqueTickerCountBintegerMapped tickers unique to the comparison ticker.
weightedOverlapnumberSum of the lower same-direction weight for shared mapped positions.
classificationsClassificationBreakdownSector, industry-group, and industry allocation comparisons.
valuationsValuationAnalysisP/E, P/B, and P/S comparisons.

ComparisonSnapshot

Mapped-ticker summary for one side of a comparison.

FieldTypeDescription
tickerstringResolved ETF ticker.
asOfdateResolved snapshot date.
holdingsCountintegerDistinct mapped tickers after duplicate rows are combined.
mappedHoldingRowCountintegerSource rows with a mapped ticker.
unmappedHoldingRowCountintegerSource rows without a mapped ticker.
statisticsPortfolioStatistics | nullConcentration and exposure statistics for mapped positions.

SharedHolding

A ticker-mapped position present in both portfolios.

FieldTypeDescription
tickerstringShared security ticker.
namestringFirst available resolved security name; may be empty.
weightAnumber | nullCombined weight in the requested ticker.
weightBnumber | nullCombined weight in the comparison ticker.
differencenumber | nullweightA minus weightB.
absoluteDifferencenumber | nullAbsolute value of difference.
combinedWeightnumberSum of absolute weights across both portfolios.
sameDirectionbooleanWhether both nonzero weights have the same sign.

ReportRequest

Normalized report query parameters returned with each report.

FieldTypeDescription
tickerstringPrimary requested ETF ticker.
comparisonOptionalstringComparison ticker for a comparison report.
datedate | nullRequested historical date, or null for current reports.

ErrorResponse

Response body for a non-successful API request.

FieldTypeDescription
errorApiErrorStructured API error.

ApiError

Structured error returned with the HTTP status code.

FieldTypeDescription
codestringMachine-readable error code.
messagestringHuman-readable error message.
requestIdstringRequest identifier for support and troubleshooting.
detailsOptionalobjectAdditional details for exposed client errors.

Support

Coverage and data questions

Include the ticker, date, and requestId.
Contact support