---
title: "Per-venue comparison with coverage-ledger evidence"
method: GET
path: "/api/prediction-markets/sources"
tags: ["public-pm-data"]
---

# Per-venue comparison with coverage-ledger evidence

`GET /api/prediction-markets/sources`

## Request

- Base URL: `https://api.coinrithm.com`
- URL: `https://api.coinrithm.com/api/prediction-markets/sources`
- Auth: none required

Keyless per-venue stats, resolution evidence and the Gate-2 coverage
ledger.

`stats` AND `coverage` ARE COMPUTED AT DIFFERENT TIMES — do not
reconcile them. `stats.*` is computed live while serving this request.
`coverage.*` is a periodic BATCH snapshot stamped with
`coverage.computedAt` (all venues share one run timestamp). So
`stats.totalEvents >= coverage.enumeratedTotal` is the EXPECTED
ordering, and the gap is simply what was ingested since the last ledger
run: measured 2026-08-12 with a 48-minute-old ledger, the gap was 234
events across 12 venues, zero for low-throughput venues and largest for
the busiest one (Polymarket, 138). A gap in the OTHER direction —
`coverage` exceeding `stats` — would be a real defect; that is the
comparison worth alerting on.

Read `coverage.completenessClass` literally: it reports what the LATEST
catalog sweep observed (`open_sweep_exhausted` = the adapter enumerated
the open set; `open_sweep_bounded` = it stopped at a provider page
ceiling or volume floor; `unknown` = no recent sweep evidence). It does
NOT assert that CoinRithm holds the venue's complete lifetime universe
— that stronger claim is `coverage.universeVerified`, which is `false`
for every venue until externally verified against a venue-published
total. Do not paraphrase either field as "complete coverage".

`coverage.openUniverseVerified` sits between the two and is the only
universe claim we can currently substantiate: it is `true` where the
OPEN set has been reconciled against a venue-supplied total
(`openUniverseTotalBasis` says how that total was obtained). A `false`
`universeVerified` therefore does NOT mean nothing is verified — check
`openUniverseVerified` before concluding that.

`anyResolutionRate` and `providerResolutionRate` share one denominator
(closed events) but are different facts: any recorded resolution vs a
provider-verified one. `catalogFirstSeenDay` is when CoinRithm first
saw the catalog; `probabilityHistoryStartDay` is how far stored
probability history actually reaches, and is null when none is held.

## Query parameters

- `fiat` string

## Response `200`

Venue comparison rows, each with optional coverage evidence

- PublicPmSourcesResponse
  - `sources` object[], required
    - `id` string
    - `name` string
    - `coverage` PublicPmCoverage: Gate-2 coverage ledger for one venue. Every nullable field means "not known", never zero — do not render a null as 0 or as evidence of absence.
      - `computedAt` string, date-time
      - `completenessClass` 'open_sweep_exhausted' | 'open_sweep_bounded' | 'unknown': What the LATEST catalog sweep observed. NOT a claim that the venue's lifetime universe is held — see universeVerified.
      - `universeVerified` boolean: True only when coverage has been externally verified against a venue-published total. Currently false for every venue.
      - `universeEstimate` integer, nullable: Upstream-reported total where the venue exposes one.
      - `openUniverseVerified` boolean: True when the OPEN set has been reconciled against a venue-supplied total. This is a weaker but REAL claim than `universeVerified`, which covers the lifetime universe and is false everywhere. Do not read a false here as "unverified coverage" — read it as "the venue publishes no total we can check the open set against".
      - `openUniverseProviderTotal` integer, nullable: The venue-supplied count of open markets that `openUniverseEnumerated` was checked against. Null when the venue publishes no such total.
      - `openUniverseTotalBasis` string, nullable: How that total was obtained — `published_total` (the venue states a count) or `unpaginated_universe` (the venue returns its whole open set in one unpaginated response, so enumeration IS the total). Null when there is no total.
      - `openUniverseEnumerated` integer, nullable: Open markets CoinRithm enumerated in the latest sweep.
      - `enumeratedTotal` integer
      - `openCount` integer
      - `closedCount` integer
      - `resolvedProviderCount` integer
      - `anyResolutionRate` number, nullable: Closed events with ANY recorded resolution / closed events.
      - `providerResolutionRate` number, nullable: Closed events with a PROVIDER-verified resolution / closed events.
      - `freshnessP50Seconds` integer, nullable
      - `freshnessP95Seconds` integer, nullable
      - `freshnessP99Seconds` integer, nullable
      - `catalogFirstSeenDay` string, date, nullable: When CoinRithm first saw this catalog. Not history depth.
      - `probabilityHistoryStartDay` string, date, nullable: How far stored probability history actually reaches. Null when no probability history is held for the venue.
      - `historyStartDay` string, date, nullable: DEPRECATED alias of `catalogFirstSeenDay`, still served so existing consumers do not break. The original name read as history DEPTH when it only ever meant "when we first saw the catalog"; migrate to `catalogFirstSeenDay` for that fact, or to `probabilityHistoryStartDay` if depth is what you actually want.
      - `resolutionCoverageRate` number, nullable: DEPRECATED alias of `anyResolutionRate`, still served so existing consumers do not break. It was previously read as provider-verified coverage, which overstated it — use `anyResolutionRate` for any recorded resolution, or `providerResolutionRate` for the verified subset.
      - `missingFieldRates` object, nullable
      - `approvedMatchCount` integer, nullable
      - `avgMatchConfidence` number, nullable
      - `lastFullReconciliationAt` string, date-time, nullable

## Other responses

- `429`: Public request rate limit exceeded; honor `Retry-After`.
- `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)
