Skip to main content
GET
/
v2
/
sports
/
markets
List Markets
curl --request GET \
  --url https://api.predexon.com/v2/sports/markets \
  --header 'x-api-key: <api-key>'
{
  "games": [
    {
      "game_id": "mlb-ari-pit-2026-05-07",
      "league": "mlb",
      "league_name": "MLB",
      "sport": "baseball",
      "game_date": "2026-05-07",
      "game_date_timezone": "US/Eastern",
      "status": "open",
      "title": "Arizona Diamondbacks vs Pittsburgh Pirates",
      "market_types": [
        {
          "market_type": "game_winner",
          "venues": [
            {
              "venue": "kalshi",
              "market_title": "Pittsburgh vs Arizona Winner?",
              "outcomes": [
                {
                  "outcome": "ari",
                  "outcome_label": "Arizona Diamondbacks",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "market_id": "KXMLBGAME-26MAY071540PITAZ-AZ",
                  "tokens": {
                    "yes": {
                      "predexon_id": "px-xz7fw6lsywv2rnwr",
                      "price": 0
                    },
                    "no": {
                      "predexon_id": "px-c3dftfrdu5unmk3g"
                    }
                  }
                },
                {
                  "outcome": "pit",
                  "outcome_label": "Pittsburgh Pirates",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "market_id": "KXMLBGAME-26MAY071540PITAZ-PIT",
                  "tokens": {
                    "yes": {
                      "predexon_id": "px-c3dftfrdu5unmk3g",
                      "price": 0.99
                    },
                    "no": {
                      "predexon_id": "px-xz7fw6lsywv2rnwr"
                    }
                  }
                }
              ],
              "volume": 41567.16,
              "liquidity": 25030.64,
              "end_time": "2026-05-07T22:20:55+00:00"
            },
            {
              "venue": "polymarket",
              "market_title": "Pittsburgh Pirates vs. Arizona Diamondbacks",
              "outcomes": [
                {
                  "outcome": "ari",
                  "outcome_label": "Arizona Diamondbacks",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "condition_id": "0x8a70942639237613...",
                  "market_slug": "mlb-pit-ari-2026-05-07",
                  "tokens": {
                    "yes": {
                      "token_id": "927526441864...",
                      "predexon_id": "px-xz7fw6lsywv2rnwr",
                      "price": 0
                    },
                    "no": {
                      "predexon_id": "px-c3dftfrdu5unmk3g"
                    }
                  }
                },
                {
                  "outcome": "pit",
                  "outcome_label": "Pittsburgh Pirates",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "condition_id": "0x8a70942639237613...",
                  "market_slug": "mlb-pit-ari-2026-05-07",
                  "tokens": {
                    "yes": {
                      "token_id": "232120875852...",
                      "predexon_id": "px-c3dftfrdu5unmk3g",
                      "price": 1
                    },
                    "no": {
                      "predexon_id": "px-xz7fw6lsywv2rnwr"
                    }
                  }
                }
              ],
              "volume": 853880.442333,
              "liquidity": 15200.91,
              "end_time": "2026-05-14T19:40:00+00:00"
            }
          ],
          "event_id": "mlb-ari-pit-2026-05-07"
        }
      ]
    }
  ],
  "pagination": {
    "limit": 1,
    "has_more": true,
    "pagination_key": "eyJybyI6MS..."
  }
}

Overview

The primary per-venue discovery endpoint for sports markets. Returns a paginated list of games, each containing every venue that lists that game, nested with the venue’s native market metadata and canonical outcomes. Responses are grouped per the structure described on the Sports Markets concept page:
games[]
  └── market_types[]
       └── venues[]
            └── outcomes[] with event_id and canonical predexon_id

Query Parameters

ParamTypeDefaultDescription
sportstring-Filter by sport. Must be one of basketball, soccer, hockey, baseball.
leaguestring-Filter by league code. See coverage matrix for valid values.
statusstringopenopen (currently tradeable) or closed (resolved or past-dated).
game_datestring-Exact game date, YYYY-MM-DD. Dates follow the sport’s timezone convention — see note below.
game_date_fromstring-Inclusive lower bound, YYYY-MM-DD.
game_date_tostring-Inclusive upper bound, YYYY-MM-DD.
venuestring-Only return games that include the given venue. One of polymarket, kalshi, limitless, opinion, predict.
searchstring-Case-insensitive substring search against venue-level market_title.
sort_bystringgame_date_ascgame_date_asc (soonest first) or game_date_desc (latest first).
limitint501-200.
pagination_keystring-Opaque cursor from the previous response. Omit on the first request.

Pagination

Sports list endpoints use cursor pagination. Pass the returned pagination.pagination_key into the next request. Do not use offset-based pagination.

