Skip to main content
The market graph is an early access feature and is not included in standard plans. To request access, email support@probalytics.io.

Shape

The market graph links markets whose outcomes depend on each other, within a platform and across Kalshi and Polymarket. It covers five domains: crypto, sports, finance, weather, and elections. Every relation comes with a price rule that consistent prices must satisfy.

Market

One node per market. id is the Probalytics market ID and joins to markets.id. Sports markets also carry game_id, segment, unit, tie_push, and settlement facts (tie, postponed, cancelled, stopped, player_out). A column a domain does not use is null.

Underlying

One observable number: key, domain, asset, feed, measure, obs_start, obs_end, markets. Markets on the same underlying ask about the same number, which is what makes exact relations possible.

OutcomeSet

The options of one event. kind is:
  • brackets — ranges tiling a line; exactly one wins, prices sum to 1
  • selection — options covering every outcome; exactly one wins, prices sum to 1
  • exclusive — at most one wins; prices sum to at most 1
Also members, resolved, and winners.

RELATION

Relations

IMPLIES edges are stored only to the nearest neighbour: a 150-rung threshold ladder is 149 edges, and the full chain is a path query. MUTEX edges are likewise stored to the nearest conflicting market on each side. Brackets of one event are exclusive through their OutcomeSet, not pairwise edges. Sports holds_if values:
  • completed — the platforms settle a disrupted game differently, so the edge is guaranteed when the game is played to completion
  • played — they also settle a player who does not play differently
  • played_second_half — one side is a Kalshi “(Protected)” prop
Elections holds_if values (seated, call_stands, official_count, winner_inaugurated) mark edges where the platforms settle on different results.

Coverage

The graph covers the full history of Kalshi and Polymarket markets in the five domains, open and resolved. Each Kalshi series or Polymarket event family belongs to exactly one domain, so no market appears twice. Markets outside the five domains are not included; markets inside a domain that could not be modelled are included with coverage set. The graph is rebuilt from the markets dataset roughly every 30 minutes.

Querying the graph

The graph is served over the REST API with the same API key as other endpoints. Requests from accounts without access return 403.

Preconfigured queries

Cypher

The response is {"rows": [...]}. Each request runs one read-only statement and returns at most 10,000 rows. Queries time out after 30 seconds; when the server is busy with other Cypher queries it returns 429, so retry with backoff. Example queries:
UNION ALL is not supported; run separate queries instead. Combine graph results with orderbook or markets data in SQL by market id to check price rules against live prices.