Skip to contents

One game: officials, team totals, per-player match stats, goals, penalties (one row; lists as JSON text).

Usage

khl_webcaster_event(event_id, locale = "en", return_parsed = TRUE)

Arguments

event_id

Required. Webcaster event id (khl_webcaster_events id), not the khl.ru game id.

locale

Response language: en or ru. One of en, ru.

return_parsed

Logical. TRUE (default) returns the parsed fastRhockey_data tibble; FALSE returns the raw JSON body as a list (betting fields and the caller's IP removed).

Value

A fastRhockey_data tibble (159 columns; zero rows with the same columns when the payload is empty), or the raw body as a list when return_parsed = FALSE. Raises fastRhockey_no_data (nothing there, or an unknown season / stage), fastRhockey_asset_fetch (an error envelope, an answer for another id than the one asked, or a failed fetch) and fastRhockey_bad_request (an invalid argument or an HTTP 400 / 422).

col_nametypesdescription
game_state_keycharacterGame state key (finished, ...)
periodintegerPeriod number (box score: 0 = the whole game; 4+ = overtime)
hdlogicalTrue when the broadcast is in HD
idintegerWebcaster id of the arena object (webcaster key space); no khl.ru counterpart in the body
seasoncharacterSeason END year (2026 = 2025-26)
stage_idintegerWebcaster stage id (its own id space; not a khl.ru tournament id)
type_idintegerWebcaster event type code
commentatorlogicalTrue when the broadcast has a commentator
likes_enabledlogicalTrue when likes are enabled on the broadcast page
is_vertical_videologicalTrue when the broadcast video is vertical (portrait)
khl_idintegerkhl.ru game id of the event object (site key space): the join key to khl-rest
arena_idintegerkhl.ru arena id
arena_capacityintegerArena seating capacity
arena_phonecharacterArena phone number as published
arena_websitecharacterArena website URL
arena_namecharacterArena (city) name, from data.ARENAS
arena_addresscharacterArena street address (English with locale=en)
arena_citycharacterArena city (English with locale=en)
arena_imagecharacterArena photo URL on khl.ru
arena_geo_latnumericArena latitude, decimal degrees
arena_geo_longnumericArena longitude, decimal degrees
team_a_idintegerWebcaster id of the team_a object (webcaster key space); join to khl.ru through its khl_id
team_a_khl_idintegerkhl.ru club id of the team_a object (site key space): the join key to khl-rest
team_a_imagecharacterHome team logo URL (webcaster thumbnail)
team_a_namecharacterHome team name (English with locale=en)
team_a_locationcharacterHome team city / region (English with locale=en)
team_a_shotsintegerHome shots on goal
team_a_gfintegerHome team goals (final)
team_a_ppgintegerPower-play goals
team_a_shgintegerShort-handed goals
team_a_ppcintegerCount; equals the team's own penalties in the sample (5 for 10 PIM), so probably penalties taken. UNVERIFIED
team_a_vbrintegerFaceoffs won ('vbr' from Russian vbrasyvaniya; = game/text fow)
team_a_pimintegerPenalty minutes
team_a_total_puck_control_timenumericTeam puck-control time, decimal MINUTES (21.81 = 21:48)
team_a_total_distance_travellednumericDistance skated by the team, km (= game/text dtA)
team_a_offensive_blue_line_crossings_countintegerOffensive blue-line crossings
team_a_top_playerscharacterHome game leaders (hardest shot, ...), JSON list with the webcaster and khl.ru player ids
team_a_start_fivescharacterHome starting lineup, JSON list of players (webcaster id, khl_id, jersey, role)
team_a_playerscharacterHome game roster, JSON list of players (webcaster id, khl_id, jersey, role)
team_a_activelogicalTrue when the home team is active in the webcaster app
team_b_idintegerWebcaster id of the team_b object (webcaster key space); join to khl.ru through its khl_id
team_b_khl_idintegerkhl.ru club id of the team_b object (site key space): the join key to khl-rest
team_b_imagecharacterVisitor team logo URL (webcaster thumbnail)
team_b_namecharacterVisitor team name (English with locale=en)
team_b_locationcharacterVisitor team city / region (English with locale=en)
team_b_shotsintegerVisitor shots on goal
team_b_gfintegerVisitor team goals (final)
team_b_ppgintegerPower-play goals
team_b_shgintegerShort-handed goals
team_b_ppcintegerCount; equals the team's own penalties in the sample (3 for 6 PIM), so probably penalties taken. UNVERIFIED
team_b_vbrintegerFaceoffs won ('vbr' from Russian vbrasyvaniya; = game/text fow)
team_b_pimintegerPenalty minutes
team_b_total_puck_control_timenumericTeam puck-control time, decimal MINUTES (21.81 = 21:48)
team_b_total_distance_travellednumericDistance skated by the team, km (= game/text dtA)
team_b_offensive_blue_line_crossings_countintegerOffensive blue-line crossings
team_b_top_playerscharacterVisitor game leaders (hardest shot, ...), JSON list with the webcaster and khl.ru player ids
team_b_start_fivescharacterVisitor starting lineup, JSON list of players (webcaster id, khl_id, jersey, role)
team_b_playerscharacterVisitor game roster, JSON list of players (webcaster id, khl_id, jersey, role)
team_b_activelogicalTrue when the visitor team is active in the webcaster app
quotescharacterVideo clips (webcaster quotes)
goalscharacterGoals of the game, JSON list (time in game seconds, score, status, author, assistants)
violationscharacterPenalties in order
other_events_with_both_teamscharacterOther games between the two teams, JSON list of webcaster events
social_tagscharacterSocial-media hashtags of the game, JSON list
freelogicalTrue when the broadcast is free to watch (no subscription)
yandex_rightslogicalTrue when Yandex holds rights to the broadcast (unverified)
yandex_idcharacterYandex video id of the broadcast (m-prefixed)
match_idintegerkhl.ru game id as a string (= khl_id)
balancer_typecharacterVideo delivery type (record = archived broadcast)
event_or_quote_type_namecharacterVideo category label in Russian (Arkhiv = archive)
outer_stage_idintegerkhl.ru tournament id of the event's stage (= stage.khl_id)
stage_namecharacterStage label (Regular 2025/2026)
parent_idintegerUndocumented provider field parent_id; carried as sent.
namecharacterName (English with locale=en)
mref1characterReferee 1, name in Russian
mref2characterReferee 2, name in Russian
lref1characterLinesman 1, name in Russian
lref2characterLinesman 2, name in Russian
announcecharacterUndocumented provider field announce; carried as sent.
viewscharacterBroadcast view count as display text ('7,579')
stage_typecharacterStage type: regular or playoff
audio_trackscharacterBroadcast audio tracks, JSON list of id / title (main, intersound)
image_bigcharacterLarge broadcast thumbnail image URL
locationcharacterHome team city / region (English with locale=en)
start_at_dayintegerGame day start (midnight Moscow time), unix seconds
start_atintegerStart time, unix milliseconds
event_start_atintegerPuck-drop time, unix milliseconds
end_atintegerEnd time, unix milliseconds
ticketscharacterUndocumented provider field tickets; carried as sent.
text_eventscharacterSummary text events only; no shot-level play-by-play
not_regularlogicalTrue for a game outside the regular schedule (False in the captured bodies; unverified)
infographicscharacterScoreboard overlay label of the broadcast (With scoreboard)
infographics_enabledlogicalTrue when the broadcast carries the scoreboard overlay
scorecharacterScore after the goal 'a:b'
condensed_game_idintegerWebcaster id of the condensed_game object (webcaster key space); no khl.ru counterpart in the body
condensed_game_namecharacterCondensed-game video title
condensed_game_start_tsintegerCondensed-game video start time, unix milliseconds
condensed_game_m3u8_urlcharacterCondensed-game video HLS (m3u8) stream URL; signed and expiring
condensed_game_feed_urlcharacterCondensed-game video webcaster player feed URL; signed and expiring
condensed_game_iframe_urlcharacterCondensed-game video embeddable player (iframe) URL
condensed_game_iframe_codecharacterCondensed-game video embed HTML (an iframe tag)
condensed_game_finish_tsintegerCondensed-game video end time, unix milliseconds
condensed_game_image_urlcharacterCondensed-game video thumbnail image URL
condensed_game_descriptioncharacterCondensed-game video description text (HTML-escaped; Russian goal list on highlights)
condensed_game_audio_trackscharacterCondensed-game video audio tracks, JSON list of id / title (main, intersound)
condensed_game_is_vertical_videologicalCondensed-game video: True when the video is vertical (portrait)
condensed_game_stage_idintegerCondensed-game video: webcaster stage id (its own id space; not a khl.ru tournament id)
condensed_game_freelogicalCondensed-game video: True when free to watch (no subscription)
condensed_game_yandex_rightslogicalCondensed-game video: True when Yandex holds rights to the video (unverified)
condensed_game_yandex_idcharacterCondensed-game video: Yandex video id of the broadcast (m-prefixed)
condensed_game_match_idintegerkhl.ru game id as a string (= khl_id)
condensed_game_balancer_typecharacterCondensed-game video: video delivery type (record = archived broadcast, file = clip)
condensed_game_event_or_quote_type_namecharacterCondensed-game video: video category label (Arkhiv = archive, Khaylayty = highlights)
condensed_game_outer_stage_idintegerkhl.ru tournament id of the event's stage (= stage.khl_id)
condensed_game_stage_namecharacterCondensed-game video: stage label (Regular 2025/2026)
highlight_idintegerWebcaster id of the highlight object (webcaster key space); no khl.ru counterpart in the body
highlight_namecharacterHighlights video title
highlight_start_tsintegerHighlights video start time, unix milliseconds
highlight_m3u8_urlcharacterHighlights video HLS (m3u8) stream URL; signed and expiring
highlight_feed_urlcharacterHighlights video webcaster player feed URL; signed and expiring
highlight_iframe_urlcharacterHighlights video embeddable player (iframe) URL
highlight_iframe_codecharacterHighlights video embed HTML (an iframe tag)
highlight_finish_tsintegerHighlights video end time, unix milliseconds
highlight_image_urlcharacterHighlights video thumbnail image URL
highlight_descriptioncharacterHighlights video description text (HTML-escaped; Russian goal list on highlights)
highlight_audio_trackscharacterHighlights video audio tracks, JSON list of id / title (main, intersound)
highlight_is_vertical_videologicalHighlights video: True when the video is vertical (portrait)
highlight_stage_idintegerHighlights video: webcaster stage id (its own id space; not a khl.ru tournament id)
highlight_freelogicalHighlights video: True when free to watch (no subscription)
highlight_yandex_rightslogicalHighlights video: True when Yandex holds rights to the video (unverified)
highlight_yandex_idcharacterHighlights video: Yandex video id of the broadcast (m-prefixed)
highlight_match_idintegerkhl.ru game id as a string (= khl_id)
highlight_balancer_typecharacterHighlights video: video delivery type (record = archived broadcast, file = clip)
highlight_event_or_quote_type_namecharacterHighlights video: video category label (Arkhiv = archive, Khaylayty = highlights)
highlight_outer_stage_idintegerkhl.ru tournament id of the event's stage (= stage.khl_id)
highlight_stage_namecharacterHighlights video: stage label (Regular 2025/2026)
outer_urlcharacterkhl.ru page of the game (the game_id and tournament_id are in its path)
m3u8_urlcharacterBroadcast HLS (m3u8) stream URL; empty without rights
feed_urlcharacterBroadcast webcaster player feed URL; empty without rights
iframe_urlcharacterBroadcast embeddable player (iframe) URL
iframe_codecharacterBroadcast embed HTML (an iframe tag)
scores_first_periodcharacter1st-period score 'a:b'
scores_second_periodcharacter2nd-period score 'a:b'
scores_third_periodcharacter3rd-period score 'a:b'
scores_overtimecharacterOvertime score 'a:b' (null if none)
scores_bullittcharacterShootout score 'a:b' (null if none); 'bullitt' is Russian for shootout
this_pair_stat_events_countintegerHead-to-head: games between the two teams on record (scope unverified)
this_pair_stat_team_a_wins_countintegerHead-to-head: home team wins in those games
this_pair_stat_team_a_goals_countintegerHead-to-head: home team goals in those games
this_pair_stat_team_a_points_countintegerHead-to-head: home team standings points in those games
this_pair_stat_team_b_wins_countintegerHead-to-head: visitor team wins in those games
this_pair_stat_team_b_goals_countintegerHead-to-head: visitor team goals in those games
this_pair_stat_team_b_points_countintegerHead-to-head: visitor team standings points in those games
transaction_typescharacterPaid video products (app store)
sscorecharacterUndocumented provider field sscore; carried as sent.
commentators_namescharacterBroadcast commentators, comma-separated
transactionscharacterUndocumented provider field transactions; carried as sent.
has_videologicalTrue when the broadcast has a video
geo_errorcharacterUndocumented provider field geo_error; carried as sent.

Details

Endpoint: GET https://khl.api.webcaster.pro/api/khl_mobile/event_v2.json.

The webcaster API is keyless JSON. Neither backend takes a year: season (the END year, 2026 = 2025/26) and stage are mapped to the webcaster stage id through the season table of khl_webcaster_stages() (cached for the R session), or pass stage_id. Honours getOption("fastRhockey.proxy"); betting fields and the caller's IP are removed from every body.

Ids and counts are integers (sdv-py Int64); a column holding values past 2^31 (epoch milliseconds) is returned as a whole-number double.

At least one second is left between two requests to a host.

Owner flag (sanctions). The KHL and its webcaster platform are run by Russian operators, some clubs by sanctioned state companies. Fetching on your own machine is fine; any published data release, hosted mirror or redistribution needs owner (sanctions / legal) sign-off first.

Examples

# \donttest{
  try(khl_webcaster_event(event_id = 2786714))
#> ── KHL Webcaster Event from khl.api.webcaster.pro ──── fastRhockey 1.0.0.9000 ──
#> ℹ Data updated: 2026-10-13 01:55:03 UTC
#> # A tibble: 1 × 159
#>   game_state_key period hd         id season    stage_id type_id commentator
#>   <chr>           <int> <lgl>   <int> <chr>        <int>   <int> <lgl>      
#> 1 finished           -1 TRUE  2786714 2025/2026      370      18 TRUE       
#> # ℹ 151 more variables: likes_enabled <lgl>, is_vertical_video <lgl>,
#> #   khl_id <int>, arena_id <int>, arena_capacity <int>, arena_phone <chr>,
#> #   arena_website <chr>, arena_name <chr>, arena_address <chr>,
#> #   arena_city <chr>, arena_image <chr>, arena_geo_lat <dbl>,
#> #   arena_geo_long <dbl>, team_a_id <int>, team_a_khl_id <int>,
#> #   team_a_image <chr>, team_a_name <chr>, team_a_location <chr>,
#> #   team_a_shots <int>, team_a_gf <int>, team_a_ppg <int>, team_a_shg <int>, …
# }