openapi: 3.1.0 info: title: Toornament API description: >- The Toornament API v2 provides comprehensive esports tournament management capabilities. It includes the Organizer API for full tournament CRUD operations, the Viewer API for public read-only tournament data access, and the Participant API for registration and check-in management. Authentication uses API key plus OAuth2 access tokens with scoped permissions. version: "2.0" contact: name: Toornament Developer url: https://developer.toornament.com termsOfService: https://www.toornament.com/en_US/legal servers: - url: https://api.toornament.com/organizer/v2 description: Organizer API — full tournament management (authenticated) - url: https://api.toornament.com/viewer/v2 description: Viewer API — public read-only tournament access security: - apiKey: [] - oauth2: [] tags: - name: Tournaments description: Create, manage, and retrieve tournament information. - name: Participants description: Manage tournament participants and registrations. - name: Stages description: Manage tournament stages and brackets. - name: Matches description: Manage tournament matches and results. - name: Rankings description: Retrieve tournament rankings and standings. - name: Registrations description: Manage tournament registrations. - name: Disciplines description: Access esports discipline metadata. - name: Webhooks description: Manage webhook subscriptions for tournament events. paths: /tournaments: get: operationId: listTournaments summary: List Tournaments description: Retrieve a paginated list of tournaments organized by the authenticated user. Supports filtering by discipline, status, dates, country, platform, and more. tags: - Tournaments parameters: - name: X-Api-Key in: header required: true schema: type: string description: Toornament API key. - name: Authorization in: header required: true schema: type: string description: OAuth2 access token with organizer:view scope. - name: Range in: header required: false schema: type: string description: "Pagination range (e.g., tournaments=0-49, max 50 items)." - name: disciplines in: query required: false schema: type: string description: Comma-separated list of discipline keys to filter by. - name: statuses in: query required: false schema: type: string description: Comma-separated statuses (pending, running, completed). - name: scheduled_before in: query required: false schema: type: string format: date-time description: Filter tournaments scheduled before this date. - name: scheduled_after in: query required: false schema: type: string format: date-time description: Filter tournaments scheduled after this date. - name: countries in: query required: false schema: type: string description: Comma-separated ISO country codes to filter by. - name: platforms in: query required: false schema: type: string description: Comma-separated platform keys (pc, playstation, xbox, etc.). - name: is_online in: query required: false schema: type: integer enum: [0, 1] description: Filter by online (1) or offline (0) tournaments. - name: sort in: query required: false schema: type: string description: Sort field (e.g., created_at, scheduled_date_start). responses: "206": description: Partial content — paginated list of tournaments. content: application/json: schema: type: array items: $ref: "#/components/schemas/Tournament" "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" post: operationId: createTournament summary: Create Tournament description: Create a new esports tournament. Requires organizer:admin OAuth2 scope. tags: - Tournaments parameters: - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/TournamentCreate" responses: "201": description: Tournament created successfully. content: application/json: schema: $ref: "#/components/schemas/Tournament" "401": $ref: "#/components/responses/Unauthorized" "422": $ref: "#/components/responses/ValidationError" /tournaments/{id}: get: operationId: getTournament summary: Get Tournament description: Retrieve the full details of a specific tournament by its ID. tags: - Tournaments parameters: - name: id in: path required: true schema: type: string description: The unique tournament identifier. - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string responses: "200": description: Tournament details. content: application/json: schema: $ref: "#/components/schemas/Tournament" "401": $ref: "#/components/responses/Unauthorized" "404": $ref: "#/components/responses/NotFound" patch: operationId: updateTournament summary: Update Tournament description: Partially update tournament fields. Requires organizer:admin OAuth2 scope. tags: - Tournaments parameters: - name: id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/TournamentUpdate" responses: "200": description: Tournament updated successfully. content: application/json: schema: $ref: "#/components/schemas/Tournament" "401": $ref: "#/components/responses/Unauthorized" "404": $ref: "#/components/responses/NotFound" delete: operationId: deleteTournament summary: Delete Tournament description: Permanently remove a tournament. Requires organizer:admin OAuth2 scope. tags: - Tournaments parameters: - name: id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string responses: "204": description: Tournament deleted successfully. "401": $ref: "#/components/responses/Unauthorized" "404": $ref: "#/components/responses/NotFound" /tournaments/{tournament_id}/participants: get: operationId: listParticipants summary: List Participants description: Retrieve a paginated list of participants for a tournament. tags: - Participants parameters: - name: tournament_id in: path required: true schema: type: string description: The tournament identifier. - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string - name: Range in: header required: false schema: type: string responses: "206": description: Paginated list of participants. content: application/json: schema: type: array items: $ref: "#/components/schemas/Participant" "401": $ref: "#/components/responses/Unauthorized" post: operationId: createParticipant summary: Create Participant description: Add a new participant (player or team) to a tournament. tags: - Participants parameters: - name: tournament_id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/ParticipantCreate" responses: "201": description: Participant created. content: application/json: schema: $ref: "#/components/schemas/Participant" "401": $ref: "#/components/responses/Unauthorized" /tournaments/{tournament_id}/participants/{id}: get: operationId: getParticipant summary: Get Participant description: Get details of a specific participant in a tournament. tags: - Participants parameters: - name: tournament_id in: path required: true schema: type: string - name: id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string responses: "200": description: Participant details. content: application/json: schema: $ref: "#/components/schemas/Participant" "404": $ref: "#/components/responses/NotFound" /tournaments/{tournament_id}/stages: get: operationId: listStages summary: List Stages description: Retrieve all stages defined for a tournament (e.g., group stage, bracket stage). tags: - Stages parameters: - name: tournament_id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string responses: "200": description: List of stages. content: application/json: schema: type: array items: $ref: "#/components/schemas/Stage" "401": $ref: "#/components/responses/Unauthorized" /tournaments/{tournament_id}/stages/{stage_id}/matches: get: operationId: listMatches summary: List Matches description: Retrieve all matches within a tournament stage, including bracket display data. tags: - Matches parameters: - name: tournament_id in: path required: true schema: type: string - name: stage_id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string - name: Range in: header required: false schema: type: string responses: "206": description: Paginated list of matches. content: application/json: schema: type: array items: $ref: "#/components/schemas/Match" "401": $ref: "#/components/responses/Unauthorized" /tournaments/{tournament_id}/matches/{match_id}: patch: operationId: reportMatch summary: Report Match Result description: Submit or update the result for a specific match. Requires organizer:admin scope. tags: - Matches parameters: - name: tournament_id in: path required: true schema: type: string - name: match_id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/MatchReport" responses: "200": description: Match result reported. content: application/json: schema: $ref: "#/components/schemas/Match" "401": $ref: "#/components/responses/Unauthorized" "404": $ref: "#/components/responses/NotFound" /tournaments/{tournament_id}/stages/{stage_id}/ranking-items: get: operationId: listRankingItems summary: List Ranking Items description: Retrieve the ranking items (standings) for a specific tournament stage. tags: - Rankings parameters: - name: tournament_id in: path required: true schema: type: string - name: stage_id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string responses: "200": description: Ranking items for the stage. content: application/json: schema: type: array items: $ref: "#/components/schemas/RankingItem" "401": $ref: "#/components/responses/Unauthorized" /tournaments/{tournament_id}/registrations: get: operationId: listRegistrations summary: List Registrations description: Retrieve all registrations for a tournament including approval status. tags: - Registrations parameters: - name: tournament_id in: path required: true schema: type: string - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string - name: Range in: header required: false schema: type: string responses: "206": description: Paginated list of registrations. content: application/json: schema: type: array items: $ref: "#/components/schemas/Registration" "401": $ref: "#/components/responses/Unauthorized" /disciplines: get: operationId: listDisciplines summary: List Disciplines description: Retrieve the list of all supported esports disciplines (games) on Toornament. tags: - Disciplines parameters: - name: X-Api-Key in: header required: true schema: type: string - name: Range in: header required: false schema: type: string responses: "206": description: Paginated list of disciplines. content: application/json: schema: type: array items: $ref: "#/components/schemas/Discipline" "401": $ref: "#/components/responses/Unauthorized" /webhooks: get: operationId: listWebhooks summary: List Webhooks description: Retrieve all webhook subscriptions configured for the authenticated application. tags: - Webhooks parameters: - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string responses: "200": description: List of webhook subscriptions. content: application/json: schema: type: array items: $ref: "#/components/schemas/Webhook" "401": $ref: "#/components/responses/Unauthorized" post: operationId: createWebhook summary: Create Webhook description: Register a new webhook endpoint to receive tournament event notifications. tags: - Webhooks parameters: - name: X-Api-Key in: header required: true schema: type: string - name: Authorization in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/WebhookCreate" responses: "201": description: Webhook created. content: application/json: schema: $ref: "#/components/schemas/Webhook" "401": $ref: "#/components/responses/Unauthorized" components: securitySchemes: apiKey: type: apiKey in: header name: X-Api-Key description: API key obtained from the Toornament developer dashboard. oauth2: type: oauth2 description: OAuth2 access token with scoped permissions (organizer:view, organizer:admin). flows: authorizationCode: authorizationUrl: https://app.toornament.com/oauth/authorize tokenUrl: https://api.toornament.com/oauth/v2/token scopes: organizer:view: Read access to organizer tournament data. organizer:admin: Full administrative access to tournament management. participant:manage: Manage participant registrations. responses: Unauthorized: description: Authentication failed — missing or invalid API key/token. content: application/json: schema: $ref: "#/components/schemas/Error" Forbidden: description: Insufficient OAuth2 scope for this operation. content: application/json: schema: $ref: "#/components/schemas/Error" NotFound: description: The requested resource was not found. content: application/json: schema: $ref: "#/components/schemas/Error" ValidationError: description: Request validation failed — missing or invalid fields. content: application/json: schema: $ref: "#/components/schemas/Error" schemas: Tournament: type: object properties: id: type: string description: Unique tournament identifier. discipline: type: string description: Esports discipline key (e.g., league-of-legends, valorant). name: type: string description: Short tournament name. full_name: type: string description: Full tournament name. status: type: string enum: [pending, running, completed] description: Current tournament status. participant_type: type: string enum: [team, player] description: Whether tournament is for teams or individual players. size: type: integer description: Maximum number of participants. online: type: boolean description: Whether the tournament is played online. country: type: string description: ISO country code for the tournament location. timezone: type: string description: Tournament timezone (IANA format). scheduled_date_start: type: string format: date description: Tournament start date. scheduled_date_end: type: string format: date description: Tournament end date. registration_enabled: type: boolean description: Whether registration is currently open. registration_opening_datetime: type: string format: date-time registration_closing_datetime: type: string format: date-time platforms: type: array items: type: string description: Gaming platforms (pc, playstation, xbox, switch, mobile). website: type: string format: uri description: Tournament website URL. discord: type: string description: Discord server invite or ID. description: type: string description: Tournament description. rules: type: string description: Tournament rules text. prize: type: string description: Prize pool description. contact: type: string description: Contact email for the tournament. public: type: boolean description: Whether the tournament is publicly visible. archived: type: boolean description: Whether the tournament has been archived. created_at: type: string format: date-time TournamentCreate: type: object required: - discipline - name - participant_type - size - timezone - platforms properties: discipline: type: string name: type: string full_name: type: string participant_type: type: string enum: [team, player] size: type: integer timezone: type: string platforms: type: array items: type: string online: type: boolean country: type: string scheduled_date_start: type: string format: date scheduled_date_end: type: string format: date registration_enabled: type: boolean public: type: boolean description: type: string rules: type: string prize: type: string contact: type: string discord: type: string website: type: string TournamentUpdate: type: object properties: name: type: string full_name: type: string status: type: string size: type: integer scheduled_date_start: type: string format: date scheduled_date_end: type: string format: date registration_enabled: type: boolean public: type: boolean archived: type: boolean description: type: string rules: type: string prize: type: string contact: type: string Participant: type: object properties: id: type: string description: Unique participant identifier. tournament_id: type: string name: type: string description: Participant name (player username or team name). type: type: string enum: [team, player] email: type: string format: email checked_in: type: boolean description: Whether the participant has checked in. lineup: type: array items: type: object properties: username: type: string name: type: string description: Team lineup for team tournaments. custom_fields: type: object description: Custom registration field values. created_at: type: string format: date-time ParticipantCreate: type: object required: - name properties: name: type: string email: type: string lineup: type: array items: type: object custom_fields: type: object Stage: type: object properties: id: type: string description: Unique stage identifier. tournament_id: type: string number: type: integer description: Stage number in the tournament flow. name: type: string description: Stage name (e.g., Group Stage, Quarterfinals). type: type: string description: Stage type (e.g., groups, single_elimination, double_elimination). size: type: integer description: Number of participants in this stage. status: type: string enum: [pending, running, completed] Match: type: object properties: id: type: string description: Unique match identifier. tournament_id: type: string stage_id: type: string round_id: type: string group_id: type: string number: type: integer description: Match number within the stage. status: type: string enum: [pending, running, completed] description: Current match status. scheduled_datetime: type: string format: date-time played_at: type: string format: date-time opponents: type: array maxItems: 2 items: type: object properties: number: type: integer participant: $ref: "#/components/schemas/Participant" result: type: string enum: [win, lose, draw] score: type: integer forfeit: type: boolean MatchReport: type: object properties: status: type: string enum: [completed] opponents: type: array items: type: object properties: number: type: integer result: type: string enum: [win, lose, draw] score: type: integer forfeit: type: boolean RankingItem: type: object properties: id: type: string position: type: integer description: Current ranking position. participant: $ref: "#/components/schemas/Participant" properties: type: object properties: played: type: integer win: type: integer draw: type: integer loss: type: integer score_for: type: integer score_against: type: integer points: type: integer Registration: type: object properties: id: type: string tournament_id: type: string name: type: string email: type: string status: type: string enum: [pending, accepted, refused, cancelled] type: type: string enum: [team, player] custom_fields: type: object created_at: type: string format: date-time Discipline: type: object properties: id: type: string description: Discipline identifier key (e.g., league-of-legends). name: type: string description: Display name of the game/discipline. full_name: type: string description: Full title of the game. copyrights: type: string description: Copyright attribution text. platforms: type: array items: type: string description: Supported gaming platforms. Webhook: type: object properties: id: type: string description: Unique webhook identifier. url: type: string format: uri description: Endpoint URL to deliver webhook payloads. events: type: array items: type: string description: List of subscribed event types. is_active: type: boolean description: Whether the webhook is active. created_at: type: string format: date-time WebhookCreate: type: object required: - url - events properties: url: type: string format: uri events: type: array items: type: string Error: type: object properties: message: type: string description: Error message. code: type: string description: Error code.