Betradar - the betting arm of Sportradar

Page tree

Betradar - the betting arm of Sportradar

Skip to end of metadata
Go to start of metadata

Table of contents:

This section details information about our “Live Information” (when a match is live), and “Resulting information” (when the match is finished). These can be accessed with the /timeline.xml and /summary.xml endpoints.

HTTP

Endpoint

Description

GET

sports/(lang)/sport_events/(id)/summary.xml

Information summary about a particular event (pre-match, live or post-match). Pre-match information is very brief. Post-match includes the results.

GET

sports/(lang)/sport_events/(id)/timeline.xml

Information about the timeline of a particular event (pre-match, live or post-match). Pre-match information is very brief. Post-match includes the results.

/timeline.xml example
<match_timeline>
<sport_event id="sr:match:14704749" scheduled="2018-08-20T16:30:00+00:00" start_time_tbd="false">
    <tournament_round type="cup" name="cupround"/>
    <season id="sr:season:54377" name="DFB Pokal 18/19" start_date="2018-08-17" end_date="2019-05-26" year="18/19" tournament_id="sr:tournament:217"/>
    <tournament id="sr:tournament:217" name="DFB Pokal">
        <sport id="sr:sport:1" name="Soccer"/>
        <category id="sr:category:30" name="Germany" country_code="DEU"/>
    </tournament>
    <competitors>
        <competitor id="sr:competitor:2532" name="Energie Cottbus" country="Germany" country_code="DEU" abbreviation="COT" qualifier="home">
            <reference_ids>
                <reference_id name="betradar" value="11135"/>
            </reference_ids>
        </competitor>
        <competitor id="sr:competitor:2538" name="SC Freiburg" country="Germany" country_code="DEU" abbreviation="SCF" qualifier="away">
            <reference_ids>
                <reference_id name="betradar" value="11095"/>
            </reference_ids>
        </competitor>
    </competitors>
    <venue id="sr:venue:13" name="Stadion der Freundschaft" capacity="22528" city_name="Cottbus" country_name="Germany" map_coordinates="51.751263,14.344669" country_code="DEU"/>
</sport_event>
<sport_event_conditions>
    <referee id="sr:referee:70951" name="Osmers, Harm" nationality="Germany"/>
    <venue id="sr:venue:13" name="Stadion der Freundschaft" capacity="22528" city_name="Cottbus" country_name="Germany" map_coordinates="51.751263,14.344669" country_code="DEU"/>
    <weather_info pitch="good" weather_conditions="medium"/>
</sport_event_conditions>
<sport_event_status status="closed" match_status="ap" home_score="5" away_score="7" winner_id="sr:competitor:2538" status_code="4" match_status_code="120">
    <period_scores>
        <period_score home_score="0" away_score="0" type="regular_period" number="1" match_status_code="6"/>
        <period_score home_score="1" away_score="1" type="regular_period" number="2" match_status_code="7"/>
        <period_score home_score="1" away_score="1" type="overtime" match_status_code="40"/>
        <period_score home_score="3" away_score="5" type="penalties" match_status_code="50"/>
    </period_scores>
</sport_event_status>
<coverage_info level="gold" live_coverage="true" covered_from="tv">
    <coverage includes="basic_score"/>
    <coverage includes="key_events"/>
    <coverage includes="detailed_events"/>
    <coverage includes="lineups"/>
    <coverage includes="commentary"/>
