API

Public API endpoints for tournament data, pick/bans, and leaderboard integration.

Brackets

Query flags for showing tournament brackets in broadcast setups.

Streamer Mode

Hides the nav, footer, buttons and page background so the bracket renders transparent for overlaying in broadcast software.

/tournament/[id]/brackets?stream-mode=1

Bracket Filter

Shows only the bracket whose name matches. Matching is exact and case-insensitive, ignoring leading/trailing spaces; other brackets are hidden.

/tournament/[id]/brackets?bracket-name=Bracket%202

Combine with streamer mode using &:

/tournament/[id]/brackets?stream-mode=1&bracket-name=Bracket%202

GET /api/tournament

Returns all admin-created tournaments.

Append ?format=json or ?format=xml to control response format (default: JSON).

[
  {
    "id": "string",
    "name": "string",
    "description": "string | null",
    "date": "string | null",
    "playersPerTeam": "number",
    "subsPerTeam": "number",
    "registerByDate": "string | null",
    "rules": "string | null",
    "brackets": "array",
    "createdBy": "string | null",
    "isAdminCreated": "boolean",
    "createdAt": "string",
    "updatedAt": "string"
  }
]

GET /api/tournament/[id]

Returns a tournament by its ID.

Append ?format=json or ?format=xml to control response format (default: JSON).

{
  "id": "string",
  "name": "string",
  "description": "string | null",
  "date": "string | null",
  "playersPerTeam": "number",
  "brackets": [
    {
      "id": "string",
      "name": "string",
      "rounds": [
        {
          "id": "string",
          "name": "string",
          "format": "string | null",
          "notes": "string | null",
          "scorePrefix": "string | null",
          "linkedBracketId": "string | null",
          "advance": "winner | loser | null",
          "matches": [
            {
              "id": "string",
              "teams": [
                {
                  "id": "string",
                  "name": "string",
                  "score": "number"
                },
                {
                  "id": "string",
                  "name": "string",
                  "score": "number"
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "createdAt": "string"
}

Returns 404 with {"error":"not found"} if the tournament does not exist.

GET /api/tournament/[id]/teams

Returns all accepted (approved) teams registered for a tournament.

Append ?format=json or ?format=xml to control response format (default: JSON).

[
  {
    "id": "string",
    "name": "string",
    "captainId": "string",
    "createdAt": "string",
    "members": [
      {
        "id": "string",
        "userId": "string | null",
        "discordId": "string | null",
        "embarkid": "string | null",
        "isSub": "boolean",
        "joinedAt": "string | null"
      }
    ]
  }
]

Returns 404 with {"error":"not found"} if the tournament does not exist.

GET /api/tournament/[id]/brackets/table

Returns bracket data as a flat table — one row per match across every bracket and round, with columns for each team and their score. Every row shares the same columns (padded with empty values). Designed for importing into broadcast tools like vMix via the XML format.

Append ?format=json or ?format=xml to control response format (default: JSON).

[
  {
    "Round": "Bracket Name - Round Name",
    "T1": "Team Name",
    "T1Score": "0",
    "T2": "Team Name",
    "T2Score": "0",
    "T3": "Team Name",
    "T3Score": "0",
    "T4": "Team Name",
    "T4Score": "0"
  }
]

Returns 404 with {"error":"not found"} if the tournament does not exist.

GET /api/tournament/[id]/teams/table

Returns registered teams as a flat table — one row per team with columns for the team name, each player name (without the EmbarkID #0000 suffix) and each substitute. Designed for importing into broadcast tools like vMix via the XML format.

Append ?format=json or ?format=xml to control response format (default: JSON).

[
  {
    "Team": "Team Name",
    "P1": "Player One",
    "P2": "Player Two",
    "P3": "Player Three",
    "S1": "Sub One"
  }
]

Returns 404 with {"error":"not found"} if the tournament does not exist.

GET /api/pick-bans/[id]

Returns the pick/ban (veto) state for a match series.

Append ?format=json or ?format=xml to control response format (default: JSON).

{
  "title": "string",
  "status": "pending | active | completed",
  "stage": "string",
  "turnTimer": "string",
  "teams": [
    "string",
    "string"
  ],
  "picks": [
    {
      "map": "string",
      "image": "string | null",
      "variant": "string | null",
      "by": "string | null"
    }
  ],
  "bans": [
    {
      "map": "string",
      "image": "string | null",
      "by": "string | null"
    }
  ],
  "available": [
    {
      "name": "string",
      "image": "string"
    }
  ],
  "decider": "{ name: 'string', image: 'string' } | null"
}

Returns 404 with {"error":"Match not found"} if the match does not exist.

Leaderboards

Competitive rankings are sourced from the independent leaderboard API.

api.the-finals-leaderboard.com