Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Tracking Win Probabilities

The Global Baseball Probabilities package adds Sportradar's calculated win probabilities to the core API: pre-match and in-play percentages per game, a per-game probability timeline, season-long pre-match probabilities, and season outrights. It is licensed as an add-on to the Global Baseball package.

This scenario is commonly used to:

  • Show pre-match and in-play win percentages alongside scores
  • Render win-probability charts for completed games
  • Power season outlook displays: division, pennant, and World Series likelihoods


Base URL

Requests use the package's own base path, with the same header authentication and URL placeholders as the core API and no sport segment:

GET https://api.sportradar.com/baseball-probabilities/{access_level}/v2/{language_code}/{feed}.{format}
x-api-key: YOUR_API_KEY
🧭

One Feed Lives on the Core Base Path

Season Probabilities, the feed returning pre-match probabilities for every game of a season, is served from the core path (https://api.sportradar.com/baseball/...) even though it is part of the probabilities offering. The four other feeds use the baseball-probabilities base path shown above.



Relevant Feeds

FeedPurpose
Sport Event ProbabilitiesThe current 2-way market for one game, pre-match and in play
Timeline ProbabilitiesEvery probability change across one game's life
Live ProbabilitiesEvery live game with its market where probability coverage applies
Sport Event Upcoming ProbabilitiesEvent IDs with probabilities for the next 24 hours
Season ProbabilitiesThe pre-match market for every game of a season
Season Outright ProbabilitiesSeason-long markets: titles, divisions, seeds, and awards


Integration Steps


1. Probabilities for one game, before and during play

Sport Event Probabilities returns a game's 2way market. A few hours before first pitch:

{
  "generated_at": "2026-07-21T17:53:00+00:00",
  "sport_event": {
    "id": "sr:sport_event:63299165",
    "start_time": "2026-07-21T22:40:00+00:00",
    "competitors": [
      {
        "id": "sr:competitor:3650",
        "name": "Cleveland Guardians",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "CLE",
        "qualifier": "home",
        "gender": "male"
      },
      {
        "id": "sr:competitor:3649",
        "name": "Minnesota Twins",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "MIN",
        "qualifier": "away",
        "gender": "male"
      }
    ]
  },
  "sport_event_status": {
    "status": "not_started",
    "match_status": "not_started"
  },
  "markets": [
    {
      "name": "2way",
      "outcomes": [
        {
          "name": "home_team_winner",
          "probability": 57.7
        },
        {
          "name": "away_team_winner",
          "probability": 42.3
        }
      ],
      "last_updated": "2026-07-21T11:26:59+00:00"
    }
  ]
}

Outcomes are home_team_winner and away_team_winner, expressed as percentages that sum to 100; last_updated stamps the most recent recalculation.

Once play begins, the response carries two markets: the settled pre-match market, and a live market flagged live: true that recalculates with the game state and carries the score at its last_updated moment. The same game in the first inning, just after the away side scored; the pre-match market holds at 59.3 while the live market has moved to 49.8:

{
  "generated_at": "2026-07-21T22:50:29+00:00",
  "sport_event": {
    "id": "sr:sport_event:63299165",
    "start_time": "2026-07-21T22:40:00+00:00",
    "competitors": [
      {
        "id": "sr:competitor:3650",
        "name": "Cleveland Guardians",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "CLE",
        "qualifier": "home",
        "gender": "male"
      },
      {
        "id": "sr:competitor:3649",
        "name": "Minnesota Twins",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "MIN",
        "qualifier": "away",
        "gender": "male"
      }
    ]
  },
  "sport_event_status": {
    "status": "live",
    "match_status": "1st_inning",
    "home_score": 0,
    "away_score": 1,
    "period_scores": [
      {
        "home_score": 0,
        "away_score": 1,
        "type": "regular_period",
        "number": 1
      }
    ]
  },
  "markets": [
    {
      "name": "2way",
      "outcomes": [
        {
          "name": "home_team_winner",
          "probability": 59.3
        },
        {
          "name": "away_team_winner",
          "probability": 40.7
        }
      ],
      "last_updated": "2026-07-21T22:37:53+00:00"
    },
    {
      "name": "2way",
      "outcomes": [
        {
          "name": "home_team_winner",
          "probability": 49.8
        },
        {
          "name": "away_team_winner",
          "probability": 50.2
        }
      ],
      "live": true,
      "last_updated": "2026-07-21T22:50:04+00:00",
      "home_score": 0,
      "away_score": 1,
      "removed": true
    }
  ]
}

A market carries removed: true while it is suspended or not currently offered, usually briefly, for example while the probabilities are recalculated after a scoring play; the most recent figures stay in the payload, and a request a few seconds later can show the market offered again. Treat removed as a short-lived availability signal: keep displaying the last figures or hold your display until it clears, whichever suits your product, and keep polling.


2. The probability timeline

Timeline Probabilities returns every probability change across a game's life. One completed game produced 764 points; trimmed to the opening estimate, a mid-game live point, and the last recorded point:

{
  "generated_at": "2026-07-21T17:50:57+00:00",
  "sport_event": {
    "id": "sr:sport_event:63301121",
    "competitors": [
      {
        "id": "sr:competitor:3650",
        "name": "Cleveland Guardians",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "CLE",
        "qualifier": "home",
        "gender": "male"
      },
      {
        "id": "sr:competitor:3649",
        "name": "Minnesota Twins",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "MIN",
        "qualifier": "away",
        "gender": "male"
      }
    ]
  },
  "sport_event_status": {
    "status": "closed",
    "match_status": "ended",
    "home_score": 13,
    "away_score": 4,
    "winner_id": "sr:competitor:3650"
  },
  "timeline": [
    {
      "market": {
        "name": "2way",
        "outcomes": [
          {
            "name": "home_team_winner",
            "probability": 46.9
          },
          {
            "name": "away_team_winner",
            "probability": 53.1
          }
        ],
        "last_updated": "2026-07-19T17:31:18+00:00"
      }
    },
    {
      "market": {
        "name": "2way",
        "outcomes": [
          {
            "name": "home_team_winner",
            "probability": 87.7
          },
          {
            "name": "away_team_winner",
            "probability": 12.3
          }
        ],
        "live": true,
        "last_updated": "2026-07-20T23:23:28+00:00",
        "home_score": 6,
        "away_score": 2
      }
    },
    {
      "market": {
        "name": "2way",
        "outcomes": [
          {
            "name": "home_team_winner",
            "probability": 99.7
          },
          {
            "name": "away_team_winner",
            "probability": 0.3
          }
        ],
        "live": true,
        "last_updated": "2026-07-21T00:46:19+00:00",
        "home_score": 10,
        "away_score": 3
      }
    }
  ]
}

Pre-match points carry only the market and timestamp; once play begins, points add live: true and the score at the moment of recalculation, so the timeline doubles as a story of the game. Use it to render win-probability charts for completed games without having polled during play. The full timeline, drawn:

Home Win Probability Across One GameTwins at Guardians, 2026-07-20, Timeline Probabilities

0%

25%

50%

75%

100%



pre-game 46.9

low 44.3

final point 99.7
first estimate
last recorded point
256 of the 764 points in the Timeline Probabilities response, downsampled for rendering; the final score was Guardians 13, Twins 4.

3. Live probabilities across the slate

Live Probabilities lists every game currently in progress with its market where probability coverage applies. A game from a competition without probability coverage is listed with an empty markets array:

{
  "generated_at": "2026-07-21T17:51:00+00:00",
  "sport_event_probabilities": [
    {
      "sport_event": {
        "id": "sr:sport_event:71755404",
        "start_time": "2026-07-21T17:05:00+00:00",
        "competitors": [
          {
            "id": "sr:competitor:419483",
            "name": "Mankato Moondogs",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "MAN",
            "qualifier": "home",
            "gender": "male"
          },
          {
            "id": "sr:competitor:419465",
            "name": "Bismarck Larks",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "BIS",
            "qualifier": "away",
            "gender": "male"
          }
        ]
      },
      "sport_event_status": {
        "status": "live",
        "match_status": "2nd_inning",
        "home_score": 5,
        "away_score": 0,
        "period_scores": [
          {
            "home_score": 4,
            "away_score": 0,
            "type": "regular_period",
            "number": 1
          },
          {
            "home_score": 1,
            "away_score": 0,
            "type": "regular_period",
            "number": 2
          }
        ]
      },
      "markets": []
    }
  ]
}

Treat an empty markets array as "no probabilities for this game", not an error. To know which games will carry probabilities ahead of the slate, Sport Event Upcoming Probabilities lists the event IDs with probabilities for the next 24 hours. Pre-match probabilities for a game are published once both teams have finished their previous game, so poll the list through the day rather than once ahead of the slate.


4. A whole season, pre-match

Season Probabilities returns the pre-match 2way market for every game of a season, paged with start and limit (up to 200 per page; the full MLB 2026 season reports 1,542 games in its X-Max-Results header). One entry:

GET https://api.sportradar.com/baseball/trial/v2/en/seasons/sr:season:134469/probabilities.json
x-api-key: YOUR_API_KEY
{
  "generated_at": "2026-07-21T17:50:40+00:00",
  "sport_event_probabilities": [
    {
      "sport_event": {
        "id": "sr:sport_event:63290531",
        "start_time": "2026-03-26T00:05:00+00:00",
        "competitors": [
          {
            "id": "sr:competitor:3634",
            "name": "San Francisco Giants",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "SF",
            "qualifier": "home",
            "gender": "male"
          },
          {
            "id": "sr:competitor:3654",
            "name": "New York Yankees",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "NYY",
            "qualifier": "away",
            "gender": "male"
          }
        ]
      },
      "markets": [
        {
          "name": "2way",
          "outcomes": [
            {
              "name": "home_team_winner",
              "probability": 46.9
            },
            {
              "name": "away_team_winner",
              "probability": 53.1
            }
          ]
        }
      ]
    }
  ]
}

5. Season outrights

Season Outright Probabilities returns season-long markets: 76 for MLB 2026, spanning the World Series and pennant winners, division winners, playoff seeds, and season awards. The National League West market, trimmed to three of its five outcomes:

{
  "markets": [
    {
      "name": "MLB 2026 - National League West - Winner",
      "outcomes": [
        {
          "name": "LOS ANGELES DODGERS",
          "probability": 99.3,
          "competitor": {
            "id": "sr:competitor:3638",
            "name": "Los Angeles Dodgers",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "LAD",
            "gender": "male"
          },
          "active": true
        },
        {
          "name": "SAN DIEGO PADRES",
          "probability": 0.3,
          "competitor": {
            "id": "sr:competitor:3636",
            "name": "San Diego Padres",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "SD",
            "gender": "male"
          },
          "active": true
        },
        {
          "name": "ARIZONA DIAMONDBACKS",
          "probability": 0.3,
          "competitor": {
            "id": "sr:competitor:3640",
            "name": "Arizona Diamondbacks",
            "country": "USA",
            "country_code": "USA",
            "abbreviation": "AZ",
            "gender": "male"
          },
          "active": true
        }
      ]
    }
  ]
}

Each outcome pairs the probability with the full competitor record, so outright boards join to team pages without a lookup. active marks outcomes still mathematically alive.



Common Use Cases

Typical builds on this workflow include:

  • Win-percentage chips beside live scores
  • Post-game win-probability charts from the timeline
  • A season outlook hub with division, pennant, and award likelihoods
  • Pre-match probability boards for the coming slate


Best Practices

  • Sport Event Probabilities and Live Probabilities carry a measured cache TTL of about 1 second during play; poll live displays every few seconds and pre-match displays every few minutes
  • Pull Timeline Probabilities once after a game closes for charting; there is no need to poll it during play if you are already polling the live feeds
  • Season Probabilities and outrights carry a measured TTL of 1 minute and move meaningfully only as games close; a few pulls per day is typical
  • Probability coverage varies by competition; treat an empty markets array as the signal, not an error

Did this page help you?