---
title: "Get a story (event) with its coverage timeline and AI digest"
method: GET
path: "/api/v1/stories/{publicId}"
---

# Get a story (event) with its coverage timeline and AI digest

`GET /api/v1/stories/{publicId}`

## Request

- Base URL: `https://bithot.news`
- URL: `https://bithot.news/api/v1/stories/{publicId}`
- Auth: none declared

One story = one real-world event aggregated from every covering source: a reverse-chronological coverage timeline, an AI digest that is rewritten incrementally as the event evolves (contradictions with earlier reporting are stated explicitly), and links to same-storyline and related stories. Extract ids from the final path segment of a hot-topics links.story HTML URL, or use ids from another story's storyline/related refs; never request links.story as JSON. Merged stories answer with a 308 to the surviving id. Call this endpoint only with an id actually returned by the API; a 404 means the public story layer or that story is unavailable.

## Path parameters

- `publicId` string, required

## Headers

- `User-Agent` string
- `If-None-Match` string

## Response `200`

OK

- StoryResponse
  - `schemaVersion` unknown, required
  - `story` Story, required
    - `publicId` string, required
    - `title` string, required
    - `status` 'active' | 'settled', required
    - `sourceCount` integer, required
    - `reportCount` integer, required
    - `firstReportAt` string, date-time, required
    - `latestAt` string, date-time, required
    - `latest` string, required
    - `digest` string, nullable, required
    - `digestUpdatedAt` string, date-time, nullable, required
    - `links` object, required
      - `aihot` string, uri, required
    - `reports` StoryReport[], required
      - `id` string, required
      - `title` string, required
      - `summary` string, nullable, required
      - `source` object, required
        - `name` string, required
        - `firstParty` boolean, required
      - `publishedAt` string, date-time, required: When the original was published; if the original carries no reliable publication date, when it was collected instead.
      - `links` object, required
        - `aihot` string, uri, required
        - `original` string, uri
    - `storyline` StoryNeighbor[], required
      - `publicId` string, required
      - `title` string, required
      - `relation` string, required
      - `links` object, required
        - `aihot` string, uri, required
        - `api` string, uri, required
    - `related` StoryNeighbor[], required
      - `publicId` string, required
      - `title` string, required
      - `relation` string, required
      - `links` object, required
        - `aihot` string, uri, required
        - `api` string, uri, required

## Other responses

- `304`: Not Modified
- `308`: Story was merged into another; follow Location to the surviving story id.
- `400`: Machine-readable problem response.
- `403`: Machine-readable problem response.
- `404`: Machine-readable problem response.
- `405`: Machine-readable problem response.
- `429`: Machine-readable problem response.
- `503`: Machine-readable problem response.

---

[API](https://skmtc.dev/bithot/apis/bithot-public-api.md) · [All operations](https://skmtc.dev/bithot/apis/bithot-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bithot/apis/bithot-public-api/revisions/2b54229fad34?raw)
