8-K API: SEC corporate events as normalized JSON, classified by item code
Facts last verified 2026-08-19; sample response fetched from production 2026-08-31.
When something material happens at a US public company — an acquisition agreement, quarterly results, a CEO departure, a cybersecurity incident — the company must report it to the SEC on Form 8-K, generally within four business days of the triggering event. What happened is encoded as official item codes (2.02 is results, 5.02 is officer and director changes, 1.01 is a material agreement), but EDGAR publishes the filing as documents — the item classification lives in an SGML header you would otherwise parse yourself. FilingPulse polls the EDGAR feed continuously, classifies every 8-K by its official item codes, and serves the result as JSON with HMAC-signed webhooks.
To be precise about what this is: FilingPulse is data infrastructure. We report which events were filed, as they were filed — no scores, no recommendations, no interpretation of what an event means for anyone.
What a served event looks like
This is the exact, complete production response of GET /v1/events?cik=1820953&since=2026-08-27&until=2026-08-27, fetched 2026-08-31 — Affirm's August 2026 earnings 8-K, which carried three items (the since/until window is fixed and in the past, so this query returns the same response forever):
{
"data": [
{
"form_type": "8-K",
"period": "20260825",
"filed_date": "20260827",
"issuer": {
"name": "Affirm Holdings, Inc.",
"cik": "0001820953"
},
"items": [
{
"code": "2.02",
"caption": "Results of Operations and Financial Condition"
},
{
"code": "5.02",
"caption": "Departure of Directors or Certain Officers; Election of Directors; Appointment of Certain Officers: Compensatory Arrangements of Certain Officers"
},
{
"code": "9.01",
"caption": "Financial Statements and Exhibits"
}
],
"source_url": "https://www.sec.gov/Archives/edgar/data/1820953/000162828026059271/0001628280-26-059271-index-headers.html",
"normalized_by": "filingpulse-prototype-0.2",
"accession": "0001628280-26-059271"
}
],
"total": 1,
"limit": 50,
"offset": 0
}
The properties that make this shape dependable:
- Items carry the official code and the caption as filed. One 8-K frequently reports several items at once — here results (2.02), an officer change (5.02), and exhibits (9.01) in a single filing. If the SEC introduces an item our table doesn't know yet,
codeisnulland the caption still comes through — you see exactly what the filing said. - Dates come back exactly as filed.
periodandfiled_dateareYYYYMMDDbecause that is the format 8-K SGML headers use — the strings-as-filed rule. Thesince=/until=filters take ISOYYYY-MM-DDand operate on a normalized index, so filtering still works the way you expect. accessionis the stable filing id — dedupe on it. Every list response carries thetotal/limit/offsetenvelope for paging.- Every documented field is always present.
nullmeans the filing didn't state it; a missing key never means anything. - The schema is frozen v1, additive-only — served machine-readable at /v1/schema, no key needed. Breaking changes would require a v2 namespace; your parser won't rot.
Item codes you can filter on
The item= filter takes any official 8-K item code. The ones people watch most:
| Code | What it reports |
|---|---|
| 1.01 | Entry into a material definitive agreement |
| 1.05 | Material cybersecurity incidents |
| 2.01 | Completion of an acquisition or disposition of assets |
| 2.02 | Results of operations and financial condition (earnings) |
| 3.01 | Notice of delisting or failure to satisfy a listing rule |
| 5.02 | Departure or appointment of directors and officers |
| 7.01 | Regulation FD disclosure |
| 8.01 | Other events |
Querying it
GET https://api.filingpulse.io/v1/events — filters compose; newest filed first:
- All earnings 8-Ks:
/v1/events?item=2.02 - Officer and director changes only:
/v1/events?item=5.02 - One company's events, by CIK:
/v1/events?cik=1820953 - A fixed, reproducible window —
sinceanduntilare both inclusive, so the same window returns the same population forever:/v1/events?item=2.02&since=2026-08-01&until=2026-08-31
Pass your key in the X-API-Key header. limit goes to 200 per page with offset paging; copy-paste versions live on the query patterns page, each one executed by our CI.
8-K webhooks
Polling tells you what already happened; for new events you can register a webhook (1 subscription free) with "events": ["8k"] and get an HTTP POST when an 8-K lands. Subscriptions accept an items filter — {"items": ["5.02"]} delivers only officer-change filings, so your handler never sees the noise. Every delivery is HMAC-signed (X-FilingPulse-Signature, per-subscription secret) with a fixed retry ladder. Working receiver code is on the recipes page; the n8n templates include a no-code daily 8-K digest.
Freshness and coverage — checkable, not claimed
We poll EDGAR's public feed on a 60-second cadence during filing hours, and every night a reconciliation pass re-checks the trailing days against EDGAR's own daily index, so anything the live feed dropped is recovered automatically. Rather than quote adjectives, we publish the numbers: current event counts and the freshest ingest timestamp are at /v1/health, no key needed — check it before assuming anything.
Free tier and pricing
The free tier is 2,500 requests/month at 10/minute, email only, no card — enough to poll every 20 minutes around the clock, or to skip polling entirely with the free webhook. Paid tiers ($19/$49/$99 per month) raise volume and webhook counts; the data and schema are identical on every tier, and no tier carries a personal-use license restriction. Get a key — it takes under a minute.
How it compares
Who is writing this: we build FilingPulse, so we have an obvious interest. To keep this useful anyway, every factual claim about another provider below was read from that provider's own public pages on the date shown, each section links its source, and we say plainly where a competitor is the better choice. If you find something out of date, email keys@filingpulse.io and we will fix it.
| Provider | Free tier | Push delivery |
|---|---|---|
| FilingPulse | 2,500 requests/month, 10/min, email only — no card | HMAC-signed webhooks on new filings, plus a hosted MCP server for AI agents |
| sec-api.io | First 100 API calls — one-time, not monthly | Real-time WebSocket filing stream on paid plans |
| SEC EDGAR (official APIs) | Free, no key — max 10 requests/second with a declared User-Agent | None — the SEC states it offers no filing notification service; RSS polling is the official option |
| Financial Modeling Prep | 250 calls/day, end-of-day data | No filing webhooks documented |
| Finnhub | 60 API calls/minute, personal use | WebSocket is for market data; filings are poll-only |
| edgartools (open source) | Free — MIT-licensed Python library you run yourself | None — a local library, not a hosted service; no webhooks |
| Massive (formerly Polygon.io) | Market-data plans include a free tier; filings endpoints are part of the stocks plans | Form 4 data is documented as updated daily on every plan — a daily batch, not real-time |
The structural difference for 8-K specifically: the SEC's own APIs give you the raw filing documents free forever, and the item classification lives in SGML headers you parse yourself — that DIY path is covered honestly on our free SEC EDGAR API page. FilingPulse's product is that classification done for you, plus push delivery the minute a filing lands. Full comparison with pricing floors and sources: best SEC EDGAR API in 2026.
Know going in
Honest limits: we serve the event classification, not the 8-K body text — item codes, captions, issuer, dates, and the EDGAR source_url where the full filing and its exhibits live. If you need full-text search inside filings, sec-api.io is the answer today. 8-K headers carry no ticker symbol, so issuer filtering is by CIK (which also survives ticker changes). Multi-filer 8-Ks keep the first filer block — a documented limitation. Amendments arrive as form_type "8-K/A" on the same feed. We launched in July 2026 and would rather say so than pretend otherwise.
Other ways in
- Hosted MCP server — Claude, ChatGPT Developer Mode, or Cursor can query 8-K events with no install.
- SDKs:
pip install filingpulseandnpm install filingpulse, both zero-dependency, both with webhook signature verification (docs). - n8n workflow templates — a daily 8-K digest with item-code counts, no code required.
Sources
Competitor facts were read from these pages on the dates shown. Pricing and limits change; the linked page always wins over this one.
- sec-api.io — verified 2026-08-19
- SEC EDGAR (official APIs) — verified 2026-08-19
- Financial Modeling Prep — verified 2026-08-19
- Finnhub — verified 2026-08-19
- edgartools (open source) — verified 2026-08-19
- Massive (formerly Polygon.io) — verified 2026-08-19
More comparisons: Best SEC EDGAR API in 2026 · sec-api.io alternatives · FilingPulse vs sec-api.io · Free SEC EDGAR API options · Insider trading API (Form 4 data) · S-1 API (IPO registration lifecycle)