Skip to contents

Fixtures (schedule and results) of a season, home and away side by side.

Endpoint: GET https://embed-api.eui.connect.sportradar.com/v1/embed/{website_id}/fixtures

Scores are integers (the API sends strings); start_time_utc is a UTC POSIXct; start_time_local is the venue's wall-clock time as the API sends it (character: its zone, timezone, varies per row, so no single POSIXct zone fits). sdv-py keeps both naive.

Usage

atrium_fixtures(
  website_id,
  season = NULL,
  season_id = NULL,
  competition_id = NULL,
  entity_id = NULL,
  round_number = NULL,
  sub = NULL,
  locale = NULL
)

Arguments

website_id

(integer required): Site config id: which league site's widget this is (12 LNB France, 14 LNBP Mexico, 3 NBL1 Australia, 13 El Salvador, 22 Panama, 236 Austria, 326 Montenegro). Not a league id: one site serves several competitions.

season

(integer optional): Season END year (2026 = 2025-26 on LNB, site 12, whose own year is the START year; the calendar year on the other sites). Needs competition_id when several competitions share that year (see atrium_seasons()). Omit season and season_id for the site's default season.

season_id

(character optional): Season UUID (season_id in atrium_seasons()); sent as is, skipping the END-year lookup of season.

competition_id

(character optional): Competition UUID (competition_id in atrium_seasons()). Picks the season together with season, and is then not sent; with neither season nor season_id the API filters by it.

entity_id

(character optional): Team UUID (entity_id in atrium_teams() or any fixture row).

round_number

(integer optional): Round (journee) number to show; the pages that take it list their rounds.

sub

(character optional): Tab: "FIXTURES" (upcoming) or "RESULTS" (played). Omitted = the site's default tab.

locale

(character optional): Locale of the labels, e.g. "en-EN" or "fr-FR". Omitted = the site's own language. Ids and codes never change.

Value

A wehoop_data tibble, one row per fixture_id:

