Skip to content
/api/v1/nport/{accession}/holdings

The 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.

10 tokensoffset paginationSince 3.139.0

Why use this

The fund's entire disclosed portfolio for the month: equities, bonds, repos, and all seven derivative categories. Filter by cusip/isin to find one position, by asset_cat/derivative_cat to slice an asset class, or by min_pct to keep only meaningful positions.

Common use case

Rebuilding an ETF's monthly portfolio, extracting a bond fund's per-issue debt terms (coupon, maturity, default flag), or pulling every swap a fund holds via derivative_cat=SWP.

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

NameInRequiredDefaultAllowedDescriptionExample
accessionpathrequired——SEC accession number of a PUBLISHED filing (superseded/quarantined return 404 with the state in error.details).0001752724-26-002544
cusipqueryoptional——Exact 9-character CUSIP filter.037833100
isinqueryoptional——Exact ISIN filter.US0378331005
asset_catqueryoptional——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_catqueryoptional——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_pctqueryoptional——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
limitqueryoptional100—Rows per page (1-500).100
offsetqueryoptional0—Pagination offset.0

Response schema

FieldTypeNullableDescription
statusstringno—
request_idstringyes—
timestampstringno—
dataarraynoPosition rows ordered by val_usd DESC (largest first), then filing sequence. One row per reported investment.
data[].sequenceintegerno—
data[].namestringyesIssuer name as filed. The form's "N/A" convention is preserved verbatim where the filer used it.
data[].leistringyesIssuer LEI as filed.
data[].titlestringyesTitle of the issue as filed.
data[].cusipstringyes9-char CUSIP. Null when the filer reported none (foreign instruments carry ISIN or an 'other' identifier in identifiers instead).
data[].isinstringyesISIN from the identifiers block, lifted for direct filtering.
data[].tickerstringyesReported 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_sourcestringyesfiling: 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[].identifiersobjectyesThe full as-filed identifiers block (ISIN/ticker/other with their attribute values), raw strings.
data[].balancenumberyesQuantity 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[].unitsstringyesUnit code for balance (NS/PA/NC/OU). Critical for unit-correctness — a PA row is face value, not shares.
data[].desc_oth_unitsstringyes—
data[].cur_cdstringyesISO-4217 currency of the investment when not USD; currency_conditional carries the conditional block (currency + exchange rate) for other-currency cases.
data[].currency_conditionalobjectyes—
data[].exchange_rtnumberyesExchange rate to USD as filed, for non-USD positions.
data[].val_usdnumberyesPosition value in USD as filed (fair value per the form's instructions), full precision. The sort key.
data[].pct_valnumberyesPercentage 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_profilestringyesLong / Short / N/A, title-case exactly as the form defines.
data[].asset_catstringyesAsset category code as filed; asset_conditional carries the 'other' description block when the filer chose a write-in category.
data[].asset_conditionalobjectyes—
data[].issuer_catstringyesIssuer type code as filed; issuer_conditional carries the write-in block.
data[].issuer_conditionalobjectyes—
data[].inv_countrystringyesInvestment country code as filed (inv_oth_country carries the write-in).
data[].inv_oth_countrystringyes—
data[].is_restricted_secbooleanyesRestricted-security flag as filed.
data[].fair_value_levelstringyesASC 820 fair-value hierarchy level as filed: 1, 2, or 3.
data[].debt_maturity_dtstringyesDebt maturity date. The form's perpetual-bond sentinel 2500-12-31 is served exactly as filed.
data[].debt_coupon_kindstringyesCoupon type as filed (Fixed / Floating / Variable / None — title-case per the form's enums).
data[].debt_annualized_rtnumberyesAnnualized coupon rate as filed.
data[].debt_is_defaultbooleanyesIn-default flag as filed.
data[].debt_secobjectyesThe full as-filed debt-security block (convertible terms, reference instruments, etc.), raw strings.
data[].derivative_catstringyesOne of the seven form derivative categories (FWD/FUT/OPT/SWP/SWO/WAR/OTH) when the row is a derivative.
data[].derivative_infoobjectyesThe 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_agrmtobjectyesAs-filed repurchase-agreement block (rate, maturity, collateral schedule).
data[].security_lendingobjectyesAs-filed securities-lending block (cash collateral, non-cash collateral, loaned value).
data[].lexical_overridesobjectyes{ column: verbatim } preservation of literal "N/A" entries in typed columns for this row.
metaobjectno—
meta.accession_numberstringnoThe source filing accession, unchanged by ticker enrichment.
meta.paginationobjectno—
meta.pagination.totalintegernoExact accession-scoped count after filters.
meta.pagination.limitintegerno—
meta.pagination.offsetintegerno—
meta.pagination.has_morebooleanno—

Sample response

·
  • "status": "success"
  • "request_id": "nport-holdings-example"
  • "timestamp": "2026-09-27T00:00:00Z"
  • "data":
    ]
  • "meta":
    • "accession_number": "0001752724-26-002544"
    • "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/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).