---
title: "Hybrid keyword and semantic search across all companies' SEC filings and earnings call transcripts. Returns matching excerpts with their document ids. When too few excerpts match every query word, the search automatically broadens to match any of the words — precise matches keep their rank and broader hits only fill the remainder."
method: GET
path: "/v1/filings/search"
tags: ["Search"]
---

# Hybrid keyword and semantic search across all companies' SEC filings and earnings call transcripts. Returns matching excerpts with their document ids. When too few excerpts match every query word, the search automatically broadens to match any of the words — precise matches keep their rank and broader hits only fill the remainder.

`GET /v1/filings/search`

## Request

- Base URL: `https://api.equibles.com`
- URL: `https://api.equibles.com/v1/filings/search`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/equibles/apis/equibles-api/docs/v1/filings/search/get.ts> (a function with typed inputs; its response is checked against the schema)

## Query parameters

- `query` string, required
- `documentType` string
- `startDate` string, date
- `endDate` string, date
- `limit` integer
- `excludeTickers` string
- `maxResultsPerCompany` integer
- `match` string

## Response `200`

OK

- DocumentSearchResponse: Search-result envelope (additive over the plain list, #7056): top-k retrieval has no meaningful "total matches", so instead of a fake total the response echoes the applied limit — count == limit means the result set was capped and a larger limit may surface more excerpts. count < limit means no further excerpts cleared relevance at this limit — EXCEPT on endpoints that take maxResultsPerCompany, where a non-zero per-company cap can drop excerpts below the overall limit, so a short page there is not proof of exhaustion.
  - `limit` integer: The applied excerpt cap after clamping.
  - `count` integer: Excerpts returned (equals data.length; count == limit signals the cap bound).
  - `listingNotice` ListingNotice: What happened to a requested ticker that no longer trades. "delisted": the company has no current US listing, so the answer is its history. "renamed": the company now trades as successorTicker, its current US presentation ticker (possibly another share class). A listed series (short volume, short interest, off-exchange volume, fails-to-deliver, congressional trades) is the retired ticker's own; a company-level read is the company's data.
    - `status` string, nullable: "delisted" or "renamed".
    - `ticker` string, nullable: The retired ticker as listed.
    - `delistedOn` string, date, nullable: The day the retired listing stopped trading, when known.
    - `successorTicker` string, nullable: For "renamed", the company's current US presentation ticker; null for "delisted".
  - `data` DocumentSearchResultDto[], nullable
    - `documentId` string, uuid
    - `ticker` string, nullable
    - `companyName` string, nullable
    - `documentType` string, nullable
    - `documentTypeName` string, nullable
    - `filedDate` string, date
    - `chunkIndex` integer
    - `startLineNumber` integer
    - `text` string, nullable
    - `url` string, nullable

## Other responses

- `400`: Bad Request
- `503`: Service Unavailable

---

[API](https://skmtc.dev/equibles/apis/equibles-api.md) - [All operations](https://skmtc.dev/equibles/apis/equibles-api/llms.txt) - [OpenAPI document](https://skmtc.dev/equibles/apis/equibles-api/revisions/666e06778588?raw)
