Invitations of a League + Knockout tournament
const url = 'https://foxleague.ai/api/tournaments/1/invitations';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/tournaments/1/invitationsReturns the invitations of a League + Knockout tournament: its snapshot date, the start of each of the three invitation waves (at the snapshot, at half of the time to the registration deadline and at three quarters of it), the moment from which an accepted team can no longer leave, every invitation by wave with its state and the leaderboard frozen at the snapshot (rank, team, rating at the snapshot, whether the team could be invited). With a session, mine is your own invitation when you have one. Everything here is known before the tournament starts.
Who: anyone. mine needs a signed-in player.
Refusals:
Tournament not found: no tournament has this id.This tournament has no invitations: only a League + Knockout tournament invites.
Authorizations
Section titled “Authorizations ”- None
- session
Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The tournament 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 registration deadline: the invitations of the last wave expire then.
true once the leaderboard is frozen.
Every invitation, by wave.
One invitation of a League + Knockout tournament.
object
When it was accepted or declined. null while unanswered.
The team’s badge: an ipfs:// URI or a base64 image. null without one.
When it expires unanswered: the next wave’s start, the deadline for the last wave.
When it was sent.
true when the team joined and then left.
invited (no answer yet), accepted (the team joined), declined (declined, also a team that joined and then left: see left) or expired (the next wave started first).
The invited team’s name.
The invited player’s id.
The wave that sent it, 1 to 3.
Your own invitation to this tournament.
object
true when you can accept it now: it is pending, the tournament takes entries and on a paid tier your wallet is on the contract’s invite list. It is false while your team has a seat or an invitation in another League + Knockout tournament that is not over: refusal then says so.
When it expires unanswered.
Why a pending invitation cannot be accepted now: the sentence the join would answer while your team has a seat or an invitation in another League + Knockout tournament that is not over (one at a time). null otherwise.
invited, accepted, declined or expired.
The wave that sent it, 1 to 3.
The seats of the tournament.
From this moment, the third wave’s start, an accepted team cannot leave.
The teams the second and third waves passed over, by wave then rank: checked again at that wave, each was no longer eligible.
One team a later invitation wave passed over, with the reason.
object
Its place on the leaderboard at the snapshot.
Why it was passed over at that wave: no_recent_match (no match in the 14 days before the wave), in_league_knockout (a seat or an invitation in another League + Knockout tournament that is not over), no_full_squad (not 11 starters and 7 substitutes, all owned and not listed for sale) or not_eligible (the account cannot be invited).
The team’s name.
The player’s id.
The wave that passed the team over, 2 or 3.
The leaderboard frozen at the snapshot, by rank. Empty before the snapshot.
One team of the leaderboard frozen at the snapshot.
object
true when the team could be invited.
Its rating at the snapshot. The pot draw seeds the tournament by it.
Its place on the leaderboard at the snapshot.
Why it could not: no_recent_match (no match in the 14 days before the snapshot), in_league_knockout (a seat or an invitation in another League + Knockout tournament that is not over), no_full_squad (not 11 starters and 7 substitutes, all owned and not listed for sale) or not_eligible (the account cannot be invited). null for an eligible team.
The team’s name.
The player’s id.
When the leaderboard is frozen and the first invitation wave goes out.
The tournament id.
When each of the three waves starts: the snapshot, half of the time to the deadline and three quarters of it.
The waves that have run, 1 to 3.
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": { "deadline": "2026-11-09T18:00:00Z", "frozen": true, "invitations": [ { "answered_at": "2026-11-01T20:05:00Z", "badge": null, "expires_at": "2026-11-05T18:00:00Z", "invited_at": "2026-11-01T18:00:20Z", "left": false, "state": "accepted", "team_name": "FC Vulpea", "user_id": 57, "wave": 1 } ], "mine": { "can_accept": false, "expires_at": "2026-11-05T18:00:00Z", "state": "accepted", "wave": 1 }, "seats": 36, "seats_lock_at": "2026-11-07T18:00:00Z", "skipped": [], "snapshot": [ { "elo": 1874, "eligible": true, "rank": 1, "reason": null, "team_name": "FC Vulpea", "user_id": 57 }, { "elo": 1850, "eligible": false, "rank": 2, "reason": "no_recent_match", "team_name": "Real Codru", "user_id": 12 } ], "snapshot_at": "2026-11-01T18:00:00Z", "tournament_id": 602, "wave_starts": [ "2026-11-01T18:00:00Z", "2026-11-05T18:00:00Z", "2026-11-07T18:00:00Z" ], "waves_run": [ 1 ] }, "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 invalid