Liveness probe of the unofficial sync server: status, message and the server's own timestamp.
Endpoint: GET https://easl.joshricha.com/api/v1/health
Value
A hoopR_data tibble: Liveness probe of the unofficial sync server: status, message and the server's own
timestamp. An empty answer raises hoopR_no_data; the columns are always these, in this order (sportsdataverse-py
easl_health):
| col_name | type | description |
| status | character | Server status: 'OK'. |
| message | character | Human-readable status text ('EASL Basketball API is running'). |
| timestamp | character | Server time, ISO 8601 with milliseconds and Z (UTC). |
Details
WARNING: UNOFFICIAL THIRD-PARTY INTERMEDIARY. These wrappers read easl.joshricha.com/api/v1, an Express server run by an individual. It is not EASL's and not Sportradar's: it mirrors Sportradar DataCore (organisation b1e0z) into SQLite and serves it keyless, and it can change or vanish without notice. Its routes, field names (steak, facebook_username) and sync freshness are the proxy author's. A first-party DataCore feed needs credentials this package does not have. The host serves no robots.txt (404) and states no terms; the runtime waits at least 1 s before every request, retries included, and honours Retry-After. Payloads are not redistributed as release assets.
Seasons are END years (2026 = EASL 25-26). The server's season key is the START year; the runtime reads the season list, maps the END year to the DataCore seasonId and defaults to the ACTIVE season. Four editions exist (2023-24 to 2026-27). The server defaults to the active season on /matches, /standings and /leaders; the runtime always sends the resolved seasonId. A season is two calendar years: group by season_id, not by the year of the tip-off.
Finished games only: the game routes first read the fixture and refuse (
hoopR_asset_fetch) one that is not CONFIRMED with two scores, a box score whose player points do not add up to the score (the server serves one-team, four-row boxes for some games), a play-by-play that does not end on the final score in its highest period (4 or more, and the last period of the period table), and team totals that disagree with the score. For the ACTIVE season's fixture lists the runtime reads /health: a server clock more than a day from yours, or a game still SCHEDULED more than a day after its tip-off, means the mirror has stalled (hoopR_asset_fetch). That proves the mirror kept up with the games played, not that a game is final upstream.Ids: every DataCore id is a UUID v1 string. team_id = entityId, player_id = personId; fixture_number (YYSSNNN) is null on every 2023-24 fixture;
*_row_idcolumns are the sync server's own integers, not DataCore ids. The fixture's competitors come in arbitrary order: readhome_*/away_*, which the parsers take from isHome.No shot x/y, no game clock and no lineups exist on this server. The play-by-play text always says 'missed' for field goals and 'Free throw K of M made' for free throws, made or not: use points_scored (the change of the event team's running score), which lags on a minority of events. 301 of 2,444 sampled box rows are players who did not play (null minutes and counting stats; points are 0); player_box.played tells them apart. easl_player_stats ignores a season filter: it is the career line over every season. Names: nameFullLocal is the English display name and nameFullLatin the native-script name, so the columns are name and name_native.
Errors are classed conditions, all inheriting
hoopR_error:hoopR_no_data(HTTP 404, an empty list or leaders object, a team or player without games),hoopR_bad_request(a malformed id, or a season that is not one of the server's END years, raised before the request that would use it) andhoopR_asset_fetch(any other failure: any non-2xx, including the server's HTTP 400 / 422 and the HTTP 500 it answers for an unknown fixture, which is not retried; an error envelope; a game that is not finished or whose box score or play-by-play is incomplete; a stalled sync on the active season; a body for another game, season, team or player than the one asked for). Wrappers raise; they never warn and return an empty frame.
See also
Other EASL Functions:
easl_game(),
easl_leaders(),
easl_pbp(),
easl_player(),
easl_player_box(),
easl_player_stats(),
easl_players(),
easl_schedule(),
easl_seasons(),
easl_standings(),
easl_team(),
easl_team_box(),
easl_team_box_by_period(),
easl_team_leaders(),
easl_team_schedule(),
easl_team_stats(),
easl_teams()
