stories

Get a story by its id

Changed on

One story — the summary AlphAI wrote from its articles, the key facts each with the publisher it was read from and the source_uid of that article, the per-ticker read, the open questions — wrapped in a lookup status, because a story_id taken from an article row does not always name a current story:

  • found — story is filled.
  • merged — this story was folded into another one; redirect_to is the surviving story's id. Fetch that one (a web page would 308).
  • not_a_story — the id belongs to an article that only one publisher carried, so there is no story to summarise; article names it (/api/news/{uid}/). An article's story_id resolves here for every row, so this is the normal answer for most of the feed: most events are carried by a single outlet.
  • An unknown id is a 404.

summary_state tells you how to read the text: published (the summary covers every article the story had when it was written), stale (new_materials articles joined since; the rewrite is queued — the summaries are debounced, so a fast-moving story is rewritten minutes, not seconds, after each new article), or preparing (no summary yet: title is the lead article's headline and summary its collector summary; key_facts, why_it_matters, ticker_takes and uncertainties are empty). A story older than your plan's archive horizon (by last_material_at) is a 403 archive_horizon, like a deep feed cursor.

The summary is the model's own text, checked against the articles before publishing: every figure in it appears in a source, and no passage of more than a dozen words is copied from one. It is AI-generated financial information for research, not investment advice. Article bodies are never served; materials link to the publishers.

get/api/stories/{story_id}/

Request

  • Base URL
    https://api.alphai.io
  • URL
    https://api.alphai.io/api/stories/{story_id}/
  • Auth
    HTTP bearer

Path parameters

story_idstring required

A story id — the story_id of any article row, or an id from /api/stories/.

Response

The lookup — found, merged or not_a_story.

status'found' | 'merged' | 'not_a_story' required

found: story is filled. merged: this story was folded into another one, redirect_to is its id. not_a_story: the id belongs to an article only one publisher carried, article names it. (An unknown id is a 404, not a status.)

redirect_tostring nullable

The surviving story's id, when status is merged.

Example response

{
  "story": {
    "story_id": "788e477c66f3849b",
    "key_facts": [
      {
        "publisher": "reuters.com"
      }
    ],
    "ticker_takes": [
      {
        "ticker": "NVDA"
      }
    ]
  }
}

Changes