Skip to content

One match by id

GET
/api/matches/{id}
curl --request GET \
--url https://foxleague.ai/api/matches/1

A 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.
id
required
integer format: int32

The match id.

Success or a refusal: read success (the refusals are in the description).

Media type application/json
object
code

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.

string | null
data

The answer. Present when success is true.

object
away_badge

The away team’s badge URI; null for an AI team or a team without one.

string | null
away_elo_at_match
required

The away side’s rating when the match was created.

integer format: int32
away_penalty

Away goals in a penalty shootout; null without a shootout and until the result is public.

integer | null format: int32
away_score

Away goals; null until the result is public.

integer | null format: int32
away_team_name
required

Away team name.

string
away_user_id

The away player’s account id; null for an AI team.

integer | null format: int32
created_at
required

When the match kicked off (RFC 3339). For a tournament or challenge match, its scheduled kickoff.

string format: date-time
decided_by

regular, extra_time or penalties; null until the result is public.

string | null
developer_mode
required

true for a match of a developer tournament, played by uploaded team code.

boolean
distribute_tx_hash

The transaction that paid the tournament’s prizes; null otherwise.

string | null
finished_at

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.

string | null format: date-time
home_badge

The home team’s badge URI; null for a team without one.

string | null
home_elo_at_match
required

The home side’s rating when the match was created.

integer format: int32
home_penalty

Home goals in a penalty shootout; null without a shootout and until the result is public.

integer | null format: int32
home_score

Home goals; null until the result is public.

integer | null format: int32
home_team_name
required

Home team name.

string
home_user_id

The home player’s account id.

integer | null format: int32
id
required

The match id.

integer format: int32
last_known_cycle
required

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.

integer format: int32
match_type
required

casual, ranked or tournament (1v1 challenges included).

string
playback_started_at

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.

string | null format: date-time
rcg_ready_at

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.

string | null format: date-time
results_applied
required

true once the result has counted: ratings, records, XP and condition.

boolean
status
required

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.

string
tm_game_id

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.

integer | null format: int64
total_frames

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.

integer | null format: int32
tournament_id

The tournament id; null for a ranked or casual match.

integer | null format: int64
tournament_max_teams

The tournament’s size, 2 for a 1v1 challenge; null for a ranked or casual match.

integer | null format: int32
error

Why the request was refused, in plain words. Present when success is false.

string | null
success
required

true when the request did what it asked. false is a refusal: read error.

boolean
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.

Media type text/plain
string
Example
Session expired or invalid

A server read failed. The body is empty.