---
title: "Cross-venue market families for a single game, grouped by section"
method: GET
path: "/sports/game-markets"
tags: ["Sports"]
---

# Cross-venue market families for a single game, grouped by section

`GET /sports/game-markets`

## Request

- Base URL: `https://data.kairos.trade`
- URL: `https://data.kairos.trade/sports/game-markets`
- Auth: none required

Returns one game's markets grouped into sections such as game lines, halves, player props, exact score, and corners. Cross-venue families can include Polymarket, Kalshi, Predict.fun, and Hyperliquid. Each family is either a pill of named outcomes or a ladder of ordered Over/Under rungs. Tradeable legs carry provider identifiers and pricing; equivalent families and outcomes share opaque `mergeKey` and `outcomeKey` values. Combo-capable legs include their eligibility and position identifiers. Responses are briefly cached.

## Query parameters

- `slug` string
- `game_id` string

## Response `200`

Cross-venue markets grouped into sections of pill/ladder market families.

- SportsGameMarketsResponse
  - `slug` string, required
  - `teamA` string, nullable, required
  - `teamB` string, nullable, required
  - `teamALogo` string, nullable, required
  - `teamBLogo` string, nullable, required
  - `sport` string, nullable, required
  - `sections` SportsGameMarketsSections, required
    - `gameLines` SportsGameMarketFamily[], required
      - `key` string, required
      - `title` string, required
      - `section` 'gameLines' | 'halves' | 'playerProps' | 'moreMarkets' | 'exactScore' | 'corners', required
      - `layout` 'pills' | 'ladder', required
      - `provider` 'polymarket' | 'predictfun' | 'kalshi' | 'hyperliquid', required: Venue for every market in this family.
      - `mergeKey` string, required: Opaque server-assigned identity for equivalent families across venues. Group pill families by this value rather than inferring identity from titles.
      - `volume` number, double, required
      - `kind` 'spread' | 'total': Only present when layout=ladder.
      - `legs` SportsGameMarketLeg[]: Only present when layout=pills.
        - `label` string, required
        - `marketId` string, required
        - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
        - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
        - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
        - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
        - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
        - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
        - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
      - `rungs` SportsGameMarketRung[]: Only present when layout=ladder.
        - `line` number, double, nullable, required
        - `legs` SportsGameMarketLeg[], required
          - `label` string, required
          - `marketId` string, required
          - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
          - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
          - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
          - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
          - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
          - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
          - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
    - `halves` SportsGameMarketFamily[], required
      - `key` string, required
      - `title` string, required
      - `section` 'gameLines' | 'halves' | 'playerProps' | 'moreMarkets' | 'exactScore' | 'corners', required
      - `layout` 'pills' | 'ladder', required
      - `provider` 'polymarket' | 'predictfun' | 'kalshi' | 'hyperliquid', required: Venue for every market in this family.
      - `mergeKey` string, required: Opaque server-assigned identity for equivalent families across venues. Group pill families by this value rather than inferring identity from titles.
      - `volume` number, double, required
      - `kind` 'spread' | 'total': Only present when layout=ladder.
      - `legs` SportsGameMarketLeg[]: Only present when layout=pills.
        - `label` string, required
        - `marketId` string, required
        - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
        - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
        - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
        - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
        - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
        - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
        - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
      - `rungs` SportsGameMarketRung[]: Only present when layout=ladder.
        - `line` number, double, nullable, required
        - `legs` SportsGameMarketLeg[], required
          - `label` string, required
          - `marketId` string, required
          - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
          - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
          - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
          - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
          - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
          - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
          - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
    - `playerProps` SportsGameMarketFamily[], required
      - `key` string, required
      - `title` string, required
      - `section` 'gameLines' | 'halves' | 'playerProps' | 'moreMarkets' | 'exactScore' | 'corners', required
      - `layout` 'pills' | 'ladder', required
      - `provider` 'polymarket' | 'predictfun' | 'kalshi' | 'hyperliquid', required: Venue for every market in this family.
      - `mergeKey` string, required: Opaque server-assigned identity for equivalent families across venues. Group pill families by this value rather than inferring identity from titles.
      - `volume` number, double, required
      - `kind` 'spread' | 'total': Only present when layout=ladder.
      - `legs` SportsGameMarketLeg[]: Only present when layout=pills.
        - `label` string, required
        - `marketId` string, required
        - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
        - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
        - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
        - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
        - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
        - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
        - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
      - `rungs` SportsGameMarketRung[]: Only present when layout=ladder.
        - `line` number, double, nullable, required
        - `legs` SportsGameMarketLeg[], required
          - `label` string, required
          - `marketId` string, required
          - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
          - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
          - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
          - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
          - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
          - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
          - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
    - `moreMarkets` SportsGameMarketFamily[], required
      - `key` string, required
      - `title` string, required
      - `section` 'gameLines' | 'halves' | 'playerProps' | 'moreMarkets' | 'exactScore' | 'corners', required
      - `layout` 'pills' | 'ladder', required
      - `provider` 'polymarket' | 'predictfun' | 'kalshi' | 'hyperliquid', required: Venue for every market in this family.
      - `mergeKey` string, required: Opaque server-assigned identity for equivalent families across venues. Group pill families by this value rather than inferring identity from titles.
      - `volume` number, double, required
      - `kind` 'spread' | 'total': Only present when layout=ladder.
      - `legs` SportsGameMarketLeg[]: Only present when layout=pills.
        - `label` string, required
        - `marketId` string, required
        - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
        - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
        - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
        - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
        - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
        - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
        - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
      - `rungs` SportsGameMarketRung[]: Only present when layout=ladder.
        - `line` number, double, nullable, required
        - `legs` SportsGameMarketLeg[], required
          - `label` string, required
          - `marketId` string, required
          - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
          - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
          - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
          - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
          - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
          - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
          - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
    - `exactScore` SportsGameMarketFamily[], required
      - `key` string, required
      - `title` string, required
      - `section` 'gameLines' | 'halves' | 'playerProps' | 'moreMarkets' | 'exactScore' | 'corners', required
      - `layout` 'pills' | 'ladder', required
      - `provider` 'polymarket' | 'predictfun' | 'kalshi' | 'hyperliquid', required: Venue for every market in this family.
      - `mergeKey` string, required: Opaque server-assigned identity for equivalent families across venues. Group pill families by this value rather than inferring identity from titles.
      - `volume` number, double, required
      - `kind` 'spread' | 'total': Only present when layout=ladder.
      - `legs` SportsGameMarketLeg[]: Only present when layout=pills.
        - `label` string, required
        - `marketId` string, required
        - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
        - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
        - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
        - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
        - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
        - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
        - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
      - `rungs` SportsGameMarketRung[]: Only present when layout=ladder.
        - `line` number, double, nullable, required
        - `legs` SportsGameMarketLeg[], required
          - `label` string, required
          - `marketId` string, required
          - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
          - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
          - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
          - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
          - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
          - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
          - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
    - `corners` SportsGameMarketFamily[], required
      - `key` string, required
      - `title` string, required
      - `section` 'gameLines' | 'halves' | 'playerProps' | 'moreMarkets' | 'exactScore' | 'corners', required
      - `layout` 'pills' | 'ladder', required
      - `provider` 'polymarket' | 'predictfun' | 'kalshi' | 'hyperliquid', required: Venue for every market in this family.
      - `mergeKey` string, required: Opaque server-assigned identity for equivalent families across venues. Group pill families by this value rather than inferring identity from titles.
      - `volume` number, double, required
      - `kind` 'spread' | 'total': Only present when layout=ladder.
      - `legs` SportsGameMarketLeg[]: Only present when layout=pills.
        - `label` string, required
        - `marketId` string, required
        - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
        - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
        - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
        - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
        - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
        - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
        - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.
      - `rungs` SportsGameMarketRung[]: Only present when layout=ladder.
        - `line` number, double, nullable, required
        - `legs` SportsGameMarketLeg[], required
          - `label` string, required
          - `marketId` string, required
          - `price` number, double, required: Probability-scale price. Predict.fun may return 0 when an open market has no usable quote; 0 is unavailable pricing, not an executable price.
          - `side` 'yes' | 'no', required: Contract side represented by this leg. Select the matching position ID for combos; a no-side leg must use noPositionId.
          - `outcomeKey` string, required: Opaque server-assigned identity for equivalent outcome rows across venues.
          - `conditionId` string, nullable: Polymarket condition id of the leg's market, the id sports-intel resolves Polymarket markets by. Null when unknown; absent on other venues.
          - `comboEligible` boolean: Present only when eligibility is known. Predict.fun legs always set false; an absent field means unknown, not false.
          - `yesPositionId` string, nullable: Present when eligibility is known. Use only for side=yes.
          - `noPositionId` string, nullable: Present when eligibility is known. Use only for side=no.

## Other responses

- `400`: Neither identifier was supplied, or both were supplied.
- `422`: Request failed FastAPI parameter validation.
- `429`: Rate limit exceeded for this route's sliding window, keyed on the session `sub` when authenticated and on the trusted client IP otherwise. Honor `Retry-After`. A per-API-key data ceiling (set per credential) rejects with `{"detail": "API key data rate limit exceeded"}` instead of the `error` envelope below.

---

[API](https://skmtc.dev/kairos/apis/kairos-data-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-data-api/revisions/cf6b76079e38?raw)
