> ## Documentation Index
> Fetch the complete documentation index at: https://api.unusualwhales.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> API requests use the base URL https://api.unusualwhales.com and require a bearer token in the `Authorization` header (`Authorization: Bearer <API_KEY>`). Create and manage API tokens at https://unusualwhales.com/dashboard/api.
> For live market data inside an AI tool, use the Unusual Whales MCP server at https://unusualwhales.com/public-api/mcp.
> Instructions for agents using Unusual Whales tools: https://unusualwhales.com/skill.md

# SEC 13D and 13G filings

> Receive beneficial ownership reports (Schedule 13D, Schedule 13G and their amendments) as they are processed.

**NOTE:**
This is the documentation for the websocket channel `sec:13dg_filings`.
Websocket access for personal use is only available through the [Advanced plan](https://unusualwhales.com/pricing?product=api).

You can find fully-functional examples that stream data from many channels here:

* Python: [https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output](https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output)
* Javascript: [https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output-nodejs](https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output-nodejs)

Connect to the websocket URI:

`wss://api.unusualwhales.com/socket?token=<YOUR_API_TOKEN>`

then `join` the `sec:13dg_filings` channel.

Each message carries one beneficial ownership report: a filer discloses its stake in a
class of an issuer's securities. Schedule 13D and Schedule 13G reports, and the amendments
of both, arrive on this one channel. Use `formtype` to tell them apart.

Two companies appear in every message. `company`, `ticker` and `filed_by_cik` describe the
filer, the beneficial owner. `issuer_name`, `issuer_symbol` and `cik` describe the issuer,
the company whose securities are owned.

### Delivery characteristics

* **Updates are event driven.** The channel stays silent until a Schedule 13D or 13G report
  is processed. There is no heartbeat and no fixed schedule.
* **Messages are not deduplicated.** If the same report is published twice, you receive it
  twice. Identify a report by `accession_no`.
* **The channel sends nothing when you join.** Messages sent while you are disconnected are
  not replayed.
* **The channel is global only.** It covers every filer and issuer at once. A join on
  `sec:13dg_filings:<TICKER>` is answered with an `{"error": "..."}` frame.

Payload format:

```
[
  "sec:13dg_filings",
  {
    "accession_no": "0002052205-26-000008",
    "cik": "0001836754",
    "company": "Mink Brook Asset Management Llc",
    "ticker": "",
    "filing_date": "2026-10-01",
    "formtype": "SCHEDULE 13G",
    "ownership_percent": 6.0,
    "shares": 773395,
    "issuer_name": "Legacy Education Inc.",
    "issuer_symbol": "LGCY",
    "issuer_type": "Common Stock",
    "cusip": "52474R207",
    "amendment_no": 0,
    "cusip_issuer_type": ["Unidentified"],
    "filed_by_cik": "0002052205",
    "shares_outstanding": 12889917,
    "shares_report_formtype": "",
    "shares_report_date": "2026-09-24",
    "class_b_shares_outstanding": 0
  }
]
```

### Field reference

Every field is present in every message. A value that is not available is sent as an empty
string, `0` or an empty array, never as `null`. A `0` can therefore mean either zero or not
reported. Dates are strings in `YYYY-MM-DD` format.

<div className="field-table">
  | Field | Type | Description |
  | - | - | - |
  | `accession_no` | string | SEC accession number of the filing. |
  | `cik` | string | SEC CIK of the issuer, the company whose securities the report is about. |
  | `company` | string | Name of the filer, the beneficial owner. |
  | `ticker` | string | Ticker of the filer. Empty string when the filer has none. |
  | `filing_date` | string | Date the filing was published to the SEC. |
  | `formtype` | string | SEC form type, such as `SCHEDULE 13G` or `SCHEDULE 13D/A`. A `/A` suffix marks an amendment. |
  | `ownership_percent` | float | Percentage of the issuer's security class that the filer beneficially owns. `6.0` means 6%. |
  | `shares` | int | Number of the issuer's shares that the filer beneficially owns. |
  | `issuer_name` | string | Name of the issuer. |
  | `issuer_symbol` | string | Ticker of the issuer. |
  | `issuer_type` | string | Type of the reported security as the filing states it, such as `Common Stock`. |
  | `cusip` | string | CUSIP of the reported security. |
  | `amendment_no` | int | Amendment number. `0` when the filing is not an amendment. |
  | `cusip_issuer_type` | string\[] | Security types found by a lookup of the CUSIP, such as `Share`, `Fund`, `Warrant` or `Unidentified`. |
  | `filed_by_cik` | string | SEC CIK of the filer. |
  | `shares_outstanding` | int | Shares outstanding of the issuer's security class, taken from an earlier SEC filing of the issuer. |
  | `shares_report_formtype` | string | Form type of the earlier filing that reported `shares_outstanding`, such as `10-K` or `10-Q`. |
  | `shares_report_date` | string | Date of the earlier filing that reported `shares_outstanding`. |
  | `class_b_shares_outstanding` | int | Class B shares outstanding of the issuer, taken from an earlier SEC filing, when the issuer has class B shares. |
</div>

The payload has the fields of the Kafka message
[`Form13DG`](/docs/kafka/types/Form13DG), published to the topic
[`sec-filings`](/docs/kafka/topics/sec-filings) under the key `form13dg`.
