---
title: "Tournament bracket with live cross-provider prices per tie"
method: GET
path: "/sports/tournament-bracket"
tags: ["Sports"]
---

# Tournament bracket with live cross-provider prices per tie

`GET /sports/tournament-bracket`

## Request

- Base URL: `https://data.kairos.trade`
- URL: `https://data.kairos.trade/sports/tournament-bracket`
- Auth: none required

Builds a tournament bracket for `league`. Bracket structure and results are sourced from third-party sports-data providers depending on the league. Each tie/match is enriched with live prices from Polymarket, Kalshi (authenticated API), and Predict.fun where a corresponding market can be matched. `format=symmetric` (default) returns a left/right bracket converging on `final`, with an optional `thirdPlace` match and, for `format=groups-then-knockout`, a `groups` stage with standings tables. `format=left-to-right` instead returns all rounds in `leftRounds` with an empty `rightRounds`. `winner` is always null — this endpoint never resolves a champion. Responses are briefly cached.

## Query parameters

- `league` string, required
- `format` 'symmetric' | 'left-to-right' | 'groups-then-knockout'

## Response `200`

Tournament bracket structure with live provider prices attached per tie.

- SportsTournamentBracketResponse
  - `leftRounds` SportsBracketRound[], required
    - `name` string, required
    - `shortName` string, required
    - `matches` SportsBracketMatch[], required
      - `id` string, required
      - `teams` SportsBracketTeam[], required
        - `name` string, required
        - `shortName` string, required
        - `logo` string, nullable, required
      - `status` 'scheduled' | 'live' | 'completed', required
      - `subtitle` string, required: Formatted fixture date, or "Date1 / Date2" for two-leg ties.
      - `resolvesAfterExtraTime` boolean, required
      - `kickoffTime` string, date-time
      - `matchday` integer
      - `scores` integer[]
      - `winnerIdx` 0 | 1
      - `aggregateScores` integer[]: Present for two-leg ties.
      - `providerPrices` SportsBracketProviderPrices: Only providers with a resolvable market for this tie are present.
        - `polymarket` SportsBracketProviderPricePoly
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
          - `spreadLines` SportsBracketSpreadLine[]
            - `line` number, double, nullable
            - `team0Price` number, double, nullable
            - `team1Price` number, double, nullable
            - `team0MarketId` string, nullable
            - `team1MarketId` string, nullable
          - `totalLines` SportsBracketTotalLine[]
            - `line` number, double, nullable
            - `overPrice` number, double, nullable
            - `underPrice` number, double, nullable
            - `overMarketId` string, nullable
            - `underMarketId` string, nullable
          - `comboEligibility` object: Present only when the combo eligibility store has data for this tie.
        - `predictfun` SportsBracketProviderPriceGeneric
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
        - `kalshi` SportsBracketProviderPriceKalshi
          - `eventTicker` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
  - `rightRounds` SportsBracketRound[], required: Empty when format=left-to-right.
    - `name` string, required
    - `shortName` string, required
    - `matches` SportsBracketMatch[], required
      - `id` string, required
      - `teams` SportsBracketTeam[], required
        - `name` string, required
        - `shortName` string, required
        - `logo` string, nullable, required
      - `status` 'scheduled' | 'live' | 'completed', required
      - `subtitle` string, required: Formatted fixture date, or "Date1 / Date2" for two-leg ties.
      - `resolvesAfterExtraTime` boolean, required
      - `kickoffTime` string, date-time
      - `matchday` integer
      - `scores` integer[]
      - `winnerIdx` 0 | 1
      - `aggregateScores` integer[]: Present for two-leg ties.
      - `providerPrices` SportsBracketProviderPrices: Only providers with a resolvable market for this tie are present.
        - `polymarket` SportsBracketProviderPricePoly
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
          - `spreadLines` SportsBracketSpreadLine[]
            - `line` number, double, nullable
            - `team0Price` number, double, nullable
            - `team1Price` number, double, nullable
            - `team0MarketId` string, nullable
            - `team1MarketId` string, nullable
          - `totalLines` SportsBracketTotalLine[]
            - `line` number, double, nullable
            - `overPrice` number, double, nullable
            - `underPrice` number, double, nullable
            - `overMarketId` string, nullable
            - `underMarketId` string, nullable
          - `comboEligibility` object: Present only when the combo eligibility store has data for this tie.
        - `predictfun` SportsBracketProviderPriceGeneric
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
        - `kalshi` SportsBracketProviderPriceKalshi
          - `eventTicker` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
  - `final` union, required
    - SportsBracketMatch
      - `id` string, required
      - `teams` SportsBracketTeam[], required
        - `name` string, required
        - `shortName` string, required
        - `logo` string, nullable, required
      - `status` 'scheduled' | 'live' | 'completed', required
      - `subtitle` string, required: Formatted fixture date, or "Date1 / Date2" for two-leg ties.
      - `resolvesAfterExtraTime` boolean, required
      - `kickoffTime` string, date-time
      - `matchday` integer
      - `scores` integer[]
      - `winnerIdx` 0 | 1
      - `aggregateScores` integer[]: Present for two-leg ties.
      - `providerPrices` SportsBracketProviderPrices: Only providers with a resolvable market for this tie are present.
        - `polymarket` SportsBracketProviderPricePoly
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
          - `spreadLines` SportsBracketSpreadLine[]
            - `line` number, double, nullable
            - `team0Price` number, double, nullable
            - `team1Price` number, double, nullable
            - `team0MarketId` string, nullable
            - `team1MarketId` string, nullable
          - `totalLines` SportsBracketTotalLine[]
            - `line` number, double, nullable
            - `overPrice` number, double, nullable
            - `underPrice` number, double, nullable
            - `overMarketId` string, nullable
            - `underMarketId` string, nullable
          - `comboEligibility` object: Present only when the combo eligibility store has data for this tie.
        - `predictfun` SportsBracketProviderPriceGeneric
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
        - `kalshi` SportsBracketProviderPriceKalshi
          - `eventTicker` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
    - object: Placeholder used when neither finalist is known yet.
      - `id` string
      - `teams` unknown[]
        - unknown
      - `status` string
      - `subtitle` string
  - `winner` unknown, required
  - `thirdPlace` SportsBracketMatch
    - `id` string, required
    - `teams` SportsBracketTeam[], required
      - `name` string, required
      - `shortName` string, required
      - `logo` string, nullable, required
    - `status` 'scheduled' | 'live' | 'completed', required
    - `subtitle` string, required: Formatted fixture date, or "Date1 / Date2" for two-leg ties.
    - `resolvesAfterExtraTime` boolean, required
    - `kickoffTime` string, date-time
    - `matchday` integer
    - `scores` integer[]
    - `winnerIdx` 0 | 1
    - `aggregateScores` integer[]: Present for two-leg ties.
    - `providerPrices` SportsBracketProviderPrices: Only providers with a resolvable market for this tie are present.
      - `polymarket` SportsBracketProviderPricePoly
        - `slug` string, required
        - `marketId` string, nullable, required
        - `title` string, required
        - `titles` string[], required
        - `prices` number[], required
        - `drawPrice` number, double, nullable, required
        - `outcomeMarketIds` string[], required
        - `spreadLines` SportsBracketSpreadLine[]
          - `line` number, double, nullable
          - `team0Price` number, double, nullable
          - `team1Price` number, double, nullable
          - `team0MarketId` string, nullable
          - `team1MarketId` string, nullable
        - `totalLines` SportsBracketTotalLine[]
          - `line` number, double, nullable
          - `overPrice` number, double, nullable
          - `underPrice` number, double, nullable
          - `overMarketId` string, nullable
          - `underMarketId` string, nullable
        - `comboEligibility` object: Present only when the combo eligibility store has data for this tie.
      - `predictfun` SportsBracketProviderPriceGeneric
        - `slug` string, required
        - `marketId` string, nullable, required
        - `title` string, required
        - `titles` string[], required
        - `prices` number[], required
        - `drawPrice` number, double, nullable, required
        - `outcomeMarketIds` string[], required
      - `kalshi` SportsBracketProviderPriceKalshi
        - `eventTicker` string, required
        - `marketId` string, nullable, required
        - `title` string, required
        - `titles` string[], required
        - `prices` number[], required
        - `drawPrice` number, double, nullable, required
        - `outcomeMarketIds` string[], required
  - `groups` SportsBracketGroup[]: Present only when format=groups-then-knockout.
    - `name` string, required
    - `shortName` string, required
    - `table` SportsBracketStanding[], required
      - `team` SportsBracketTeam, required
        - `name` string, required
        - `shortName` string, required
        - `logo` string, nullable, required
      - `played` integer, required
      - `won` integer, required
      - `draw` integer, required
      - `lost` integer, required
      - `goalsFor` integer, required
      - `goalsAgainst` integer, required
      - `points` integer, required
      - `goalDifference` integer, required
    - `matches` SportsBracketMatch[], required
      - `id` string, required
      - `teams` SportsBracketTeam[], required
        - `name` string, required
        - `shortName` string, required
        - `logo` string, nullable, required
      - `status` 'scheduled' | 'live' | 'completed', required
      - `subtitle` string, required: Formatted fixture date, or "Date1 / Date2" for two-leg ties.
      - `resolvesAfterExtraTime` boolean, required
      - `kickoffTime` string, date-time
      - `matchday` integer
      - `scores` integer[]
      - `winnerIdx` 0 | 1
      - `aggregateScores` integer[]: Present for two-leg ties.
      - `providerPrices` SportsBracketProviderPrices: Only providers with a resolvable market for this tie are present.
        - `polymarket` SportsBracketProviderPricePoly
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
          - `spreadLines` SportsBracketSpreadLine[]
            - `line` number, double, nullable
            - `team0Price` number, double, nullable
            - `team1Price` number, double, nullable
            - `team0MarketId` string, nullable
            - `team1MarketId` string, nullable
          - `totalLines` SportsBracketTotalLine[]
            - `line` number, double, nullable
            - `overPrice` number, double, nullable
            - `underPrice` number, double, nullable
            - `overMarketId` string, nullable
            - `underMarketId` string, nullable
          - `comboEligibility` object: Present only when the combo eligibility store has data for this tie.
        - `predictfun` SportsBracketProviderPriceGeneric
          - `slug` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required
        - `kalshi` SportsBracketProviderPriceKalshi
          - `eventTicker` string, required
          - `marketId` string, nullable, required
          - `title` string, required
          - `titles` string[], required
          - `prices` number[], required
          - `drawPrice` number, double, nullable, required
          - `outcomeMarketIds` string[], required

## Other responses

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