---
title: "Cross-venue disagreement clusters (approved matches)"
method: GET
path: "/api/prediction-markets/matches/public"
tags: ["public-pm-data"]
---

# Cross-venue disagreement clusters (approved matches)

`GET /api/prediction-markets/matches/public`

## Request

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

Keyless graph-clustered view of events CoinRithm has matched as the
same real-world question across 2+ venues, with pairwise comparisons
carrying per-shared-outcome probability deltas. Orientation between
matched markets is human/aggregator-reviewed, never price-inferred.
For bounded agent context use the MCP `pm_data_disagreements` tool,
which additionally bounds each event and comparison to its top-5
highest-delta shared outcomes.

Pairs whose open side belongs to a paused venue are left out. With
`sort=divergence_desc` or `max_outcome_delta_desc`, pairs need verified
quotes for the exact compared legs and `meta.quoteEligibilityVersion`
is set. `meta.projection` is `compact` or `rich`.

## Query parameters

- `limit` integer
- `offset` integer
- `sort` 'confidence_desc' | 'divergence_desc' | 'max_outcome_delta_desc'
- `minDivergence` number
- `sourceKind` 'market'
- `status` 'open'
- `maxSnapshotAgeMinutes` number
- `requirePriced` boolean
- `fiat` string
- `view` 'compact'
- `maxEndDateDifferenceDays` number

## Response `200`

Paginated disagreement clusters with pairwise comparisons

- PublicPmDisagreementsResponse
  - `data` object[], required: Graph-clustered disagreement rows. Each cluster carries clusterId, primaryEventId, title, events[] (PublicPmEvent rows), comparisons[] (per-pair matchId/confidence/matchMethod/divergence + a comparison with per-outcome eventAProbability/eventBProbability/deltaPoints), maxOverallGap, maxOutcomeGap, maxConfidence, and referenceProbability when available. Comparison rows and summaries carry the same `pairing`, `bothSidesTraded` and `evidencedSharedOutcomeCount` fields as event detail `crossSourceMatches`. With the evidence rule on, a pair counts toward the cluster's `maxOverallGap` only when one of its shared rows has `bothSidesTraded: true`.
    - `comparisons` object[]
      - `eventId` string
      - `pair` object
        - `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`.
              - …
            - `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).
  - `total` integer, required
  - `hasMore` boolean, required
  - `pagination` object, required
    - `limit` integer
    - `offset` integer
    - `nextOffset` integer, nullable
  - `meta` object

## Other responses

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