/api/v1/nport/holders-of/ticker/{ticker}Funds holding a security, by ticker
Resolve a security ticker such as NVDA to one CUSIP and return its N-PORT fund holders, using the same results and pagination as the CUSIP holder endpoint.
Why use this
Common use case
This is the security-to-funds direction: NVDA resolves through the existing ticker normalizer and valid US security mappings, then the same CUSIP holder query runs. The existing /by-ticker/{ticker} endpoint remains the fund-to-filings direction. Neither existing address is replaced.
Successful results have the same fund identities, positions, sorting, period filter and limit/offset pagination as /holders-of/{cusip}. meta.resolution adds the requested ticker, normalized ticker and resolved CUSIP. A known security with no matching holdings returns an empty data array. Multiple valid mappings return 409 AMBIGUOUS_TICKER with candidate CUSIPs instead of silently choosing a security. No historical CUSIP-chain expansion or share-class merging is performed.
Default results show each fund's latest published month containing the CUSIP (a trust that received its series id partway through is one fund and appears once); they are reported holdings, not proof of ownership today. Check as_of on each row, or supply period for a common reporting date. Values and weights remain as filed. The sample position is IVV's NVIDIA holding from SEC accession 0002071691-26-019760 for 2026-06-30.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| ticker | path | required | — | — | US security ticker. Uses the shared case and alias normalization (for example brk.a to BRK-A) and valid US mappings. Distinct share classes stay separate. Unknown ticker: 404 UNKNOWN_TICKER; multiple mappings: 409 AMBIGUOUS_TICKER with candidate CUSIPs. | NVDA |
| period | query | optional | — | — | Pin one reporting date (YYYY-MM-DD). Omit for each fund's latest published month containing the resolved CUSIP; reporting dates can differ. | 2026-06-30 |
| limit | query | optional | 100 | — | Rows per page (1-500), identical to the CUSIP holder route. | 10 |
| offset | query | optional | 0 | — | Pagination offset. | 0 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | — |
| request_id | string | yes | — |
| timestamp | string | no | — |
| data | array | no | One row per fund key, ordered by position USD value descending. |
| data[].series_id | string | yes | SEC fund series; null for whole-trust filings keyed by registrant. |
| data[].series_name | string | yes | Fund name as filed. |
| data[].reg_cik | string | no | Registrant CIK, zero-padded to ten characters. |
| data[].reg_name | string | yes | Registrant name as filed. |
| data[].as_of | string | yes | Reporting date of this position. Default results can contain different dates. |
| data[].accession_number | string | no | Source SEC filing accession. |
| data[].holding | object | no | — |
| data[].holding.name | string | yes | — |
| data[].holding.title | string | yes | — |
| data[].holding.balance | number | yes | Position quantity in the filed units. |
| data[].holding.units | string | yes | Filed unit code, such as NS for shares. |
| data[].holding.val_usd | number | yes | Position value in US dollars, unchanged from the filing. |
| data[].holding.pct_val | number | yes | As-filed percentage of fund net assets; 7.50593247848 means 7.50593247848%. No rescaling. |
| data[].holding.asset_cat | string | yes | — |
| data[].holding.derivative_cat | string | yes | — |
| data[].fund_net_assets | number | yes | Fund net assets in US dollars at the row's reporting date. |
| meta | object | no | — |
| meta.cusip | string | no | The exact security CUSIP used by the holder query. |
| meta.period | string | no | Requested reporting date or latest_per_fund. |
| meta.pagination | object | no | — |
| meta.pagination.total | integer | yes | Always null; no full-corpus count is performed. |
| meta.pagination.limit | integer | no | — |
| meta.pagination.offset | integer | no | — |
| meta.pagination.has_more | boolean | no | True when another page is available. |
| meta.resolution | object | no | The existing US security lookup's ticker-to-CUSIP result. |
| meta.resolution.requested_ticker | string | no | Ticker exactly as received in the path. |
| meta.resolution.ticker | string | no | Ticker after the shared case and alias normalization. |
| meta.resolution.cusip | string | no | The single resolved security; also echoed in meta.cusip. |
Sample response
- "status": "success"
- "request_id": "nport-ticker-holders-example"
- "timestamp": "2026-09-27T00:00:00Z"
- "data":
- "meta":
- "cusip": "67066G104"
- "period": "2026-06-30"
- "pagination":
- "resolution":
Errors
| Status | Label | Description |
|---|---|---|
| 200 | Resolved security; data may be empty when no published holdings match. | |
| 400 | INVALID_PARAM: empty ticker or invalid period format. | |
| 401 | Authentication required. | |
| 402 | Insufficient token balance. | |
| 404 | UNKNOWN_TICKER: no valid US security mapping. | |
| 409 | AMBIGUOUS_TICKER: multiple valid mappings. Select a returned CUSIP and use /api/v1/nport/holders-of/{cusip}. |
Code samples
curl "https://api.finradar.ai/api/v1/nport/holders-of/ticker/NVDA?period=2026-06-30&limit=10&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).