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

  1. Create an API key on your dashboard (shown once at creation).
  2. Pass Authorization: Bearer of_… or X-API-Key: of_… on each request.
  3. Monitor usage on Dashboard → Usage.

Endpoints

REST v1 mirrors MCP tools one-to-one — same routes, same data.

MCP toolHTTP
list_marketsGET /api/v1/markets
search_tickerGET /api/v1/entities/search?query=
list_filingsGET /api/v1/tickers/{ticker}/filings?market_id=
get_filingGET /api/v1/filings/resolve?ticker=&market_id=
— (REST)GET /api/v1/kpi-taxonomy
get_company_financialsGET /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_analysisGET /api/v1/companies/{market}/{ticker}/analyst-brief
get_company_supply_chainGET /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_sectionsGET /api/v1/filings/{id}/sections
get_filing_sectionGET /api/v1/filings/{id}/sections/{key}
list_notificationsGET /api/user/notifications
list_newsGET /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/filings and GET /api/v1/feeds/filings.xml now default limit=50 when the query string omits it (previously an omitted limit returned the entire unpaginated window instead of a page). Pass an explicit limit (and offset on 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

HTTPMeaningWhen
401UnauthorizedMissing, expired, or invalid API key / Bearer token.
404Not foundTicker, market_id, or filing_id does not exist in the index.
429Too many requestsDaily or monthly quota exceeded. Resets at UTC midnight (daily) or on the 1st (monthly).
502Upstream errorRegistry 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.