Ownership and holdings

Fund Portfolio Holdings - Form N-PORT

POSThttps://api.sec-api.io/form-nport

Search the monthly portfolio investment reports that registered management investment companies and exchange-traded funds file on Form N-PORT, from 2019 to present, and get the complete filing as JSON. Each filing carries the holdings of the fund, its assets, liabilities, risk metrics, returns and securities lending borrowers. New filings are searchable 300 milliseconds after EDGAR publishes them.

Read the guide for this API →

Authentication

Send the API key either as a header or as a query parameter. The header is preferred; the query parameter exists for cases where a header cannot be set, such as opening a URL directly in a browser.

Authorization: required header

The API key on its own. Do not prefix it with Bearer or any other word.

Example Authorization: YOUR_API_KEY

token: optional query parameter

The API key, appended to the URL. Use this only when a header is not possible.

Request body

A JSON object. Content-Type must be application/json.

query: required string

The search expression in Lucene syntax. Every field listed under Searchable fields can be used, combined with AND, OR, NOT, ranges and wildcards.

Example filerInfo.seriesClassInfo.seriesId:S000025654

from: string, Maximum 10000

Index of the first result to return, used for pagination. Increment by the value of size to page through results.

Default "0"

size: string, Maximum 10

Number of filings to return in one response.

Default "10"

sort: array of object

Sort order. Each item maps one field to an order object, for example [{ "fundInfo.totAssets": { "order": "desc" } }]. Sortable fields are filedAt, genInfo.repPdEnd, genInfo.repPdDate, fundInfo.totAssets, fundInfo.netAssets and invstOrSecs.valUSD.

Default [{ "filedAt": { "order": "desc" } }]

order: string

Either asc or desc.

Searchable fields

Every field below can be used inside query. 196 fields are searchable, and they match the structure of the objects returned in the response.

FieldDescription
accessionNoFiling accession number
submissionTypeForm type — "NPORT-P" or "NPORT-P/A"
filedAtFiling acceptance timestamp (ISO 8601)
genInfo.regCikCIK of the filer (registrant)
genInfo.regNameName of the filer / registrant
genInfo.regLeiLEI of the filer
genInfo.regFileNumberFile number of the filer (e.g. 811-XXXXX)
genInfo.seriesNameName of the fund series

Response

A JSON object. Nested attributes are collapsed; expand one to see its fields.

total: object

How many filings matched the query.

value: integer

Number of matching filings, capped at 10000. A value of 10000 with relation gte means more than 10000 filings matched.

relation: string

Either eq, meaning value is exact, or gte, meaning value is a floor.

filings: array of object

The matching filings, at most size per response. Each item is one complete N-PORT filing.

id: string

Internal unique id of the filing record.

accessionNo: string

Accession number of the filing, for example 0000910472-26-005164.

filedAt: string

Timestamp EDGAR accepted the filing, ISO 8601 in Eastern Time, for example 2026-03-31T18:33:58-04:00.

submissionType: string

Form type, either NPORT-P or NPORT-P/A.

Status codes

200Success. The response holds total and filings.
400The request body could not be parsed, or the Lucene expression in query is malformed.
403The API key is missing, or it is not valid.
429Too many requests. Slow the request rate and retry.
500Server error. Retry, and report it if it persists.