Skip to contents

Play-by-play of a finished game in delivered order, with the running score and the points each event scored.

Endpoint: GET https://easl.joshricha.com/api/v1/matches/{fixture_id}/playbyplay

Usage

easl_pbp(fixture_id)

Arguments

fixture_id

(required) DataCore fixture (game) UUID v1, e.g. '10af8fd4-106e-11f1-960b-5798087c7aa3' (the 2025-26 EASL Championship): the 'id' of easl_schedule rows. Only finished (CONFIRMED) games are served; a malformed id is hoopR_bad_request.

Value

A hoopR_data tibble: Play-by-play of a finished game in delivered order, with the running score and the points each event scored. An empty answer raises hoopR_no_data; the columns are always these, in this order (sportsdataverse-py easl_pbp):

col_nametypedescription
fixture_idcharacterDataCore fixture (game) UUID v1 from the request.
event_numberinteger1-based position of the event in the delivered array, which is the only usable order (sequence is not monotonic).
sequenceintegerEvent sequence number from the scorer's system: NOT in game order (the delivered array order is), and not always unique within a game (35 of 106 games repeat values).
period_idintegerPeriod: 1-4 regulation, 11 = first overtime (12 = second overtime appears in team totals).
period_labelcharacterQ1-Q4 for periods 1-4; OT1, OT2 ... for overtimes (the server numbers the first overtime 11 in team totals; periods 5-10 are read as OT{n-4}, unverified).
event_timecharacterWhen the event was logged, wall-clock 'YYYY-MM-DDTHH:MM:SS.mmm' in UTC with no zone marker. There is NO game clock (time remaining) in this feed.
received_timedoubleWhen the event was received upstream, Unix epoch MILLISECONDS (UTC): a median 1.6 s after eventTime (5th to 95th percentile -0.6 s to +55 s over 30,874 events); meaning unverified.
descriptioncharacterEvent text. Shots read <2pt/3pt> <shot type> missed[ (modifier)] for EVERY field-goal attempt, made or not: the word 'missed' is always there and the result is the change of scores (see the divergence notes). Free throws read 'Free throw K of M made' (M = 1, 2 or 3) for every attempt, also always 'made'. The shot types, modifiers and other events are listed under "Event descriptions".
team_idcharacterDataCore team UUID v1 of the acting team; null on events with no team.
player_idcharacterDataCore person UUID v1 of the acting player; null for team events (team rebounds, timeouts).
player_namecharacterPlayer display name in 'FAMILY Given' form with the family name upper-cased (OSAKABE Taiki), in Latin script. Absent on some rows.
player_name_latincharacterAlternative name: equal to nameFullLocal for 257 of 552 players, otherwise null; never non-Latin in the observed data. Absent on some rows.
jersey_numbercharacterJersey number as a string; null on one event. Absent on some rows.
team_scoreintegerThe event team's running score as of this event (the running score lags the true score on a minority of events); null on events with no team.
opponent_scoreintegerThe other team's running score as of this event; null on events with no team.
points_scoredintegerPoints the event team gained since the previous event (change of its running score): the made shot's value. The description always says 'missed', so count points here, not strings; the running score lags on some games, which shifts points to a later event.
team1_idcharacterFirst team of the body's teams array (the fixture's competitors order, arbitrary home/away); team1_score belongs to it.
team1_scoreintegerRunning score of team1_id as of this event.
team2_idcharacterSecond team of the body's teams array; team2_score belongs to it.
team2_scoreintegerRunning score of team2_id as of this event.

Details

Source, terms of use, request pacing, seasons, ids, coverage and error classes of this family: see the notes in easl_health().

Event descriptions

  • Shot types: Jump shot, Layup, Driving layup, Pull-up jump shot, Floating jump shot, Tip-in, Fadeaway, Step-back jump shot, Turnaround jump shot, Hook shot, Dunk, Reverse layup, Alley-oop, Alley-oop dunk, Euro step (none on 23 rows: '3pt missed').

  • Shot modifiers: in the paint, second chance, from turnover, fast break, blocked.

  • Other events (complete list; N FT = free throws awarded): Assist; Block; Steal; Substitution in; Substitution out; Defensive rebound; Defensive rebound (team); Offensive rebound; Offensive rebound (team); Foul; Foul (N FT); Foul drawn; Foul drawn (N FT); Personal foul; Personal foul (N FT); Personal foul (shooting); Personal foul (shooting) (N FT); Offensive foul; Offensive foul (charge); Technical foul; Technical foul (N FT); Bench technical foul; Bench technical foul (N FT); Coach technical foul; Coach technical foul (N FT); Unsportsmanlike foul; Unsportsmanlike foul (N FT); Disqualifying foul (N FT); Jump ball won; Jump ball won (held ball); Jump ball lost; Full timeout; Short timeout; Media timeout; Commercial timeout; Officials timeout; Officials timeout (mandatory); Coach's challenge (pending); Coach's challenge (complete) - upheld; Coach's challenge (complete) - overturned; Instant replay review (complete) - upheld; Instant replay review (complete) - overturned; Turnover - Bad pass; Ball handling; Traveling; Out of bounds; Offensive; Backcourt violation; Double dribble; Carrying; Offensive goaltending; 3 second violation; 5 second violation; 5 second violation (team); 8 second violation (team); Shot clock violation (team); Other; Other (team).

Examples

# \donttest{
  try(easl_pbp(fixture_id = "10af8fd4-106e-11f1-960b-5798087c7aa3"))
#> ── EASL Play-by-Play from easl.joshricha.com ──────────────────── hoopR 3.2.0 ──
#> ℹ Data updated: 2026-10-31 21:28:15 UTC
#> # A tibble: 495 × 20
#>    fixture_id            event_number sequence period_id period_label event_time
#>    <chr>                        <int>    <int>     <int> <chr>        <chr>     
#>  1 10af8fd4-106e-11f1-9…            1        7         1 Q1           2026-03-2…
#>  2 10af8fd4-106e-11f1-9…            2        9         1 Q1           2026-03-2…
#>  3 10af8fd4-106e-11f1-9…            3       20         1 Q1           2026-03-2…
#>  4 10af8fd4-106e-11f1-9…            4       21         1 Q1           2026-03-2…
#>  5 10af8fd4-106e-11f1-9…            5       31         1 Q1           2026-03-2…
#>  6 10af8fd4-106e-11f1-9…            6       29         1 Q1           2026-03-2…
#>  7 10af8fd4-106e-11f1-9…            7       37         1 Q1           2026-03-2…
#>  8 10af8fd4-106e-11f1-9…            8       53         1 Q1           2026-03-2…
#>  9 10af8fd4-106e-11f1-9…            9       54         1 Q1           2026-03-2…
#> 10 10af8fd4-106e-11f1-9…           10       43         1 Q1           2026-03-2…
#> # ℹ 485 more rows
#> # ℹ 14 more variables: received_time <dbl>, description <chr>, team_id <chr>,
#> #   player_id <chr>, player_name <chr>, player_name_latin <chr>,
#> #   jersey_number <chr>, team_score <int>, opponent_score <int>,
#> #   points_scored <int>, team1_id <chr>, team1_score <int>, team2_id <chr>,
#> #   team2_score <int>
# }