Documentation
REST API
Base URL: https://api.openfilings.org — authenticate with X-API-Key or Bearer OAuth token. Free with a signed-in account. Same normalization pipeline as Filings and MCP. Prefer Python? See Python SDK below. Push events: signed webhooks.
Authentication
- Create an API key on your dashboard (shown once at creation).
- Pass
Authorization: Bearer of_…orX-API-Key: of_…on each request. - Monitor usage on Dashboard → Usage.
Endpoints
REST v1 mirrors MCP tools one-to-one — same routes, same data.
| MCP tool | HTTP |
|---|---|
| list_markets | GET /api/v1/markets |
| search_ticker | GET /api/v1/entities/search?query= |
| list_filings | GET /api/v1/tickers/{ticker}/filings?market_id= |
| get_filing | GET /api/v1/filings/resolve?ticker=&market_id= |
| — (REST) | GET /api/v1/kpi-taxonomy |
| get_company_financials | GET /api/v1/companies/financials?ticker=&market_id=&fiscal_year_from=&line_items= |
| get_company_financials (earnings) | GET /api/v1/companies/{market}/{ticker}/earnings-releases |
| get_company_analysis | GET /api/v1/companies/{market}/{ticker}/analyst-brief |
| get_company_supply_chain | GET /api/v1/companies/{market}/{ticker}/supply-chain |
| — (REST) | GET /api/v1/companies/{market}/{ticker}/event-transcripts |
| — (REST) | GET /api/v1/feeds/transcripts?source=&ticker= |
| — (REST) | GET /api/v1/filings/{id}/kpis |
| list_filing_sections | GET /api/v1/filings/{id}/sections |
| get_filing_section | GET /api/v1/filings/{id}/sections/{key} |
| list_notifications | GET /api/user/notifications |
| list_news | GET /api/v1/tickers/{ticker}/press-releases?market_id= |
market_id values: us, jp, hk, kr, cn, and others returned by list_markets.
Python SDK (PyPI)
The official client wraps this REST API with typed models, automatic short 429 backoff, sync + async clients, and webhook verification helpers. Install from PyPI:
pip install openfilings
from openfilings import Client
client = Client(api_key="of_...") # or OPENFILINGS_API_KEY
entity = client.entities.search(ticker="AAPL").entity
filings = client.filings.list("AAPL", market_id="us", limit=5)
financials = client.companies.financials(
ticker="AAPL",
market_id="us",
fiscal_year_from=2020,
fiscal_year_to=2024,
line_items=["revenue", "ebitda"],
)Resources mirror the table above: markets, entities, filings, companies.financials, notifications, watchlist, press, and webhooks (Business). Set OPENFILINGS_API_KEY and optional OPENFILINGS_BASE_URL in the environment, or pass api_key= explicitly. Full resource list and error types in the PyPI README.
Webhooks
Business accounts can register HTTPS endpoints for signed push delivery (filing.discovered, press, insider events). Creation, HMAC verification (pip install openfilings[fastapi] or stdlib-only verify_webhook()), retry policy, and event catalog are documented on the dedicated webhooks guide.
API changes
- 2026-08 —
GET /api/v1/feeds/filingsandGET /api/v1/feeds/filings.xmlnow defaultlimit=50when the query string omits it (previously an omittedlimitreturned the entire unpaginated window instead of a page). Pass an explicitlimit(andoffseton the JSON route) to page through more results.
Rate limits
Free access uses a shared daily and monthly allowance for REST API and MCP combined. Metered endpoints consume credits; navigation and entity search do not.
- Metered calls — filing data, KPIs, sections, and red flags
- Not metered —
list_markets,entities/search,entities/lookup - Daily allowance resets at UTC midnight
- Monthly allowance resets on the 1st of each calendar month (UTC)
Your usage is shown as a percentage on Dashboard → Usage. When exceeded, the API returns 429 Too Many Requests.
Error responses
| HTTP | Meaning | When |
|---|---|---|
| 401 | Unauthorized | Missing, expired, or invalid API key / Bearer token. |
| 404 | Not found | Ticker, market_id, or filing_id does not exist in the index. |
| 429 | Too many requests | Daily or monthly quota exceeded. Resets at UTC midnight (daily) or on the 1st (monthly). |
| 502 | Upstream error | Registry temporarily unavailable. Retry after a few minutes. |
Example body:
{ "error": "quota_exceeded", "message": "Daily limit reached" }Example: list filings
Filing history for Toyota (7203) on the Japan market:
curl -s -H "X-API-Key: of_your_key" \ "https://api.openfilings.org/api/v1/tickers/7203/filings?market_id=jp"
Response (abbreviated):
{
"ticker": "7203",
"market_id": "jp",
"company_name": "Toyota Motor Corporation",
"filings": [
{
"filing_id": "jp:7203:yuho:2025",
"form_type": "Yūho",
"period_end": "2025-03-31",
"filed_at": "2025-06-25T09:00:00Z",
"url": "https://disclosure.edinet-fsa.go.jp/..."
},
{
"filing_id": "jp:7203:quarterly:2025-q1",
"form_type": "Quarterly",
"period_end": "2025-06-30",
"filed_at": "2025-08-08T09:00:00Z",
"url": "https://disclosure.edinet-fsa.go.jp/..."
}
]
}Example: canonical KPIs
Golden KPIs for a resolved filing — same fields as Filings / Atom enrichment:
curl -s -H "X-API-Key: of_your_key" \ "https://api.openfilings.org/api/v1/filings/jp:7203:yuho:2025/kpis"
Response (abbreviated):
{
"filing_id": "jp:7203:yuho:2025",
"ticker": "7203",
"market_id": "jp",
"company_name": "Toyota Motor Corporation",
"form_type": "Yūho",
"period_end": "2025-03-31",
"currency": "JPY",
"accounting_standard": "jp-gaap",
"canonical": {
"revenue": 45095300000000,
"gross_margin": 0.214,
"operating_income": 4300000000000,
"net_income": 4756000000000,
"total_assets": 90300000000000,
"equity": 28000000000000,
"operating_cash_flow": 5100000000000
},
"kpi_validation_status": "published"
}Same data everywhere
REST API, MCP, and Filings / Atom (RSS+) share the same normalization pipeline — Golden KPIs harmonized across markets. Analysts can browse live filings on /for-analysts without an account, or connect an agent via MCP.