One match by id
const url = 'https://foxleague.ai/api/matches/1';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://foxleague.ai/api/matches/1A ranked or casual match’s teams, type, status, timing and ratings at kickoff, with the score once its result is public: once it is applied, when its broadcast is watched to the end or shortly after it could have ended. A tournament or challenge match answers Match not found like an unknown id, before and after its broadcast: it is read by its public id (GET /api/public/tournament-match/{id}).
Who: anyone, with more for a session. For a ranked or casual match whose result is not applied, its two players read its progress (status, tm_game_id, the timings, last_known_cycle, total_frames); anyone else reads status: "live" ("error" for a match that could not be played) with those fields null or 0. A session header that is present but invalid answers 401.
Refusals:
Match not found: no such match; a tournament or challenge match.
Authorizations
Section titled “Authorizations ”- None
- session
Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The match id.
Responses
Section titled “ Responses ”Success or a refusal: read success (the refusals are in the description).
object
A machine-readable reason next to error, set only where the caller must act differently. tx_pending: the payment was not refused but could not be verified yet; keep the transaction hash and confirm again with the same hash, never pay twice.
The answer. Present when success is true.
object
The away team’s badge URI; null for an AI team or a team without one.
The away side’s rating when the match was created.
Away goals in a penalty shootout; null without a shootout and until the result is public.
Away goals; null until the result is public.
Away team name.
The away player’s account id; null for an AI team.
When the match kicked off (RFC 3339). For a tournament or challenge match, its scheduled kickoff.
regular, extra_time or penalties; null until the result is public.
true for a match of a developer tournament, played by uploaded team code.
The transaction that paid the tournament’s prizes; null otherwise.
When the match ended (RFC 3339). For a tournament or challenge match, its kickoff plus the match’s length. Null before that; null for anyone but the two players while a ranked or casual match’s result is not applied.
The home team’s badge URI; null for a team without one.
The home side’s rating when the match was created.
Home goals in a penalty shootout; null without a shootout and until the result is public.
Home goals; null until the result is public.
Home team name.
The home player’s account id.
The match id.
The last viewer position saved for the match, in cycles (10 per second); 0 for anyone but the two players while a ranked or casual match’s result is not applied.
casual, ranked or tournament (1v1 challenges included).
When the broadcast of a ranked or casual match started playing (RFC 3339); null for a tournament or challenge match and before that; null for anyone but the two players while a ranked or casual match’s result is not applied.
When the replay became available (RFC 3339). For a tournament or challenge match, the end of its broadcast. Null before that; null for anyone but the two players while a ranked or casual match’s result is not applied.
true once the result has counted: ratings, records, XP and condition.
finished once the match is over; error when it could not be played; another value while it is being played. Anyone but the two players reads live (or error) for a ranked or casual match whose result is not applied.
The match server’s game id; null without a recording; null for anyone but the two players while a ranked or casual match’s result is not applied.
Cycles in the recording; null when unknown; null for anyone but the two players while a ranked or casual match’s result is not applied.
The tournament id; null for a ranked or casual match.
The tournament’s size, 2 for a 1v1 challenge; null for a ranked or casual match.
Why the request was refused, in plain words. Present when success is false.
true when the request did what it asked. false is a refusal: read error.
Example
{ "data": { "away_badge": null, "away_elo_at_match": 1261, "away_penalty": null, "away_score": 1, "away_team_name": "Night Owls", "away_user_id": 77, "created_at": "2026-10-01T09:12:03Z", "decided_by": "regular", "developer_mode": false, "distribute_tx_hash": null, "finished_at": "2026-10-01T09:14:40Z", "home_badge": "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi/badge.png", "home_elo_at_match": 1254, "home_penalty": null, "home_score": 2, "home_team_name": "Red Foxes", "home_user_id": 42, "id": 5123, "last_known_cycle": 6000, "match_type": "ranked", "playback_started_at": null, "rcg_ready_at": "2026-10-01T09:14:39Z", "results_applied": true, "status": "finished", "tm_game_id": 90412, "total_frames": 6000, "tournament_id": null, "tournament_max_teams": null }, "success": true}No valid session. The body is plain text: Missing Authorization header, Invalid Authorization format, Invalid session token or Session expired or invalid. Sign in again.
Example
Session expired or invalidA server read failed. The body is empty.