Filter Semantics

  • Date timezone convention: game_date, game_date_from, and game_date_to follow the sport’s local convention. US sports (NBA, NHL, MLB, NFL, CFB, MLS) use Eastern Time dates. European football (EPL, La Liga, etc.) uses UTC dates. Each game in the response includes a game_date_timezone field ("US/Eastern" or "UTC") so you can interpret dates programmatically.
  • status=open filters out games whose game_date is in the past. Games from yesterday are included to account for late-night US games (an NBA game at 10:30 PM ET has a game_date in ET but may not end until after midnight UTC). Once the upstream venue reports the market as closed, the game status flips to closed regardless of date.
  • status=closed returns explicitly closed games and any past-dated games.
  • When both game_date_from and game_date_to are provided, from must be <= to (400 otherwise).
  • Invalid enum values for sport, status, venue, or sort_by return 400 Bad Request with a descriptive error.
  • Invalid date formats return 400 Bad Request.

Response Fields

Top level

FieldTypeDescription
games[]arrayGames matching the filter.
pagination.limitintEchoes the request limit.
pagination.has_morebooleanWhether another page is available.
pagination.pagination_keystring?Cursor for the next page. null when has_more=false.

Game

FieldTypeDescription
game_idstringCanonical game identifier, e.g. nba-atl-nyk-2026-04-18.
leaguestringLeague code, e.g. nba.
league_namestringHuman-readable league name, e.g. "NBA".
sportstringSport name, e.g. "basketball".
game_datestringCalendar date of the game, YYYY-MM-DD. See date semantics.
game_date_timezonestringTimezone convention for game_date: "US/Eastern" (US sports) or "UTC" (European football).
titlestringCanonical display title, e.g. "Atlanta Hawks vs New York Knicks".
statusstring"open" or "closed".
market_types[]arrayTypes of markets available for this game (e.g. game_winner).

market_type entry

FieldTypeDescription
market_typestringCanonical market type identifier. Currently always "game_winner".
venues[]arrayOne entry per venue that lists this market type for this game.
event_idstringCanonical market/question identifier for this market type. In sports v1 this usually equals game_id.

Venue Block

FieldTypeDescription
venuestring"polymarket", "kalshi", "limitless", "opinion", or "predict".
market_titlestringVenue’s native market title.
volumenumber?USD traded volume. null when the venue doesn’t expose volume. For 3-way markets this is the sum across all underlying child markets.
liquiditynumber?USD liquidity. null for venues that don’t expose liquidity.
end_timestring?ISO-8601 UTC timestamp of market close (e.g. "2026-04-18T22:00:00+00:00"). null for venues without an indexed close time.
outcomes[]arrayTradeable sides of this market on this venue.

Outcome

Each outcome represents one venue question/selection (e.g. “Mallorca wins”). tokens.yes and tokens.no are both included when the venue exposes executable sides for that exact selection.
FieldTypeDescription
outcomestringCanonical outcome code - either a team code ("atl", "mal") or "draw". Same across venues.
outcome_labelstringHuman-readable label, e.g. "Atlanta Hawks", "Mallorca".
event_idstringCanonical market/question identifier.
condition_idstring?On-chain CTF conditionId for this specific outcome’s market. Present for Polymarket, Limitless, Predict. Each outcome in a 3-way game has its own condition_id.
market_slugstring?Venue-native slug for this outcome’s market.
market_idstring?Venue-native non-condition identifier. Present for Kalshi (ticker) and Opinion (integer).
tokensobjectTradeable side entries with prices and identifiers.
tokens.yes.pricenumber?YES-side price (0.0 - 1.0). Cost to bet FOR this outcome. null if unpriced.
tokens.yes.token_idstring?Venue-native token ID. Present for on-chain venues (Polymarket, Limitless, Predict, Opinion). Not present for Kalshi.
tokens.yes.predexon_idstringCanonical Predexon outcome ID. Same outcome across venues shares this ID.
tokens.no.pricenumber?NO-side price (0.0 - 1.0). Cost to bet AGAINST this outcome.
tokens.no.token_idstring?Venue-native token ID. Same presence rules as YES.
tokens.no.predexon_idstring?Canonical Predexon ID for buying NO on that exact venue question/selection when exposed. In 2-way games this may equal the sibling YES outcome ID; in 3-way soccer it points to an explicit negation outcome such as “Draw does not happen.”

Examples

MLB game - 2-way (Kalshi + Polymarket + Predict)