</coverage_info>
<timeline>
    <event id="451022004" type="match_started" time="2018-08-20T16:31:40+00:00"/>
    <event id="451022002" type="period_start" time="2018-08-20T16:31:40+00:00" period="1" period_name="1st half" match_status_code="6"/>
    <event id="451022864" type="corner_kick" time="2018-08-20T16:35:19+00:00" match_time="4" match_clock="3:38" team="home" x="95" y="5"/>
    <event id="451023900" type="corner_kick" time="2018-08-20T16:39:52+00:00" match_time="9" match_clock="8:12" team="away" x="5" y="90">
        <player id="sr:player:319861" name="Waldschmidt, Luca"/>
    </event>
    <event id="451026456" type="corner_kick" time="2018-08-20T16:51:02+00:00" match_time="20" match_clock="19:21" team="away" x="5" y="90">
        <player id="sr:player:319861" name="Waldschmidt, Luca"/>
    </event>
    <event id="451030590" type="yellow_card" time="2018-08-20T17:09:36+00:00" match_time="38" match_clock="37:55" team="away">
        <player id="sr:player:319861" name="Waldschmidt, Luca"/>
    </event>
    <event id="451031914" type="yellow_card" time="2018-08-20T17:14:03+00:00" match_time="42" team="home">
        <player id="sr:player:169183" name="Startsev, Andrej"/>
    </event>
    <event id="451032760" type="period_score" time="2018-08-20T17:16:43+00:00" period="1" home_score="0" away_score="0" match_status_code="6"/>
    <event id="451032764" type="break_start" time="2018-08-20T17:16:43+00:00" period_name="Pause" match_status_code="31"/>
    <event id="451036854" type="period_start" time="2018-08-20T17:34:49+00:00" period="2" period_name="2nd half" match_status_code="7"/>
    <event id="451037196" type="score_change" time="2018-08-20T17:36:16+00:00" match_time="47" match_clock="46:27" team="home" x="78" y="53" home_score="1" away_score="0">
        <goal_scorer id="sr:player:770433" name="Freitas, Marcelo"/>
        <assist id="sr:player:132155" type="primary" name="Zimmer, Maximilian"/>
    </event>
    <event id="451037692" type="corner_kick" time="2018-08-20T17:38:29+00:00" match_time="49" match_clock="48:40" team="away" x="5" y="90">
        <player id="sr:player:319861" name="Waldschmidt, Luca"/>
    </event>
    <event id="451040540" type="corner_kick" time="2018-08-20T17:50:52+00:00" match_time="62" match_clock="61:03" team="away" x="5" y="90">
        <player id="sr:player:319861" name="Waldschmidt, Luca"/>
    </event>
    <event id="451041302" type="corner_kick" time="2018-08-20T17:54:32+00:00" match_time="65" match_clock="64:44" team="away" x="5" y="90">
        <player id="sr:player:142231" name="Gunter, Christian"/>
    </event>
    <event id="451044014" type="corner_kick" time="2018-08-20T18:07:34+00:00" match_time="78" match_clock="77:44" team="away" x="5" y="90">
        <player id="sr:player:38502" name="Gondorf, Jerome"/>
    </event>
    <event id="451044596" type="yellow_card" time="2018-08-20T18:09:56+00:00" match_time="80" team="home">
        <player id="sr:player:132589" name="Scheidhauer, Kevin"/>
    </event>
    <event id="451046632" type="yellow_card" time="2018-08-20T18:18:05+00:00" match_time="89" match_clock="88:15" team="away">
        <player id="sr:player:49639" name="Hofler, Nicolas"/>
    </event>
    <event id="451047070" type="score_change" time="2018-08-20T18:20:19+00:00" match_time="89" team="away" x="19" y="55" home_score="1" away_score="1">
        <goal_scorer id="sr:player:22566" name="Frantz, Mike"/>
        <assist id="sr:player:228981" type="primary" name="Kleindienst, Tim"/>
    </event>
    <event id="451047800" type="corner_kick" time="2018-08-20T18:24:04+00:00" match_time="90" match_clock="90:00" stoppage_time="5" team="away" x="5" y="90"/>
    <event id="451048024" type="corner_kick" time="2018-08-20T18:25:15+00:00" match_time="90" match_clock="90:00" stoppage_time="6" team="home" x="95" y="90"/>
    <event id="451048066" type="break_start" time="2018-08-20T18:25:27+00:00" period_name="Awaiting extra" match_status_code="32"/>
    <event id="451049228" type="period_start" time="2018-08-20T18:31:00+00:00" period="11" period_name="1st extra" match_status_code="41"/>
    <event id="451050964" type="score_change" time="2018-08-20T18:39:29+00:00" match_time="98" team="away" x="10" y="47" home_score="1" away_score="2">
        <goal_scorer id="sr:player:20826" name="Petersen, Nils"/>
    </event>
    <event id="451051512" type="yellow_card" time="2018-08-20T18:41:56+00:00" match_time="101" match_clock="100:56" team="away">
        <player id="sr:player:20826" name="Petersen, Nils"/>
    </event>
    <event id="451052010" type="score_change" time="2018-08-20T18:44:12+00:00" match_time="103" team="home" x="87" y="48" home_score="2" away_score="2">
        <goal_scorer id="sr:player:142768" name="Viteritti, Fabio"/>
    </event>
    <event id="451052626" type="break_start" time="2018-08-20T18:47:01+00:00" period_name="Extra time halftime" match_status_code="33"/>
    <event id="451053180" type="period_start" time="2018-08-20T18:49:37+00:00" period="12" period_name="2nd extra" match_status_code="42"/>
    <event id="451054398" type="corner_kick" time="2018-08-20T18:56:38+00:00" match_time="113" match_clock="112:00" team="home" x="95" y="90"/>
    <event id="451054490" type="corner_kick" time="2018-08-20T18:57:03+00:00" match_time="113" match_clock="112:25" team="home" x="95" y="90"/>
    <event id="451054740" type="yellow_card" time="2018-08-20T18:59:05+00:00" match_time="114" team="away">
        <player id="sr:player:280009" name="Holer, Lucas"/>
    </event>
    <event id="451055870" type="break_start" time="2018-08-20T19:06:01+00:00" period_name="Awaiting penalties" match_status_code="34"/>
    <event id="451056680" type="period_start" time="2018-08-20T19:11:00+00:00" period="20" period_name="Penalties" match_status_code="50"/>
    <event id="451056766" type="score_change" time="2018-08-20T19:11:27+00:00" team="away" x="10" y="48" home_score="2" away_score="3"/>
    <event id="451056896" type="score_change" time="2018-08-20T19:12:05+00:00" team="home" x="88" y="48" home_score="3" away_score="3"/>
    <event id="451057018" type="score_change" time="2018-08-20T19:12:40+00:00" team="away" x="10" y="48" home_score="3" away_score="4"/>
    <event id="451057128" type="score_change" time="2018-08-20T19:13:19+00:00" team="home" x="88" y="48" home_score="4" away_score="4"/>
    <event id="451057224" type="score_change" time="2018-08-20T19:13:56+00:00" team="away" x="10" y="48" home_score="4" away_score="5"/>
    <event id="451057354" type="score_change" time="2018-08-20T19:14:41+00:00" team="home" x="88" y="48" home_score="5" away_score="5"/>
    <event id="451057474" type="score_change" time="2018-08-20T19:15:16+00:00" team="away" x="10" y="48" home_score="5" away_score="6"/>
    <event id="451057794" type="score_change" time="2018-08-20T19:16:32+00:00" team="away" x="10" y="48" home_score="5" away_score="7"/>
    <event id="451057816" type="match_ended" time="2018-08-20T19:16:36+00:00"/>
    <event id="451255508" type="yellow_card" time="2018-08-21T12:57:08+00:00" match_time="104" team="home">
        <player id="sr:player:132155" name="Zimmer, Maximilian"/>
    </event>
