Endpoints
/v1/form-13d-13g
https://secfeedapi.com/v1/form-13d-13gSchedules 13D and 13G: issuer, CUSIPs, each reporting person's voting and dispositive power and percent of class, purpose of transaction.
| Parameter | Type | Description | Example |
|---|---|---|---|
formType | string | Exact form type: SCHEDULE 13D, SCHEDULE 13D/A, SCHEDULE 13G or SCHEDULE 13G/A. | SCHEDULE 13D |
cik | integer | CIK of the filing's EDGAR filer record. A schedule can be listed under the reporting person or the issuer, so for issuer lookups prefer the data or flat filters below. | 1946703 |
startDate | string | Earliest filing date, YYYY-MM-DD. | 2026-10-01 |
endDate | string | Latest filing date, YYYY-MM-DD. | 2026-10-31 |
flat.<field> | string or number | Exact match on a flat field, for example flat.issuerName=WEBUY GLOBAL LTD. | flat.issuerName=WEBUY GLOBAL LTD |
flat.<field>__gte / __lte | number | Range filter on a numeric flat field, for example flat.maxPercentOfClass__gte=10. | flat.maxPercentOfClass__gte=10 |
data.<path> | string | Exact match on any original field by its dotted path under data, for example data.primary_doc.formData.coverPageHeader.issuerInfo.issuerCik=0000902791. | data.primary_doc.headerData.submissionType=SCHEDULE 13G/A |
fields | string | Set to flat to drop the full data object and return only the flat fields. | flat |
size | integer | Rows per page, maximum 100. Default 20. | 2 |
from | integer | Offset for paging. Default 0. | 20 |
- Results are newest first by filing date.
- Values that look numeric are compared as numbers, so exact matches on string fields that hold digits (such as flat.issuerCik) do not match; use the data path with the zero padded CIK instead.
- The flat fields are fully populated for Schedule 13D. For Schedule 13G the issuer name, CUSIPs, class and event date are filled, but issuerCik, reportingPersons and maxPercentOfClass are not yet: read those from data for 13G.
- Older filings in the free text format (before the XML schedules) are in the filing index and full-text search, not in this endpoint.
Request examples
Every response below is real output from the API, trimmed to the first records.
New Schedule 13D filings where someone holds 10% or more
maxPercentOfClass is the largest percent of class among the reporting persons. purposeOfTransaction carries the Item 4 text.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013D&flat.maxPercentOfClass__gte=10&fields=flat&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/form-13d-13g",
params={'formType': 'SCHEDULE 13D', 'flat.maxPercentOfClass__gte': '10', 'fields': 'flat', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 0,
"filings": []
}Every 13G or 13G/A about one issuer
Filters on the issuer CIK inside the original XML, zero padded to 10 digits as the schedule reports it.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?data.primary_doc.formData.coverPageHeader.issuerInfo.issuerCik=0000902791&fields=flat&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/form-13d-13g",
params={'data.primary_doc.formData.coverPageHeader.issuerInfo.issuerCik': '0000902791', 'fields': 'flat', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 5,
"filings": [
{
"accessionNo": "0000906304-26-000168",
"formType": "SCHEDULE 13G/A",
"filedAt": "2026-10-13",
"cik": 906304,
"companyName": "ROYCE & ASSOCIATES LP",
"flat": {
"submissionType": "SCHEDULE 13G/A",
"issuerCik": "",
"issuerName": "Barrett Business Services, Inc.",
"cusips": [
"068463108"
],
"securityClass": "Common Stock",
"dateOfEvent": "09/30/2026",
"reportingPersons": [],
"maxPercentOfClass": 0,
"purposeOfTransaction": null
}
},
{
"accessionNo": "0001214659-26-012453",
"formType": "SCHEDULE 13G/A",
"filedAt": "2026-10-02",
"cik": 902791,
"companyName": "BARRETT BUSINESS SERVICES INC",
"flat": {
"submissionType": "SCHEDULE 13G/A",
"issuerCik": "",
"issuerName": "Barrett Business Services, Inc.",
"cusips": [
"068463108"
],
"securityClass": "Common Stock",
"dateOfEvent": "09/30/2026",
"reportingPersons": [],
"maxPercentOfClass": 0,
"purposeOfTransaction": null
}
}
]
}Schedule 13G filings this month
Passive investors file 13G. Combine formType with a date range to follow new positions.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013G&startDate=2026-10-01&fields=flat&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/form-13d-13g",
params={'formType': 'SCHEDULE 13G', 'startDate': '2026-10-01', 'fields': 'flat', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 0,
"filings": []
}Response fields
| Field | Type | Meaning |
|---|---|---|
total | integer | Number of matching filings. |
filings[].accessionNo | string | Accession number of the schedule. |
filings[].formType | string | SCHEDULE 13D, SCHEDULE 13D/A, SCHEDULE 13G or SCHEDULE 13G/A. |
filings[].filedAt | string | Filing date, YYYY-MM-DD. |
filings[].cik | integer | CIK of the EDGAR filer record this row came from (often the reporting person). |
filings[].companyName | string | Name on that filer record. |
filings[].flat.submissionType | string | Form type stated inside the XML. |
filings[].flat.issuerCik | string | Issuer CIK without leading zeros (13D; empty for 13G for now). |
filings[].flat.issuerName | string | Company whose shares are reported. |
filings[].flat.cusips[] | array of strings | CUSIPs of the class reported. |
filings[].flat.securityClass | string | Title of the class of securities. |
filings[].flat.dateOfEvent | string | Date of the event that required the filing, MM/DD/YYYY as filed. |
filings[].flat.reportingPersons[].cik | string or null | Reporting person's CIK. |
filings[].flat.reportingPersons[].name | string | Reporting person's name. |
filings[].flat.reportingPersons[].citizenship | string | Citizenship or place of organization, as an EDGAR code. |
filings[].flat.reportingPersons[].type[] | array of strings | Type of reporting person codes, for example IN (individual), IA (investment adviser), CO (corporation). |
filings[].flat.reportingPersons[].fundSource[] | array of strings | Source of funds codes, for example SC (subject company), WC (working capital), OO (other). |
filings[].flat.reportingPersons[].soleVoting / sharedVoting | number | Shares over which the person has sole or shared voting power. |
filings[].flat.reportingPersons[].soleDispositive / sharedDispositive | number | Shares over which the person has sole or shared power to dispose. |
filings[].flat.reportingPersons[].aggregateOwned | number | Aggregate shares beneficially owned. |
filings[].flat.reportingPersons[].percentOfClass | number | Percent of the class owned, as filed. |
filings[].flat.maxPercentOfClass | number | Largest percentOfClass among the reporting persons (0 when none are parsed). |
filings[].flat.purposeOfTransaction | string or null | Item 4 text of a 13D, up to 4,000 characters. |
filings[].data.primary_doc | object | Every field of the original XML: headerData (submission type, filer credentials, previous accession) and formData (coverPageHeader with issuerInfo, reporting person blocks, items, exhibitInfo, signatureInformation). Omitted when fields=flat. |
Common type of reporting person codes
| Code | Meaning |
|---|---|
| IN | Individual |
| IA | Investment adviser |
| CO | Corporation |
| PN | Partnership |
| OO | Other |
| BD | Broker-dealer |
| HC | Parent holding company |
| FI | Non-U.S. institution |
How to
How do I find new activist stakes?
Filter formType=SCHEDULE 13D with a startDate and read purposeOfTransaction for the Item 4 plans.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013D&startDate=2026-10-01&fields=flat"
How do I find positions above a percentage threshold?
Use flat.maxPercentOfClass__gte. It works for Schedule 13D filings.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013D&flat.maxPercentOfClass__gte=20&fields=flat"
How do I list every schedule about one company?
For 13D, match the issuer name exactly with flat.issuerName. For 13G, filter on the issuer CIK inside data, zero padded to 10 digits.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?flat.issuerName=WEBUY%2520GLOBAL%2520LTD&fields=flat"
How do I get only amendments?
Set formType to SCHEDULE 13D/A or SCHEDULE 13G/A.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013D/A&fields=flat&size=10"
How do I keep responses small?
Add fields=flat to drop the full XML object.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013G&fields=flat&size=10"
How do I page through many results?
Use size (up to 100) and from as an offset. total tells you how many rows match.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013G&fields=flat&size=100&from=100"
How do I read voting and dispositive power for each holder?
Each entry in flat.reportingPersons has soleVoting, sharedVoting, soleDispositive, sharedDispositive and aggregateOwned.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?formType=SCHEDULE%252013D&fields=flat&size=5"
How do I query any original XML field?
Use data.<dotted path>=value. The match is exact, on the value as filed.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-13d-13g?data.primary_doc.headerData.submissionType=SCHEDULE%252013G/A&fields=flat"
Where are 13D and 13G filings from before the XML format?
They are in the filing index (formType SC 13D, SC 13G) and full-text search, but not parsed into this endpoint.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/filings?query=formType:%2522SC%252013D%2522&size=5"
Errors
- 400 when size or from is not a number.
See also the error codes every endpoint shares.
Try it with your own key
500 free calls a month.