Skip to main content
The news layer answers two different questions against two different keys: what has been happening to a company (the per-company routes) and what has happened on a macro theme — rates, trade, geopolitics — most of which names no company and is therefore unreachable by ticker. In the dashboard’s dataset list these appear as Real-time company events, Real-time company news, and Real-time macro news (get_company_events / get_company_news / get_macro_news via MCP). Sources span press and wire coverage (roughly 160 feeds across two dozen regions), earnings-call transcripts, SEC 8-K filings, Asian exchange filings, company IR pages, and a semiconductor supply-chain lane; channel on every row says which. All endpoints on this page require the Fund plan, except the vocabulary endpoint GET /v1/news/themes, which is free on every plan. Every metered call costs 1 credit. The company_id path segment accepts a ticker, CIK, ISIN, or cmp_… id, and resolves to every symbol the company is known by. 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.
Coverage starts 2026-07-26 — there is no history before that date. An empty result for an earlier date means the feed did not exist, not that nothing happened. The stream itself is polled continuously (roughly every two minutes).
An empty result usually means nothing cleared the scoring bar, not that nothing was published: only items scoring 40+ on the rule pass are read by the model, roughly a fifth of the stream. A large share of the volume is Japanese, Korean or Chinese and is not translated — an English keyword search finds nothing in it.

GET /v1/companies/{company_id}/news/events

One row per (event, company) — the monitoring grain. An event is one event, not one article: ten write-ups of the same print collapse to one row, with the headline and reason taken from the strongest article. The per-article route below answers “what was written”; this one answers “what happened”. Plan: Fund · Credits: 1 per call
string
bullish, bearish, or neutral — the event’s overall direction, the most common read across its articles.
integer
0–100. Peak impact across the event’s articles.
string
default:"direct"
Which kind of connection to this company. direct (default) — the article names it. knock_on — the article does not name it; the row is reached through a filed relationship in the entity graph and is an inference. both — both kinds, each row carrying its own relation.
integer
0–100, knock-on rows only: how far the inference says this name was repriced. Not the same scale as min_impact, and never applied to direct rows.
string
ISO-8601 timestamp lower bound.
boolean
default:"false"
Include future-dated calendar rows (IR feeds publish the earnings calendar, so some rows are dated months ahead). Excluded by default.
string
next_cursor from the previous page, passed back unchanged.
integer
1–200, default 50.
An event can merge several kinds of source — a wire write-up, the company’s own 8-K, and the earnings call that followed — and publishers then lists all of them. The event’s headline and why come from its strongest article, not from all of them. Timestamps come from different clocks: weakest_time_basis carries the least precise one in the event, so times are only comparable within the same basis.

GET /v1/companies/{company_id}/news

One row per (article, company). Same filters as the events route, plus event_type and until. Plan: Fund · Credits: 1 per call
string
bullish, bearish, or neutral — the model’s read of what this article means for this name.
string
One of the 20 coarse event types (earnings, guidance, m&a, fda, …).
integer
0–100. The model’s per-name impact — not a price move.
string
default:"direct"
direct (default), knock_on, or both — see the events route above.
integer
0–100, knock-on rows only.
string
ISO-8601 timestamp lower bound.
string
ISO-8601 timestamp upper bound.
boolean
default:"false"
Include future-dated calendar rows. Excluded by default.
string
next_cursor from the previous page, passed back unchanged.
integer
1–200, default 50.
direction and impact_score are the model’s read of an article. They are not price moves, not forecasts, and not a recommendation. human_reviewed marks the rows a person checked. The ticker on a row is what the model wrote, not a resolved identifier — roughly 20% are unconfirmed by the entity layer, and a few are private companies with no symbol. Check ticker_confirmed before treating one as tradable.
Knock-on rows (relation=knock_on, and the reaches list) are inferences from the entity graph’s filed relationships, not reporting — never restate one as something the article said. The full article text is neither served nor stored: a row carries the title, the publisher’s own blurb, a one-line why, and a link — follow the link to read the article.

GET /v1/news/themes

The macro theme vocabulary. Call this before querying a theme stream — a guessed theme name returns an empty page, not an error. Plan: Free and above · Credits: free
Themes are not equally full — market and commodity hold thousands of rows while recently split-out themes hold almost nothing yet. The counts in this response are the honest guide.

GET /v1/news/themes/{theme}

Everything on one macro theme, company or no company. This is the only route that reaches the ~89% of macro items that carry no ticker impact at all. Plan: Fund · Credits: 1 per call
string
required
A theme name from GET /v1/news/themes, e.g. rates.
string
macro — items read as macro events, usually naming no company. company — the same policy events landing on named companies, which is the half a ticker query can never reach.
string
decided — somebody did it. talked — somebody only said it. The Fed holding rates and a governor talking about holding rates are different events; this is how to ask for only the first.
integer
0–100 rule score. 40 and above is the subset the model has read.
string
One of us, jp, kr, tw, cn, eu, in, global. Note region is null on more than half of all rows — unlabelled, not global.
string
ISO-8601 timestamp lower bound.
string
ISO-8601 timestamp upper bound.
boolean
default:"false"
Include future-dated calendar rows. Excluded by default.
string
next_cursor from the previous page, passed back unchanged.
integer
1–200, default 50.
A theme is a routing label, not a verdict: rates collects everything the rule pass read as rate-related, including general market commentary that merely discusses rate expectations. Read the title before treating a row as a policy event.