GET /v2/sports/markets?league=mlb&limit=1
{
  "games": [
    {
      "game_id": "mlb-ari-pit-2026-05-07",
      "league": "mlb",
      "league_name": "MLB",
      "sport": "baseball",
      "game_date": "2026-05-07",
      "game_date_timezone": "US/Eastern",
      "title": "Arizona Diamondbacks vs Pittsburgh Pirates",
      "status": "open",
      "market_types": [
        {
          "market_type": "game_winner",
          "venues": [
            {
              "venue": "kalshi",
              "market_title": "Pittsburgh vs Arizona Winner?",
              "volume": 41567.16,
              "liquidity": 25030.64,
              "end_time": "2026-05-07T22:20:55+00:00",
              "outcomes": [
                {
                  "outcome": "ari",
                  "outcome_label": "Arizona Diamondbacks",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "market_id": "KXMLBGAME-26MAY071540PITAZ-AZ",
                  "tokens": {
                    "yes": { "predexon_id": "px-xz7fw6lsywv2rnwr", "price": 0.0 }
                  }
                },
                {
                  "outcome": "pit",
                  "outcome_label": "Pittsburgh Pirates",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "market_id": "KXMLBGAME-26MAY071540PITAZ-PIT",
                  "tokens": {
                    "yes": { "predexon_id": "px-c3dftfrdu5unmk3g", "price": 0.99 }
                  }
                }
              ]
            },
            {
              "venue": "polymarket",
              "market_title": "Pittsburgh Pirates vs. Arizona Diamondbacks",
              "volume": 853880.442333,
              "liquidity": 15200.91,
              "end_time": "2026-05-14T19:40:00+00:00",
              "outcomes": [
                {
                  "outcome": "ari",
                  "outcome_label": "Arizona Diamondbacks",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "condition_id": "0x8a70942639237613...",
                  "market_slug": "mlb-pit-ari-2026-05-07",
                  "tokens": {
                    "yes": { "token_id": "927526441864...", "predexon_id": "px-xz7fw6lsywv2rnwr", "price": 0.0 }
                  }
                },
                {
                  "outcome": "pit",
                  "outcome_label": "Pittsburgh Pirates",
                  "event_id": "mlb-ari-pit-2026-05-07",
                  "condition_id": "0x8a70942639237613...",
                  "market_slug": "mlb-pit-ari-2026-05-07",
                  "tokens": {
                    "yes": { "token_id": "232120875852...", "predexon_id": "px-c3dftfrdu5unmk3g", "price": 1.0 }
                  }
                }
              ]
            }
          ],
          "event_id": "mlb-ari-pit-2026-05-07"
        }
      ]
    }
  ],
  "pagination": { "limit": 1, "has_more": true, "pagination_key": "eyJybyI6MS..." }
}

EPL game - 3-way (Limitless)

Each outcome has its own condition_id and market_slug because on-chain venues create a separate binary market per outcome.
{
  "venue": "limitless",
  "market_title": "Mallorca vs Valencia",
  "volume": 6.25,
  "outcomes": [
    {
      "outcome": "mal",
      "outcome_label": "Mallorca",
      "condition_id": "0xeea091acc0bd...",
      "market_slug": "mallorca-1775552414517",
      "tokens": {
        "yes": { "token_id": "123...", "predexon_id": "px-aaa", "price": 0.38 },
        "no": { "token_id": "456...", "predexon_id": "px-bbb", "price": 0.62 }
      }
    },
    {
      "outcome": "val",
      "outcome_label": "Valencia",
      "condition_id": "0x1b790d83ff2b...",
      "market_slug": "valencia-1775552414526",
      "tokens": {
        "yes": { "token_id": "789...", "predexon_id": "px-ccc", "price": 0.32 },
        "no": { "token_id": "012...", "predexon_id": "px-ddd", "price": 0.68 }
      }
    },
    {
      "outcome": "draw",
      "outcome_label": "Draw",
      "condition_id": "0xf6617995abf1...",
      "market_slug": "draw-1775552414544",
      "tokens": {
        "yes": { "token_id": "345...", "predexon_id": "px-eee", "price": 0.31 },
        "no": { "token_id": "678...", "predexon_id": "px-fff", "price": 0.69 }
      }
    }
  ]
}
For 3-way football on Polymarket, Limitless, and Predict.fun, each outcome is a separate on-chain market natively. Predexon aggregates them into a single venue block and sums the volume/liquidity across the constituent markets. Each outcome retains its own condition_id and market_slug.

Caching

Responses are cached for 60 seconds. Identical query parameters will return the same cached response during that window.

Authorizations

x-api-key
string
header
required

Data key provided by Predexon. The trading key used by the Order Router on trade.predexon.com is a separate credential.

Query Parameters

sport
string | null

Filter by sport (basketball, soccer, etc.)

league
string | null

Filter by league code (nba, epl, etc.)

status
string
default:open

Market status: open or closed

game_date
string | null

Exact game date (YYYY-MM-DD)

game_date_from
string | null

Games on or after date (YYYY-MM-DD)

game_date_to
string | null

Games on or before date (YYYY-MM-DD)

venue
string | null

Filter to games with this venue (polymarket, kalshi, etc.)

search
string | null

Search game/market titles

sort_by
enum<string>
default:game_date_asc

Sort order: game_date_asc or game_date_desc.

Available options:
game_date_asc,
game_date_desc
limit
integer
default:50

Max games to return

Required range: 1 <= x <= 200
pagination_key
string

Cursor from the previous response. Omit on the first request.

Response

Successful response