/api/v1/nport/{accession}/holdingsThe filing's complete portfolio holdings table
Returns complete portfolio holdings for a fund or ETF's published monthly N-PORT filing. The accession for a requested as_of date comes from GET /api/v1/nport/by-ticker/{ticker}. Every Part C position row of one N-PORT filing — identifiers, balance, USD value, % of net assets, category flags, debt terms, and the full derivative/repo/securities-lending blocks — paginated, largest position first. Missing tickers use the shared exact-CUSIP lookup and ticker_source identifies their origin.
Why use this
Common use case
Ticker availability: a reported ticker takes priority. When missing, the endpoint uses the existing valid security mapping for that exact CUSIP. ticker_source is filing, cusip_mapping, or null. Missing mappings stay blank. Lookup symbols are current reference labels, not a guarantee of the ticker used at the historical reporting date. Raw identifiers, quantities, values, weights, row order and pagination remain unchanged; no stored filing is updated. No successor-chain expansion or share-class merging is performed.
The position table of one filing — the complete monthly portfolio the fund disclosed, from a few dozen rows for a focused fund to several thousand for a total-market index fund. Rows are served largest-position-first (val_usd DESC), and meta.pagination.total is exact, so a client can size the book before paging.
Unit correctness is on the row: balance means shares only when units is NS — PA rows are principal (face) amounts and NC rows are contract counts. pct_val is the as-filed percentage of net assets in percentage points (5.242223 means 5.242223%), the unit the filer reports; the API never rescales it.
Derivatives: the form defines seven categories (forward, future, option, swap, swaption, warrant, other), and each derivative row carries its category code plus the COMPLETE as-filed block in derivative_info — counterparties, notionals, terms, and the reference-instrument tree, including the nested-derivative case (a swaption's underlying swap, an option on a future), preserved recursively exactly as filed. Repos and securities-lending rows carry their own blocks the same way. Structured blocks keep RAW STRING values (the form's "N/A", Y/N, and title-case enums are never coerced inside a block); typed scalar columns are numeric, with any literal "N/A" preserved in lexical_overrides.
For which FUNDS hold a given security (the reverse direction), use GET /api/v1/nport/holders-of/{cusip}.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| accession | path | required | — | — | SEC accession number of a PUBLISHED filing (superseded/quarantined return 404 with the state in error.details). | 0001752724-26-002544 |
| cusip | query | optional | — | — | Exact 9-character CUSIP filter. | 037833100 |
| isin | query | optional | — | — | Exact ISIN filter. | US0378331005 |
| asset_cat | query | optional | — | — | Form asset category code as filed (e.g. EC equity-common, DBT debt, STIV short-term investment vehicle, RA repurchase agreement, DE derivative). | EC |
| derivative_cat | query | optional | — | — | Derivative category code as filed (FWD forward, FUT future, OPT option, SWP swap, SWO swaption, WAR warrant, OTH other). Rows without a derivative carry null and are excluded by this filter. | SWP |
| min_pct | query | optional | — | — | Keep rows with pct_val >= this value, in pct_val's own unit: percentage points of net assets as filed (1 keeps positions of at least 1%; 5.242223 means 5.242223%). The API never rescales either value. | 1 |
| limit | query | optional | 100 | — | Rows per page (1-500). | 100 |
| 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 | Position rows ordered by val_usd DESC (largest first), then filing sequence. One row per reported investment. |
| data[].sequence | integer | no | — |
| data[].name | string | yes | Issuer name as filed. The form's "N/A" convention is preserved verbatim where the filer used it. |
| data[].lei | string | yes | Issuer LEI as filed. |
| data[].title | string | yes | Title of the issue as filed. |
| data[].cusip | string | yes | 9-char CUSIP. Null when the filer reported none (foreign instruments carry ISIN or an 'other' identifier in identifiers instead). |
| data[].isin | string | yes | ISIN from the identifiers block, lifted for direct filtering. |
| data[].ticker | string | yes | Reported ticker when present; otherwise the available current symbol from the shared valid mapping for this exact CUSIP. Null when neither is available. No successor expansion or share-class merging. |
| data[].ticker_source | string | yes | filing: the reported ticker was preserved. cusip_mapping: a missing ticker was filled from the shared security lookup. Null: unavailable. Lookup symbols are current reference labels, not a historical ticker guarantee. |
| data[].identifiers | object | yes | The full as-filed identifiers block (ISIN/ticker/other with their attribute values), raw strings. |
| data[].balance | number | yes | Quantity held, in the unit named by units: NS = number of shares, PA = principal amount, NC = number of contracts, OU = other units (desc_oth_units names it). As filed, full precision. |
| data[].units | string | yes | Unit code for balance (NS/PA/NC/OU). Critical for unit-correctness — a PA row is face value, not shares. |
| data[].desc_oth_units | string | yes | — |
| data[].cur_cd | string | yes | ISO-4217 currency of the investment when not USD; currency_conditional carries the conditional block (currency + exchange rate) for other-currency cases. |
| data[].currency_conditional | object | yes | — |
| data[].exchange_rt | number | yes | Exchange rate to USD as filed, for non-USD positions. |
| data[].val_usd | number | yes | Position value in USD as filed (fair value per the form's instructions), full precision. The sort key. |
| data[].pct_val | number | yes | Percentage of the fund's net assets, AS FILED, in percentage points at up to 12 decimals (5.242223 means 5.242223%). Never scaled by the API. |
| data[].payoff_profile | string | yes | Long / Short / N/A, title-case exactly as the form defines. |
| data[].asset_cat | string | yes | Asset category code as filed; asset_conditional carries the 'other' description block when the filer chose a write-in category. |
| data[].asset_conditional | object | yes | — |
| data[].issuer_cat | string | yes | Issuer type code as filed; issuer_conditional carries the write-in block. |
| data[].issuer_conditional | object | yes | — |
| data[].inv_country | string | yes | Investment country code as filed (inv_oth_country carries the write-in). |
| data[].inv_oth_country | string | yes | — |
| data[].is_restricted_sec | boolean | yes | Restricted-security flag as filed. |
| data[].fair_value_level | string | yes | ASC 820 fair-value hierarchy level as filed: 1, 2, or 3. |
| data[].debt_maturity_dt | string | yes | Debt maturity date. The form's perpetual-bond sentinel 2500-12-31 is served exactly as filed. |
| data[].debt_coupon_kind | string | yes | Coupon type as filed (Fixed / Floating / Variable / None — title-case per the form's enums). |
| data[].debt_annualized_rt | number | yes | Annualized coupon rate as filed. |
| data[].debt_is_default | boolean | yes | In-default flag as filed. |
| data[].debt_sec | object | yes | The full as-filed debt-security block (convertible terms, reference instruments, etc.), raw strings. |
| data[].derivative_cat | string | yes | One of the seven form derivative categories (FWD/FUT/OPT/SWP/SWO/WAR/OTH) when the row is a derivative. |
| data[].derivative_info | object | yes | The complete as-filed derivative block for the category — counterparties, notional, terms, and the reference-instrument tree (which may nest another derivative; nesting is preserved recursively, exactly as filed). |
| data[].repurchase_agrmt | object | yes | As-filed repurchase-agreement block (rate, maturity, collateral schedule). |
| data[].security_lending | object | yes | As-filed securities-lending block (cash collateral, non-cash collateral, loaned value). |
| data[].lexical_overrides | object | yes | { column: verbatim } preservation of literal "N/A" entries in typed columns for this row. |
| meta | object | no | — |
| meta.accession_number | string | no | The source filing accession, unchanged by ticker enrichment. |
| meta.pagination | object | no | — |
| meta.pagination.total | integer | no | Exact accession-scoped count after filters. |
| meta.pagination.limit | integer | no | — |
| meta.pagination.offset | integer | no | — |
| meta.pagination.has_more | boolean | no | — |
Sample response
- "status": "success"
- "request_id": "nport-holdings-example"
- "timestamp": "2026-09-27T00:00:00Z"
- "data":
- "meta":
- "accession_number": "0001752724-26-002544"
- "pagination":
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl "https://api.finradar.ai/api/v1/nport/0001752724-26-002544/holdings?cusip=037833100&isin=US0378331005&asset_cat=EC&derivative_cat=SWP&min_pct=1&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).