Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Docs

Push Events

Returns detailed, real-time information on every match event

Syntax

https://api.sportradar.com/tennis/{access_level}/{version}/stream/events/subscribe

Parameters

ParameterDescription
access_levelDefines the access level of your API key

production, trial
versionVersion number of the API

v3
🔐

Authorization

Place your API key in the header for each request (x-api-key)


Optional Query String Parameters

By default, a Push feed will provide all data available for all in progress games. If needed, you can filter the data returned by including query strings.

Each query string parameter can be added with a preceding ampersand (&).

ParameterDescription
event_idEvent id

Example: event_id=point
formatFormat returned

json, xml

Example: format=json
sport_event_idSport Event id

Example: sport_event_id=sr:sport_event:27496678
season_idSeason id

Example: season_id=sr:season:81932
competition_idCompetition id

Example: competition_id=sr:competition:16126


Code Samples

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.sportradar.com/tennis/trial/v3/stream/events/subscribe")

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)
request["x-api-key"] = "{your_api_key}"  # Replace with your actual key

response = http.request(request)
puts response.read_body
import requests
import json

headers = {
    'x-api-key': 'your_api_key'  # Replace with your actual key
}

r = requests.get(
    "https://api.sportradar.com/tennis/trial/v3/stream/events/subscribe",
    headers=headers,
    allow_redirects=False
)

redirect_url = r.headers['Location']
r = requests.get(redirect_url, stream=True, headers=headers)

for line in r.iter_lines():
    # filter out keep-alive new lines
    if line:
        decoded_line = line.decode('utf-8')
        print(json.loads(decoded_line))
curl -L -X GET 'https://api.sportradar.com/tennis/trial/v3/stream/events/subscribe' \
  -H 'x-api-key: {your_api_key}'

Samples with Query String Params

require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.sportradar.com/tennis/trial/v3/stream/events/subscribe?&format=json&competition_id=sr:competition:16126")

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)
request["x-api-key"] = "{your_api_key}"  # Replace with your actual key

response = http.request(request)
puts response.read_body
import requests
import json

headers = {
    'x-api-key': 'your_api_key'  # Replace with your actual key
}

r = requests.get("https://api.sportradar.com/tennis/trial/v3/stream/events/subscribe",
    params = {'format': 'json', 'competition_id': 'sr:competition:16126'},
    allow_redirects=False)

redirect_url = r.headers['Location']
r = requests.get(redirect_url, stream=True)

for line in r.iter_lines():
    # filter out keep-alive new lines
    if line:
        decoded_line = line.decode('utf-8')
        print(json.loads(decoded_line))
curl -L -X GET 'api.sportradar.com/tennis/trial/v3/stream/events/subscribe?&format=json&competition_id=sr:competition:16126'
  -H 'x-api-key: {your_api_key}'


Response Sample

The above commands return json like this.



Data Points

Metadata
AttributeParent ElementTypeDescription
channelmetadataStringSport of the stream connection

ex. tennis
competition_idmetadataStringUnique Id of a competition

ex. sr:competition:34630
event_idmetadataStringDescription of a push timeline event

ex. point or period_score
formatmetadataStringFormat type of the response

json, xml
season_idmetadataStringUnique Id of a season

ex. sr:season:121215
sport_event_idmetadataStringUnique Id of a sport event

ex. sr:sport_event_id:51950313
sport_idmetadataStringUnique Id of a sport

ex. sr:sport:5
fromheartbeatIntegerUnix timestamp of the beginning of a heartbeat message

ex. 1722267631
toheartbeatIntegerUnix timestamp of the end of a heartbeat message

ex. 1722267636
intervalheartbeatIntegerInterval of a heartbeat message in seconds
typeheartbeatStringType of heartbeat message

ex. events, statistics
packageheartbeatStringPackage of a heartbeat message

ex. tennis-v3
Game State
AttributeParent ElementTypeDescription
advantagesport_event_status - game_stateStringSignifies the competitor with the advantage in the game

home, away
away_scoresport_event_status - game_stateIntegerScore for the away competitor in a game

ex. 0, 15, 30, 40
home_scoresport_event_status - game_stateIntegerScore for the home competitor in a game

ex. 0, 15, 30, 40
last_point_resultsport_event_status - game_stateStringResult of the last point in a game

server_winner, receiver_winner, ace, double_fault
point_typesport_event_status - game_stateStringType of point scored

game, break, set, match
servingsport_event_status - game_stateStringSignifies the competitor currently serving

home, away
tie_breaksport_event_status - game_stateBooleanSignifies a match is in a tie break when true
Sport Event Status
AttributeParent ElementTypeDescription
away_scoresport_event_statusIntegerTotal score for the away competitor in a match
decided_by_fedsport_event_statusBooleanSignifies a match result was decided by the federation when true. For example, incomplete due to crowd disruption
home_scoresport_event_statusIntegerTotal score for the home competitor in a match
match_statussport_event_statusStringStatus within a match (sport event). Provides more detail on the state of a match when live than status

ex. not_started, interrupted, 1st_set, walkover

See our FAQ for a complete list of statuses and their definitions.
count_abandonedsport_event_statusBooleanSignifies a match was abandoned by a scout when true
statussport_event_statusStringStatus of a sport event

ex. not_started, live, ended, closed

See our FAQ for a complete list of statuses and their definitions.
winner_idsport_event_statusStringUnique ID of the match winner

ex. sr:competitor:138546
winning_reasonsport_event_statusStringWinning reason description for a match

ex. walkover
Period Scores
AttributeParent ElementTypeDescription
away_scoresport_event_status - period_scoresIntegerAway competitor set score
away_tiebreak_scoresport_event_status - period_scoresIntegerAway competitor tiebreak set score
home_scoresport_event_status - period_scoresIntegerHome competitor set score
home_tiebreak_scoresport_event_status - period_scoresIntegerHome competitor tiebreak set score
numbersport_event_status - period_scoresIntegerSet number
typesport_event_status - period_scoresStringPeriod type

ex. set
Match Timeline
AttributeParent ElementTypeDescription
away_scoreeventIntegerAway competitor point score

ex. 0, 15, 30, 40
competitoreventStringDesignation of a competitor for a timeline event

home, away
first_serve_faulteventBooleanSignifies the first serve of a point was a fault when true
home_scoreeventIntegerHome competitor point score

ex. 0, 15, 30, 40
ideventIntegerUnique ID for a timeline event

ex. 1804315823
periodeventIntegerSet number of a timeline event. Populates for each period_score event.
period_nameeventStringPeriod name of a timeline event, appearing at the beginning of a period

ex. 2nd_set
reasoneventStringReason for a match_suspended event

toilet_break, bad_weather, trainer_called
resulteventStringResult of an event

ace, double_fault, server_won, receiver_won, unknown
resulteventStringResult of an event

ace, double_fault, server_won, receiver_won, unknown
servereventStringServer for a timeline event

home, away
timeeventDate-timeTimestamp of a timeline event

ex. 2024-04-16T20:49:49+00:00
typeeventStringType of timeline event. See our Tennis OpenAPI for a complete list of event types under enum_event_type

ex. match_started, point, match_suspended
updatedeventBooleanSignifies this event has been updated since its original entry when true
updated_timeeventDate-timeTimestamp of an updated time entry

ex. 2024-04-22T17:17:24+00:00