Financial data is informational and may be inaccurate. See Disclaimer.

drillr.ai
API keys →

Filings

Filing full-text search

GET/api/v2/filing-search
Coverage
US, the last 5 years · JP / CN, financial reports for the last 3 years
Billing
100 cr / thousand calls

Searches the body text of a single company's filings; one row per matching passage, in descending score order. Returns the passage text, the section heading and a deep link to the official document; the full document is not returned — to read a filing in full, follow filing_url back to the official source. The market comes from the canonical ticker, and the filing date range is fixed to the retention window.

  • ticker accepts a single value only; query multiple companies with separate calls.
  • from / to are a report period month axis (YYYY-MM), not a filing date axis; restrict the filing type with form_type.
  • No pagination; one call returns at most limit matches; billing goes by request count (100 cr / thousand calls), independent of the number of matches or of how many markets are searched.
  • To point back to the same filing in , use ticker + accession_number; a matching passage carries no id of its own, so recognizing the same passage across requests is only possible by approximate matching on accession_number + section + the snippet text.
Shared filings conventions

Retention scope: US: all form types from the last 5 years; JP / CN: the last 3 years, financial report types only (JP: 有価証券報告書 annual / 半期報告書 semi-annual / 四半期報告書 quarterly, and their 訂正 amendments; CN: 年度报告 annual / 半年度报告 semi-annual / 季度报告 quarterly, and their 更正 amendments); the window rolls on filing_date. HK / KR / TW return 404. In JP / CN, non-financial-report types (ad hoc announcements, timely disclosures, and so on) are out of scope: neither endpoint returns those rows, and explicitly requesting such a form_type returns 404. An unrecognized form_type (one that matches no native type of that market) returns 400; the endpoints do not silently return an empty array.

The type axis uses only each market's native form_type; there is no cross-market unified type enum. To filter by type across markets, callers combine each market's native codes.

Query parameters

ParameterTypeRequiredDescription
querystringrequiredKeywords or natural language (Chinese / English / Japanese); the body text is tokenized and indexed in the original language of the filing (US en / JP ja / CN zh, the same as the language response field).
tickerstringrequiredA single canonical ticker; cross-company or cross-market search is not supported, so query multiple companies with separate calls.
form_typestringoptionalEach market's native type, in the source encoding (US: SEC form names; JP: EDINET numeric codes / TDnet labels; CN: annual_report and the like). Accepts multiple comma-separated values. Default All types within the retention scope.
fromstringoptionalYYYY-MM. Start of the reporting-period axis: a passage matches when the reporting period it belongs to overlaps [from, to]. This is not a filing-date axis — the filing-date range is always the retention window (US: every type from the last 5 years; JP / CN: financial reports from the last 3 years) and is not exposed as a parameter.
tostringoptionalYYYY-MM, the end of the report period axis (with from it forms the interval used for the overlap test).
limitintoptionalMaximum 50 (number of matching passages). Default 10.

Response fields

FieldTypeDescription
tickerstringThe canonical ticker of the filing that contains the matching passage; use ticker + accession_number to point back to the same row in
marketstringMarket code: US / CN / JP
form_typestringType of the filing the matched passage belongs to, in the market's native encoding (US: SEC form names; JP: EDINET numeric codes / TDnet labels; CN: annual_report and the like)
filing_datedateFiling date of the filing the matched passage belongs to: the date it became public on the official channel
titlestringTitle of the filing the matched passage belongs to, in its original language; may be null depending on source coverage
languagestringThe language of the matching text: en / zh / ja (= mapped from market)
sectionstringThe section heading of the matching passage as written (for example Share Repurchase Program); null when the passage has no heading. It is not guaranteed to be a normalized Item number (for example Item 1A. Risk Factors)
snippetstringThe body text of the matching passage (tables inside the passage are converted to markdown and carried along); maximum 4000 characters; longer text is truncated by character count. It does not contain the full document
scorenumberRelevance; no absolute scale; comparable only within the same response
accession_numberstringNative document number from the official source: US is the SEC accession (e.g. 0000320193-25-000123), JP the EDINET docID, CN the cninfo announcement id
filing_urlstringDeep link to the official filing; opens the source document directly

No key yet? Create one under API Keys — it is shown once, so store it where your shell can read it. Connecting an agent over MCP instead? That signs in through the browser and needs no key at all.

Authentication, conventions, rate limits and error shapes are the same for every endpoint — they live on REST API.