# 13D/G Live Stream — Finradar API > Version: 3.61.0 | Generated: 2026-06-20 | Content Hash: c06ae9ce > Fetch this file at: https://uat.finradarapi.com/llms/13d-g-live-stream.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. --- ## 13D/G Live Stream Real-time Schedule 13D/13G beneficial-ownership feed. Receive each parsed 13D/13G filing (and amendments) the moment it is ingested, with subscription filters for issuer, filer, form type, ownership %, amendment/conversion, purpose, and threshold crossings. The pushed body is byte-identical to the 13D/13G filing detail REST response. Supports catch-up on connect and subscription persistence across reconnects (7-day TTL). ### WS WebSocket (Namespace: /13dg) Stream of parsed Schedule 13D/13G beneficial-ownership filings. A single `13dg_filing` event per filing carries the COMPLETE detail object — identical to GET /api/v1/ownership/beneficial-ownership/filings/{accession} — including all filers, positions (sole/shared voting & dispositive power), classified purpose with intent flags, exhibits, structured items, and (for amendments) the amendment delta block (prior/current %, threshold crossings, conversions). Server-side filtering eliminates client-side firehose handling. Catch-up delivery on connect replays recent matching filings; subscriptions persist across reconnects (7-day TTL). **Token cost:** 100 tokens per connection-day (flat rate; reconnects on the same UTC day are free) **Response fields:** - `event` (string): Event name — `13dg_filing` for a parsed filing, `13dg_heartbeat` for keep-alive (every 30 s), `subscribed` / `subscription_restored` / `unsubscribed` for subscription-state events. Use to dispatch handlers. - `accessionNo` (string): SEC accession number in canonical `XXXXXXXXXX-YY-NNNNNN` format. Deduplication key. - `formType` (string): Normalized form type: SC_13D, SC_13D_A, SC_13G, or SC_13G_A. - `issuer` (object): Subject company — { name, cik, ticker, cusip, classOfSecurities }. - `aggregatePercent` (number (nullable)): Aggregate percent of class beneficially owned across all reporting persons on the cover page. - `filers` (array): Reporting persons (one filing may have many — group filings). Each carries identity, reporting-person type, citizenship, group membership, and legal-disclosure flags. - `positions` (array): Per-filer ownership positions with sole/shared voting and dispositive power, source of funds, and share breakdowns. - `purpose` (object (nullable)): Classified Item 4 purpose: primary category + 18 boolean intent flags (seeksBoard, seeksMergerAcquisition, …). - `amendment` (object (nullable)): Present only when isAmendment=true. Prior/current %, share/percent change, threshold crossings (5/10/15/20% + direction), and conversion flags (13G↔13D). **Since:** v3.38.0 **Utility:** Real-time push stream of Schedule 13D/13G beneficial-ownership filings — receive each filing within seconds of being parsed, FULLY STRUCTURED (the exact same object the detail REST endpoint returns, so no follow-up call is needed). Unlike the quarterly-batched 13F stream, 13D/G filings are event-driven and arrive throughout the year — this is the activist-and-ownership-change firehose. Server-side filtering on issuer (CIK + ticker), filer (CIK + name substring), form type (13D vs 13G vs amendments), minimum ownership %, isAmendment, isConversion, purpose category, and threshold crossings (5/10/15/20%). The right choice for activist-campaign trackers, ownership-change alerting, and 13D/G analytics desks. 100-token flat per-UTC-day connection fee. **Use case:** Alert the instant an activist files a 13D on a watchlist name, track every new filing by a specific fund (e.g. Icahn, Elliott), or flag any beneficial owner crossing the 5%/10% ownership threshold — in real time, with the full structured filing in a single push. **Parameters:** - `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. 100-token/day fee on first connect of the UTC day, charged separately per namespace. Free-tier OK. - `path` (config, required, default: /socket.io): Socket.IO HTTP path. Default `/socket.io` — the same path the `/sec` and `/13f` streams use; the connection multiplexes namespaces onto a single TCP socket. Pass to your client as `io(url, { path: '/socket.io' })`. - `namespace` (config, required, default: /13dg): Socket.IO namespace. Connect via `io('/13dg', {...})`. Carries both Schedule 13D and 13G (and their /A amendments) — filter by `form_types` if you want only one. **Events (server → client):** - `13dg_filing`: A parsed Schedule 13D/13G filing. Body is byte-identical to the detail REST response (GET /beneficial-ownership/filings/{accession}) plus an `event` tag. Catch-up replays include is_catchup: true. ```json { "event": "13dg_filing", "accessionNo": "0001193125-26-041429", "formType": "SC_13D_A", "filedAt": "2026-02-14T16:04:32", "dateOfEvent": "2026-02-10", "isAmendment": true, "amendmentNumber": 3, "nameOfIssuer": "EXAMPLE CORP", "cusip": [ "123456789" ], "titleOfSecurities": "Common Stock", "issuer": { "name": "EXAMPLE CORP", "cik": "0000123456", "ticker": "EXMP", "cusip": "123456789", "classOfSecurities": "Common Stock" }, "aggregatePercent": 9.8, "aggregateShares": 12345678, "filerCategory": "ACTIVE", "isConversion": false, "filers": [ { "filerName": "EXAMPLE ACTIVIST LP", "filerCik": "0009876543", "reportingPersonType": "PN", "entityType": "entity", "citizenship": "DE", "isGroupMember": true, "filerSequence": 1, "unifiedHolderUuid": "…" } ], "positions": [ { "percentOfClass": 9.8, "sharesBeneficiallyOwned": 12345678, "classOfSecurities": "Common Stock", "soleVotingPower": 12345678, "sharedVotingPower": 0, "soleDispositivePower": 12345678, "sharedDispositivePower": 0, "sourceOfFunds": [ "WC" ], "typeOfReportingPerson": [ "PN" ] } ], "purpose": { "purposeCategory": "ACTIVIST", "classificationMethod": "RULE_BASED", "isPassiveInvestment": false, "intentFlags": { "seeksBoard": true, "seeksMergerAcquisition": false, "…": "…" }, "purposeSummary": "…" }, "exhibits": [ { "exhibitNumber": "99.1", "exhibitType": "Joint Filing Agreement", "documentUrl": "https://www.sec.gov/…" } ], "items": { "4": { "…": "…" } }, "amendment": { "amendmentNumber": 3, "priorPercent": 5.1, "currentPercent": 9.8, "percentChange": 4.7, "priorShares": 6400000, "currentShares": 12345678, "sharesChange": 5945678, "thresholdCrossings": { "crossed5Percent": false, "crossed10Percent": false, "crossed15Percent": false, "crossed20Percent": false, "direction": "up" }, "isTypeConversion": false, "purposeChanged": false }, "is_catchup": false } ``` - `13dg_heartbeat`: Server heartbeat every 30 seconds. Use to detect stale connections. ```json { "status": "alive", "timestamp": "2026-02-14T16:05:30Z", "connected_clients": 3 } ``` - `subscribed`: Acknowledgment after subscribe. Echoes the resolved filter set and triggers catch-up delivery of recent matching filings. ```json { "status": "success", "issuer_tickers": [ "EXMP" ], "form_types": [ "SC_13D", "SC_13D_A" ], "min_ownership": 5, "is_amendment": null, "threshold_crossings": [ "5", "10" ] } ``` - `subscription_restored`: Sent on reconnect when a prior subscription is auto-restored (7-day TTL). Same shape as 'subscribed'. Sync your UI filter state to this. ```json { "status": "success", "issuer_tickers": [ "EXMP" ], "form_types": [ "SC_13D" ], "min_ownership": 5 } ``` - `unsubscribed`: Acknowledgment after unsubscribe. Subscription reset to defaults (all filings, no filters). ```json { "status": "success", "message": "Filters cleared, receiving all 13D/G filings" } ``` **Actions (client → server):** - `subscribe`: Set subscription filters. All fields optional — omit or pass empty arrays/null for 'all'. Triggers catch-up delivery of recent filings matching the new filters. Subscriptions persist across reconnects for 7 days. All present filters are ANDed; CIKs are leading-zero-insensitive; tickers and purpose categories are case-insensitive; filer_names is a case-insensitive substring match against any filer on the filing; threshold_crossings matches if the filing crossed ANY of the requested levels. ```json { "issuer_ciks": [ "320193" ], "issuer_tickers": [ "AAPL", "EXMP" ], "filer_ciks": [ "9876543" ], "filer_names": [ "icahn", "elliott" ], "form_types": [ "SC_13D", "SC_13D_A" ], "min_ownership": 5, "is_amendment": true, "is_conversion": false, "purpose_categories": [ "ACTIVIST" ], "threshold_crossings": [ "5", "10" ] } ``` - `unsubscribe`: Reset subscription to defaults (all filings, no filters). Client remains connected. **Notes:** - A single `13dg_filing` event carries the COMPLETE filing — identical to the detail REST endpoint's `data` object (minus the REST envelope), plus an `event` tag and `is_catchup` flag. No follow-up REST call is needed. - form_types use the normalized underscore form: SC_13D, SC_13D_A, SC_13G, SC_13G_A. The subscribe action also accepts slashed/spaced forms (e.g. 'SC 13D/A') and normalizes them. - min_ownership is a PERCENT of class (e.g. 5.0 = 5%), not SEC thousands. A filing with null aggregatePercent never matches a min_ownership filter. - issuer/filer CIKs accept both zero-padded (0000320193) and unpadded (320193) forms. - Catch-up events have is_catchup: true. Most recent matching filings are replayed on subscribe (up to 20). - is_amendment / is_conversion are tri-state: pass true or false to constrain, omit (null) for no constraint. **Sample response:** ```json { "event": "13dg_filing", "accessionNo": "0001193125-26-041429", "formType": "SC_13D_A", "issuer": { "name": "EXAMPLE CORP", "cik": "0000123456", "ticker": "EXMP" }, "aggregatePercent": 9.8 } ```