Skip to content
/api/v1/nport/by-ticker/{ticker}

Monthly filing history for a fund by ticker

Find a fund or ETF's monthly holdings filing by ticker. Returns published N-PORT filing history, newest month first, with as_of reporting dates and accession_number. Each row's accession_number identifies the filing whose complete portfolio holdings GET /api/v1/nport/{accession}/holdings returns for that row's as_of date. The history is paginated; meta.pagination.has_more reports whether older months remain.

5 tokensoffset paginationSince 3.139.0

Why use this

The same monthly history as /by-series/{series_id} without needing the SEC id first. meta.resolution reports exactly how the ticker resolved (winning class claims and their source), so a surprising history is explainable from the response itself.

Common use case

Fetching an ETF's filing timeline straight from its ticker (e.g. IVV), including single-fund unit investment trusts (e.g. SPY) that have no series id and resolve by registrant CIK instead.

N-PORT filings identify funds by SEC series id, while markets identify them by ticker — this endpoint is the bridge. The ticker-to-series join is built from four sources and resolved per share class by a fixed precedence: the filing's own acceptance-header roster (source sgml, present on live-ingested filings), the SEC's N-CEN annual-report datasets (ncen), the SEC's mutual-fund ticker file (mf), and a registrant-CIK fallback (cik) for single-fund unit investment trusts that appear in none of the above (SPY is the canonical example). Disagreements between sources are never silently overwritten — the winning claim per class is served and reported in meta.resolution.

A regular fund ticker resolves to its series and serves that series' monthly history. A trust-level match (source cik) serves the registrant's whole-fund filings, which carry no series id.

A fund whose trust received its SEC series id partway through is served as one history. When the trust's published reports carry exactly one series id, its earlier reports without one are returned together with the series' reports, exactly as filed (series_id null): QQQ filed 25 reports without a series id and, after it became an open-end ETF on December 22, 2025, reports under series S000101292, and this lookup returns all 28. A trust with several series keeps the series-only behavior, and if a second series appears later the attribution stops at that series' first report. GET /api/v1/nport/by-series/{series_id} stays literal to the SEC id and returns only the reports filed under it.

The row shape is identical to GET /api/v1/nport/by-series/{series_id}.

For just the AUM numbers over time (the chartable series), prefer GET /api/v1/nport/funds/{ticker}/aum-history — same resolution, leaner rows, cursor pagination.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
tickerpathrequired——Fund/class ticker, case-insensitive. Resolution precedence per class: the filing's own header roster (sgml) > the SEC's N-CEN datasets (ncen) > the SEC mutual-fund ticker file (mf) > registrant-CIK fallback for single-fund trusts (cik). Unknown tickers return 404 UNKNOWN_TICKER.IVV
limitqueryoptional100—Rows per page (1-500).100
offsetqueryoptional0—Pagination offset.0

Response schema

FieldTypeNullableDescription
data[]arraynoFiling summary rows, newest reporting month first — same row shape as /latest. For a single-fund trust resolved by CIK, rows are the trust's whole-fund filings (series_id null).
meta.resolutionobjectno{ ticker, matches: [{class_id, series_id, reg_cik, source}] }: the winning ticker claim per share class after source-precedence resolution. A ticker mapping to a series serves that series' months; a trust-level (cik-source) match serves the registrant's series-less filings.
meta.paginationobjectno{ total: null, limit, offset, has_more } — page forward with offset while has_more is true.

Sample response

·
  • "status": "success"
  • "data":
    ]
  • "meta":
    • "resolution":
    • "pagination":
    }
}

Errors

StatusLabelDescription
200OKRequest succeeded.
400Bad RequestInvalid query, body, or path parameter.
401UnauthorizedMissing or invalid Authorization header / api_Token.
402Payment RequiredInsufficient token balance for this call. Top up
429Too Many RequestsRate limit exceeded for your tier (see /pricing for tier limits). Tier limits
500Server ErrorUnexpected server-side failure. Retry with backoff; report if persistent.

Code samples

curl "https://api.finradar.ai/api/v1/nport/by-ticker/IVV?limit=100&offset=0" \
  -H "X-API-Key: YOUR_API_KEY"

Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).