</timeline>
</match_timeline>
/summary.xml example
<match_summary>
<sport_event id="sr:match:14704749" scheduled="2018-08-20T16:30:00+00:00" start_time_tbd="false">
    <tournament_round type="cup" name="cupround"/>
    <season id="sr:season:54377" name="DFB Pokal 18/19" start_date="2018-08-17" end_date="2019-05-26" year="18/19" tournament_id="sr:tournament:217"/>
    <tournament id="sr:tournament:217" name="DFB Pokal">
        <sport id="sr:sport:1" name="Soccer"/>
        <category id="sr:category:30" name="Germany" country_code="DEU"/>
    </tournament>
    <competitors>
        <competitor id="sr:competitor:2532" name="Energie Cottbus" country="Germany" country_code="DEU" abbreviation="COT" qualifier="home">
            <reference_ids>
                <reference_id name="betradar" value="11135"/>
            </reference_ids>
        </competitor>
        <competitor id="sr:competitor:2538" name="SC Freiburg" country="Germany" country_code="DEU" abbreviation="SCF" qualifier="away">
            <reference_ids>
                <reference_id name="betradar" value="11095"/>
            </reference_ids>
        </competitor>
    </competitors>
    <venue id="sr:venue:13" name="Stadion der Freundschaft" capacity="22528" city_name="Cottbus" country_name="Germany" map_coordinates="51.751263,14.344669" country_code="DEU"/>
