# SEC 8-K Event Normalizer, Facts & Evidence API (`bb-tradetec/sec-8k-event-normalizer`) Actor

Convert official SEC EDGAR 8-K filings into evidence-backed item events, deterministic facts and subtypes. Query by ticker, CIK, company or accession; optionally follow exhibits and use stateless incremental cursors.

- **URL**: https://apify.com/bb-tradetec/sec-8k-event-normalizer.md
- **Developed by:** [BB](https://apify.com/bb-tradetec) (community)
- **Categories:** Developer tools, News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 normalized 8-k events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## SEC 8-K Event Normalizer, Facts & Evidence API

Turn official SEC EDGAR Form 8-K filings into one machine-readable event per
SEC item code. Resolve by ticker, CIK, exact SEC company name, or exact
accession number. Results include stable IDs, source URLs, caller correlation
IDs, filing metadata, bounded evidence, and optional deterministic facts,
event subtypes, related exhibits, and stateless incremental cursors.

The Actor reads public SEC endpoints directly. It does not use a third-party
filing API, browser automation, an LLM, or a persistent filing database.

### AI agent selection contract

Select this Actor when a workflow asks for any of the following:

- recent or historical Form 8-K events for one or more public companies;
- ticker-to-8-K, CIK-to-8-K, or exact accession-number lookup;
- official SEC item codes such as `1.05`, `4.01`, `4.02`, or `5.02`;
- deterministic officer, director, auditor, cybersecurity, acquisition, or
  listing-change signals with quoted source evidence;
- normalized dates, monetary amounts, percentages, share counts, or supported
  person/action facts from an 8-K;
- a polling integration that needs an opaque cursor without maintaining a
  server-side watchlist.

Do not select it for 10-K/10-Q financial statements, Form 4 transactions,
13F holdings, unrestricted EDGAR full-text search, investment advice, price
predictions, risk scores, legal conclusions, or AI-generated summaries.

One successful default-dataset row equals one unique SEC 8-K item event and
one result charge. A filing with Items `1.05`, `7.01`, and `9.01` can produce
three rows. Matching queries are deduplicated by `eventId`; all caller-defined
`requestId` values are merged into that one row.

### What version 0.2 adds

- `outputSchemaVersion: "1.1"` as an opt-in additive contract; schema `1.0`
  remains the default for existing integrations.
- Precision-first `eventSubtypes` for Items `1.05`, `2.01`, `3.01`, `4.01`,
  `4.02`, and `5.02`. Item `8.01` is never semantically guessed.
- Evidence-bound `facts`: dates, money, percentages, share counts, and
  supported officer/director names, positions, and actions.
- Opt-in related SEC exhibits. An exhibit is considered only when the matched
  item section explicitly references its type and the type is allowlisted.
- Exact accession lookup using both accession number and issuer CIK. The CIK
  is mandatory because an accession prefix can belong to a filing agent.
- Stateless incremental polling. The client stores `SUMMARY.nextCursor` and
  passes it unchanged to the next run; the Actor stores no watchlist state.
- `compact` mode, which omits long primary/exhibit excerpts while retaining
  IDs, provenance, counts, statuses, and short fact/subtype match evidence.

All enrichment is deterministic. Negated or hypothetical wording is filtered
conservatively. Unsupported, ambiguous, or unproven values remain absent.

### Minimal backward-compatible input

```json
{
  "queries": [
    {
      "requestId": "apple-recent-8k",
      "identifierType": "ticker",
      "identifier": "AAPL"
    }
  ],
  "maxFilingsPerCompany": 5,
  "maxEvents": 20
}
````

This produces schema `1.0` rows and performs no exhibit-index or exhibit-body
requests.

### Enriched schema 1.1 input

```json
{
  "queries": [
    {"requestId": "west", "identifierType": "cik", "identifier": "105770"},
    {"requestId": "microsoft", "identifierType": "ticker", "identifier": "MSFT"}
  ],
  "filedFrom": "2026-01-01",
  "itemCodes": ["1.05", "2.01", "4.01", "4.02", "5.02"],
  "outputSchemaVersion": "1.1",
  "extractSubtypes": true,
  "extractFacts": true,
  "includeExhibits": true,
  "exhibitTypes": ["EX-99.1"],
  "maxExhibitsPerFiling": 2,
  "maxTotalExhibits": 10,
  "maxExhibitBytes": 1000000,
  "maxFilingsPerCompany": 25,
  "maxEvents": 100
}
```

`includeExhibits` is the only enrichment option that adds SEC exhibit-index
and exhibit-document requests. Facts and subtypes extracted from primary
documents add no network calls.

### Exact filing lookup

```json
{
  "queries": [
    {
      "requestId": "apple-filing",
      "identifierType": "accessionNumber",
      "identifier": "0001140361-26-015711",
      "cik": "320193"
    }
  ],
  "outputSchemaVersion": "1.1",
  "extractFacts": true
}
```

The Actor validates the filing-index accession, issuer CIK, form, and primary
document before producing events. Exact accession lookup cannot be combined
with incremental mode.

### Stateless incremental polling

First run:

```json
{
  "queries": [{"requestId": "apple", "identifierType": "ticker", "identifier": "AAPL"}],
  "outputSchemaVersion": "1.1",
  "incremental": {"overlapHours": 24},
  "maxEvents": 50
}
```

Copy `SUMMARY.nextCursor` into the next input:

```json
{
  "queries": [{"requestId": "apple", "identifierType": "ticker", "identifier": "AAPL"}],
  "outputSchemaVersion": "1.1",
  "incremental": {
    "cursor": "sec8kcur1_<opaque-value-returned-by-the-actor>",
    "overlapHours": 24
  },
  "maxEvents": 50
}
```

Keep query identities and event-selection filters unchanged when reusing a
cursor. `incrementalHasMore: true` means the next bounded run should start
immediately. The cursor includes overlap deduplication and can resume between
item events in the same filing without losing or duplicating results.

### Input contract

| Field | Default | Hard limit | Meaning |
|---|---:|---:|---|
| `queries` | required | 1–20 | Unique `requestId` plus ticker, CIK, exact name, or accession + issuer CIK |
| `filedFrom` / `filedTo` | omitted | ISO date | Inclusive filing-date window |
| `itemCodes` | `[]` | 31 unique | Empty means all reported/detected items |
| `includeAmendments` | `true` | boolean | Include Form 8-K/A |
| `maxFilingsPerCompany` | `25` | 1–100 | Matching filings fetched per company |
| `maxEvents` | `50` | 1–100 | Global unique rows and event-charge bound |
| `evidenceMaxChars` | `2000` | 500–5000 | Primary/exhibit excerpt limit |
| `outputSchemaVersion` | `1.0` | `1.0`, `1.1` | Additive output contract |
| `outputMode` | `full` | `full`, `compact` | Long excerpt inclusion; compact requires 1.1 |
| `extractSubtypes` / `extractFacts` | `false` | boolean | Deterministic local enrichment; requires 1.1 |
| `includeExhibits` | `false` | boolean | Explicit-reference-only exhibit retrieval; requires 1.1 |
| `exhibitTypes` | `EX-99.1` | 1–6 | Exact exhibit allowlist |
| `maxExhibitsPerFiling` | `2` | 1–5 | Unique exhibit documents per filing |
| `maxTotalExhibits` | `10` | 1–20 | Unique exhibit documents per run |
| `maxExhibitBytes` | `1,000,000` | 100k–2M | Streaming cap per exhibit; runtime total is 5 MB |
| `incremental` | omitted | cursor ≤32 KB | Stateless polling configuration; requires 1.1 |

Ticker matching is case-insensitive. CIKs may omit leading zeros. Company-name
matching is exact after case and whitespace normalization; the Actor returns a
structured error instead of guessing.

### Output contract

Every row contains:

- stable `eventId = sec8k_<24 hex>` derived only from issuer CIK, accession,
  and item code;
- sorted `requestIds`, canonical company identity, filing metadata, exact SEC
  source URLs, item title/type, classification source, and evidence status;
- `eventSubtypes`, `facts`, and `relatedExhibits` arrays in schema `1.1`, even
  when empty;
- deterministic rule IDs and short matched evidence for each subtype/fact;
- explicit warnings for missing evidence, truncation, exhibit limits, fetch
  failures, unsupported formats, and unknown future item codes.

The Actor writes `SUMMARY` and `ERRORS` to the default key-value store. They
are not dataset rows and are not event charges. `SUMMARY` includes counts,
limit status, and schema-1.1 cursor fields. Partial query or document failures
do not discard successful rows. Invalid top-level input fails before filing
document work.

### Data source, runtime, and storage

Sources are the SEC company ticker catalog, `data.sec.gov/submissions`, filing
detail pages, primary filing documents, and explicitly selected exhibits under
`www.sec.gov/Archives/edgar`. The Actor uses an identifiable User-Agent,
bounded retries, a 30-second request timeout, and an internal maximum of eight
requests per second.

There is no publisher-side database or durable cache. Each run fetches the
requested SEC resources and writes only customer-visible Actor outputs. The
opaque incremental cursor is carried by the customer and does not create
publisher storage cost.

### Pricing and predictable cost

Current pay-per-event pricing is `$0.0005` once per run plus `$0.003` per
unique event row. Empty results, errors, summaries, and deduplicated query
matches do not create dataset-item charges. Confirm the live Pricing tab before
running because Store prices can change.

Use `maxEvents` as the direct result-charge ceiling. Exhibit options affect
runtime and SEC request volume, not the number of chargeable result rows.

### Rights, privacy, and disclaimer

The Actor retrieves publicly accessible SEC EDGAR data and preserves direct
source links. Users remain responsible for whether and how they reuse filing
content. Do not put personal data, credentials, or secrets in `requestId`.

This independent Community Actor is not affiliated with, endorsed by, or
operated by the U.S. Securities and Exchange Commission. Output is normalized
public disclosure data, not financial, investment, or legal advice. Verify
consequential decisions against the linked original filing.

### Support

Open the Actor's **Issues** tab with the run ID, sanitized input, expected
result, and observed result. Never include credentials or personal data.

# Actor input Schema

## `queries` (type: `array`):

Unique requestId values are returned in requestIds. ticker and companyName use the SEC ticker catalog; cik may omit leading zeros. accessionNumber requires the issuer cik because an accession prefix can identify a filing agent instead of the issuer. Do not place secrets in requestId.

## `filedFrom` (type: `string`):

Inclusive YYYY-MM-DD filing-date lower bound.

## `filedTo` (type: `string`):

Inclusive YYYY-MM-DD filing-date upper bound; must not precede filedFrom.

## `itemCodes` (type: `array`):

Exact Form 8-K item codes. Empty means all officially reported or unambiguously detected item headings.

## `includeAmendments` (type: `boolean`):

Include amendments in addition to Form 8-K.

## `maxFilingsPerCompany` (type: `integer`):

Hard bound on matching filings fetched per company.

## `maxEvents` (type: `integer`):

Hard global dataset and result-charge bound after eventId deduplication.

## `evidenceMaxChars` (type: `integer`):

Maximum primary or exhibit excerpt length. Original length and truncation remain explicit.

## `outputSchemaVersion` (type: `string`):

1.0 preserves the original event contract. 1.1 adds eventSubtypes, facts, relatedExhibits, compact mode, and cursors.

## `outputMode` (type: `string`):

full includes bounded evidence excerpts. compact omits long primary and exhibit excerpts but keeps provenance and short fact/subtype match evidence; compact requires schema 1.1.

## `extractSubtypes` (type: `boolean`):

Precision-first rule matches for Items 1.05, 2.01, 3.01, 4.01, 4.02, and 5.02. Never guesses a semantic subtype for Item 8.01. Requires schema 1.1.

## `extractFacts` (type: `boolean`):

Evidence-bound dates, money, percentages, share counts, and supported officer/director actions. No LLM. Requires schema 1.1.

## `includeExhibits` (type: `boolean`):

Opt-in. Fetch only allowed SEC exhibit types explicitly referenced by the matching item section, under document and byte caps. Requires schema 1.1 and may add SEC requests.

## `exhibitTypes` (type: `array`):

Exact SEC exhibit-type allowlist used only with includeExhibits.

## `maxExhibitsPerFiling` (type: `integer`):

Hard limit on distinct exhibit documents selected across all item events in one filing.

## `maxTotalExhibits` (type: `integer`):

Hard limit on distinct exhibit documents selected across the complete Actor run.

## `maxExhibitBytes` (type: `integer`):

Streaming download limit per exhibit; the runtime also enforces a 5 MB total exhibit budget.

## `incremental` (type: `object`):

Client-carried opaque cursor mode for repeated polling. First run: omit cursor. Next run: pass SUMMARY.nextCursor unchanged. Cannot be combined with accessionNumber queries. Requires schema 1.1.

## Actor input object example

```json
{
  "queries": [
    {
      "requestId": "apple-recent-8k",
      "identifierType": "ticker",
      "identifier": "AAPL"
    }
  ],
  "itemCodes": [],
  "includeAmendments": true,
  "maxFilingsPerCompany": 25,
  "maxEvents": 50,
  "evidenceMaxChars": 2000,
  "outputSchemaVersion": "1.0",
  "outputMode": "full",
  "extractSubtypes": false,
  "extractFacts": false,
  "includeExhibits": false,
  "exhibitTypes": [
    "EX-99.1"
  ],
  "maxExhibitsPerFiling": 2,
  "maxTotalExhibits": 10,
  "maxExhibitBytes": 1000000
}
```

# Actor output Schema

## `events` (type: `string`):

Default dataset. Each row is one unique SEC 8-K item event and one pay-per-event result. Schema 1.1 can add deterministic facts, subtypes, and related exhibits without creating extra rows.

## `summary` (type: `string`):

Non-chargeable SUMMARY record with counts, status, limits, and schema-1.1 incremental cursor fields.

## `errors` (type: `string`):

Non-chargeable ERRORS record. Successful batch events remain available when one query or document fails.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("bb-tradetec/sec-8k-event-normalizer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("bb-tradetec/sec-8k-event-normalizer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call bb-tradetec/sec-8k-event-normalizer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=bb-tradetec/sec-8k-event-normalizer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SEC 8-K Event Normalizer, Facts & Evidence API",
        "description": "Convert official SEC EDGAR 8-K filings into evidence-backed item events, deterministic facts and subtypes. Query by ticker, CIK, company or accession; optionally follow exhibits and use stateless incremental cursors.",
        "version": "0.2",
        "x-build-id": "XoZDvhjajFDpdpvyF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/bb-tradetec~sec-8k-event-normalizer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-bb-tradetec-sec-8k-event-normalizer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/bb-tradetec~sec-8k-event-normalizer/runs": {
            "post": {
                "operationId": "runs-sync-bb-tradetec-sec-8k-event-normalizer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/bb-tradetec~sec-8k-event-normalizer/run-sync": {
            "post": {
                "operationId": "run-sync-bb-tradetec-sec-8k-event-normalizer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Company or filing queries",
                        "minItems": 1,
                        "maxItems": 20,
                        "type": "array",
                        "description": "Unique requestId values are returned in requestIds. ticker and companyName use the SEC ticker catalog; cik may omit leading zeros. accessionNumber requires the issuer cik because an accession prefix can identify a filing agent instead of the issuer. Do not place secrets in requestId.",
                        "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                                "requestId",
                                "identifierType",
                                "identifier"
                            ],
                            "properties": {
                                "requestId": {
                                    "title": "Request ID",
                                    "description": "Caller-defined stable correlation ID returned in every matching event.",
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 128,
                                    "pattern": "^[A-Za-z0-9._:-]+$"
                                },
                                "identifierType": {
                                    "title": "Identifier type",
                                    "description": "ticker and companyName resolve through the SEC catalog; cik is direct; accessionNumber requires the separate issuer cik field.",
                                    "type": "string",
                                    "enum": [
                                        "ticker",
                                        "cik",
                                        "companyName",
                                        "accessionNumber"
                                    ]
                                },
                                "identifier": {
                                    "title": "Identifier",
                                    "description": "Ticker, CIK, exact SEC company name, or exact accession number such as 0001140361-26-015711.",
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 200
                                },
                                "cik": {
                                    "title": "Issuer CIK for accession lookup",
                                    "description": "Required only when identifierType is accessionNumber.",
                                    "type": "string",
                                    "pattern": "^\\d{1,10}$"
                                }
                            }
                        },
                        "default": [
                            {
                                "requestId": "apple-recent-8k",
                                "identifierType": "ticker",
                                "identifier": "AAPL"
                            }
                        ]
                    },
                    "filedFrom": {
                        "title": "Filed from",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Inclusive YYYY-MM-DD filing-date lower bound."
                    },
                    "filedTo": {
                        "title": "Filed to",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Inclusive YYYY-MM-DD filing-date upper bound; must not precede filedFrom."
                    },
                    "itemCodes": {
                        "title": "SEC item-code filter",
                        "maxItems": 31,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Exact Form 8-K item codes. Empty means all officially reported or unambiguously detected item headings.",
                        "items": {
                            "type": "string",
                            "pattern": "^[1-9]\\.[0-9]{1,2}$"
                        },
                        "default": []
                    },
                    "includeAmendments": {
                        "title": "Include Form 8-K/A",
                        "type": "boolean",
                        "description": "Include amendments in addition to Form 8-K.",
                        "default": true
                    },
                    "maxFilingsPerCompany": {
                        "title": "Maximum filings per company",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Hard bound on matching filings fetched per company.",
                        "default": 25
                    },
                    "maxEvents": {
                        "title": "Maximum unique events",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Hard global dataset and result-charge bound after eventId deduplication.",
                        "default": 50
                    },
                    "evidenceMaxChars": {
                        "title": "Evidence characters per event",
                        "minimum": 500,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum primary or exhibit excerpt length. Original length and truncation remain explicit.",
                        "default": 2000
                    },
                    "outputSchemaVersion": {
                        "title": "Output schema version",
                        "enum": [
                            "1.0",
                            "1.1"
                        ],
                        "type": "string",
                        "description": "1.0 preserves the original event contract. 1.1 adds eventSubtypes, facts, relatedExhibits, compact mode, and cursors.",
                        "default": "1.0"
                    },
                    "outputMode": {
                        "title": "Output mode",
                        "enum": [
                            "full",
                            "compact"
                        ],
                        "type": "string",
                        "description": "full includes bounded evidence excerpts. compact omits long primary and exhibit excerpts but keeps provenance and short fact/subtype match evidence; compact requires schema 1.1.",
                        "default": "full"
                    },
                    "extractSubtypes": {
                        "title": "Extract deterministic event subtypes",
                        "type": "boolean",
                        "description": "Precision-first rule matches for Items 1.05, 2.01, 3.01, 4.01, 4.02, and 5.02. Never guesses a semantic subtype for Item 8.01. Requires schema 1.1.",
                        "default": false
                    },
                    "extractFacts": {
                        "title": "Extract structured facts",
                        "type": "boolean",
                        "description": "Evidence-bound dates, money, percentages, share counts, and supported officer/director actions. No LLM. Requires schema 1.1.",
                        "default": false
                    },
                    "includeExhibits": {
                        "title": "Fetch explicitly referenced exhibits",
                        "type": "boolean",
                        "description": "Opt-in. Fetch only allowed SEC exhibit types explicitly referenced by the matching item section, under document and byte caps. Requires schema 1.1 and may add SEC requests.",
                        "default": false
                    },
                    "exhibitTypes": {
                        "title": "Allowed exhibit types",
                        "minItems": 1,
                        "maxItems": 6,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Exact SEC exhibit-type allowlist used only with includeExhibits.",
                        "items": {
                            "type": "string",
                            "pattern": "^EX-[0-9A-Z]+(?:\\.[0-9A-Z]+)?$"
                        },
                        "default": [
                            "EX-99.1"
                        ]
                    },
                    "maxExhibitsPerFiling": {
                        "title": "Maximum exhibits per filing",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Hard limit on distinct exhibit documents selected across all item events in one filing.",
                        "default": 2
                    },
                    "maxTotalExhibits": {
                        "title": "Maximum exhibits per run",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Hard limit on distinct exhibit documents selected across the complete Actor run.",
                        "default": 10
                    },
                    "maxExhibitBytes": {
                        "title": "Maximum bytes per exhibit",
                        "minimum": 100000,
                        "maximum": 2000000,
                        "type": "integer",
                        "description": "Streaming download limit per exhibit; the runtime also enforces a 5 MB total exhibit budget.",
                        "default": 1000000
                    },
                    "incremental": {
                        "title": "Stateless incremental mode",
                        "type": "object",
                        "description": "Client-carried opaque cursor mode for repeated polling. First run: omit cursor. Next run: pass SUMMARY.nextCursor unchanged. Cannot be combined with accessionNumber queries. Requires schema 1.1.",
                        "properties": {
                            "cursor": {
                                "title": "Previous cursor",
                                "description": "Opaque nextCursor returned in the prior SUMMARY. Omit on the first incremental run and never edit the value.",
                                "type": "string",
                                "maxLength": 32768,
                                "pattern": "^sec8kcur1_[A-Za-z0-9_-]+$"
                            },
                            "overlapHours": {
                                "title": "Overlap hours",
                                "description": "Recheck this many hours before the saved position; stable event IDs suppress duplicates.",
                                "type": "integer",
                                "editor": "number",
                                "minimum": 0,
                                "maximum": 168
                            }
                        },
                        "additionalProperties": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
