News and events
The news routes serve one article collection. You can list it, search it by meaning, and read one article with its citation, and you can list the events extracted from the articles about a security. Machine-generated analysis written from the articles is on digests, theses, and themes.
Routes
| you need | route |
|---|---|
| the newest articles, filtered | GET /v1/news |
| articles ranked by meaning against a query | GET /v1/news/search |
| one article with its text | GET /v1/news/{article_id} |
| events extracted from a security's articles | GET /v1/securities/{symbol}/events |
Every parameter and response schema is in the API reference.
curl "https://api.tauric.ai/v1/news?instrument=security:AAPL&limit=5" \
-H "Authorization: Bearer $TAURIC_API_KEY"
curl "https://api.tauric.ai/v1/news?exposure=crypto&since=2026-09-28T00:00:00Z" \
-H "Authorization: Bearer $TAURIC_API_KEY"
curl "https://api.tauric.ai/v1/news/search?q=oil%20supply%20disruption&limit=5" \
-H "Authorization: Bearer $TAURIC_API_KEY"
curl "https://api.tauric.ai/v1/news/1" \
-H "Authorization: Bearer $TAURIC_API_KEY"
Article list
GET /v1/news lists articles, newest first by their article time, with ties broken by id. It is
paged by limit (default 20, at most 21) and after (lists).
A list can repeat a story syndicated to several outlets or URLs. collapse=story lists one row per story instead: the
newest matching article of each group of near-duplicate coverage, with story_members counting the matching articles
in that group. limit then counts stories. The default, collapse=none, lists every article.
Story groups can change as articles arrive.
Semantic search
GET /v1/news/search (limit default 10, at most 21) ranks articles by meaning against q. Results are ordered by
relevance (score, highest first), never by time, so a months-old article can rank first. For
the newest articles about something, list them with instrument and since, or bound the search with since.
Search counts stories, not articles: articles grouped into one story (story_id) collapse to the best-scoring one. An
article in no story is its own story, so an ungrouped near-duplicate from another publisher can appear beside it.
limit and after page the results (lists).
Search is not exhaustive: it can return fewer than limit stories while other matching stories exist. Narrow the
query or the filters (since, until, instrument) to reach them.
Filters
The list and search take the same filters. They select the articles before ranking, story collapsing, and the limit, and several filters combine with AND.
| filter | selects |
|---|---|
instrument | articles tagged as about one security listing |
entity | articles that mention a typed entity |
exposure | articles with a recorded financial exposure |
domain | articles with a recorded content domain |
topic, event_type, sentiment, impact | the closed annotation vocabularies (the OpenAPI enums); event_type matches an article carrying an extracted event of that type, not the event's own date |
since, until | inclusive bounds on the article time |
instrument takes a security key (security:AAPL, or security:{MIC}:{SYMBOL}); news is attributed to securities
only. A share class matches in any spelling an article uses (BRK.B or BRK-B). A bare ticker that several venues
currently hold is 409 ambiguous_instrument, naming the venue forms. Another kind, a key without its kind, an external
spelling (BRK-B), an unregistered ticker, or a venue that does not hold the ticker is 422.
entity takes a typed entity key, {type}:{normalized name} (organization:apple, person:…, product:…). It
matches a mention, not a resolved issuer identity.
exposure is one of equity, fx, commodity, crypto, or fixed_income
(asset class and instrument type);
exposure=rates or exposure=credit is 422 naming fixed_income, and exposure=economy is 422 naming
domain=macro. domain is macro: the economy as a whole (growth, employment, inflation, policy).
Exposures, domains, topics, and event_types are separate dimensions: domain=macro does not read the topic
macro, and exposure=fixed_income does not read the topic rates.
since and until are instants with a timezone. A naive instant, a date alone, or since after until is 422. In
a URL, write an offset's + as %2B (2026-09-20T12:00:00%2B02:00): a bare + in a query string is a space, and the
instant is then refused. Unknown or malformed parameters follow the
rules for every request.
Article fields
Every article carries its citation: id, title, publisher (a name or a web domain, as the article gives it),
url, and its time fields. Each article also carries
word_count and its annotations. GET /v1/news/{article_id} adds the article's text.
Annotations
The annotations (summary, sentiment, impact, topics, exposures, domains, instruments,
unresolved_instrument_count, event_types) are served when the article is annotated. Otherwise each is null,
field_states says why (not_held), and the article matches no annotation filter.
A succeeded annotation's empty exposures or domains ([]) means none was recorded, not that the article has none:
an economy-only article is exposures: [], domains: ["macro"].
Instruments
instruments names what the article is about, by instrument keys: security:{SYMBOL}, future:{MIC}:{ROOT}
(a contract family), fx:{PAIR}, and series:{key} (an index or yield index). A symbol is named only where it maps to
exactly one maintained instrument.
unresolved_instrument_count counts the symbols that do not.
Events and entities in one article
GET /v1/news/{article_id} adds, inside annotations:
events: the extracted events, each with its date as the article writes it (date_verbatim) and its owninstrumentsandunresolved_instrument_count(events);entities: the entities the article mentions.
Article time
An article carries up to three observed times, each under the field that names it.
| field | what it is |
|---|---|
published_at, published_at_precision | the publication instant the publisher stated |
listed_at, listed_at_precision: "15m" | the 15-minute interval by which the article was public; the article may be much older |
available_at | when the article was added; always set |
article_time, article_time_kind | published_at, else listed_at, else available_at, and which one it is (published, listed, available) |
published_at does not change once set.
published_at_precision is second when published_at has non-zero seconds; it is null when published_at is null
or falls on a whole minute, whose precision is unknown (field_states.published_at_precision not_held).
listed_at is not the publication time.
The list's order and the since/until filters use article_time. It is when the article appeared, never when an
event it reports occurred.
Collection freshness
Every list and search answer carries freshness, the collection's own freshness, which tells an empty data apart from a
collection that has stopped receiving articles:
| field | meaning |
|---|---|
latest_published_at | the newest stated publication time held |
latest_listed_at | the newest listed_at held; not comparable with latest_published_at as "newest article" |
latest_available_at | when the newest article was added |
searchable_through | on search only: when the newest article search can find was added; it trails latest_available_at while newer articles are not yet searchable, and GET /v1/news already lists those |
Each is null only when no article of its kind is held.
Withdrawn articles
A withdrawn article is in no list, search, digest, or analysis input. GET /v1/news/{article_id} answers it 410 gone with the
reason. An id no article ever had is 404 not_found.
Events
GET /v1/securities/{symbol}/events lists events extracted from the articles about a security, newest article
first. It is paged by limit (default 40,
at most 45) and after (lists). Every field is described in the API reference.
Each event is an assertion of the article that mentions it, with that article's citation in article. Its
date_verbatim is the article's own dating of the event.
An event is listed under its article's time, not when it occurred: an earnings result recapped in
today's article is not today's event. since and until bound the articles' article_time as in filters.
The default window is the 30 days before until (or now).
One event mentioned by several articles of one story is listed once, under its earliest-time mention. A withdrawn article's events are not served.