Skip to main content
These endpoints cover what a company disclosed and what it said it expects: 8-K filings as structured facts and as raw text, forward guidance, the figures printed in earnings releases, and the prediction-market contracts written against those outcomes. In the dashboard’s dataset list these appear as Real-time US events and filings, Real-time guidance and changes, Real-time earnings result analysis, and Prediction-market consensus (see the MCP tool map). All endpoints on this page require the Fund plan, except the vocabulary endpoint GET /v1/8k-events/families, which is free on every plan. Every metered call costs 1 credit. The company_id path segment accepts a ticker (AAPL), a CIK, an ISIN, or a canonical cmp_… id. Guidance and earnings-results routes resolve the identifier to every ticker the company is known by, so figures filed under a secondary symbol are not missed. Responses use the { data, next_cursor, coverage } envelope with cursor pagination — pass next_cursor back unchanged as cursor; see Pagination. Errors use the standard error envelope; see Errors.
Several of these datasets are backfilled backwards, so their history start dates move. Read coverage.available_from on each response rather than assuming a fixed start date.

GET /v1/8k-events/families

The vocabulary for the structured 8-K event layer: the event families, their attribute fields, and the values actually observed in the data. Call this before filtering GET /v1/8k-events — a guessed family or attribute value returns an empty page, not an error. Plan: Free and above · Credits: free
A field the extractor defines but no filing has filled yet is absent from the vocabulary — filtering on it would return nothing anyway.

GET /v1/8k-events

Cross-market structured 8-K events: what a filing disclosed, as fields — who was appointed to what and when, how much was borrowed at which rate, which listing rule was breached. This is the route for screening questions no per-company dataset can answer: every CEO departure this week, every bankruptcy filing this month. One row per concrete fact (a person’s appointment, one note tranche, one deficiency notice), newest SEC acceptance first. Several rows per filing is normal; event_id (accession:item_code) groups them. Extraction runs minutes behind SEC acceptance — a filing accepted moments ago may have no rows yet. Plan: Fund · Credits: 1 per call
string
Event family, e.g. officer_director_change. Use the names served by GET /v1/8k-events/families.
string
An 8-K item code, e.g. 5.02. Same events, alternative key.
string
One filing, e.g. 0001234567-26-000123.
string
Lower bound on announced_at — the SEC acceptance timestamp. YYYY-MM-DD or an ISO instant like 2026-08-12T21:30:00Z.
string
Upper bound on announced_at, same formats.
string
One attribute equality filter, paired with attr_value — e.g. attr_key=role_group&attr_value=ceo. Providing one half without the other is a 400.
string
The value for attr_key. Values are the controlled vocabulary from GET /v1/8k-events/families.
string
item keeps only statutory rows (the company filed under that item code); probe keeps only rows found by content matching under a different item code, which carry lower certainty.
boolean
Keep only rows whose quote was found verbatim in the filing and whose numbers all matched the filing text. The strictest cut — for anything where a wrong number is worse than a missing row.
string
next_cursor from the previous page, passed back unchanged.
integer
1–1000, default 100.
Attribute values are strings exactly as the filing printed them ("$700 million", "SOFR plus 1.75%"). Nothing is converted or summed — parse deliberately before any arithmetic, and never add a row with attrs.is_total="yes" to its sibling tranches.
announced_at (when the market learned) and occurred_on (the event’s own date) differ on 59% of rows, with a tail running to years. Time windows here run on announced_at; dating the event itself is what occurred_on is for.
Counting events means filtering is_amendment: rows from an 8-K/A usually restate the whole event rather than just the correction. quote_check="unverified" means the supporting sentence could not be matched against the filing under the checker’s rules — read it as “check this one”. numbers_unverified lists numbers absent from the filing text and derived_fields names the affected fields.

GET /v1/companies/{company_id}/8k-events

One company’s structured 8-K events. Same filters, row shape, and pagination as the cross-market route above. Plan: Fund · Credits: 1 per call

GET /v1/companies/{company_id}/8k-exhibits

The text a company actually published with an 8-K — the earnings release, the management change, the deal announcement. One row per exhibit, newest filing first. Plan: Fund · Credits: 1 per call
string
Inclusive lower bound on the filing date, YYYY-MM-DD.
string
Inclusive upper bound on the filing date, YYYY-MM-DD.
string
One filing, e.g. 0001437749-26-024904.
string
An 8-K item code the filing reported, e.g. 2.02.
boolean
default:"false"
Include the full exhibit text. Off by default — bodies run to tens of thousands of characters, and the page size shrinks when you ask for them. chars is always returned so you can see the size first.
string
next_cursor from the previous page, passed back unchanged.
integer
1–1000, default 50. A smaller cap applies when include_body=true.

