---
title: "Get full event evidence and cross-venue comparisons"
method: GET
path: "/api/prediction-markets/events/{source}/{slug}"
tags: ["public-pm-data"]
---

# Get full event evidence and cross-venue comparisons

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

## Request

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

Provider-rich event detail including outcomes, snapshots, resolution
provenance, related markets/news, recent large trades, volume history
and approved cross-source matches when available. For bounded agent
context use the MCP `pm_data_event` tool's default summary mode.

By default, matched and related events are trimmed: each
`crossSourceMatches[].event.outcomes` and `comparison.outcomes` keeps
only the shared outcomes (at most 60) with an `outcomesTotal`, and
`relatedEvents[].outcomes` keeps the compact 3-outcome shape. Send
`full=1` for untrimmed lists. `view=core` returns a cheaper first-paint
payload whose heavy sections are empty (`detailMode: core`). An open
event of a paused venue carries `availability.status: paused`.

## Path parameters

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

## Query parameters

- `fiat` string
- `view` 'core'
- `full` '1' | 'true' | 'yes'
- `lang` string
- `includeQuoteEvidence` '1'

## Response `200`

Event research record (matched and related outcomes trimmed unless `full=1`)

- PublicPmEventDetailResponse
  - `event` PublicPmEvent, required
    - `id` string, required
    - `slug` string, required
    - `title` string, required
    - `marketSubtitle` string: Kalshi single-market (Yes/No) events only: the contract's subject as the venue labels it, e.g. "Over 2.5 maps" under the title "... : Total Maps". Yes and No resolve against this line. Absent when the venue gives none, when it is just "Yes", and on every other event; the Yes/No outcome names and the title are unchanged.
    - `description` string, nullable
    - `status` string, required
    - `startDate` string, date-time, nullable
    - `endDate` string, date-time, nullable
    - `resolvedAt` string, date-time, nullable
    - `resolvedOutcomeExternalMarketId` string, nullable
    - `resolutionOutcomeBasis` string, nullable
    - `freshness` object: Observation time, age and source-aware freshness state.
    - `volume` number, nullable
    - `volume24h` number, nullable
    - `liquidity` number, nullable
    - `openInterestUsd` number: Event detail only (full and `view=core`): open interest in USD, whatever `fiat` was requested. Omitted when the venue publishes none; never a fabricated 0. On Kalshi it is the same amount the venue's `liquidity` carries.
    - `openInterestBasis` 'venue_reported_usd' | 'contracts_x_notional_usd': How `openInterestUsd` was measured. `venue_reported_usd`: the venue's own event figure (Polymarket, Rothera). `contracts_x_notional_usd`: open contracts times each contract's USD notional, summed over the event's markets (Kalshi).
    - `openInterestBasisNote` string: Short human-readable description of `openInterestBasis`.
    - `bestBid` number, nullable
    - `bestAsk` number, nullable
    - `spread` number, nullable
    - `source` PublicPmSource, required
      - `id` 'polymarket' | 'kalshi' | 'rothera' | 'limitless' | 'smarkets' | 'manifold' | 'metaculus' | 'predictit' | 'futuur' | 'myriad' | 'forecastex' | 'gemini', required
      - `name` string, required
      - `kind` string
      - `supportsTrading` boolean
    - `priceChange24h` number, nullable: Signed event-level probability change in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. The representative contract or outcome and nominal 24h lookback basis vary by venue; this need not be the displayed leader or largest outcome move. The lookback may be a previous-session close or an observed-window span rather than exactly 24 hours. Use outcome.priceChange24h for a named outcome's change. Null means unavailable.
    - `priceChange7d` number, nullable: Signed event-level probability change over the venue's available seven-day lookback, in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. The representative contract or outcome varies by venue; this need not be the displayed leader or largest outcome move. Null means unavailable.
    - `probabilityBook` object, nullable: Book-level probability basis: `basis` is `normalized_complete_book` when outcomes carry normalizedProbability (with `rawSum` and `overroundPoints`), else `raw_quotes`.
    - `outcomes` PublicPmOutcome[], required
      - `externalMarketId` string
      - `name` string, required
      - `openInterestUsd` number: Event detail, Kalshi multi-market events only (also on `representativeOutcome`). This contract's open interest in USD (open contracts times USD notional). Omitted elsewhere.
      - `probability` number, nullable: Provider-implied probability on a 0–100 scale (raw venue input; may include vig, so a book's outcomes can sum above 100). Execution eligibility and a usable quote are reported by the quote endpoint, not inferred from this field alone.
      - `normalizedProbability` number, nullable: Vig-removed display probability on a 0–100 scale, proportionally normalized so a complete exclusive book sums to ~100. Null when the book is not a complete exclusive book (threshold ladders, partial catalogs, non-market sources). This is display context, not an execution quote.
      - `hasObservedPrice` boolean: Optional source-data truth flag. `true` means a supported source observation validated a usable observed price, including numeric 0; `false` is emitted only for the Rothera explicit writer-null marker and means no usable observed price input. Omitted means unknown, legacy, or unsupported source data. This flag does not claim live pricing, liquidity, or tradability.
      - `priceBasis` string: Polymarket and Kalshi open outcomes only: what `probability` is. `unquoted` means never traded and no usable book, so `probability` is not a price (a Polymarket wide-book midpoint such as 48 on a 3/93 book, or a stored 0 on Kalshi). `book_mid` is the order-book midpoint (Polymarket: a spread of 10 points or less; Kalshi: the venue's quote midpoint). `last_trade` is the last traded price (Polymarket uses it when the book is wider than 10 points). Absent on other venues, on settled outcomes and on responses served before 2026-09-29. Like `hasObservedPrice`, it is not an execution quote; use the quote endpoint for tradability. A plain string, so a basis added later cannot break older clients: treat an unknown value as unknown.
      - `sourceObservation` object, nullable: Optional bounded provenance for the stored outcome price. Null means the supported source marker was unavailable or explicitly null; it does not prove that the outcome has no price. Timestamps describe source evidence, not current freshness or executable liquidity.
        - `version` integer, required: Source-observation schema version; currently 1.
        - `basis` 'provider_quote' | 'provider_trade' | 'daily_clearing_mark' | 'clearing_settlement' | 'last_price_untimed', required
        - `provider` 'robinhood' | 'forecastex' | 'rothera', required
        - `observedAt` string, date-time, nullable
        - `tradeDate` string, date, nullable
      - `priceChange24h` number, nullable: Signed outcome probability change in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. For example, 20% to 25.5% is +5.5 points. The nominal 24h field follows the venue's available lookback basis, which may be a previous-session close or an observed-window span rather than exactly 24 hours. Null means unavailable.
      - `lifecycle` object, nullable: Per-outcome provider lifecycle evidence. Terminal states are results, not live quotes; an open state with providerAcceptingOrders=false is a paused quote.
        - `state` 'open' | 'closed' | 'resolved' | 'voided' | 'unknown'
        - `providerAcceptingOrders` boolean, nullable
        - `entryBlockedByLifecycle` boolean
        - `isResult` boolean
        - `result` 'won' | 'lost' | 'voided' | 'null', nullable
        - `basis` 'provider' | 'stored_winner' | 'unknown'
        - `closedAt` string, date-time, nullable
        - `resolvedAt` string, date-time, nullable
        - `observedAt` string, date-time, nullable
      - `priorProbability` object, nullable: Last stored provider quote before the outcome closed, when available.
        - `value` number
        - `asOf` string, date-time
        - `cutoff` string, date-time
      - `venueTerms` object: Venue-published order and settlement terms; null values mean unavailable, unreported, or invalid.
        - `orderMinSize` number, nullable, required: Polymarket minimum order size in shares.
        - `tickSize` number, nullable, required: Polymarket minimum probability increment as a ratio.
        - `feesEnabled` boolean, nullable, required: Polymarket market fee flag.
        - `canCloseEarly` boolean, nullable, required: Kalshi early-close capability.
        - `settlementTimerSeconds` integer, nullable, required: Kalshi venue-published settlement timer in seconds; not a guaranteed deadline after close.
      - `quoteEvidence` object, nullable: Present only when the request sent `includeQuoteEvidence=1`. The stored venue book observation for Polymarket and Kalshi outcomes on a 0-100 scale (values outside 0-100 are served as null); null for other venues or when none is stored. Not an executable quote.
        - `version` integer
        - `bid` number, nullable
        - `ask` number, nullable
        - `last` number, nullable
    - `representativeOutcome` PublicPmOutcome
      - `externalMarketId` string
      - `name` string, required
      - `openInterestUsd` number: Event detail, Kalshi multi-market events only (also on `representativeOutcome`). This contract's open interest in USD (open contracts times USD notional). Omitted elsewhere.
      - `probability` number, nullable: Provider-implied probability on a 0–100 scale (raw venue input; may include vig, so a book's outcomes can sum above 100). Execution eligibility and a usable quote are reported by the quote endpoint, not inferred from this field alone.
      - `normalizedProbability` number, nullable: Vig-removed display probability on a 0–100 scale, proportionally normalized so a complete exclusive book sums to ~100. Null when the book is not a complete exclusive book (threshold ladders, partial catalogs, non-market sources). This is display context, not an execution quote.
      - `hasObservedPrice` boolean: Optional source-data truth flag. `true` means a supported source observation validated a usable observed price, including numeric 0; `false` is emitted only for the Rothera explicit writer-null marker and means no usable observed price input. Omitted means unknown, legacy, or unsupported source data. This flag does not claim live pricing, liquidity, or tradability.
      - `priceBasis` string: Polymarket and Kalshi open outcomes only: what `probability` is. `unquoted` means never traded and no usable book, so `probability` is not a price (a Polymarket wide-book midpoint such as 48 on a 3/93 book, or a stored 0 on Kalshi). `book_mid` is the order-book midpoint (Polymarket: a spread of 10 points or less; Kalshi: the venue's quote midpoint). `last_trade` is the last traded price (Polymarket uses it when the book is wider than 10 points). Absent on other venues, on settled outcomes and on responses served before 2026-09-29. Like `hasObservedPrice`, it is not an execution quote; use the quote endpoint for tradability. A plain string, so a basis added later cannot break older clients: treat an unknown value as unknown.
      - `sourceObservation` object, nullable: Optional bounded provenance for the stored outcome price. Null means the supported source marker was unavailable or explicitly null; it does not prove that the outcome has no price. Timestamps describe source evidence, not current freshness or executable liquidity.
        - `version` integer, required: Source-observation schema version; currently 1.
        - `basis` 'provider_quote' | 'provider_trade' | 'daily_clearing_mark' | 'clearing_settlement' | 'last_price_untimed', required
        - `provider` 'robinhood' | 'forecastex' | 'rothera', required
        - `observedAt` string, date-time, nullable
        - `tradeDate` string, date, nullable
      - `priceChange24h` number, nullable: Signed outcome probability change in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. For example, 20% to 25.5% is +5.5 points. The nominal 24h field follows the venue's available lookback basis, which may be a previous-session close or an observed-window span rather than exactly 24 hours. Null means unavailable.
      - `lifecycle` object, nullable: Per-outcome provider lifecycle evidence. Terminal states are results, not live quotes; an open state with providerAcceptingOrders=false is a paused quote.
        - `state` 'open' | 'closed' | 'resolved' | 'voided' | 'unknown'
        - `providerAcceptingOrders` boolean, nullable
        - `entryBlockedByLifecycle` boolean
        - `isResult` boolean
        - `result` 'won' | 'lost' | 'voided' | 'null', nullable
        - `basis` 'provider' | 'stored_winner' | 'unknown'
        - `closedAt` string, date-time, nullable
        - `resolvedAt` string, date-time, nullable
        - `observedAt` string, date-time, nullable
      - `priorProbability` object, nullable: Last stored provider quote before the outcome closed, when available.
        - `value` number
        - `asOf` string, date-time
        - `cutoff` string, date-time
      - `venueTerms` object: Venue-published order and settlement terms; null values mean unavailable, unreported, or invalid.
        - `orderMinSize` number, nullable, required: Polymarket minimum order size in shares.
        - `tickSize` number, nullable, required: Polymarket minimum probability increment as a ratio.
        - `feesEnabled` boolean, nullable, required: Polymarket market fee flag.
        - `canCloseEarly` boolean, nullable, required: Kalshi early-close capability.
        - `settlementTimerSeconds` integer, nullable, required: Kalshi venue-published settlement timer in seconds; not a guaranteed deadline after close.
      - `quoteEvidence` object, nullable: Present only when the request sent `includeQuoteEvidence=1`. The stored venue book observation for Polymarket and Kalshi outcomes on a 0-100 scale (values outside 0-100 are served as null); null for other venues or when none is stored. Not an executable quote.
        - `version` integer
        - `bid` number, nullable
        - `ask` number, nullable
        - `last` number, nullable
    - `representativeOutcomeBasis` 'threshold_ladder_line' | 'informative_leader': Event detail only, open events only: the rule that chose representativeOutcome. `threshold_ladder_line` is a threshold ladder's line nearest 50% (a Kalshi strike ladder). `informative_leader` is the highest current outcome strictly inside 5-95, else the highest; it is not necessarily the leading outcome.
    - `referenceProbability` object, nullable: Canonical matched-venue reference with venue count and spread. Also carries `methodologyVersion` (the row's own writer version: `consensus_probability_v2` or `consensus_probability_v3`) and `weightBasis` (`open_interest` | `liquidity`, null for a v3 row without a recognised basis); see the consensus-methodology endpoint.
    - `decisionSupport` object, nullable
    - `quality` object, nullable: Persisted truth-engine decision eligibility and reason codes.
    - `crossPlatform` object[]
    - `outcomesTotal` integer: Full outcome count when the outcome list was trimmed (`view=compact`, or matched/related events without `full=1`).
    - `availability` object: Event detail only, and only for an open event whose venue CoinRithm has paused: its prices stopped updating at `lastCollectedAt`. Absent otherwise.
      - `status` 'paused', required
      - `lastCollectedAt` string, date-time, nullable, required
  - `snapshots` object[]
  - `relatedEvents` PublicPmEvent[]
    - `id` string, required
    - `slug` string, required
    - `title` string, required
    - `marketSubtitle` string: Kalshi single-market (Yes/No) events only: the contract's subject as the venue labels it, e.g. "Over 2.5 maps" under the title "... : Total Maps". Yes and No resolve against this line. Absent when the venue gives none, when it is just "Yes", and on every other event; the Yes/No outcome names and the title are unchanged.
    - `description` string, nullable
    - `status` string, required
    - `startDate` string, date-time, nullable
    - `endDate` string, date-time, nullable
    - `resolvedAt` string, date-time, nullable
    - `resolvedOutcomeExternalMarketId` string, nullable
    - `resolutionOutcomeBasis` string, nullable
    - `freshness` object: Observation time, age and source-aware freshness state.
    - `volume` number, nullable
    - `volume24h` number, nullable
    - `liquidity` number, nullable
    - `openInterestUsd` number: Event detail only (full and `view=core`): open interest in USD, whatever `fiat` was requested. Omitted when the venue publishes none; never a fabricated 0. On Kalshi it is the same amount the venue's `liquidity` carries.
    - `openInterestBasis` 'venue_reported_usd' | 'contracts_x_notional_usd': How `openInterestUsd` was measured. `venue_reported_usd`: the venue's own event figure (Polymarket, Rothera). `contracts_x_notional_usd`: open contracts times each contract's USD notional, summed over the event's markets (Kalshi).
    - `openInterestBasisNote` string: Short human-readable description of `openInterestBasis`.
    - `bestBid` number, nullable
    - `bestAsk` number, nullable
    - `spread` number, nullable
    - `source` PublicPmSource, required
      - `id` 'polymarket' | 'kalshi' | 'rothera' | 'limitless' | 'smarkets' | 'manifold' | 'metaculus' | 'predictit' | 'futuur' | 'myriad' | 'forecastex' | 'gemini', required
      - `name` string, required
      - `kind` string
      - `supportsTrading` boolean
    - `priceChange24h` number, nullable: Signed event-level probability change in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. The representative contract or outcome and nominal 24h lookback basis vary by venue; this need not be the displayed leader or largest outcome move. The lookback may be a previous-session close or an observed-window span rather than exactly 24 hours. Use outcome.priceChange24h for a named outcome's change. Null means unavailable.
    - `priceChange7d` number, nullable: Signed event-level probability change over the venue's available seven-day lookback, in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. The representative contract or outcome varies by venue; this need not be the displayed leader or largest outcome move. Null means unavailable.
    - `probabilityBook` object, nullable: Book-level probability basis: `basis` is `normalized_complete_book` when outcomes carry normalizedProbability (with `rawSum` and `overroundPoints`), else `raw_quotes`.
    - `outcomes` PublicPmOutcome[], required
      - `externalMarketId` string
      - `name` string, required
      - `openInterestUsd` number: Event detail, Kalshi multi-market events only (also on `representativeOutcome`). This contract's open interest in USD (open contracts times USD notional). Omitted elsewhere.
      - `probability` number, nullable: Provider-implied probability on a 0–100 scale (raw venue input; may include vig, so a book's outcomes can sum above 100). Execution eligibility and a usable quote are reported by the quote endpoint, not inferred from this field alone.
      - `normalizedProbability` number, nullable: Vig-removed display probability on a 0–100 scale, proportionally normalized so a complete exclusive book sums to ~100. Null when the book is not a complete exclusive book (threshold ladders, partial catalogs, non-market sources). This is display context, not an execution quote.
      - `hasObservedPrice` boolean: Optional source-data truth flag. `true` means a supported source observation validated a usable observed price, including numeric 0; `false` is emitted only for the Rothera explicit writer-null marker and means no usable observed price input. Omitted means unknown, legacy, or unsupported source data. This flag does not claim live pricing, liquidity, or tradability.
      - `priceBasis` string: Polymarket and Kalshi open outcomes only: what `probability` is. `unquoted` means never traded and no usable book, so `probability` is not a price (a Polymarket wide-book midpoint such as 48 on a 3/93 book, or a stored 0 on Kalshi). `book_mid` is the order-book midpoint (Polymarket: a spread of 10 points or less; Kalshi: the venue's quote midpoint). `last_trade` is the last traded price (Polymarket uses it when the book is wider than 10 points). Absent on other venues, on settled outcomes and on responses served before 2026-09-29. Like `hasObservedPrice`, it is not an execution quote; use the quote endpoint for tradability. A plain string, so a basis added later cannot break older clients: treat an unknown value as unknown.
      - `sourceObservation` object, nullable: Optional bounded provenance for the stored outcome price. Null means the supported source marker was unavailable or explicitly null; it does not prove that the outcome has no price. Timestamps describe source evidence, not current freshness or executable liquidity.
        - `version` integer, required: Source-observation schema version; currently 1.
        - `basis` 'provider_quote' | 'provider_trade' | 'daily_clearing_mark' | 'clearing_settlement' | 'last_price_untimed', required
        - `provider` 'robinhood' | 'forecastex' | 'rothera', required
        - `observedAt` string, date-time, nullable
        - `tradeDate` string, date, nullable
      - `priceChange24h` number, nullable: Signed outcome probability change in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. For example, 20% to 25.5% is +5.5 points. The nominal 24h field follows the venue's available lookback basis, which may be a previous-session close or an observed-window span rather than exactly 24 hours. Null means unavailable.
      - `lifecycle` object, nullable: Per-outcome provider lifecycle evidence. Terminal states are results, not live quotes; an open state with providerAcceptingOrders=false is a paused quote.
        - `state` 'open' | 'closed' | 'resolved' | 'voided' | 'unknown'
        - `providerAcceptingOrders` boolean, nullable
        - `entryBlockedByLifecycle` boolean
        - `isResult` boolean
        - `result` 'won' | 'lost' | 'voided' | 'null', nullable
        - `basis` 'provider' | 'stored_winner' | 'unknown'
        - `closedAt` string, date-time, nullable
        - `resolvedAt` string, date-time, nullable
        - `observedAt` string, date-time, nullable
      - `priorProbability` object, nullable: Last stored provider quote before the outcome closed, when available.
        - `value` number
        - `asOf` string, date-time
        - `cutoff` string, date-time
      - `venueTerms` object: Venue-published order and settlement terms; null values mean unavailable, unreported, or invalid.
        - `orderMinSize` number, nullable, required: Polymarket minimum order size in shares.
        - `tickSize` number, nullable, required: Polymarket minimum probability increment as a ratio.
        - `feesEnabled` boolean, nullable, required: Polymarket market fee flag.
        - `canCloseEarly` boolean, nullable, required: Kalshi early-close capability.
        - `settlementTimerSeconds` integer, nullable, required: Kalshi venue-published settlement timer in seconds; not a guaranteed deadline after close.
      - `quoteEvidence` object, nullable: Present only when the request sent `includeQuoteEvidence=1`. The stored venue book observation for Polymarket and Kalshi outcomes on a 0-100 scale (values outside 0-100 are served as null); null for other venues or when none is stored. Not an executable quote.
        - `version` integer
        - `bid` number, nullable
        - `ask` number, nullable
        - `last` number, nullable
    - `representativeOutcome` PublicPmOutcome
      - `externalMarketId` string
      - `name` string, required
      - `openInterestUsd` number: Event detail, Kalshi multi-market events only (also on `representativeOutcome`). This contract's open interest in USD (open contracts times USD notional). Omitted elsewhere.
      - `probability` number, nullable: Provider-implied probability on a 0–100 scale (raw venue input; may include vig, so a book's outcomes can sum above 100). Execution eligibility and a usable quote are reported by the quote endpoint, not inferred from this field alone.
      - `normalizedProbability` number, nullable: Vig-removed display probability on a 0–100 scale, proportionally normalized so a complete exclusive book sums to ~100. Null when the book is not a complete exclusive book (threshold ladders, partial catalogs, non-market sources). This is display context, not an execution quote.
      - `hasObservedPrice` boolean: Optional source-data truth flag. `true` means a supported source observation validated a usable observed price, including numeric 0; `false` is emitted only for the Rothera explicit writer-null marker and means no usable observed price input. Omitted means unknown, legacy, or unsupported source data. This flag does not claim live pricing, liquidity, or tradability.
      - `priceBasis` string: Polymarket and Kalshi open outcomes only: what `probability` is. `unquoted` means never traded and no usable book, so `probability` is not a price (a Polymarket wide-book midpoint such as 48 on a 3/93 book, or a stored 0 on Kalshi). `book_mid` is the order-book midpoint (Polymarket: a spread of 10 points or less; Kalshi: the venue's quote midpoint). `last_trade` is the last traded price (Polymarket uses it when the book is wider than 10 points). Absent on other venues, on settled outcomes and on responses served before 2026-09-29. Like `hasObservedPrice`, it is not an execution quote; use the quote endpoint for tradability. A plain string, so a basis added later cannot break older clients: treat an unknown value as unknown.
      - `sourceObservation` object, nullable: Optional bounded provenance for the stored outcome price. Null means the supported source marker was unavailable or explicitly null; it does not prove that the outcome has no price. Timestamps describe source evidence, not current freshness or executable liquidity.
        - `version` integer, required: Source-observation schema version; currently 1.
        - `basis` 'provider_quote' | 'provider_trade' | 'daily_clearing_mark' | 'clearing_settlement' | 'last_price_untimed', required
        - `provider` 'robinhood' | 'forecastex' | 'rothera', required
        - `observedAt` string, date-time, nullable
        - `tradeDate` string, date, nullable
      - `priceChange24h` number, nullable: Signed outcome probability change in percentage points (-100 to +100; probabilities are 0 to 100), not a fraction or relative percent change. For example, 20% to 25.5% is +5.5 points. The nominal 24h field follows the venue's available lookback basis, which may be a previous-session close or an observed-window span rather than exactly 24 hours. Null means unavailable.
      - `lifecycle` object, nullable: Per-outcome provider lifecycle evidence. Terminal states are results, not live quotes; an open state with providerAcceptingOrders=false is a paused quote.
        - `state` 'open' | 'closed' | 'resolved' | 'voided' | 'unknown'
        - `providerAcceptingOrders` boolean, nullable
        - `entryBlockedByLifecycle` boolean
        - `isResult` boolean
        - `result` 'won' | 'lost' | 'voided' | 'null', nullable
        - `basis` 'provider' | 'stored_winner' | 'unknown'
        - `closedAt` string, date-time, nullable
        - `resolvedAt` string, date-time, nullable
        - `observedAt` string, date-time, nullable
      - `priorProbability` object, nullable: Last stored provider quote before the outcome closed, when available.
        - `value` number
        - `asOf` string, date-time
        - `cutoff` string, date-time
      - `venueTerms` object: Venue-published order and settlement terms; null values mean unavailable, unreported, or invalid.
        - `orderMinSize` number, nullable, required: Polymarket minimum order size in shares.
        - `tickSize` number, nullable, required: Polymarket minimum probability increment as a ratio.
        - `feesEnabled` boolean, nullable, required: Polymarket market fee flag.
        - `canCloseEarly` boolean, nullable, required: Kalshi early-close capability.
        - `settlementTimerSeconds` integer, nullable, required: Kalshi venue-published settlement timer in seconds; not a guaranteed deadline after close.
      - `quoteEvidence` object, nullable: Present only when the request sent `includeQuoteEvidence=1`. The stored venue book observation for Polymarket and Kalshi outcomes on a 0-100 scale (values outside 0-100 are served as null); null for other venues or when none is stored. Not an executable quote.
        - `version` integer
        - `bid` number, nullable
        - `ask` number, nullable
        - `last` number, nullable
    - `representativeOutcomeBasis` 'threshold_ladder_line' | 'informative_leader': Event detail only, open events only: the rule that chose representativeOutcome. `threshold_ladder_line` is a threshold ladder's line nearest 50% (a Kalshi strike ladder). `informative_leader` is the highest current outcome strictly inside 5-95, else the highest; it is not necessarily the leading outcome.
    - `referenceProbability` object, nullable: Canonical matched-venue reference with venue count and spread. Also carries `methodologyVersion` (the row's own writer version: `consensus_probability_v2` or `consensus_probability_v3`) and `weightBasis` (`open_interest` | `liquidity`, null for a v3 row without a recognised basis); see the consensus-methodology endpoint.
    - `decisionSupport` object, nullable
    - `quality` object, nullable: Persisted truth-engine decision eligibility and reason codes.
    - `crossPlatform` object[]
    - `outcomesTotal` integer: Full outcome count when the outcome list was trimmed (`view=compact`, or matched/related events without `full=1`).
    - `availability` object: Event detail only, and only for an open event whose venue CoinRithm has paused: its prices stopped updating at `lastCollectedAt`. Absent otherwise.
      - `status` 'paused', required
      - `lastCollectedAt` string, date-time, nullable, required
  - `crossSourceMatches` object[]: Approved cross-source matches. Each `comparison` has a `summary` and per-outcome rows (`eventAProbability`, `eventBProbability`, `deltaPoints`, `presentInA`, `presentInB`, `isShared`). A row the two venues name differently ("San Francisco" / "San Francisco 49ers") carries `pairing` {`method`, `confidence`, `reason`, `eventAName`, `eventBName`}; `label` stays event A's name. Every row both venues list may carry `bothSidesTraded` (present while the server's trading-evidence rule is on): false means at least one leg shows no real trading, so the row stays listed but never sets the `maxSharedOutcome*` headline. `summary.evidencedSharedOutcomeCount` counts the shared rows with `bothSidesTraded: true`. Absent fields mean an older server; do not infer false.
    - `comparison` PublicPmComparison: One approved cross-source pair compared outcome by outcome. Every field is optional in this contract; absent fields mean an older server, never false or zero.
      - `summary` PublicPmComparisonSummary
        - `overallDeltaPoints` number
        - `maxOutcomeDeltaPoints` number: Largest gap over all outcomes, including ones only one venue lists.
        - `maxOutcomeLabel` string, nullable
        - `maxSharedOutcomeDeltaPoints` number: Largest gap among outcomes both venues list. With the trading-evidence rule on, only rows with `bothSidesTraded: true` set it.
        - `maxSharedOutcomeLabel` string, nullable
        - `matchedOutcomeCount` integer
        - `totalOutcomeCount` integer
        - `bookStructureA` string: `independent`, `exclusive` or `incomplete`; two books produce a shared-outcome gap only when both are independent or both exclusive.
        - `bookStructureB` string: As `bookStructureA`, for event B.
        - `comparableBooks` boolean
        - `evidencedSharedOutcomeCount` integer: Shared rows whose two legs both show trading (`bothSidesTraded` true). Present while the server's trading-evidence rule is on.
      - `outcomes` PublicPmComparisonOutcome[]
        - `key` string
        - `label` string: Event A's outcome name.
        - `eventAProbability` number, nullable: 0-100.
        - `eventBProbability` number, nullable: 0-100.
        - `deltaPoints` number
        - `presentInA` boolean
        - `presentInB` boolean
        - `isShared` boolean
        - `pairing` PublicPmOutcomePairing: Present on a comparison row only when the two venues name the outcome differently and the server paired them ("San Francisco" / "San Francisco 49ers"); `label` stays event A's name. Rows paired by an identical name carry no `pairing`.
          - `method` string, required: How the two names were paired: `normalized_label`, `rate_decision`, `strike`, `range`, `draw`, `team_abbreviation`, `token_containment` or `first_initial`. Treat other values as unknown.
          - `confidence` number, required: 0-1, fixed per method.
          - `reason` string, required: Human-readable reason, e.g. "san francisco" is contained in "san francisco 49ers".
          - `eventAName` string, required
          - `eventBName` string, required
        - `bothSidesTraded` boolean: On rows both venues list, while the server's trading-evidence rule is on: whether both legs show real trading. A false row stays listed and shared but never sets the `maxSharedOutcome*` headline. Absent means an older server or a one-venue row; do not infer false.
      - `outcomesTotal` integer: Event detail only, unless `full=1`. Comparison rows before the default trimming to the shared outcomes (at most 60).
  - `resolution` object, nullable
  - `volumeHistory` object[]: Daily volume points (one per UTC day) for the newest 90 days with data, oldest first.
  - `relatedNews` object[]
  - `recentWhaleTrades` PublicPmWhaleTrade[]
    - `source` 'polymarket' | 'kalshi' | 'rothera' | 'limitless' | 'smarkets' | 'manifold' | 'metaculus' | 'predictit' | 'futuur' | 'myriad' | 'forecastex' | 'gemini', required
    - `sourceName` string
    - `sourceIcon` string, nullable
    - `eventSlug` string, required
    - `eventTitle` string
    - `wallet` string: Shortened display form of the wallet, not an identifier.
    - `walletAddress` string, nullable: Full lower-cased public address; null on venues that anonymize traders.
    - `traderName` string, nullable
    - `side` string, required
    - `outcome` string, nullable, required: Outcome label; null when the venue row carries none.
    - `marketQuestion` string, nullable: Nested market question on multi-market events; null on older rows.
    - `usdValue` number, required
    - `price` number, required
    - `sourceMarketRef` string, nullable
    - `nativeValue` number, nullable: Trade value in the venue's own currency, when it is not USD.
    - `nativeCurrency` string, nullable
    - `valueBasis` string, nullable: How `usdValue` was derived from the venue value.
    - `evidenceType` string, required
    - `evidenceRef` string, nullable
    - `evidenceUrl` string, uri, nullable
    - `availability` 'live' | 'delayed' | 'unavailable', required
    - `observedAt` string, date-time, required
    - `tradedAt` string, date-time, nullable
    - `latencySeconds` number, nullable
    - `event` object: The event this trade belongs to. Sent on `/whales` and SSE `whale` rows, not on event detail.
      - `source` string
      - `slug` string
      - `title` string
      - `image` string, nullable
      - `sourceName` string
      - `sourceIcon` string, nullable
      - `marketOutcomes` object, nullable: Outcome count and the top outcomes by probability, for a market-split display.
        - `total` integer
        - `top` object[]
          - `name` string
          - `probability` number
  - `detailMode` 'full' | 'core': `core` when `view=core` was requested; heavy sections are then empty.
  - `liteFallback` boolean: Present (true) when the server served a reduced payload under load; the `X-CoinRithm-Lite` header is also set.

## 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)