</sport_event>
<sport_event_conditions>
    <referee id="sr:referee:70951" name="Osmers, Harm" nationality="Germany"/>
    <venue id="sr:venue:13" name="Stadion der Freundschaft" capacity="22528" city_name="Cottbus" country_name="Germany" map_coordinates="51.751263,14.344669" country_code="DEU"/>
    <weather_info pitch="good" weather_conditions="medium"/>
</sport_event_conditions>
<sport_event_status status="closed" match_status="ap" home_score="5" away_score="7" winner_id="sr:competitor:2538" status_code="4" match_status_code="120">
    <period_scores>
        <period_score home_score="0" away_score="0" type="regular_period" number="1" match_status_code="6"/>
        <period_score home_score="1" away_score="1" type="regular_period" number="2" match_status_code="7"/>
        <period_score home_score="1" away_score="1" type="overtime" match_status_code="40"/>
        <period_score home_score="3" away_score="5" type="penalties" match_status_code="50"/>
    </period_scores>
</sport_event_status>
<coverage_info level="gold" live_coverage="true" covered_from="tv">
    <coverage includes="basic_score"/>
    <coverage includes="key_events"/>
    <coverage includes="detailed_events"/>
    <coverage includes="lineups"/>
    <coverage includes="commentary"/>
</coverage_info>
<statistics>
    <totals>
        <teams>
            <team id="sr:competitor:2532" name="Energie Cottbus">
                <statistics cards="3" corner_kicks="4" yellow_cards="3"/>
            </team>
            <team id="sr:competitor:2538" name="SC Freiburg">
                <statistics cards="4" corner_kicks="7" yellow_cards="4"/>
            </team>
        </teams>
    </totals>
    <periods>
        <period name="1st half">
            <teams>
                <team id="sr:competitor:2532" name="Energie Cottbus">
                    <statistics cards="1" corner_kicks="1" yellow_cards="1"/>
                </team>
                <team id="sr:competitor:2538" name="SC Freiburg">
                    <statistics cards="1" corner_kicks="2" yellow_cards="1"/>
                </team>
            </teams>
        </period>
        <period name="2nd half">
            <teams>
                <team id="sr:competitor:2532" name="Energie Cottbus">
                    <statistics cards="1" corner_kicks="1" yellow_cards="1"/>
                </team>
                <team id="sr:competitor:2538" name="SC Freiburg">
                    <statistics cards="1" corner_kicks="5" yellow_cards="1"/>
                </team>
            </teams>
        </period>
        <period name="1st extra">
            <teams>
                <team id="sr:competitor:2532" name="Energie Cottbus">
                    <statistics cards="0" corner_kicks="0" yellow_cards="0"/>
                </team>
                <team id="sr:competitor:2538" name="SC Freiburg">
                    <statistics cards="1" corner_kicks="0" yellow_cards="1"/>
                </team>
            </teams>
        </period>
        <period name="2nd extra">
            <teams>
                <team id="sr:competitor:2532" name="Energie Cottbus">
                    <statistics cards="1" corner_kicks="2" yellow_cards="1"/>
                </team>
                <team id="sr:competitor:2538" name="SC Freiburg">
                    <statistics cards="1" corner_kicks="0" yellow_cards="1"/>
                </team>
            </teams>
        </period>
    </periods>
</statistics>
</match_summary>

Live match information reports the current information about a particular ongoing match (only matches with status live, suspended, or ended should be here – status in closed could be temporarily present here).

