WebSocket (Namespace: /sec)Listen for new SEC filings (10-K, 8-K, 4, etc.) as they are ingested.
Listen for new SEC filings (10-K, 8-K, 4, etc.) as they are ingested.
Why use this
Common use case
Socket.IO WebSocket stream for real-time SEC filings. Connect to namespace /sec and subscribe to events: new_filing (any form), or per-form-type rooms (e.g. join: form_4). Messages include the full filing metadata (accession_number, cik, ticker, form_type, filed_date, filing_url) at the moment EDGAR accepts them. For 8-Ks the live message also carries items (declared item codes, e.g. 2.02 = earnings) and exhibit_types (e.g. EX-99), filled from the filing index at emit time — so item/exhibit filters (earnings = 8-K + item 2.02 + EX-99) work in real time and the WS payload matches the REST /sec/filings shape. The 100-token cost is a flat per-UTC-day connection fee — reconnects on the same UTC day are free. Drop-in replacement for the equivalent commercial SEC-data WebSocket — same event shape.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| api_key | auth | required | — | — | API key. Three methods (first match): Socket.IO `auth.api_key` payload (recommended), HTTP header `X-API-Key` or `Authorization: Bearer`, or `?api_key=` query (logs in access logs). 100-token/day fee on first connect of the UTC day. Free-tier OK. `?token=` removed v3.20.2. | tok_test_abc123 |
| namespace | config | required | /sec | — | Socket.IO namespace to connect to. `/sec` is the canonical SEC-filings stream. The connection URL is `<base>/socket.io/?EIO=4&transport=websocket` and the namespace is selected via Socket.IO client API (`io('/sec')`), NOT via URL path. | /sec |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| event | string | no | Always the literal string `"new_filing"` for individual-filing events. For batch events the per-row event field is omitted — the wrapping event name is `new_filings_batch` and each row is a FilingObject. |
| accession_number | string | no | SEC accession number in canonical `XXXXXXXXXX-YY-NNNNNN` format. Use as a deduplication key client-side — same filing will NOT be re-emitted within a session, but reconnects may replay the last few minutes. |
| cik | string | no | Filer CIK in 10-character zero-padded form. Use for client-side per-issuer filtering (e.g. only process filings from your watchlist of CIKs). |
| ticker | string | yes | Resolved ticker from CIK→ticker lookup at filing time (canonical hyphen form). Null when the filer has no public-equity ticker. Useful as the primary filter key for trading-desk consumers. |
| form_type | string | no | Canonical form type (`4`, `8-K`, `10-K`, `13F-HR`, `S-1`, etc.). Subscribe to per-form-type rooms (`join: form_4`) to filter server-side and reduce event volume. |
| filed_date | string | no | ISO `YYYY-MM-DD` filing acceptance date in ET. Distinct from `accepted_at` — `filed_date` is the calendar date for compliance/UI display; `accepted_at` is the precise timestamp. |
| accepted_at | string | no | ISO-8601 UTC timestamp of SEC EDGAR's acceptance moment. Use for intra-day ordering and latency measurement (compare against your client receipt time — should typically be < 60 seconds). |
| filing_url | string | no | Canonical SEC EDGAR URL for the filing's index page. Use as the human-readable link in dashboards; for programmatic content access drill into `/api/v1/sec/filings/{accession_number}/html` or `/scrapping/extractor`. |
| items | array<string> | yes | 8-K item codes the filer declared (e.g. `2.02`, `9.01` — `2.02` = Results of Operations / earnings). Populated live at emit from the filing's index header (no document download). `null` on non-8-K forms and pre-Aug-2004 8-Ks. Filter client-side, or via the REST `?items=` param. |
| exhibit_types | array<string> | yes | Exhibit type tokens on the filing — exact plus family (e.g. `EX-99` and `EX-99.1`), derived live from the index document list. Use for exhibit-level filtering (earnings = 8-K + item `2.02` + `EX-99`). `null` when the filing has no typed exhibits. Mirrors the REST `/sec/filings` `exhibit_types`. |
Sample response
- "event": "new_filing"
- "accession_number": "0001127602-26-001234"
- "cik": "0000320193"
- "ticker": "AAPL"
- "form_type": "8-K"
- "filed_date": "2026-05-01"
- "accepted_at": "2026-05-01T20:14:32.000Z"
- "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000112760226001234/0001127602-26-001234-index.htm"
- "items":
- "2.02"
- "9.01"
- "exhibit_types":
- "EX-99"
- "EX-99.1"
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl -X WS "https://api.finradar.aiWebSocket (Namespace: /sec)?api_Token=YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).