GET /v1/companies/{company_id}/guidance

What management said it expects — revenue, margins, capex and the rest. Every row carries the quote it came from; the parsed value_low / value_high / value_unit are a convenience over the company’s own phrasing (new_value), not a replacement for it. Plan: Fund · Credits: 1 per call
string
Normalised metric key, e.g. revenue, ebitda, core_eps.
string
One of new, raise, cut, maintain.
integer
Fiscal year, 2000–2100.
integer
1–4.
string
next_cursor from the previous page, passed back unchanged.
integer
1–1000, default 100.
This is what management said, not a filed figure. period is the period being guided (e.g. FY26), not the quarter being reported. Where the filed release and the call state a figure differently, the filed one is kept — every disagreement traced so far has been the call transcription.

Guidance variants

Three sibling routes share the guidance filters and row conventions: Plan: Fund · Credits: 1 per call each
  • GET /v1/companies/{company_id}/guidance-changes — only the metrics that moved since the previous earnings event. Filters: metric_key, year, cursor, limit. Rows carry current_value, prior_value, prior_transcript_id, and change.
  • GET /v1/companies/{company_id}/guidance-earnings-events — guidance as of one earnings event, with the 8-K release and the call collapsed into a single row per metric.
  • GET /v1/companies/{company_id}/guidance-latest — the company’s current standing guidance, one row per metric. Not paginated: next_cursor is always null, because reading the current outlook across pages invites reading page one as the whole state.

GET /v1/companies/{company_id}/earnings-results

What a quarter actually delivered, as the company printed it in the earnings release — including the non-GAAP lines the financial statements do not carry (adjusted EBITDA, organic growth, segment KPIs). One row per figure per release; a GAAP and a non-GAAP reading of one metric are two rows. Plan: Fund · Credits: 1 per call
string
Normalised metric key, e.g. revenue.
string
The period the figure is for, as the release labelled it — Q2 2026, FY26.
integer
2000–2100.
integer
1–4.
string
consolidated or segment. No default — a release that breaks a line out by segment emits one row per segment beside the consolidated row, so summing an unfiltered page double-counts.
string
next_cursor from the previous page, passed back unchanged.
integer
1–1000, default 100.
These are not the financial statements — those come from the filing’s own XBRL via /v1/financials and are the audited, comparable record. yoy is the change the release printed, never one computed by us; it is null when the release printed none.

GET /v1/companies/{company_id}/prediction-markets

What money is betting on a company: whether an operating number clears a threshold (kpi_ladder), whether a topic comes up on the next earnings call (call_keyword), whether EPS clears a contract’s level (earnings_beat). One row per contract per most recent observation. Plan: Fund · Credits: 1 per call
string
kpi_ladder, call_keyword, or earnings_beat.
string
open or settled.
string
next_cursor from the previous page, passed back unchanged.
integer
1–1000, default 100.
Not a live feed. Prices are snapshots taken roughly hourly between 12:00 and 24:00 UTC, with a nightly gap of about 12.5 hours. Read as_of_age_minutes before calling any probability current.
implied_probability is null whenever the book was one-sided or its spread wider than 0.25 — that null means nobody is really trading the contract. yes_bid and yes_ask are returned raw for anyone who wants their own rule. Sort by volume before saying “the market expects”: plenty of contracts have traded a few hundred dollars, which is a listing rather than an opinion.

GET /v1/companies/{company_id}/earnings-markets

Earnings-beat contracts with settlement checks: one row per company per quarter per basis. GAAP and non-GAAP are separate contracts written against separate levels — pooling them compares an adjusted figure with a GAAP one. Observed twice daily since 2025-09. Plan: Fund · Credits: 1 per call
string
gaap or nongaap.
string
Inclusive lower bound on the estimated report date, YYYY-MM-DD.
string
Inclusive upper bound, YYYY-MM-DD.
string
next_cursor from the previous page, passed back unchanged.
integer
1–1000, default 100.
eps_threshold is fixed when the contract is written and never revised — it is a property of the contract, not a running estimate. cleared is the exchange’s settlement of its own contract; cleared_confirmed is an independent reading against the EPS printed in the earnings release, and check_status says why when that check could not run. A null cleared_confirmed means not checked, never that cleared is wrong.