Tracking Futures Odds
This integration scenario retrieves futures (outright) odds: long-term markets such as championship winners, division winners, and season awards, using the Competition Futures and Category Futures feeds.
This scenario is commonly used to:
- Display championship and division winner odds through a season
- Compare futures prices across sportsbooks
- Track how title odds drift from their opening prices
- Power season-outlook and award-race content
Overview
Futures markets differ from prematch markets in three ways:
- They are identified by
sr:iscreen_market:IDs (a different ID space from thesr:market:prematch IDs) - Each market carries a
start_dateandend_datewindow and anis_liveflag - Outcomes are typed
competitor, carryingcompetitor_idandcompetitor_nameinline rather than a home or away side
Sport Competitions (futures flag) → Competition Futures (paged) → re-poll
Relevant Feeds
| Feed | Purpose |
|---|---|
| Books | The bookmakers configured for your key |
| Sport Competitions | Competitions with futures coverage (futures flag) |
| Sport Categories | Category IDs for category-scoped pulls |
| Competition Futures | Outright markets for a competition |
| Category Futures | Outright markets for a whole category |
High-Level Workflow
Integration Steps
1. Find Competitions with Futures
The futures flag on Sport Competitions marks coverage. In this American Football response, note that the NFL carries futures while the NFL Preseason does not:
GET https://api.sportradar.com/oddscomparison-futures/trial/v2/en/sports/sr:sport:16/competitions.json
x-api-key: YOUR_API_KEY{
"generated_at": "2026-07-20T16:30:34+00:00",
"competitions": [
{
"id": "sr:competition:31",
"name": "NFL",
"gender": "men",
"markets": true,
"futures": true,
"player_props": true,
"category": {
"id": "sr:category:43",
"name": "USA",
"country_code": "USA"
}
},
{
"id": "sr:competition:233",
"name": "NFL Preseason",
"gender": "men",
"markets": true,
"futures": false,
"player_props": false,
"category": {
"id": "sr:category:43",
"name": "USA",
"country_code": "USA"
}
},
{
"id": "sr:competition:27625",
"name": "NCAA Division I, FBS Post Season",
"gender": "men",
"markets": false,
"futures": true,
"player_props": false,
"category": {
"id": "sr:category:43",
"name": "USA",
"country_code": "USA"
}
},
{
"id": "sr:competition:27653",
"name": "NCAA, Regular Season",
"gender": "men",
"markets": true,
"futures": true,
"player_props": false,
"category": {
"id": "sr:category:43",
"name": "USA",
"country_code": "USA"
}
}
]
}2. Pull the Competition's Futures
Competition Futures returns the outright markets under a markets root key. This AFC conference winner market is trimmed to one book and four outcomes:
GET https://api.sportradar.com/oddscomparison-futures/trial/v2/en/competitions/sr:competition:31/futures.json
x-api-key: YOUR_API_KEY{
"generated_at": "2026-07-20T16:33:20+00:00",
"markets": [
{
"id": "sr:iscreen_market:2757",
"name": "nfl - afc - conference",
"is_live": false,
"books": [
{
"id": "sr:book:17324",
"name": "MGM",
"removed": false,
"external_sport_event_id": "18968586",
"external_market_id": "1454017800",
"outcomes": [
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4413",
"competitor_name": "Baltimore Ravens",
"odds_decimal": "6.000",
"odds_american": "+500",
"odds_fraction": "5/1",
"open_odds_decimal": "6.000",
"open_odds_american": "+500",
"open_odds_fraction": "5/1",
"external_outcome_id": "-207617161",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4376",
"competitor_name": "Buffalo Bills",
"odds_decimal": "6.000",
"odds_american": "+500",
"odds_fraction": "5/1",
"open_odds_decimal": "5.500",
"open_odds_american": "+450",
"open_odds_fraction": "9/2",
"external_outcome_id": "-207617160",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4422",
"competitor_name": "Kansas City Chiefs",
"odds_decimal": "8.500",
"odds_american": "+750",
"odds_fraction": "15/2",
"open_odds_decimal": "8.500",
"open_odds_american": "+750",
"open_odds_fraction": "15/2",
"external_outcome_id": "-207617157",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4429",
"competitor_name": "Los Angeles Chargers",
"odds_decimal": "9.000",
"odds_american": "+800",
"odds_fraction": "8/1",
"open_odds_decimal": "9.250",
"open_odds_american": "+825",
"open_odds_fraction": "33/4",
"external_outcome_id": "-207617159",
"removed": false
}
]
}
],
"start_date": "2026-09-10",
"end_date": "2027-02-14"
}
]
}<?xml version="1.0" ?>
<competition_futures xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.sportradar.com/sportsapi/oddscomparison-futures/v2" generated_at="2026-07-20T16:33:23+00:00" xsi:schemaLocation="http://schemas.sportradar.com/sportsapi/oddscomparison-futures/v2 https://schemas.sportradar.com/sportsapi/oddscomparison-futures/v2/schemas/competition_futures.xsd">
<markets>
<market id="sr:iscreen_market:2737" name="nfl - afc - division south" is_live="false" start_date="2026-09-10" end_date="2027-02-14">
<books>
<book id="sr:book:17324" name="MGM" removed="false" external_sport_event_id="18968586" external_market_id="1454017813">
<outcomes>
<outcome id="sr:outcome:10001" type="competitor" competitor_id="sr:competitor:4324" competitor_name="Houston Texans" odds_decimal="2.200" odds_american="+120" odds_fraction="6/5" open_odds_decimal="2.600" open_odds_american="+160" open_odds_fraction="8/5" external_outcome_id="-207617104" removed="false"/>
<outcome id="sr:outcome:10001" type="competitor" competitor_id="sr:competitor:4386" competitor_name="Jacksonville Jaguars" odds_decimal="3.100" odds_american="+210" odds_fraction="21/10" open_odds_decimal="2.750" open_odds_american="+175" open_odds_fraction="7/4" external_outcome_id="-207617105" removed="false"/>
<!-- ... additional outcomes omitted for brevity ... -->
</outcomes>
</book>
<!-- ... additional books omitted for brevity ... -->
</books>
</market>
<!-- ... additional markets omitted for brevity ... -->
</markets>
</competition_futures>Each outcome is a competitor: match competitor_id across books to compare a team's title price, and against the sr:competitor: IDs used across the other odds APIs.
Futures pages are small: five markets per pageCompetition Futures and Category Futures cap
limitat 5. The NFL response reportsX-Max-Results: 90, so the full board is 18 pages. Walkstartin increments of five untilX-Resultdrops below five:
GET https://api.sportradar.com/oddscomparison-futures/trial/v2/en/competitions/sr:competition:31/futures.json?start=5
x-api-key: YOUR_API_KEY{
"generated_at": "2026-07-20T16:37:13+00:00",
"markets": [
{
"id": "sr:iscreen_market:3904",
"name": "nfl - nfc - conference",
"is_live": false,
"books": [
{
"id": "sr:book:17324",
"name": "MGM",
"removed": false,
"external_sport_event_id": "18968586",
"external_market_id": "1454017802",
"outcomes": [
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4387",
"competitor_name": "Los Angeles Rams",
"odds_decimal": "4.000",
"odds_american": "+300",
"odds_fraction": "3/1",
"open_odds_decimal": "5.000",
"open_odds_american": "+400",
"open_odds_fraction": "4/1",
"external_outcome_id": "-207617138",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4430",
"competitor_name": "Seattle Seahawks",
"odds_decimal": "6.500",
"odds_american": "+550",
"odds_fraction": "11/2",
"open_odds_decimal": "5.500",
"open_odds_american": "+450",
"open_odds_fraction": "9/2",
"external_outcome_id": "-207617139",
"removed": false
}
]
}
],
"start_date": "2026-09-10",
"end_date": "2027-02-14"
}
]
}The page-2 snippet is trimmed to its first market, showing the page boundary: page 1 ends in the AFC markets and page 2 opens with the NFC conference market.
3. A Mid-Season Example: World Series Odds
The same call against MLB (sr:competition:109) in July returns the live championship race. Trimmed to one book and the first five outcomes:
{
"generated_at": "2026-07-20T16:33:26+00:00",
"markets": [
{
"id": "sr:iscreen_market:2761",
"name": "mlb - world series",
"is_live": false,
"books": [
{
"id": "sr:book:17324",
"name": "MGM",
"removed": false,
"external_sport_event_id": "18390183",
"external_market_id": "1390797014",
"outcomes": [
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:3638",
"competitor_name": "Los Angeles Dodgers",
"odds_decimal": "2.800",
"odds_american": "+180",
"odds_fraction": "9/5",
"open_odds_decimal": "2.900",
"open_odds_american": "+190",
"open_odds_fraction": "19/10",
"external_outcome_id": "-369466308",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:3654",
"competitor_name": "New York Yankees",
"odds_decimal": "6.500",
"odds_american": "+550",
"odds_fraction": "11/2",
"open_odds_decimal": "9.500",
"open_odds_american": "+850",
"open_odds_fraction": "17/2",
"external_outcome_id": "-369466303",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:3630",
"competitor_name": "Milwaukee Brewers",
"odds_decimal": "11.000",
"odds_american": "+1000",
"odds_fraction": "10/1",
"open_odds_decimal": "31.000",
"open_odds_american": "+3000",
"open_odds_fraction": "30/1",
"external_outcome_id": "-369466306",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:3656",
"competitor_name": "Atlanta Braves",
"odds_decimal": "12.000",
"odds_american": "+1100",
"odds_fraction": "11/1",
"open_odds_decimal": "18.000",
"open_odds_american": "+1700",
"open_odds_fraction": "17/1",
"external_outcome_id": "-369466320",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:3635",
"competitor_name": "Philadelphia Phillies",
"odds_decimal": "14.000",
"odds_american": "+1300",
"odds_fraction": "13/1",
"open_odds_decimal": "19.000",
"open_odds_american": "+1800",
"open_odds_fraction": "18/1",
"external_outcome_id": "-369466301",
"removed": false
}
]
}
],
"start_date": "2026-03-25",
"end_date": "2026-09-27"
}
]
}The open_odds_* values preserve each team's price when the market opened, so a season-long odds-drift chart comes from a single call.
4. Pull a Whole Category at Once
Category Futures batches every competition in a category (for American Football, the USA category spans the NFL and NCAA markets). Find the category ID with Sport Categories:
{
"generated_at": "2026-07-20T16:30:38+00:00",
"categories": [
{
"id": "sr:category:43",
"name": "USA",
"country_code": "USA"
}
]
}{
"generated_at": "2026-07-20T16:33:30+00:00",
"markets": [
{
"id": "sr:iscreen_market:2737",
"name": "nfl - afc - division south",
"is_live": false,
"books": [
{
"id": "sr:book:17324",
"name": "MGM",
"removed": false,
"external_sport_event_id": "18968586",
"external_market_id": "1454017813",
"outcomes": [
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4324",
"competitor_name": "Houston Texans",
"odds_decimal": "2.200",
"odds_american": "+120",
"odds_fraction": "6/5",
"open_odds_decimal": "2.600",
"open_odds_american": "+160",
"open_odds_fraction": "8/5",
"external_outcome_id": "-207617104",
"removed": false
},
{
"id": "sr:outcome:10001",
"type": "competitor",
"competitor_id": "sr:competitor:4386",
"competitor_name": "Jacksonville Jaguars",
"odds_decimal": "3.100",
"odds_american": "+210",
"odds_fraction": "21/10",
"open_odds_decimal": "2.750",
"open_odds_american": "+175",
"open_odds_fraction": "7/4",
"external_outcome_id": "-207617105",
"removed": false
}
]
}
],
"start_date": "2026-09-10",
"end_date": "2027-02-14"
}
]
}The category response uses the same market shape. Pagination behavior differs from Competition Futures in practice: this category response returned all of its 100 markets in a single response (X-Max-Results: 100, X-Result: 100), where the NFL competition call pages at five. Read the pagination headers on every response rather than assuming a page size. The snippet is trimmed to one market, one book, and two outcomes.
5. Refresh Strategy
The Futures package has no change log feed; refresh by re-polling the futures feeds themselves. Bookmaker prices in the Futures package refresh every three minutes, and futures prices move on news cycles rather than by the minute, so a modest cadence (for example, a few times per day per competition, more often near season milestones) keeps boards current; see Monitoring Odds Changes for observed cache behavior. Books that pull a futures market flip to removed: true with the last prices retained, exactly as in the other packages.
Common Use Cases
- Championship odds page: steps 1, 2, and 5 for each tracked competition
- Award races: the same market shape covers MVP and award markets where offered
- Odds drift over time: persist per-poll prices and chart against
open_odds_*
Updated 1 day ago
