# Search & Extraction — Finradar API > Version: 3.61.0 | Generated: 2026-06-20 | Content Hash: 571d2292 > Fetch this file at: https://uat.finradarapi.com/llms/search-and-extraction.txt ## Authentication All endpoints require an API key. Pass it via query parameter `?apiKey=YOUR_KEY` or header `X-API-Key: YOUR_KEY`. WebSocket endpoints accept the key in the `token` auth payload or query parameter. --- ## Search & Extraction Advanced text search and content extraction. ### POST /api/v1/scrapping/query/ Advanced Boolean Search. **Token cost:** 25 tokens per call **Response fields:** - `filings` (array): Array of filings matching the query, in sec-api.io's exact response shape. Sorted by `filedAt DESC` (newest first). Empty array on no match — never null. Compatible with existing client code that already parses sec-api.io responses. - `filings[].accessionNo` (string): SEC accession number in canonical `XXXXXXXXXX-YY-NNNNNN` format. Matches sec-api.io's `accessionNo` field naming. Pass to `GET /api/v1/sec/filings/{accession_number}` to drill into the filing's documents in FinRadar's flatter shape. - `filings[].cik` (string): Filer CIK as a 10-character zero-padded string. The same CIK always refers to the same legal entity across decades — a stable join key against EDGAR submissions, our `filings` table, and Sharadar SF1. - `filings[].ticker` (string (nullable)): Ticker resolved from the filer CIK via the `ticker_norm_aliases` lookup. Null when the filer has no public-equity ticker (private funds, individuals, foreign issuers without ADRs, dissolved entities). Multi-class issuers return the primary share class. - `filings[].formType` (string): Canonical SEC form type (e.g. `10-K`, `10-Q`, `8-K`, `4`, `13F-HR`, `S-1`, `20-F`). Amendment variants append `/A`. NT-prefixed and -NT-suffixed forms (e.g. `NT 10-K`, `13F-NT`) appear verbatim — these have no information table. - `filings[].filedAt` (string): ISO-8601 UTC timestamp of the filing's SEC acceptance moment. Matches sec-api.io's `filedAt` field shape (full timestamp, NOT just the date). - `filings[].periodOfReport` (string (nullable)): ISO `YYYY-MM-DD` period the filing covers (the fiscal-period-end-date for 10-K/10-Q, the trade date for Form 4, etc.). Null for filings that don't have a meaningful period (e.g. some 8-Ks, S-1 initial registrations). Differs from `filedAt` — `periodOfReport` is the as-of date, `filedAt` is the disclosure date. - `filings[].linkToFilingDetails` (string): Canonical SEC EDGAR URL for the filing's index page (lists all documents in the filing package). Use as the human-readable link in dashboards; for programmatic document access use the `/html` companion endpoints which return parsed content. - `total` (object): sec-api.io-compatible total-hits block: `{ value: integer, relation: 'eq' | 'gte' }`. The deep-pagination cap fires at 10000 hits — beyond that, switch to date-range chunking (`filedAt:[A TO B]`) since pagination cannot reach further. - `total.value` (integer): Total hit count for the full query. Exact when `relation='eq'`; lower-bound when `relation='gte'` (i.e. 'at least this many; the deep-pagination cap was reached'). - `total.relation` (string): `eq` = exact total; `gte` = the deep-pagination cap was hit (only triggers when matching > 10000 filings). Use to detect when you need to switch to date-range chunking for full enumeration. **Since:** v1.0.0 **Utility:** sec-api.io-compatible advanced filing search using Lucene-syntax boolean queries — drop-in for customers migrating from sec-api.io's `/full-text-search` query endpoint. Supports field-scoped filters (`ticker:`, `formType:`, `cik:`, `filedAt:[from TO to]`), boolean operators (`AND`/`OR`/`NOT`), wildcards (`tesla*`), and grouping (`(formType:10-K OR formType:10-Q) AND ticker:AAPL`). The single most powerful metadata-query endpoint in the FinRadar surface — analyst pipelines that need 'all 10-Ks from S&P 500 issuers in 2025' in one shot. Returns paginated filing metadata in sec-api.io's exact response shape (`filings[]` + `total: {value, relation}`). For full-text inside filing exhibits use `POST /api/v1/scrapping/search/`; for raw row-shaped reads use `GET /api/v1/sec/filings`. **Use case:** Precise filtering: 'Give me all 10-Ks from Apple or Microsoft filed in 2023'. **Parameters:** - `query` (body, required): Lucene-style query string. Field-scoped: `ticker:AAPL`, `formType:"10-K"` (quote multi-word values), `cik:0000320193`, `filedAt:[2025-01-01 TO 2025-12-31]`. Operators: `AND`, `OR`, `NOT`. Wildcards: `tesla*`, `apple?`. Grouping: `(formType:10-K OR formType:10-Q) AND ticker:AAPL`. Bare-word queries match against issuer.name. Identical syntax to sec-api.io's full-text-search endpoint. - `limit` (body, optional, default: 50): Maximum filings returned, capped at 50 server-side per page (matches sec-api.io's per-page cap). For deeper pagination use the `from` field if your client supports it; for full backfills, prefer date-range chunking via the `query.filedAt:[A TO B]` syntax. **Sample response:** ```json { "filings": [ { "accessionNo": "0000320193-25-000123", "cik": "0000320193", "ticker": "AAPL", "formType": "10-K", "filedAt": "2025-11-01T20:14:32.000Z", "periodOfReport": "2025-09-28", "linkToFilingDetails": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123/0000320193-25-000123-index.htm" } ], "total": { "value": 1, "relation": "eq" } } ``` ### POST /api/v1/scrapping/search/ Full-Text Search. **Token cost:** 25 tokens per call **Response fields:** - `hits` (array): Array of text-match windows, sorted by relevance (BM25-style scoring) then `filed_date DESC` as a tiebreaker. A single filing can contribute multiple hits if the query phrase appears in multiple sections. Empty array on no match — never null. - `hits[].accession_number` (string): SEC accession number of the filing containing this hit. Pass to `GET /api/v1/sec/filings/{accession_number}` for filing metadata, or to `GET /api/v1/scrapping/extractor` (with the matching `section`) to retrieve the full item text. - `hits[].ticker` (string (nullable)): Resolved ticker for the issuer (canonical hyphen form). Null when the filer has no public-equity ticker (private funds, individuals, foreign issuers without ADRs). Useful for drilling: filter hits to S&P 500 issuers client-side via the resolved ticker. - `hits[].form_type` (string): Canonical SEC form type containing the hit (e.g. `10-K`, `10-Q`, `8-K`, `DEF 14A`, `S-1`, `20-F`). Filter client-side to narrow the corpus by form (e.g. only `8-K`s for material-event surveillance). - `hits[].filed_date` (string): ISO `YYYY-MM-DD` filing acceptance date in ET. Sort hit lists by this descending to surface most-recent occurrences. Newer hits typically score lower than older hits in BM25 unless the recency-boost flag is on (off by default). - `hits[].section` (string): Item or exhibit identifier where the match was located (e.g. `Item 7` for MD&A, `Item 1A` for Risk Factors, `EX-99.1` for press-release exhibits, `EX-10.1` for material contracts). Pass this directly to `/scrapping/extractor`'s `item` parameter to retrieve the full section. - `hits[].snippet` (string): 200-300 character text window centered on the match, with the query phrase wrapped in HTML `` tags for direct rendering. Edge characters may be word-broken — for clean rendering use a CSS truncation/ellipsis pattern. Plain text otherwise (no other HTML). - `meta` (object): Result metadata: `{ total: integer, next_cursor: string|null }`. `total` is the full-corpus match count (cap-aware — values > 10000 surface as `gte`-style estimates). `next_cursor` is the opaque pagination cursor for the next page; null on last page. **Since:** v1.0.0 **Utility:** Full-text search across the actual extracted text content of every SEC filing — 10-K Risk Factors, 10-Q MD&A, 8-K material event narratives, exhibit text, and proxy statements. The differentiator vs metadata-only `/scrapping/query/`: this scans the words IN the filings, not just the filing headers. Drives keyword surveillance workflows (e.g. 'every 8-K mentioning bankruptcy filed this week', 'every 10-K with going-concern doubt language', 'every proxy mentioning a specific named executive'). Returns hit windows with the matching phrase wrapped in `` tags for direct highlight rendering. Use this to locate the filings, then call `/scrapping/extractor` to retrieve the full item once you've found the right hit. **Use case:** Searching for specific keywords like 'bankruptcy' or 'merger' across millions of filings. **Parameters:** - `query` (body, required): Search term — single word, multi-word phrase (auto-quoted as a phrase search), or quoted exact-match string. Boolean operators NOT supported on this endpoint (use `/scrapping/query/` for boolean syntax). Multi-word queries match the phrase exactly, not the bag-of-words. Stemming and case-folding apply (`bankruptcy` matches `bankrupt` and `BANKRUPTCY`). - `limit` (body, optional, default: 10): Maximum hit windows returned, capped at 50 server-side. Each hit is a 200-300 character text window centered on the match — for narrower scrolls, drop limit to 5-10; for sweeping audits, set to 50 and paginate via `meta.next_cursor`. **Sample response:** ```json { "hits": [ { "accession_number": "0000320193-25-000123", "ticker": "AAPL", "form_type": "10-K", "filed_date": "2025-11-01", "section": "Item 1A", "snippet": "...material adverse effect on our supply chain and..." } ], "meta": { "total": 412, "next_cursor": "eyJpZCI6..." } } ``` ### GET /api/v1/scrapping/extractor Extract a specific item section from a SEC filing — a sec-api.io Extractor replica. Supports 10-K, 10-Q and 8-K form types (20-F / 40-F are rejected with 400). The COMPLETE item section is returned in a single response — no length cap or truncation (a large 10-K Item 1A can run tens of thousands of characters). **Token cost:** 25 tokens per call **Response fields:** - `(response body)` (string): This endpoint returns the extracted section as a RAW STRING body — NOT a JSON envelope. Content-Type is `text/plain` for `type=text` and `text/html` for `type=html`. The `text/html` body is allowlist-sanitized (nh3) before return (no `