Odds Comparison Prematch
Quick Access | |
Postman Collection | XSD Schema |
Download |
API | API Version |
Odds Comparison | Prematch |
Note: Authentication is required for all API calls. |
Example:
>To find 3-way prematch odds for a sport event on a given day: >- Call the Sports resource and make note of the Sport Id for your event
- Call the Daily Sport Event Markets for your given date, using the Sport Id
- Find the Sport Event Id of your event within the results
- Call the Sport Event Markets using your located Sport Event Id
- The prematch odds for your event are displayed
- Find the "1x2" market within the results
Market ID/Name | Sports | Market Structure |
1 1x2 |
American Football Basketball |
Team A / Team B / Draw |
19 Home Total |
Ice Hockey | Over / Under |
20 Away Total |
Ice Hockey | Over / Under |
23 2nd Quarter Betting |
Basketball | Team A / Team B |
26 Total Points Odd/Even |
Basketball | Over / Under |
47 Double Result |
American Football Basketball |
Tie / Team A Tie / Team B Team A / Team B Team B / Team A Team A / Team A Team B / Team B |
60 1st Half - 1x2 |
American Football Basketball |
Team A / Team B / Draw |
64 1st Half - Draw No Bet |
American Football Basketball |
Team A / Team B |
66 1st Half - Handicap |
American Football Basketball |
Team A / Team B |
68 1st Half - Total |
American Football Basketball |
Over / Under |
69 1st Half - Home Total |
American Football | Over / Under |
70 1st Half - Away Total |
American Football | Over / Under |
74 1st Half Total Points Odd/Even |
American Football | Over / Under |
83 2nd Half Betting |
American Football | Team A / Team B |
94 2nd Half Total Points Odd/Even |
Basketball | Even / Odd |
219 Winner (incl. overtime) |
American Football Basketball |
|
220 Will There Be Overtime? |
American Football Basketball |
Yes / No |
223 Handicap (incl. overtime) |
American Football | Team A / Team B |
225 Total (incl. overtime) |
American Football Basketball |
Over / Under |
227 Home Total (incl. overtime) |
American Football Basketball |
Over / Under |
228 Away Total (incl. overtime) |
American Football Basketball |
Over / Under |
231 2nd Half Handicap (incl. overtime) |
American Football Basketball |
Team A / Team B |
232 2nd Half Total (incl. overtime) |
American Football Basketball |
Over / Under |
234 Highest Scoring Quarter |
American Football | 920: First Quarter 921: Second Quarter 922: Third Quarter 923: Fourth Quarter 924: Equal |
235 1st Quarter Betting |
American Football Basketball |
Team A / Team B |
235 2nd Quarter Betting |
American Football Basketball |
Team A / Team B |
235 3rd Quarter Betting |
American Football Basketball |
Team A / Team B |
235 4th Quarter Betting |
American Football Basketball |
Team A / Team B |
236 1st Quarter Total Points |
American Football Basketball |
Over / Under |
236 2nd Quarter Total Points |
American Football Basketball |
Over / Under |
236 3rd Quarter Total Points |
American Football Basketball |
Over / Under |
236 4th Quarter Total Points |
American Football Basketball |
Over / Under |
251 Winner (incl. extra innings) |
Baseball | Team A / Team B |
256 Handicap (incl. extra innings) |
Baseball | Team A / Team B |
274 Innings 1 to 5 - 1x2 |
Baseball | Team A / Team B / Draw |
275 Innings 1 to 5 - Handicap |
Baseball | Team A / Team B |
276 Innings 1 to 5 - Total |
Baseball | Over / Under |
293 2nd Half - 1x2 (incl. overtime) |
American Football Basketball |
Team A / Team B / Draw |
294 2nd Half - Draw No Bet (incl. overtime) |
American Football Basketball |
Team A / Team B |
302 1st Quarter Money Line |
American Football Basketball |
Team A / Team B |
303 1st Quarter Spread |
American Football Basketball |
Team A / Team B |
303 2nd Quarter Spread |
American Football Basketball |
Team A / Team B |
303 3rd Quarter Spread |
American Football Basketball |
Team A / Team B |
303 4th Quarter Spread |
American Football Basketball |
Team A / Team B |
304 1st Quarter Total Points |
Basketball | Even / Odd |
304 2nd Quarter Total Points |
Basketball | Even / Odd |
304 3rd Quarter Total Points |
Basketball | Even / Odd |
304 4th Quarter Total Points |
Basketball | Even / Odd |
1124 Innings 1 to 5 - Winner |
Baseball | Team A / Team B |
6022 Will There Be a Safety? |
American Football | Yes / No |
6023 1st Half Result/2nd Half Result |
American Football | Team A / Tie Team B / Tie Team A / Team B Tie / Team A Tie / Team B Team B / Team A Tie / Tie Team A / Team A Team B / Team B |
6024 1st Team Touchdown |
American Football | 4: Team A 5: Team B 10008: No Touchdown |
6025 1st Scoring Play |
American Football | 10002: Team A Safety 10003: Team A Field Goal 10004: Team A Touchdown 10005: Team B Safety 10006: Team B Field Goal 10007: Team B Touchdown |
6026 Quarter Of 1st Field Goal |
American Football | First Quarter Second Quarter Third Quarter Fourth Quarter 10008: No Field Goal |
6027 Quarter Of 1st Touchdown |
American Football | First Quarter Second Quarter Third Quarter Fourth Quarter 10008: No Touchdown |
6028 Score All Quarters? |
American Football | 10009: Team A Yes 10010: Team A No 10011: Team B Yes 10012: Team B No |
6029 Total 1st Half Touchdowns |
American Football | 0, 1 , 2, 3, 4 or more |
6030 Total 2nd Half Touchdowns |
American Football | 0, 1 , 2, 3, 4 or more |
6031 1st Half Winning Margin |
American Football | Team A / Team B |
6032 Winning Margin |
American Football | Team A 1-6 pts Team A 7-12 pts Team A 13-18 pts Team A 19-24 pts Team A 25-30 pts Team A 31pts or more Team B 1-6 pts Team B 7-12 pts Team B 13-18 pts Team B 19-24 pts Team B 25-30 pts Team B 31pts or more |
8010 1st Half Winning Margin |
Basketball | Team A / Team B |
8011 Winning Margin |
Basketball | Team A / Team B |
TTL / Cache: | 300 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Market & Book Info Data Points: | Book Id | Book Name |
TTL / Cache: | 600 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Mapping Info Data Points: | External Id | Id |
Note: Pagination will often be required to pull all data within this feed. By default, the feed will return 200 events. |
TTL / Cache: | 1 second | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Competitor & Player Info Data Points: | Competitor Abbreviation Competitor Age Group Competitor Country Competitor Country Code |
Competitor Gender Competitor Id Competitor Name |
Competitor Qualifier Competitor Rotation Number Competitor Virtual |
Sport Event Info Data Points: | Sport Event Id Sport Event Replaced By |
Sport Event Resume Time Sport Event Start Time |
Sport Event Start Time Confirmed |
require 'uri' require 'net/http' require 'openssl' url = URI("https://api.sportradar.com/oddscomparison-prematch/trial/v2/en/competitions/sr:competition:109/schedules.xml?api_key={your_api_key}&start=0&limit=50") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body
import http.client conn = http.client.HTTPSConnection("api.sportradar.us") conn.request("GET", "/oddscomparison-prematch/trial/v2/en/competitions/sr:competition:109/schedules.xml?api_key={your_api_key}&start=0&limit=50") res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
curl -L GET 'api.sportradar.us/oddscomparison-prematch/trial/v2/en/competitions/sr:competition:109/schedules.xml?api_key={your_api_key}&start=0&limit=50'In addition to the URL parameters listed above, you can paginate the market information with one or more of the following optional query string parameters.
Note: Optional query string parameters must be added after your API key with an ampersand (&). |
Example: start=0 | | `limit` | Number to limit the number of results. Minimum value is 1, maximum value is 200.
Example: limit=50 | Return to top ## Competitor Mappings Provides competitor ID mapping between League Specific and General Sport ID types.
TTL / Cache: | 600 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Mapping Info Data Points: | External Id | Id |
require 'uri' require 'net/http' require 'openssl' url = URI("https://api.sportradar.us/oddscomparison-prematch/trial/v2/en/competitors/mappings.xml?api_key={your_api_key}&start=0&limit=1000") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body
import http.client conn = http.client.HTTPSConnection("api.sportradar.us") conn.request("GET", "/oddscomparison-prematch/trial/v2/en/competitors/mappings.xml?api_key={your_api_key}&start=0&limit=1000") res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
curl -L GET 'api.sportradar.us/oddscomparison-prematch/trial/v2/en/competitors/mappings.xml?api_key={your_api_key}&start=0&limit=1000'In addition to the URL parameters listed above, you can paginate the competitor information with one or more of the following optional query string parameters.
Note: Optional query string parameters must be added after your API key with an ampersand (&). |
Example: start=0 | | `limit` | Number to limit the number of results. Minimum value is 1, maximum value is 1000.
Example: limit=1000 | Return to top ## Daily Schedules Provides scheduling info for all events with odds available on a given sport and date.
Note: Pagination will often be required to pull all data within this feed. By default, the feed will return 200 events. |
TTL / Cache: | 1 second | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Competitor & Player Info Data Points: | Competitor Abbreviation Competitor Age Group Competitor Country Competitor Country Code |
Competitor Gender Competitor Id Competitor Name |
Competitor Qualifier Competitor Rotation Number Competitor Virtual |
Sport Event Info Data Points: | Sport Event Id Sport Event Replaced By |
Sport Event Resume Time Sport Event Start Time |
Sport Event Start Time Confirmed |
require 'uri' require 'net/http' require 'openssl' url = URI("https://api.sportradar.com/oddscomparison-prematch/trial/v2/en/sports/sr:sport:2/schedules/2023-03-31/schedules.xml?api_key={your_api_key}&start=0&limit=50") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body
import http.client conn = http.client.HTTPSConnection("api.sportradar.us") conn.request("GET", "/oddscomparison-prematch/trial/v2/en/sports/sr:sport:2/schedules/2023-03-31/schedules.xml?api_key={your_api_key}&start=0&limit=50") res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
curl -L GET 'api.sportradar.us/oddscomparison-prematch/trial/v2/en/sports/sr:sport:2/schedules/2023-03-31/schedules.xml?api_key={your_api_key}&start=0&limit=50'In addition to the URL parameters listed above, you can paginate the market information with one or more of the following optional query string parameters.
Note: Optional query string parameters must be added after your API key with an ampersand (&). |
Example: start=0 | | `limit` | Number to limit the number of results. Minimum value is 1, maximum value is 200.
Example: limit=50 | | `live` | Boolean value to return live/non-live markets
Example:
live=true
or live=false
|
Return to top
## Player Mappings
Provides player ID mapping between League Specific and General Sport ID types.
TTL / Cache: | 600 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Mapping Info Data Points: | External Id | Id |
require 'uri' require 'net/http' require 'openssl' url = URI("https://api.sportradar.us/oddscomparison-prematch/trial/v2/en/players/mappings.xml?api_key={your_api_key}&start=0&limit=1000") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body
import http.client conn = http.client.HTTPSConnection("api.sportradar.us") conn.request("GET", "/oddscomparison-prematch/trial/v2/en/players/mappings.xml?api_key={your_api_key}&start=0&limit=1000") res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
curl -L GET 'api.sportradar.us/oddscomparison-prematch/trial/v2/en/players/mappings.xml?api_key={your_api_key}&start=0&limit=1000'In addition to the URL parameters listed above, you can paginate the player information with one or more of the following optional query string parameters.
Note: Optional query string parameters must be added after your API key with an ampersand (&). |
Example: start=0 | | `limit` | Number to limit the number of results. Minimum value is 1, maximum value is 1000.
Example: limit=1000 | Return to top ## Sport Categories Returns a list of categories for a sport ID that have odds available.
TTL / Cache: | 300 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Category & Sport Info Data Points: | Category Country Code | Category Id | Category Name |
TTL / Cache: | 300 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Category & Sport Info Data Points: | Category Country Code | Category Id | Category Name |
Competition Info Data Points: | Competition Futures Competition Gender Competition Id |
Competition Markets Competition Name |
Competition Player Props |
TTL / Cache: | 600 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Mapping Info Data Points: | External Id | Id |
require 'uri' require 'net/http' require 'openssl' url = URI("https://api.sportradar.us/oddscomparison-prematch/trial/v2/en/sport_events/mappings.xml?api_key={your_api_key}&start=0&limit=1000") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body
import http.client conn = http.client.HTTPSConnection("api.sportradar.us") conn.request("GET", "/oddscomparison-prematch/trial/v2/en/sport_events/mappings.xml?api_key={your_api_key}&start=0&limit=1000") res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
curl -L GET 'api.sportradar.us/oddscomparison-prematch/trial/v2/en/sport_events/mappings.xml?api_key={your_api_key}&start=0&limit=1000'In addition to the URL parameters listed above, you can paginate the sport event information with one or more of the following optional query string parameters.
Note: Optional query string parameters must be added after your API key with an ampersand (&). |
Example: start=0 | | `limit` | Number to limit the number of results. Minimum value is 1, maximum value is 1000.
Example: limit=1000 | Return to top ## Sport Event Markets Returns a list of markets for a given sport event.
TTL / Cache: | 1 second | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Competitor & Player Info Data Points: | Competitor Abbreviation Competitor Age Group Competitor Country Competitor Country Code |
Competitor Gender Competitor Id Competitor Name |
Competitor Qualifier Competitor Rotation Number Competitor Virtual |
Sport Event Info Data Points: | Sport Event Id Sport Event Replaced By |
Sport Event Resume Time Sport Event Start Time |
Sport Event Start Time Confirmed |
Market & Book Info Data Points: | Book External Market Id Book External Sport Event Id |
Book Id Book Name Book Removed |
Market Id Market Is Live Market Name |
Outcome Info Data Points: | External Outcome Id Field Id Handicap Outcome Id Odds - American Odds - Decimal Odds - Fraction |
Open Handicap Open Odds - American Open Odds - Decimal Open Odds - Fraction Open Spread Open Total |
Player Id Player Name Removed Spread Total Trend Type |
require 'uri' require 'net/http' require 'openssl' url = URI("https://api.sportradar.com/oddscomparison-prematch/trial/v2/en/sport_events/sr:sport_event:27751520/sport_event_markets.xml?api_key={your_api_key}&live=true") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body
import http.client conn = http.client.HTTPSConnection("api.sportradar.us") conn.request("GET", "/oddscomparison-prematch/trial/v2/en/sport_events/sr:sport_event:27751520/sport_event_markets.xml?api_key={your_api_key}&live=true") res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
curl -L GET 'api.sportradar.us/oddscomparison-prematch/trial/v2/en/sport_events/sr:sport_event:27751520/sport_event_markets.xml?api_key={your_api_key}&live=true'In addition to the URL parameters listed above, you can limit the returned information to live/non-live markets.
Note: Optional query string parameters must be added after your API key with an ampersand (&). |
Example:
live=true
or live=false
|
Return to top
## Sport Event Markets Change Log
Returns a list of sport events with odds changes in the last 5 minutes.
TTL / Cache: | 1 second | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Change Log Info Data Points: | Change Id Change Type |
Sport Event Markets Odds Change | Status From Status To |
TTL / Cache: | 300 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Category & Sport Info Data Points: | Category Country Code | Category Id | Category Name |
Competition Info Data Points: | Stage Id Stage Description |
Stage Scheduled | Stage Scheduled End |
TTL / Cache: | 300 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Category & Sport Info Data Points: | Sport Id | Sport Name | Sport Type |
TTL / Cache: | 600 seconds | ||
Update Frequency: | As Necessary | ||
Content Type: | XML or JSON | ||
Mapping Info Data Points: | External Id | Id |
require 'uri' require 'net/http' require 'openssl' url = URI("https://api.sportradar.us/oddscomparison-prematch/trial/v2/en/stages/mappings.xml?api_key={your_api_key}&start=0&limit=1000") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body
import http.client conn = http.client.HTTPSConnection("api.sportradar.us") conn.request("GET", "/oddscomparison-prematch/trial/v2/en/stages/mappings.xml?api_key={your_api_key}&start=0&limit=1000") res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
curl -L GET 'api.sportradar.us/oddscomparison-prematch/trial/v2/en/stages/mappings.xml?api_key={your_api_key}&start=0&limit=1000'In addition to the URL parameters listed above, you can paginate the sport event information with one or more of the following optional query string parameters.
Note: Optional query string parameters must be added after your API key with an ampersand (&). |
Example: start=0 | | `limit` | Number to limit the number of results. Minimum value is 1, maximum value is 1000.
Example: limit=1000 | Return to top ## Frequently Asked Questions
Q: What format are date fields presented in?
A: We present date only values in the ISO 8601 standard format.
Example: 2013-04-03
For more information: https://en.wikipedia.org/wiki/ISO_8601
Q: What time zone are the date time fields presented in?
A: All of our Date/Time attributes are in UTC, presented in the ISO 8601 standard format.
ex: 2013-04-03T18:15:00+00:00
For more information: https://en.wikipedia.org/wiki/ISO_8601
Q: How can I find the values for various enum data points within the API?
A: For the most up-to-date values, please see the Schema section of the OpenAPI specification here:
https://api.sportradar.com/oddscomparison-prematch/trial/v2/openapi/swagger/index.htmlQ: What sports are covered?
A: The sports coverage varies depending on configured bookmakers offering in that particular point in time. To get a list of available sports call the Sports endpoint.
Q: What competitions are covered?
A: The competition coverage varies depending on configured bookmakers offering in that particular point in time. To get a list of all the competitions for a sport call the Sport Competitions endpoint.
Q: What happens if a bookmaker suspends/removes a market or outcome?
A: Markets that have been suspended/removed are indicated as removed="true" at the book level. Outcomes that have been suspended/removed are indicated by removed="true" at the outcome level.
Q: How do I tell what the closing odds/line was?
A: When a game goes live and the pre-match markets have been removed by the bookmaker, we add a removed="true" attribute at the book level and continue to display the last known odds which can be interpreted as the closing line.
Q: Why do some outcomes show nonsensical odds?
A: If an outcome is flagged as removed="true" and is displaying decimal odds of 1.00 then that means that the selection was never offered for betting by the bookmaker. This will often happen on "under" selections where the bookmaker does not want to offer the "under" side of the bet.
Q: How do I use the change log?
A: The change log will display a list of Sport Event IDs which have changed in the last 5 minutes using Unix timestamps. The actual time of the odds change is denoted by the "sport_event_markets_odds_change" attribute. This can be used to trigger calls to the Sport Event Markets endpoint.
Q: What is the refresh rate of the Prematch data?
A: We check for changes to the data every 60 seconds.
Q: Why would a player ID (ex. sr:player:830531) appear more than once in the Player Mappings endpoint?
A: A player may appear in multiple APIs with a separate ID unique to that API. For example, multiple ID mapping entries could occur from the American Football API to the NFL, NCAA Men’s Football, or USFL APIs.
Q: How do I locate the TTL (Time to Live)/cache on an API endpoint?
A: The cache (in seconds) can be accessed in the returned header information on each RESTful API call, under cache-control
.
ex. cache-control: max-age=1, public, s-maxage=1
or
cache-control: public, must-revalidate, max-age=120
Return to top
Docs Navigation
- Documentation
- Football (American Football)
- Football (Soccer)
- Australian Rules Football
- Baseball
- Basketball
- NBA v8
- NBA v7
- NBA v5
- NBA v4
- WNBA v8
- WNBA v7
- WNBA v4
- WNBA v3
- NBA G League v8
- NBA G League v7
- NBA G League v5
- NCAA Men's Basketball v8
- NCAA Men's Basketball v7
- NCAA Men's Basketball v4
- NCAA Men's Basketball v3
- NCAA Women's Basketball v8
- NCAA Women's Basketball v7
- NCAA Women's Basketball v3
- Global Basketball v2
- Global Basketball v1
- NBA Historical v1
- Combat Sports
- Cricket
- Editorial Content
- Golf
- Handball
- Hockey
- Images
- Insights
- Insights User Interface
- NBA Insights v1
- NHL Insights v1
- MLB Insights v1
- NFL Insights v1
- MLB Betting Splits v2
- MLB Betting Splits v1
- NBA Betting Splits v2
- NBA Betting Splits v1
- NCAAFB Betting Splits v2
- NCAAFB Betting Splits v1
- NCAAMB Betting Splits v2
- NCAAMB Betting Splits v1
- NFL Betting Splits v2
- NFL Betting Splits v1
- NHL Betting Splits v2
- NHL Betting Splits v1
- Soccer Betting Splits v2
- Soccer Betting Splits v1
- Odds
- Racing
- Rugby
- Tennis
- Widgets
- Baseline Sports Coverage
- Badminton v2
- Badminton v1
- Bandy v2
- Bandy v1
- Beach Soccer v2
- Beach Soccer v1
- Curling v2
- Curling v1
- Cycling v2
- Darts v2
- Darts v1
- Field Hockey v2
- Field Hockey v1
- Floorball v2
- Floorball v1
- Futsal v2
- Futsal v1
- Pesapallo v2
- Pesapallo v1
- Snooker v2
- Snooker v1
- Squash v2
- Squash v1
- Table Tennis v2
- Volleyball (Beach) v2
- Volleyball (Beach) v1
- Volleyball (Indoor) v2
- Volleyball (Indoor) v1
- Waterpolo v2
- Waterpolo v1
- Winter Sports v1