Search & read filings
Find companies, search passages, and open source-linked evidence.
Core filing resources
These routes operate within the accessible indexed corpus. Use the OpenAPI download for all operations, input schemas, authentication and response types.
| Endpoint | Purpose |
|---|---|
GET /meta | Version and capability gates |
GET /companies/{ticker} | Public company summary and latest events |
GET /issuers | Issuers represented in the accessible indexed corpus |
GET /filings | Structured filing summaries |
GET /filings/{accession} | Retained extraction and provenance; missing sections remain explicit |
POST /search | Bounded full-text filing and exhibit search |
POST /screens/financing | Financing-aware cross-company screens |
POST /screens/comparison-matrix | Evidence-backed multi-company matrix |
POST /analyst/tables/financing | Multi-period source-linked analyst tables |
POST /analyst/exports/xlsx | Source-linked Excel workbook and checksum headers |
POST /analyst/exports/xlsx/manifest | Reproducible export checksum manifest |
GET/POST /account/analyst/* | Private research folders, saved views, and cited memo drafts |
GET/POST /account/saved-searches | Personal or team-visible saved searches and email matches |
GET/POST /account/saved-screens | Saved financing screens for repeatable research |
GET /reader/filings/{accession} | Evidence-anchored reader and related graph |
GET /reader/filings/{accession}/compare/{otherAccession} | Side-by-side changed passages |
GET /reader/filings/{accession}/report.pdf | Source-linked PDF report |
GET /facilities | Capacity, draws, and availability |
GET /covenants | Covenant and legal-event signals |
GET /filing-comparisons | Comparable-filing changes |
GET /events | Changes and supported baselines |
See how GET /filing-comparisons maps to retained evidence in the Apple workflow case study, then review the full comparison page and validation methodology.
Search filings and exhibits
Search indexed primary filings and material exhibits with Boolean, phrase, proximity, bounded wildcard, and financing-aware synonym queries. Results include exact snippets, accessions, SEC URLs, hashes, locators, verification states, and reader deep links. Use the web workspace at Search filings. These public examples call the same POST /search/market operation as that page. Add your server-side Bearer API key for authenticated use. Follow data.pagination.nextCursor with the same query and filters; read data.coverageReceipt for the actual inspected scope.
curl --fail --show-error -X POST -H "Content-Type: application/json" -d '{"query":"\"credit agreement\" OR revolver","useSynonyms":true,"limit":5,"filters":{"tickers":["AAPL"]}}' https://api.filingsift.com/api/v1/search/marketimport json
from urllib.request import Request, urlopen
payload = {"query": '"credit agreement" OR revolver', "useSynonyms": True, "limit": 5, "filters": {"tickers": ["AAPL"]}}
request = Request("https://api.filingsift.com/api/v1/search/market", data=json.dumps(payload).encode(), headers={"Content-Type": "application/json"}, method="POST")
with urlopen(request, timeout=15) as response:
body = json.load(response)
for match in body["data"]["results"]:
print(match["source"]["accession"], match["snippet"]["text"])const response = await fetch("https://api.filingsift.com/api/v1/search/market", {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ query: '"credit agreement" OR revolver', useSynonyms: true, limit: 5, filters: { tickers: ["AAPL"] } }),
signal: AbortSignal.timeout(15_000),
});
const body = await response.json();
if (!response.ok) throw new Error(body.error?.message);
for (const match of body.data.results) console.log(match.source.accession, match.snippet.text);Evidence-anchored filing reader
Open bounded filing and exhibit passages with exact SEC sources, stable share links, verification state, and a related-document graph. The comparison route aligns changed passages without assigning severity or an investment conclusion.
curl --fail --show-error -H "Accept: application/json" https://api.filingsift.com/api/v1/reader/filings/0000320193-26-000020import json
from urllib.request import urlopen
url = "https://api.filingsift.com/api/v1/reader/filings/0000320193-26-000020"
with urlopen(url, timeout=15) as response:
body = json.load(response)
for passage in body["data"]["passages"]:
print(passage["readerUrl"], passage["document"]["sourceUrl"])const url = "https://api.filingsift.com/api/v1/reader/filings/0000320193-26-000020";
const response = await fetch(url, { signal: AbortSignal.timeout(15_000) });
const body = await response.json();
if (!response.ok) throw new Error(body.error?.message);
for (const passage of body.data.passages) {
console.log(passage.readerUrl, passage.document.sourceUrl);
}