# SEC Filings API — Finradar API > Version: 3.61.0 | Generated: 2026-06-20 | Content Hash: e3277222 > Fetch this file at: https://uat.finradarapi.com/llms/sec-filings-api.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. --- ## SEC Filings API Core access to 25+ years of SEC filings. ### GET /api/v1/sec/filings List filings with pagination and filtering. When querying by ticker, if no local filings exist yet, the API automatically backfills the complete filing history from SEC EDGAR (first call may take a few seconds). **Token cost:** 5 tokens per call **Response fields:** - `status` (string): Always `"success"` on 2xx. ApiResponse envelope marker — present on every endpoint that wraps via `ApiResponse.paginated()`. Use to assert the call succeeded before reading `data`. - `request_id` (string (nullable)): Per-request UUID generated server-side. Surface this in support tickets — operations can grep it directly out of nginx + main_api logs to trace the exact request lifecycle (gateway routing, auth resolution, token debit, response). - `timestamp` (string): ISO-8601 UTC timestamp the response was generated server-side (suffix `Z`). Use as the freshness marker — auto-backfill calls that take a few seconds will surface here as a measurable lag from your client-side `Date.now()`. - `data` (array): Array of filing rows matching the query, sorted by `filed_date DESC` by default (newest first; configurable via `sort` param). Empty array when no rows match — never null. One element per filing — see `data[].*` for shape. - `data[].id` (integer): Internal `sec_filing_entries.id` row ID (auto-increment primary key). Stable across calls but not portable across environments — always join via `accession_number` for cross-environment work. - `data[].accession_number` (string): SEC accession number in the canonical 18-char dashed format `XXXXXXXXXX-YY-NNNNNN` (e.g. `0000320193-25-000123`). Globally unique across EDGAR; the natural primary key for any filing. Pass this to `GET /api/v1/sec/filings/{accession_number}` to retrieve metadata and document URLs. - `data[].ticker` (string (nullable)): Resolved ticker from the filer CIK via the `ticker_norm_aliases` lookup. Null when the filer has no public-equity ticker (private funds, individuals filing Form 4, foreign issuers without ADRs, dissolved entities). Multi-class issuers return the primary share class (e.g. BRK-A for Berkshire Hathaway). - `data[].form_type` (string): Canonical SEC form type as filed (e.g. `10-K`, `10-Q`, `8-K`, `4`, `13F-HR`, `13F-NT`, `13D`, `13G`, `S-1`, `20-F`, `144`, `DEF 14A`). Amendment variants append `/A` (e.g. `13D/A`, `10-K/A`). NT-prefixed and -NT-suffixed forms (`NT 10-K`, `13F-NT`) appear verbatim — these have no information table to drill into. Reference [SEC EDGAR form types](https://www.sec.gov/forms) for the full catalog. - `data[].cik` (string (nullable)): Filer CIK as a zero-padded 10-character string (e.g. `0000320193` for Apple). Note: SEC EDGAR's submissions API returns the unpadded form; FinRadar normalizes to 10-char padded form everywhere. Stable across decades — same CIK refers to the same legal entity. - `data[].entity_name` (string (nullable)): Filer's legal entity name as registered with SEC (e.g. `Apple Inc.`, `BERKSHIRE HATHAWAY INC`). Casing is whatever EDGAR provides — typically uppercase for institutional filers, mixed-case for issuers. For display, prefer the `company_name` alias which is the same value. - `data[].company_name` (string (nullable)): Frontend-friendly alias of `entity_name`. Same value, kept for backwards compatibility with older client code that queried `company_name`. - `data[].role` (string (nullable)): Role of the filer in this filing — relevant for insider filings (Form 4) and institutional filings (13F). Null for issuer filings (10-K/10-Q/8-K). Common values: `Reporting Owner`, `Issuer`, `Filer`. - `data[].title` (string): Free-text title from the EDGAR submissions feed (e.g. `8-K - APPLE INC (0000320193) (Filer)`). Useful for full-text search; for structured fields prefer `form_type` + `entity_name`. - `data[].summary_html` (string (nullable)): Optional HTML summary block from EDGAR (typically empty on Form 4 and 8-K; populated on 13F-HR with structured holdings summary). Treat as untrusted HTML — sanitize before rendering in a browser. - `data[].filing_size` (string (nullable)): Filing size as a human-readable string (e.g. `"245 KB"`, `"2.1 MB"`). NOT a numeric byte count — for byte-level work parse the string client-side or fetch the document directly. - `data[].filed_date` (string (nullable)): ISO date `YYYY-MM-DD` of the filing's SEC acceptance date in ET (NOT UTC; matches the date EDGAR's index pages show). For intra-day ordering use `updated_at` which carries a full timestamp. - `data[].filed_at` (string (nullable)): Frontend-friendly alias of `filed_date`. Same value, kept for backwards compatibility. - `data[].updated_at` (string): ISO-8601 UTC timestamp of the last server-side update to this row (e.g. on a backfill refresh). Use as the cursor for incremental sync — sort `updated_at:desc` and persist the max value as your watermark. - `data[].primary_link` (string (nullable)): Canonical SEC EDGAR URL for the filing's index page (lists all documents in the filing package). Use this as the human-readable link in dashboards. - `data[].primary_html_url` (string (nullable)): Direct URL of the filing's primary HTML document (the actual 10-K/8-K/13F body, not the index page). For programmatic access use this with `GET /api/v1/sec/document?url=...` or with `GET /api/v1/sec/filings/{accession_number}/html`. - `data[].document_files` (array (nullable)): JSON array of structured document descriptors `[{type, document, description, size}, ...]` extracted from the filing's index page. Useful for filtering specific exhibits (e.g. EX-99.1, EX-10.1) before fetching. - `data[].data_files` (array (nullable)): JSON array of XBRL/data file descriptors `[{type, document, description, size}, ...]`. Populated on 10-K/10-Q/8-K filings with embedded XBRL; null on filings without XBRL (e.g. older Form 4s). - `data[].items` (array (nullable)): Array of 8-K item codes disclosed in this filing (e.g. `["2.02", "9.01"]` for an earnings-release 8-K). Null on non-8-K forms. Use for material-event surveillance — filter on specific item codes (1.01 = Material Definitive Agreement, 2.02 = Earnings, 5.02 = Officer Change, 8.01 = Other). - `data[].period_of_report` (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, the report date for 13F-HR). Null for filings without a meaningful period (e.g. some 8-Ks). Differs from `filed_date` — `period_of_report` is the as-of date, `filed_date` is the disclosure date. - `data[].sic` (string (nullable)): Standard Industrial Classification code (4-digit string, e.g. `3674` = Semiconductors). Null when not assigned. For richer industry categorization, join against the Sharadar SF1 industry table via the resolved ticker. - `data[].all_links` (array (nullable)): Array of every document URL listed on the filing's index page — exhibits, XBRL data, images, the primary document. Pass any element to `GET /api/v1/sec/document?url=...` to fetch its content. - `data[].first_seen_at` (string): ISO-8601 UTC timestamp when FinRadar first ingested this filing (typically within seconds of SEC acceptance for filings caught by the RSS poller; longer for backfilled rows). Use for ingest-latency analytics. - `data[].last_seen_at` (string): ISO-8601 UTC timestamp of the last time the RSS poller observed this filing on EDGAR. Updated on every poll cycle for filings still in the active feed; frozen for older filings. - `meta.pagination` (object): Offset-based pagination metadata: `{total, limit, offset, has_more}`. Use `has_more` as the canonical end-of-iteration signal rather than comparing `data.length` to `limit`. - `meta.pagination.total` (integer): Exact total count of filings matching the query (full-table count, not just the current page). Computed via a parallel `COUNT(*)` query — reliable for UI pagers but adds ~50-200ms latency on broad queries. - `meta.pagination.has_more` (boolean): `true` when more pages exist beyond this one (`total > offset + data.length`). Canonical end-of-iteration signal — when `false`, stop paginating. - `meta.backfilled_from_edgar` (boolean (nullable)): Present and `true` ONLY when this call triggered an auto-backfill from SEC EDGAR (i.e. the ticker had no local data or only recent RSS-captured data). Absent on the typical hot-path call. Use to surface a UX hint ("first call took a moment to fetch full history"). - `meta.requested_ticker` (string (nullable)): Echo of the resolved ticker after Phase-53 normalization (e.g. `BRK.A` becomes `BRK-A`). Present only when the request included a `ticker` param. - `meta.primary_ticker` (string (nullable)): Canonical primary share class for the filer (e.g. for Berkshire Hathaway, returns `BRK-A` even if the user queried `BRK.B`). Use to pivot to the multi-class top-of-book. - `meta.cik` (string (nullable)): 10-char zero-padded CIK of the resolved ticker. Use as the join key against XBRL, 13F, or insider-filing tables. - `meta.company` (string (nullable)): Resolved entity name for the ticker (e.g. `Apple Inc.`). Useful as a display label when the user queried by ticker rather than entity_name. **Since:** v1.0.0 **Utility:** Canonical SEC filings list endpoint — paginated, ticker/CIK/form-type/date-range filterable, and self-healing (auto-backfills from SEC EDGAR's submissions API on first ticker query so you never see an empty result for a real issuer). Returns one row per filing with the SEC accession number, filer CIK + entity name + ticker, the form type (canonical strings: `10-K`, `10-Q`, `8-K`, `4`, `13F-HR`, `13D`, `13G`, `S-1`, `20-F`, `144`, `DEF 14A`, etc. — see [SEC EDGAR's form-type catalog](https://www.sec.gov/forms) for the full list), filing dates, and the document URL set (`primary_link`, `primary_html_url`, full `all_links` array). Pair this with `GET /api/v1/sec/filings/{accession_number}` to drill into a specific filing's documents, with `POST /api/v1/scrapping/search/` for full-text content search across filing bodies, or with `GET /api/v1/sec/filings/stats` for aggregate counts. **Use case:** Building a timeline of filings for a specific company or monitoring all new 8-K filings. Example: GET /api/v1/sec/filings?ticker=XAIR&limit=500 returns all XAIR filings, auto-fetching from EDGAR if needed. **Parameters:** - `ticker` (query, optional): Company Ticker (e.g. AAPL). Triggers auto-backfill from SEC EDGAR if no local data exists. - `form_type` (query, optional): Filter by Form Type (10-K, 4, 8-K) - `from_date` (query, optional): Start Date (YYYY-MM-DD) - `to_date` (query, optional): End Date (YYYY-MM-DD) - `sort` (query, optional, default: filed_date:desc): Sort order. Format: field:direction. Fields: filed_date, updated_at. Directions: asc, desc. Shorthand 'asc'/'desc' also accepted (defaults to filed_date). Examples: sort=desc, sort=filed_date:asc - `limit` (query, optional, default: 50): Max 500 records - `offset` (query, optional, default: 0): Pagination offset **Sample response:** ```json { "status": "success", "request_id": "0f14ed05-3a2e-4b76-9c11-1a7c8b3f6de2", "timestamp": "2026-05-02T16:30:14.122Z", "data": [ { "id": 18234567, "accession_number": "0000320193-25-000123", "ticker": "AAPL", "form_type": "10-K", "cik": "0000320193", "entity_name": "Apple Inc.", "company_name": "Apple Inc.", "role": null, "title": "10-K - APPLE INC (0000320193) (Filer)", "summary_html": null, "filing_size": "12.4 MB", "filed_date": "2025-11-01", "filed_at": "2025-11-01", "updated_at": "2025-11-01T20:14:32.000Z", "primary_link": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193&type=10-K&dateb=&owner=include&count=40", "primary_html_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123/aapl-20250928.htm", "document_files": [ { "type": "10-K", "document": "aapl-20250928.htm", "description": "10-K", "size": "12943821" } ], "data_files": [ { "type": "EX-101.INS", "document": "aapl-20250928.xml", "description": "XBRL Instance Document", "size": "412390" } ], "items": null, "period_of_report": "2025-09-28", "sic": "3571", "all_links": [ "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123/aapl-20250928.htm", "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123/aapl-20250928.xml" ], "first_seen_at": "2025-11-01T20:14:35.000Z", "last_seen_at": "2025-11-02T03:00:01.000Z" } ], "meta": { "pagination": { "total": 2148, "limit": 50, "offset": 0, "has_more": true }, "requested_ticker": "AAPL", "primary_ticker": "AAPL", "cik": "0000320193", "company": "Apple Inc." } } ``` ### POST /api/v1/sec/filings/backfill Explicitly backfill ALL historical filings for a ticker from SEC EDGAR. Fetches the complete filing history from data.sec.gov/submissions/ and stores it locally. Subsequent GET queries will return the full history instantly. **Token cost:** 0 (EXEMPT — auth / billing / account / admin / health) **Response fields:** - `status` (string): Always `"success"` on 2xx. ApiResponse envelope marker — wraps via `ApiResponse.success()`. - `request_id` (string (nullable)): Per-request UUID generated server-side. Surface this in support tickets — operations can grep it directly out of nginx + main_api logs. - `timestamp` (string): ISO-8601 UTC timestamp the response was generated server-side (suffix `Z`). - `data` (object): Backfill result envelope — see `data.*` for fields. Wall-clock duration scales with how many filings the issuer has — typically 2-15s for an issuer with 500-3000 historical filings; longer for very-tenured issuers (e.g. GE, IBM) which can have 10K+ filings. - `data.ticker` (string): Echoed input ticker after Phase-53 normalization (e.g. `BRK.A` → `BRK-A`). Useful for confirming the resolution before relying on it downstream. - `data.cik` (string): 10-char zero-padded CIK resolved from the input ticker. Use this as the join key for follow-up queries against XBRL, 13F, or insider-filing tables. - `data.company` (string): Resolved entity name (e.g. `Apple Inc.`). Useful as a display label for the backfilled batch. - `data.inserted` (integer): Count of NEW filings inserted into the local index by this call (rows that didn't exist before). 0 on a no-op repeat call. Compare against `total_from_edgar` to gauge completeness. - `data.already_existed` (integer): Count of EDGAR filings that were already in the local index (skipped via the `(accession_number, cik)` UNIQUE constraint). On a fresh-ticker backfill: 0. On a repeat call: equals `total_from_edgar`. - `data.total_from_edgar` (integer): Total count of filings returned by SEC EDGAR's submissions API for this CIK. Equals `inserted + already_existed + errors`. - `data.errors` (integer): Count of EDGAR rows that failed to ingest (parse errors, transient DB issues). Should typically be 0 — non-zero values indicate a parse-edge-case worth filing a support ticket for. Errors are logged server-side with the accession number. **Since:** v1.0.0 **Utility:** Explicit, free (cost: 0) trigger to pre-load the FULL submissions history for a ticker from SEC EDGAR's `data.sec.gov/submissions/CIK{cik}.json` endpoint into FinRadar's local index. Use this to warm the cache before running an analysis batch — once a ticker has been backfilled, every subsequent call to `GET /api/v1/sec/filings?ticker=X` hits the local DB instantly (no SEC round-trip). Cost is zero because the work is one-shot per-ticker — repeated backfills detect the existing rows via the `(accession_number, cik)` UNIQUE constraint and only insert deltas. Idempotent: safe to call multiple times — `inserted` will be 0 on no-op repeat calls. **Use case:** Call POST /filings/backfill?ticker=AAPL to load all ~2000 Apple filings in one shot, then query them instantly with GET /filings?ticker=AAPL. **Parameters:** - `ticker` (query, required): Stock ticker to backfill (e.g. XAIR, AAPL, TSLA) **Sample response:** ```json { "status": "success", "request_id": "0f14ed05-3a2e-4b76-9c11-1a7c8b3f6de2", "timestamp": "2026-05-02T16:30:14.122Z", "data": { "ticker": "AAPL", "cik": "0000320193", "company": "Apple Inc.", "inserted": 1843, "already_existed": 0, "total_from_edgar": 1843, "errors": 0 } } ``` ### GET /api/v1/sec/filings/{accession_number} Get filing metadata by accession number — returns filing details, document URLs (all_links), and structured data. Does NOT return the document content itself. **Token cost:** 5 tokens per call **Response fields:** - `status` (string): Always `"success"` on 2xx. ApiResponse envelope marker — wraps via `ApiResponse.success()`. - `request_id` (string (nullable)): Per-request UUID generated server-side. Surface this in support tickets — operations can grep it directly out of nginx + main_api logs. - `timestamp` (string): ISO-8601 UTC timestamp the response was generated server-side (suffix `Z`). - `data` (object): Full filing metadata record. Same shape as a single element of `GET /api/v1/sec/filings`'s `data[]` array, PLUS the `raw_entry_xml` field (which is excluded from list responses for payload-size reasons). See `data.*` for fields. - `data.id` (integer): Internal `sec_filing_entries.id` row ID (auto-increment primary key). - `data.accession_number` (string): SEC accession number in canonical 18-char dashed format `XXXXXXXXXX-YY-NNNNNN`. Echoes the input. - `data.ticker` (string (nullable)): Resolved ticker from the filer CIK via the `ticker_norm_aliases` lookup. Null when the filer has no public-equity ticker. - `data.form_type` (string): Canonical SEC form type as filed (e.g. `10-K`, `13F-HR`, `8-K`, `4`, `13D`, `13G`, `S-1`, `20-F`, `144`, `DEF 14A`). Amendment variants append `/A`. NT-prefixed forms (e.g. `NT 10-K`, `13F-NT`) appear verbatim. Reference [SEC EDGAR form types](https://www.sec.gov/forms). - `data.cik` (string (nullable)): Filer CIK as a zero-padded 10-character string (e.g. `0000320193`). - `data.entity_name` (string (nullable)): Filer's legal entity name as registered with SEC. - `data.company_name` (string (nullable)): Frontend-friendly alias of `entity_name`. - `data.role` (string (nullable)): Role of the filer in this filing (`Reporting Owner`, `Issuer`, `Filer`). Null for issuer filings. - `data.title` (string): Free-text title from the EDGAR submissions feed. - `data.summary_html` (string (nullable)): Optional HTML summary block from EDGAR. Sanitize before rendering. - `data.filing_size` (string (nullable)): Filing size as a human-readable string (e.g. `"245 KB"`, `"2.1 MB"`). NOT a numeric byte count. - `data.filed_date` (string (nullable)): ISO date `YYYY-MM-DD` of the filing's SEC acceptance date in ET. - `data.filed_at` (string (nullable)): Frontend-friendly alias of `filed_date`. - `data.updated_at` (string): ISO-8601 UTC timestamp of the last server-side update to this row. - `data.primary_link` (string (nullable)): Canonical SEC EDGAR URL for the filing's index page. - `data.primary_html_url` (string (nullable)): Direct URL of the filing's primary HTML document (the actual 10-K/8-K/13F body). For the parsed body content use the `/html` companion endpoint. - `data.document_files` (array (nullable)): JSON array of structured document descriptors `[{type, document, description, size}, ...]`. - `data.data_files` (array (nullable)): JSON array of XBRL/data file descriptors `[{type, document, description, size}, ...]`. Populated on filings with embedded XBRL. - `data.items` (array (nullable)): Array of 8-K item codes disclosed in this filing (e.g. `["2.02", "9.01"]`). Null on non-8-K forms. - `data.period_of_report` (string (nullable)): ISO `YYYY-MM-DD` period the filing covers (fiscal-period-end for 10-K/10-Q, trade date for Form 4, report date for 13F-HR). - `data.sic` (string (nullable)): Standard Industrial Classification code (4-digit string). - `data.all_links` (array (nullable)): Array of every document URL listed on the filing's index page — exhibits, XBRL data, images, the primary document. Pass any element to `GET /api/v1/sec/document?url=...` to fetch its content. - `data.raw_entry_xml` (string (nullable)): Raw XML entry from SEC EDGAR's RSS feed at the time of ingestion. Useful for forensic / audit-trail work — preserved verbatim from EDGAR for filings ingested via the RSS poller. Null for filings ingested via the submissions-API backfill path (which doesn't expose entry XML). NOT returned by the list endpoint — only the detail endpoint includes this field. - `data.first_seen_at` (string): ISO-8601 UTC timestamp when FinRadar first ingested this filing. - `data.last_seen_at` (string): ISO-8601 UTC timestamp of the last time the RSS poller observed this filing on EDGAR. **Since:** v1.0.0 **Utility:** Canonical filing-detail lookup by SEC accession number — returns the full metadata record (form type, filer CIK + entity name, filed date, period of report, SIC, summary HTML, the complete `all_links` array of every document URL in the filing package, and the `raw_entry_xml` from EDGAR's RSS feed for archival/audit). The natural "step 1" of any filing workflow: find the filing by some other route (search, RSS, ticker timeline), then call this to get the document URLs, then drill into a specific document via `/{accession_number}/html` (primary doc shortcut) or `/api/v1/sec/document?url=...` (any document by URL). Accession numbers are 18-char dashed `XXXXXXXXXX-YY-NNNNNN` (e.g. `0000320193-25-000123`); the path-parameter accepts either the dashed or the un-dashed form. **Use case:** You have an accession number (e.g. from a search) and need the filing date, form type, filer info, and links to all documents in the filing package. **Parameters:** - `accession_number` (path, required): SEC accession number in 18-char dashed format `XXXXXXXXXX-YY-NNNNNN` (e.g. `0000320193-25-000123`). Also accepts the un-dashed 18-char form (`000032019325000123`). Returns 404 when the accession is not in the local index — call `POST /api/v1/sec/filings/backfill?ticker=...` first if you suspect the ticker hasn't been backfilled yet. **Sample response:** ```json { "status": "success", "request_id": "0f14ed05-3a2e-4b76-9c11-1a7c8b3f6de2", "timestamp": "2026-05-02T16:30:14.122Z", "data": { "id": 18234567, "accession_number": "0000320193-25-000123", "ticker": "AAPL", "form_type": "10-K", "cik": "0000320193", "entity_name": "Apple Inc.", "company_name": "Apple Inc.", "role": null, "title": "10-K - APPLE INC (0000320193) (Filer)", "summary_html": null, "filing_size": "12.4 MB", "filed_date": "2025-11-01", "filed_at": "2025-11-01", "updated_at": "2025-11-01T20:14:32.000Z", "primary_link": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193&type=10-K", "primary_html_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123/aapl-20250928.htm", "document_files": [ { "type": "10-K", "document": "aapl-20250928.htm", "description": "10-K", "size": "12943821" } ], "data_files": [ { "type": "EX-101.INS", "document": "aapl-20250928.xml", "description": "XBRL Instance Document", "size": "412390" } ], "items": null, "period_of_report": "2025-09-28", "sic": "3571", "all_links": [ "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123/aapl-20250928.htm", "https://www.sec.gov/Archives/edgar/data/320193/000032019325000123/aapl-20250928.xml" ], "raw_entry_xml": "\n 10-K - APPLE INC...\n \n ...\n", "first_seen_at": "2025-11-01T20:14:35.000Z", "last_seen_at": "2025-11-02T03:00:01.000Z" } } ``` ### GET /api/v1/sec/filings/{accession_number}/html Get the primary document's HTML content by accession number. Returns the full raw HTML of the main filing document (e.g. the 10-K, 8-K body, or — for `13F-HR` / `13F-HR/A` — the INFORMATION TABLE with positions, not the cover page). For XBRL filings, automatically resolves through the SEC viewer to the actual inline XBRL document. **Token cost:** 5 tokens per call **Response fields:** - `(body)` (string): Raw filing HTML — UTF-8 encoded `text/html` body. NOT a JSON envelope (this endpoint returns the document body directly). Server-side post-processing strips `