Name

Description

id

The ID of the event (match, race).

competitors

The sub elements list the competitors of this sport event. Typically, team-based match the competitors will be two teams.

venue

Where the sport event takes place.

sport_event_status

Contains current status of the match, and basic score information'.

status

Reflects the high-level status of the match itself. See section 4.5.4 for more information.

reporting

active/suspended/stopped – only present when status = live or suspended. Describes if Betradar has someone reporting directly from the game (either in venue, or using TV). If the status is suspended, Betradar has temporarily lost contact with the scout.

match_status

Sports specific - the current status/time/period of the game.

home_score

Sports specific - the current score for the home-team in a team-based match.

away_score

Sports specific - the current score for the away-team in a team-based match.

match_time

Sports specific - tells how long the event has been ongoing according to the match clock (which depending on the sport may stop or not).

remaining_time

Sports specific - describes how much time is left in the match.

clock_stopped

Sports specific - only applicable if the sport has a match clock – true if the match clock is stopped.

winner_id

Set when there is a winner and set to the ID of the winning competitor.

coverage_info.level

Can be bronze/silver/gold and for soccer also platinum. Describes at a high-level how much datapoints that will be collected for a particular event. Bronze is the lowest level. Platinum is the highest level. Exactly what is covered is different for different sports. Bronze typically means just the overall score and possibly the period-scores. Gold is normally the most detailed level Betradar offers and Silver is in between.

coverage_info.live_coverage

True if Betradar plans to have live coverage of the event. (Note this does not necessarily mean Betradar will offer LiveOdds for the events only that we will have live sports data for the match – see liveodds booking status for whether the match will be covered by LiveOdds)

Events in the timeline endpoint

The following events are available in the timeline endpoint, if applicable to the sport and if Betradar is covering the match live.

Event Type

Description

match_started

When the match starts

period_start

When each period/quarter/set/frame starts

break_start

When a period/quarter ends and a break between periods start

match_ended

When the match ended (note that scores and statistics may still be updated after this event. This is a signal that the match ended, not that the data-entry for the match is complete – what the sport_event_status status getting set to closed for the latter)

period_score

For set-based sports (Tennis, Volleybal etc.) period_score reflects the current set score. For non-set-based sports (soccer, basketball etc.), the period_score is reported once at the end of periods – listing the number of points/goals made by each team during that period.

score_change

Any time the top-level score changes.

For non-set-based sports (soccer, basketball, icehockey etc.) this means every time someone scores (i.e. goal / point)

For set-based sports, a score change event is sent after the end of each period reflecting who won the past set.

Additional soccer events

In addition, for soccer the following event types are used:

Event Type

Description

corners

A corner kick happened

yellow_card

The referee has officially cautioned a player

red_card

The referee is sending off the player

yellow_red_card

The referee has cautioned a player a second time causing a send-off

Sportradar offers more detailed events for many of the sports in the Media Sports APIs offered separately. There are timeline endpoints in the individual Media Sports API packages too that uses the exact same format, but with a lot more details. Clients that wish to have access to these details can obtain them from the other Sports API packages for a fee. Please contact your Betradar representative to discuss the details.

Results information

Results information provides the same information as for live information, but only when the status of the match is closed (ID 4): <sport_event_status status="4”.

XML example
<match_summary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://bsa.betradar.com/v1" generated_at="2016-02-10T10:04:17+00:00"xsi:schemaLocation="http://bsa.betradar.com/v1 /schemas/v1/soccer/match_summary.xsd">
  <sport_event id="sr:match:8761304" scheduled="2016-02-05T00:00:00+00:00">
    <tournament_round type="table" number="2"/>
    <tournament id="sr:tournament:231" name="Primera Division">
      <sport id="sr:sport:1" name="Soccer"/>
      <category id="sr:category:281" name="Venezuela"/>
    </tournament>
    <competitors>
      <competitor id="sr:competitor:6231" name="DVO Tachira" qualifier="home"/>
      <competitor id="sr:competitor:6237" name="Zamora FC" qualifier="away"/>
    </competitors>
  </sport_event>
  <venue id="sr:venue:20" name="Pueblo Nuevo" capacity="38755" city_name="San Cristobal" country_name="Venezuela" map_coordinates="7.786641,-72.197746"/>
  <sport_event_status status="4" home_score="1" away_score="2" winner_id="sr:competitor:6237">
    <period_scores>
      <period_score home_score="1" away_score="1" type="period" number="1"/>
      <period_score home_score="0" away_score="1" type="period" number="2"/>
    </period_scores>
  </sport_event_status>
