/api/v1/nport/latestMost recent N-PORT filings across all funds
List the most recently filed N-PORT portfolio reports, newest first, with optional registrant / series / ticker / form-type filters.
Why use this
Common use case
The listing entry-point of the N-PORT surface. Every SEC-registered investment company (mutual funds and ETFs; money-market funds and SBICs excepted) reports its complete monthly portfolio on Form N-PORT, and this endpoint lists those reports newest-first as they are parsed.
Four composable filters: cik narrows to a registrant trust (one trust files for many series), series_id to one fund, ticker resolves a fund/class ticker to its series server-side (the same resolution the AUM endpoint uses — see meta.resolution in the response for exactly how it resolved), and form_type splits originals from amendments.
Amendment semantics: an NPORT-P/A supersedes the original for the same series and month AT INGEST, so listings never show two live rows for one month — the amendment row (is_amendment=true) is the served truth. Rows loaded from the SEC's historical quarterly datasets (source: "dera") carry no EDGAR acceptance timestamp (filed_at null) and sort by reporting month.
For the full filing body use GET /api/v1/nport/{accession}; for the position table use GET /api/v1/nport/{accession}/holdings; for a fund's whole monthly AUM series in one call use GET /api/v1/nport/funds/{ticker}/aum-history.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| cik | query | optional | — | — | Registrant (trust) CIK, bare or zero-padded. Filters to that registrant's filings. | 1100663 |
| series_id | query | optional | — | — | SEC series identifier (S + 9 digits). Filters to one fund series. | S000004310 |
| ticker | query | optional | — | — | Fund/class ticker. Resolved server-side to its series via the class-ticker join (source precedence: filing header > N-CEN > SEC mutual-fund ticker file > registrant CIK for single-fund trusts). Unknown tickers return 404 UNKNOWN_TICKER. | IVV |
| form_type | query | optional | — | NPORT-P, NPORT-P/A | Restrict to originals (NPORT-P) or amendments (NPORT-P/A). Note amendments supersede their original at ingest, so the default (both) never double-counts a month. | NPORT-P |
| limit | query | optional | 100 | — | Rows per page (1-500). | 100 |
| offset | query | optional | 0 | — | Pagination offset. | 0 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| data[] | array | no | Filing summary rows, newest first (filed_at, then reporting month; backfilled rows without a filed timestamp sort by reporting month). |
| data[].accession_number | string | no | SEC accession number in canonical dashed format (e.g. 0001752724-26-002544). Pass to GET /api/v1/nport/{accession} or /{accession}/holdings. |
| data[].submission_type | string | no | NPORT-P (original) or NPORT-P/A (amendment). |
| data[].is_amendment | boolean | no | True when the row is an NPORT-P/A. The amended original is no longer served (state supersession at ingest). |
| data[].reg_cik | string | no | Registrant (trust) CIK, 10-char zero-padded. One registrant files for many series — e.g. one iShares trust CIK covers hundreds of ETF series. |
| data[].reg_name | string | yes | Registrant name as filed. |
| data[].series_id | string | yes | SEC series id of the fund the report covers. Null on whole-trust filings from single-fund registrants (e.g. unit investment trusts like SPY). |
| data[].series_name | string | yes | Series (fund) name as filed. |
| data[].as_of | string | yes | The reporting month end (ISO date) — the date the portfolio snapshot is 'as of'. N-PORT is a monthly report; this is the row's natural time key. |
| data[].rep_pd_end | string | yes | The fund's fiscal period end for the report, as filed. Distinct from as_of: as_of is the month, rep_pd_end is the fiscal year-end anchor. |
| data[].net_assets | number | yes | Part B net assets in USD — the fund's AUM for the month, and the ETF market-cap concept. As filed, full precision. |
| data[].tot_assets | number | yes | Part B total assets in USD, as filed. |
| data[].filed_at | string | yes | EDGAR acceptance timestamp for live-ingested filings. Null on rows loaded from the SEC's historical quarterly datasets. |
| data[].source | string | no | 'live' (parsed from the filing XML on arrival) or 'dera' (loaded from the SEC's official quarterly N-PORT datasets). Both converge to one row shape. |
| meta.pagination | object | no | { total, limit, offset, has_more }. total is null on this wide listing (has_more is derived from an extra-row fetch); page forward with offset while has_more is true. |
| meta.resolution | object | yes | Present only when ticker= was passed: { ticker, matches: [{class_id, series_id, reg_cik, source}] } — exactly how the ticker resolved, including which source (sgml/ncen/mf/cik) won per class. |
Sample response
- "status": "success"
- "data":
- "meta":
- "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/latest?api_Token=YOUR_API_KEY&cik=1100663&series_id=S000004310&ticker=IVV&form_type=NPORT-P&limit=100&offset=0" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).