---
title: "Append-only correction history and point-in-time reconstruction"
method: GET
path: "/api/prediction-markets/events/{source}/{slug}/revisions"
tags: ["public-pm-data"]
---

# Append-only correction history and point-in-time reconstruction

`GET /api/prediction-markets/events/{source}/{slug}/revisions`

## Request

- Base URL: `https://api.coinrithm.com`
- URL: `https://api.coinrithm.com/api/prediction-markets/events/{source}/{slug}/revisions`
- Auth: none required

Every correction CoinRithm has made to this event's published facts,
newest first — what changed, from what to what, why, on whose evidence
(ingest run and raw-capture file), with which parser, and which earlier
statement it supersedes. Nothing is overwritten; corrections append.

`effectiveAt` is when the change became true AT THE SOURCE (the venue's
own settlement time) and is null when the venue states none — it is
never back-filled with the observation time. `observedAt` is when
CoinRithm saw it. The two routinely differ by weeks.

With `asOf`, the response also carries `reconstructed`: the state
CoinRithm was publishing at that instant, folded by OBSERVATION time.
That answers "what did you show on day X" — cite it rather than
inferring past state from current values.

An event with no corrections returns an empty `revisions` array, which
is a real answer, not an error.

## Path parameters

- `source` 'polymarket' | 'kalshi' | 'rothera' | 'limitless' | 'smarkets' | 'manifold' | 'metaculus' | 'predictit' | 'futuur' | 'myriad' | 'forecastex' | 'gemini', required
- `slug` string, required

## Query parameters

- `asOf` string, date-time

## Response `200`

Correction history, optionally with reconstructed state

- PublicPmEventRevisionsResponse
  - `subjectKey` string, required: Stable identity, "<sourceSlug>:<externalEventId>".
  - `revisions` PublicPmEventRevision[], required
    - `id` integer
    - `field` string: Dotted path of the corrected fact, e.g. resolution.winner.
    - `prevValue` unknown
    - `nextValue` unknown
    - `reasonCode` string: Stable machine code, never free text: resolution_set, resolution_reversal, resolution_cleared, resolution_time_corrected, resolution_state_changed, member_added, member_removed, orientation_changed, merged_into, split_from, created.
    - `effectiveAt` string, date-time, nullable: When the change became true at the SOURCE. Null when the venue states none; never back-filled with the observation time.
    - `observedAt` string, date-time
    - `evidence` object: Provenance for this correction. runId and captureId are null for watch-lane resolution changes, which re-fetch a single event by id rather than deriving from a daily sweep capture.
      - `runId` integer, nullable
      - `captureId` integer, nullable
      - `parserVersion` string, nullable
      - `matcherVersion` string, nullable
      - `buildSha` string, nullable
    - `supersedesId` integer, nullable: The earlier revision of the same field this replaces.
  - `truncated` boolean: True when the newest-first revision page hit its cap. Reconstruction is unaffected — asOf reads its own complete, time-bounded set.
  - `asOf` string, date-time
  - `reconstructed` object: Field values CoinRithm was publishing at asOf, folded by OBSERVATION time. Present only when asOf is supplied.

## Other responses

- `400`: Invalid or missing parameters. On a route with a query allowlist, an undocumented query parameter returns `{"error": "unsupported_query_parameter", "message": "Unsupported query parameter: <key>. Supported: <keys>."}`.
- `404`: Resource not found. A path the API does not serve at all returns `{"error": "not_found", "message": "not_found"}` with `Cache-Control: no-store`.
- `500`: Server error

---

[API](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api.md) · [All operations](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api/llms.txt) · [OpenAPI document](https://skmtc.dev/coinrithm/apis/coinrithm-agent-trading-api/revisions/28fb59f285fe?raw)
