Endpoints
/v1/n-port
https://secfeedapi.com/v1/n-portFund portfolio holdings (N-PORT, every field).
| Parameter | Type | Description | Example |
|---|---|---|---|
cik | integer | Registrant (trust) CIK. | 311101 |
startDate | string | Earliest filing date. | 2026-10-01 |
endDate | string | Latest filing date. | 2026-10-09 |
formType | string | NPORT-P or NPORT-P/A. | NPORT-P/A |
data.<path> | string | Exact match on any value in the filing, for example a series ID. | data.primary_doc.formData.genInfo.seriesId=S000012004 |
fields | string | flat drops the data object. N-PORT has no flat fields, so this leaves only the filing header. | flat |
from | integer | Offset. Default 0. | 20 |
size | integer | Up to 100. Default 20. | 20 |
- One filing per fund series; a trust files one per series.
- Responses are large: each filing includes every holding.
- Coverage is currently recent months while older reports load.
Request examples
Every response below is real output from the API, trimmed to the first records.
Reports filed this month
genInfo names the series; invstOrSecs.invstOrSec lists the holdings.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?startDate=2026-10-01&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/n-port",
params={'startDate': '2026-10-01', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 41,
"filings": [
{
"accessionNo": "0001193125-26-420001",
"formType": "NPORT-P",
"filedAt": "2026-10-13",
"cik": 311101,
"companyName": "DUPREE MUTUAL FUNDS",
"flat": null,
"data": {
"primary_doc": {
"headerData": {
"submissionType": "NPORT-P",
"isConfidential": "false",
"filerInfo": {
"filer": {
"issuerCredentials": {
"cik": "0000311101",
"ccc": "XXXXXXXX"
}
},
"seriesClassInfo": {
"seriesId": "S000012004",
"classId": "C000032732"
}
}
},
"formData": {
"genInfo": {
"regName": "Dupree Mutual Funds",
"regFileNumber": "811-02918",
"regCik": "0000311101",
"regLei": "549300S8YVGTJ1NMTW57",
"regStreet1": "125 South Mill Street",
"regStreet2": "Vine Center, Suite 100",
"regCity": "Lexington",
"regStateConditional": {
"@regCountry": "US",
"@regState": "US-KY",
"#text": ""
},
"regZipOrPostalCode": "40507",
"regPhone": "859-254-7741",
"seriesName": "Tennessee Tax-Free Income Series",
"seriesId": "S000012004",
"seriesLei": "549300OJ7QYEHSBVZ852",
"repPdEnd": "2027-06-30",
"repPdDate": "2026-09-30",
"isFinalFiling": "N"
},
"fundInfo": {
"totAssets": "45144051.700000000000",
"totLiabs": "412650.220000000000",
"netAssets": "44731401.480000000000",
"assetsAttrMiscSec": "0.000000000000",
"assetsInvested": "0.000000000000",
"amtPayOneYrBanksBorr": "0.000000000000",
"amtPayOneYrCtrldComp": "0.000000000000",
"amtPayOneYrOthAffil": "0.000000000000",
...One series by ID
Use the series ID to follow one fund over time.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?data.primary_doc.formData.genInfo.seriesId=S000012004&size=1&fields=flat"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/n-port",
params={'data.primary_doc.formData.genInfo.seriesId': 'S000012004', 'size': '1', 'fields': 'flat'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 1,
"filings": [
{
"accessionNo": "0001193125-26-420001",
"formType": "NPORT-P",
"filedAt": "2026-10-13",
"cik": 311101,
"companyName": "DUPREE MUTUAL FUNDS",
"flat": null
}
]
}One trust
cik is the registrant, which can have many series.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?cik=311101&size=1&fields=flat"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/n-port",
params={'cik': '311101', 'size': '1', 'fields': 'flat'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 7,
"filings": [
{
"accessionNo": "0001193125-26-420001",
"formType": "NPORT-P",
"filedAt": "2026-10-13",
"cik": 311101,
"companyName": "DUPREE MUTUAL FUNDS",
"flat": null
}
]
}Response fields
| Field | Type | Meaning |
|---|---|---|
total | integer | Matching filings. |
filings[].accessionNo / formType / filedAt / cik / companyName | mixed | Filing header. |
filings[].flat | null | Always null for N-PORT. |
filings[].data.primary_doc.headerData | object | Submission type, confidentiality flag, filer CIK, series and class IDs. |
...formData.genInfo.regName / regCik / regLei / regFileNumber | string | Registrant name, CIK, LEI and 811 file number. |
...formData.genInfo.seriesName / seriesId / seriesLei | string | The fund series. |
...formData.genInfo.repPdEnd / repPdDate | string | Fiscal year end and the date the report covers. |
...formData.genInfo.isFinalFiling | string | Y on the fund's last report. |
...formData.fundInfo.totAssets / totLiabs / netAssets | string | Fund totals. |
...formData.fundInfo.amtPay* | string | Amounts payable by term and counterparty type. |
...formData.fundInfo.curMetrics / creditSprdRisk* | object | Interest rate and credit spread risk (DV01, DV100) by tenor. |
...formData.fundInfo.returnInfo.monthlyTotReturns | object | Monthly total returns by share class (rtn1 to rtn3). |
...formData.fundInfo.returnInfo.othMon1..3 | object | Realized gains and unrealized appreciation by month. |
...formData.fundInfo.mon1Flow..mon3Flow | object | Sales, reinvestments and redemptions by month. |
...formData.invstOrSecs.invstOrSec[].name / title / lei / cusip | string | Holding issuer, security title and identifiers. |
...invstOrSec[].identifiers.isin / ticker / other | object | Additional identifiers. |
...invstOrSec[].balance / units / curCd / valUSD / pctVal | string | Position size, units (NS shares, PA principal), currency, US dollar value and percent of net assets. |
...invstOrSec[].payoffProfile / assetCat / issuerCat / invCountry | string | Long or short, asset and issuer category, country. |
...invstOrSec[].isRestrictedSec / fairValLevel | string | Restricted security flag and fair value hierarchy level. |
...invstOrSec[].debtSec | object | Debt terms: maturity, coupon kind, rate, default flags. |
...invstOrSec[].derivativeInfo | object | Derivative details (swaps, futures, options, forwards) when the holding is a derivative. |
...invstOrSec[].securityLending | object | Securities lending and collateral flags. |
...formData.signature | object | Date signed, applicant and signer. |
Common asset categories (assetCat)
| Code | Meaning |
|---|---|
| EC | Equity, common |
| EP | Equity, preferred |
| DBT | Debt |
| STIV | Short-term investment vehicle |
| DE | Derivative, equity |
| DIR | Derivative, interest rate |
How to
How do I list a fund's holdings?
Read data.primary_doc.formData.invstOrSecs.invstOrSec of its latest report.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?data.primary_doc.formData.genInfo.seriesId=S000012004&size=1"
How do I find amended reports?
formType=NPORT-P/A.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?formType=NPORT-P/A&size=1&fields=flat"
How do I get reports for a date range?
Use startDate and endDate on the filing date.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?startDate=2026-09-01&endDate=2026-09-30&size=1&fields=flat"
How do I get every series in a trust?
Filter by the trust's cik.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?cik=311101&size=1&fields=flat"
How do I keep responses small while browsing?
Use fields=flat to list filings, then fetch the ones you need in full.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?cik=311101&size=1&fields=flat"
Where are monthly returns?
fundInfo.returnInfo.monthlyTotReturns, one entry per share class.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?startDate=2026-10-01&size=1"
How do I find swaps and other derivatives?
Look for holdings with a derivativeInfo object.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?startDate=2026-10-01&size=1"
Why are numbers strings?
Values are kept exactly as filed in the XML; convert them as needed.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/n-port?startDate=2026-10-01&size=1"
Try it with your own key
500 free calls a month.