---
title: "Get a tournament"
method: GET
path: "/tournaments/{identifier}"
tags: ["Tournament Discovery"]
---

# Get a tournament

`GET /tournaments/{identifier}`

Returns the profile for a single tournament, resolved by slug. A tournament you may not view answers 404, identically to an unknown slug. Manager-private review fields are included only when the caller manages the tournament. Requires tournaments.tournament_public:read.

## Path parameters

- `identifier` string, required — Tournament slug.

## Response `200`

The tournament profile.

- TournamentProfileResponse — Tournament profile response envelope.
  - `tournament` TournamentProfile, required — Public profile for a single tournament. Manager-private review fields are present only for a caller who manages it.
    - `_id` string, required — Tournament ID.
    - `name` string, required — Tournament display name.
    - `slug` string, required — URL-friendly tournament identifier.
    - `format` 'SINGLE_ELIMINATION' | 'DOUBLE_ELIMINATION' | 'ROUND_ROBIN' | 'SWISS', required — Bracket format of a tournament.
    - `status` 'DRAFT' | 'REGISTRATION_OPEN' | 'REGISTRATION_CLOSED' | 'IN_PROGRESS' | 'COMPLETED' | 'CANCELLED', required — Lifecycle status of a tournament.
    - `approvalStatus` string, required — Platform review state, independent of `status`.
    - `visibility` string, required — PUBLIC or UNLISTED.
    - `isPubliclyListed` boolean, required — Whether the tournament appears in discovery.
    - `teamSize` integer, required — Players per participating team.
    - `participantCount` integer, required — Current number of participants.
    - `maxParticipants` integer, required — Participant cap.
    - `bannerUrl` string, nullable — Banner image URL.
    - `logoUrl` string, nullable — Logo image URL.
    - `game` object, nullable, required — Game summary, or null if the game row is missing.
    - `host` object, nullable, required — Host identity (user, org, or league), or null if unresolvable.
    - `needsAttention` boolean, required — Whether the tournament is non-terminal AND awaiting organizer action on approval.
    - `viewerManagement` object, required — The caller's standing on this tournament. `isManager` includes tournament moderators; `isAdmin` does not.
  - `timestamp` string, required — Response generation time (ISO 8601).

## Other responses

- `401` — Missing or invalid API key.
- `403` — API key lacks the required permission.
- `404` — Resource not found.
- `429` — Rate limited.
- `500` — Internal server error.

---

[API](https://skmtc.net/teambattles/apis/teambattles-api.md) · [All operations](https://skmtc.net/teambattles/apis/teambattles-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/teambattles/teambattles-api/versions/2ffe8fb53b7d/schema)