col_nametypedescription
website_idintegerSite config id the body came from (12 LNB, 14 LNBP, 3 NBL1, 13 El Salvador, 22 Panama, 236 Austria, 326 Montenegro), read from the body's links.self.
season_idcharacterSeason UUID the page is about (the site's default season when none was asked).
competition_idcharacterCompetition UUID of the season.
competition_namecharacterCompetition name in the site's language, e.g. Betclic ELITE or LIGA CALIENTE.MX LNBP.
season_end_yearintegerSeason END year (the sdv key): the site's year + 1 on LNB (site 12), the calendar year on the other registered sites; null when the site is unregistered, lists no seasons or the body has no season list.
fixture_idcharacterGame UUID (fixture); the key of every game frame and of the fixture_detail routes.
fixture_typecharacterKind of game as sent: REGULAR, PLAYOFF, ... (the set is open).
namecharacterFixture name as the site prints it (e.g. Paris - Lyon-Villeurbanne); null on LNBP.
roundcharacterRound of the game as the site words it, e.g. Journee: 30.
round_codecharacterRound code; null in every body seen.
poolcharacterPool the game belongs to; null when the competition has none.
seriescharacterPlayoff series the game belongs to as sent (JSON text when an object); null outside a series.
stage_codecharacterOpaque 30-hex stage code of the game; null in every body seen.
statuscharacterStatus code of the game, e.g. CONFIRMED (final), as sent.
status_labelcharacterStatus of the game as the site words it in its own language (e.g. Termine, Final).
start_time_utcPOSIXctScheduled start, naive datetime in UTC (the API sends no offset).
start_time_localcharacterScheduled start in the venue's local time, as the API sends it (YYYY-MM-DDTHH:MM:SS, no offset; timezone gives the zone, which varies per row).
timezonecharacterIANA time zone of the venue (e.g. Europe/Paris, Mexico/General) that start_time_local is in.
times_unconfirmedlogicalTrue while the start time is not final.
venuecharacterName of the arena where the game is played.
venue_idcharacterVenue UUID; joins no other route.
attendanceintegerSpectators at the game; null when not reported.
home_entity_idcharacterTeam UUID of the home team.
home_codecharacterShort code of the home team (e.g. PAB).
home_namecharacterName of the home team.
home_scoreintegerPoints scored by the home team (the API sends a string; Int64 here).
home_result_placeintegerResult place of the home team: 1 for the winner, 2 for the loser.
home_result_statuscharacterResult status of the home team's score, e.g. CONFIRMED.
home_drawlogicalTrue when the game ended level for the home team.
home_shootout_attemptscharacterShootout attempts of the home team as sent (an empty string becomes null).
home_secondary_scorecharacterSecondary score of the home team (unused in the samples; shown as text).
away_entity_idcharacterTeam UUID of the away team.
away_codecharacterShort code of the away team (e.g. PAB).
away_namecharacterName of the away team.
away_scoreintegerPoints scored by the away team (the API sends a string; Int64 here).
away_result_placeintegerResult place of the away team: 1 for the winner, 2 for the loser.
away_result_statuscharacterResult status of the away team's score, e.g. CONFIRMED.
away_drawlogicalTrue when the game ended level for the away team.
away_shootout_attemptscharacterShootout attempts of the away team as sent (an empty string becomes null).
away_secondary_scorecharacterSecondary score of the away team (unused in the samples; shown as text).

Details

Unofficial. This is the public endpoint the Sportradar Atrium / Synergy "Connect" widget calls from every visitor's browser (keyless; the host has no robots.txt). The data is Sportradar's and the leagues'. The wrappers read it on the caller's behalf, one request at least 1 s after the last to the host, and it is not republished as release assets. Keep crawls small and incremental.

Sites and seasons. website_id picks the league site; one site carries many competitions. Seasons are END years (season = 2026): the site's own year is the START year on LNB and the calendar year elsewhere, and a year can hold several competitions, so pair season with competition_id (see atrium_seasons()) or pass season_id. atrium_end_year() maps a site's own year to that END year, and atrium_season_id() finds the season UUID.

Columns are configured per site: a statistic one site omits is NA. A key the documented columns do not list is appended with an inferred type. Player and team ids (UUIDs, character) are shared across sites; the player stat tables carry names only, so person_id there is decoded from the widget link beside each name.

Errors (classed conditions, all inheriting wehoop_error): wehoop_no_data when the site has nothing for the request (HTTP 404, no such season, an empty fixture list, a game with no play-by-play yet, or a fixture id the site does not serve: an unknown id or a game of another site, which the API answers alike with an empty fixture); wehoop_bad_request for HTTP 400 / 422 or an argument that cannot be mapped (an ambiguous END year, season with season_id); wehoop_asset_fetch for any other failed fetch, an error / stub body, or a body that belongs to another site, type, season, game, player or team than the one asked for.

Examples

# \donttest{
  try(atrium_fixtures(website_id = 14))
#> ── Atrium fixtures from embed-api.eui.connect.sportradar.com ─── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 02:33:44 UTC
#> # A tibble: 214 × 40
#>    website_id season_id          competition_id competition_name season_end_year
#>         <int> <chr>              <chr>          <chr>                      <int>
#>  1         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  2         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  3         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  4         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  5         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  6         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  7         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  8         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#>  9         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#> 10         14 cc7d79f3-43ee-11f… 16be8396-24fb… LIGA CALIENTE.M…            2026
#> # ℹ 204 more rows
#> # ℹ 35 more variables: fixture_id <chr>, fixture_type <chr>, name <chr>,
#> #   round <chr>, round_code <chr>, pool <chr>, series <chr>, stage_code <chr>,
#> #   status <chr>, status_label <chr>, start_time_utc <dttm>,
#> #   start_time_local <chr>, timezone <chr>, times_unconfirmed <lgl>,
#> #   venue <chr>, venue_id <chr>, attendance <int>, home_entity_id <chr>,
#> #   home_code <chr>, home_name <chr>, home_score <int>, …
# }