</match_summary>

Resulting coverage per tournament

The level of details Betradar provides per match depends on the coverage-level for a particular tournament/league/competition.

To find out exactly what we guarantee per tournament/league/completion, you can use the Betradar Coverage document: 

https://www.betradar.com/wp-content/uploads/sites/4/2014/10/Betradar_Coverage.pdf

How-to:

First look up the Sport you are interested in, then find the tournament/league/competition you are looking for. Look at the level number in the resulting-column. Now scroll-down to the resulting table, there you will find the Sport and the level number. Now you see what resulting information we guarantee to provide for that tournament.

Sport event status in the API

 Sport Event Status is an element provided in the summary and timeline endpoints in the API. Status is the only required attribute, this attribute describes the current status of the sport-event itself. This element contains the high-level status of the match including status, score etc.

Note: Sometimes live-only matches will never get the status element set to status=”closed” in the API, they will stay in status=”ended”. This is because matches are put in “closed” when production has prematch-resulted these matches. So therefor, if they are only live covered (see scope of the producers), they will never be “closed”, only “ended”.

The status attribute

The status attribute is an enumeration in the API and has a finite set of states as outlined in the state diagram below:



The following table describes the sport_event_status attributes in detail:

State

Description

not_started

The match has not started yet. (Alternatively, Betradar has no live coverage of the event, the match has started but we do not know this. The match will then move to closed when Betradar enters the match results)

live

The match is live

ended

The match has finished, but results have not been confirmed yet.

closed

The match is finished, results confirmed, and no more changes are expected to the results (only for events covered by pre-match producer).

cancelled

The sport event (either the actual match, or this Betradar representation of the match) has been cancelled

delayed

The sport event start has been delayed from scheduled start (most often seen for tennis).

interrupted

The sport event has been temporarily interrupted. Interruption is expected to be just a few minutes.

suspended

The sport event looks to be interrupted for a longer period than a few minutes

postponed

The sport event has been postponed and will be played at a later date. Typically, if the later date is more than 3 days away. This sport event id will be cancelled and replaced by a new id. If the match is postponed to just one or two days from now, the same sport-id will change its state just before match start.

abandoned 

Used to indicate that Betradar has no live coverage or has lost live coverage but match is still likely ongoing.

Note: The top 4 states (not_started, live, ended, closed) are the only event statuses that are being sent out in the odds_change message. The rest of the states are only available in the API.

Relationship to odds_change sport_event_status

When providing live odds for a live match, the odds_change message normally contains the sport_event_status element to provide an accurate representation of what the status was of the match when the odds were generated.

Due to caching and timing differences, the API and the odds_change message may temporarily report different values. For live matches the status as reported in the odds_change should always be used if available. The API is more likely to lag behind the odds_change message, but it could occasionally be ahead (The difference should always be less than a handful of seconds).

The odds_change message represents statuses using integer codes due to performance reasons, whereas in the API string representations of the statuses are provided for clarity. However, the meaning of the states is the same. In particular, for the status attribute the odds_change message uses only a few of the possible states available in the API, so the states in the API is a superset of those used in the odds_change message. The states not used in odds_change are typically stopped states where no live odds are provided, and hence no odds_change messages sent (states such as delayed, interrupted, postponed, cancelled, etc.).

AggregateHomeScore/Away event

The aggregate_home_score and aggregate_away_score is present for two-legged ties (i.e. soccer). aggregate_*_score represents the total score for each team, summing up the results of the first and second match. Please note that aggregate_*_score is only present in the second match of the two-legged-tie-series.