{"openapi":"3.0.0","paths":{"/v1/external/me":{"get":{"description":"Echoes the calling organization, the token being used (never its secret — only the displayable `prefix`) and the rate limit the token is subject to. Use it to verify a credential is live and correctly scoped. All identifiers (`idx`) are v4 UUIDs.","operationId":"getMe","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalMeResponseDto"}}}},"400":{"description":"Malformed request, in one of two shapes. A path identifier that is not a v4 UUID is rejected by `ExternalUuidPipe` and answers in this API’s own error body — `{ statusCode, code: \"INVALID_ID\", message }`. A bad query parameter (an unknown `populate` path, `limit`/`offset` out of range, a non-UUID `division`) is rejected by the api-wide ValidationPipe, which answers in Nest’s shape — `{ statusCode, message: string[], error: \"Bad Request\" }` — with one entry per failed constraint.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExternalErrorDto"},{"$ref":"#/components/schemas/ExternalValidationErrorDto"}]}}}},"401":{"description":"Missing, malformed, unknown or expired token — `MISSING_API_TOKEN`, `INVALID_API_TOKEN`, `EXPIRED_API_TOKEN`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"403":{"description":"The token lacks the `read` scope — `INSUFFICIENT_SCOPE`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"429":{"description":"More than 120 requests in 60s — `RATE_LIMITED`. The response carries `Retry-After` alongside the `X-RateLimit-*` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}}},"security":[{"apiToken":[]}],"summary":"The organization and token behind the current Bearer credential","tags":["Organization"]}},"/v1/external/rounds/{idx}":{"get":{"description":"A round whose tournament belongs to another organization is a 404. `populate` is a comma-separated list of relation paths. Allowed: division, pools, pools.teams, pools.standings, pools.standings.team, pools.standings.teamStats, games, games.homeTeam, games.awayTeam, games.winner, games.court, games.score, games.score.sets, draws, draws.rounds, draws.rounds.games, draws.rounds.games.homeTeam, draws.rounds.games.awayTeam, draws.rounds.games.winner, draws.rounds.games.court, draws.rounds.games.score, draws.rounds.games.score.sets. Default when omitted: pools, pools.teams, games, games.homeTeam, games.awayTeam, games.winner, division, draws.rounds, draws.rounds.games, draws.rounds.games.homeTeam, draws.rounds.games.awayTeam, draws.rounds.games.winner, draws.rounds.games.score, draws.rounds.games.score.sets. A path outside that list is a 400. Relations that were not requested are absent from the response body (not null). All identifiers (`idx`) are v4 UUIDs.","operationId":"getRound","parameters":[{"name":"idx","required":true,"in":"path","description":"Round identifier","schema":{"format":"uuid","type":"string"}},{"name":"populate","required":false,"in":"query","description":"Comma-separated. Allowed: division, pools, pools.teams, pools.standings, pools.standings.team, pools.standings.teamStats, games, games.homeTeam, games.awayTeam, games.winner, games.court, games.score, games.score.sets, draws, draws.rounds, draws.rounds.games, draws.rounds.games.homeTeam, draws.rounds.games.awayTeam, draws.rounds.games.winner, draws.rounds.games.court, draws.rounds.games.score, draws.rounds.games.score.sets","schema":{"example":"division","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalRoundDto"}}}},"400":{"description":"Malformed request, in one of two shapes. A path identifier that is not a v4 UUID is rejected by `ExternalUuidPipe` and answers in this API’s own error body — `{ statusCode, code: \"INVALID_ID\", message }`. A bad query parameter (an unknown `populate` path, `limit`/`offset` out of range, a non-UUID `division`) is rejected by the api-wide ValidationPipe, which answers in Nest’s shape — `{ statusCode, message: string[], error: \"Bad Request\" }` — with one entry per failed constraint.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExternalErrorDto"},{"$ref":"#/components/schemas/ExternalValidationErrorDto"}]}}}},"401":{"description":"Missing, malformed, unknown or expired token — `MISSING_API_TOKEN`, `INVALID_API_TOKEN`, `EXPIRED_API_TOKEN`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"403":{"description":"The token lacks the `read` scope — `INSUFFICIENT_SCOPE`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"404":{"description":"No such round in the calling organization — `ROUND_NOT_FOUND`. A round owned by another organization is also a 404, never a 403: this endpoint is not an existence oracle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"429":{"description":"More than 120 requests in 60s — `RATE_LIMITED`. The response carries `Retry-After` alongside the `X-RateLimit-*` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}}},"security":[{"apiToken":[]}],"summary":"One round by identifier, with its pools, games and draws","tags":["Rounds"]}},"/v1/external/tournaments":{"get":{"description":"Newest first (`startDate` descending). Optionally filtered by `status` and `sport`, paged with `limit` (1-100, default 25) and `offset`. `populate` is a comma-separated list of relation paths. Allowed: club. Default when omitted: nothing is populated. A path outside that list is a 400. Relations that were not requested are absent from the response body (not null). All identifiers (`idx`) are v4 UUIDs.","operationId":"listTournaments","parameters":[{"name":"status","required":false,"in":"query","description":"Only tournaments in this status","schema":{"$ref":"#/components/schemas/TournamentStatus"}},{"name":"sport","required":false,"in":"query","description":"Only tournaments for this sport","schema":{"$ref":"#/components/schemas/Sport"}},{"name":"populate","required":false,"in":"query","description":"Comma-separated. Allowed: club","schema":{"example":"club","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Page size, 1-100","schema":{"minimum":1,"maximum":100,"default":25,"example":25,"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Rows to skip","schema":{"minimum":0,"default":0,"example":0,"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTournamentListResponseDto"}}}},"400":{"description":"Malformed request, in one of two shapes. A path identifier that is not a v4 UUID is rejected by `ExternalUuidPipe` and answers in this API’s own error body — `{ statusCode, code: \"INVALID_ID\", message }`. A bad query parameter (an unknown `populate` path, `limit`/`offset` out of range, a non-UUID `division`) is rejected by the api-wide ValidationPipe, which answers in Nest’s shape — `{ statusCode, message: string[], error: \"Bad Request\" }` — with one entry per failed constraint.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExternalErrorDto"},{"$ref":"#/components/schemas/ExternalValidationErrorDto"}]}}}},"401":{"description":"Missing, malformed, unknown or expired token — `MISSING_API_TOKEN`, `INVALID_API_TOKEN`, `EXPIRED_API_TOKEN`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"403":{"description":"The token lacks the `read` scope — `INSUFFICIENT_SCOPE`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"429":{"description":"More than 120 requests in 60s — `RATE_LIMITED`. The response carries `Retry-After` alongside the `X-RateLimit-*` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}}},"security":[{"apiToken":[]}],"summary":"List the calling organization's tournaments","tags":["Tournaments"]}},"/v1/external/tournaments/{idx}":{"get":{"description":"A tournament belonging to another organization is a 404, not a 403 — the endpoint is not an existence oracle. `populate` is a comma-separated list of relation paths. Allowed: club, club.courts, divisions, divisions.rounds, sponsors, circuit, circuitCategory, rankedTiebreakRules. Default when omitted: club, divisions. A path outside that list is a 400. Relations that were not requested are absent from the response body (not null). All identifiers (`idx`) are v4 UUIDs.","operationId":"getTournament","parameters":[{"name":"idx","required":true,"in":"path","description":"Tournament identifier","schema":{"format":"uuid","type":"string"}},{"name":"populate","required":false,"in":"query","description":"Comma-separated. Allowed: club, club.courts, divisions, divisions.rounds, sponsors, circuit, circuitCategory, rankedTiebreakRules","schema":{"example":"club","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTournamentDto"}}}},"400":{"description":"Malformed request, in one of two shapes. A path identifier that is not a v4 UUID is rejected by `ExternalUuidPipe` and answers in this API’s own error body — `{ statusCode, code: \"INVALID_ID\", message }`. A bad query parameter (an unknown `populate` path, `limit`/`offset` out of range, a non-UUID `division`) is rejected by the api-wide ValidationPipe, which answers in Nest’s shape — `{ statusCode, message: string[], error: \"Bad Request\" }` — with one entry per failed constraint.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExternalErrorDto"},{"$ref":"#/components/schemas/ExternalValidationErrorDto"}]}}}},"401":{"description":"Missing, malformed, unknown or expired token — `MISSING_API_TOKEN`, `INVALID_API_TOKEN`, `EXPIRED_API_TOKEN`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"403":{"description":"The token lacks the `read` scope — `INSUFFICIENT_SCOPE`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"404":{"description":"No such tournament in the calling organization — `TOURNAMENT_NOT_FOUND`. A tournament owned by another organization is also a 404, never a 403: this endpoint is not an existence oracle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"429":{"description":"More than 120 requests in 60s — `RATE_LIMITED`. The response carries `Retry-After` alongside the `X-RateLimit-*` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}}},"security":[{"apiToken":[]}],"summary":"One tournament by identifier","tags":["Tournaments"]}},"/v1/external/tournaments/{idx}/divisions":{"get":{"description":"Ordered by division number. An unknown or out-of-organization tournament is a 404. `populate` is a comma-separated list of relation paths. Allowed: rounds, teams, teams.playerProfiles, teams.leagueTeam, circuitCategory. Default when omitted: rounds. A path outside that list is a 400. Relations that were not requested are absent from the response body (not null). All identifiers (`idx`) are v4 UUIDs.","operationId":"listDivisions","parameters":[{"name":"idx","required":true,"in":"path","description":"Tournament identifier","schema":{"format":"uuid","type":"string"}},{"name":"populate","required":false,"in":"query","description":"Comma-separated. Allowed: rounds, teams, teams.playerProfiles, teams.leagueTeam, circuitCategory","schema":{"example":"rounds","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExternalDivisionDto"}}}}},"400":{"description":"Malformed request, in one of two shapes. A path identifier that is not a v4 UUID is rejected by `ExternalUuidPipe` and answers in this API’s own error body — `{ statusCode, code: \"INVALID_ID\", message }`. A bad query parameter (an unknown `populate` path, `limit`/`offset` out of range, a non-UUID `division`) is rejected by the api-wide ValidationPipe, which answers in Nest’s shape — `{ statusCode, message: string[], error: \"Bad Request\" }` — with one entry per failed constraint.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExternalErrorDto"},{"$ref":"#/components/schemas/ExternalValidationErrorDto"}]}}}},"401":{"description":"Missing, malformed, unknown or expired token — `MISSING_API_TOKEN`, `INVALID_API_TOKEN`, `EXPIRED_API_TOKEN`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"403":{"description":"The token lacks the `read` scope — `INSUFFICIENT_SCOPE`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"404":{"description":"No such tournament in the calling organization — `TOURNAMENT_NOT_FOUND`. A tournament owned by another organization is also a 404, never a 403: this endpoint is not an existence oracle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"429":{"description":"More than 120 requests in 60s — `RATE_LIMITED`. The response carries `Retry-After` alongside the `X-RateLimit-*` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}}},"security":[{"apiToken":[]}],"summary":"A tournament's divisions (categories)","tags":["Divisions"]}},"/v1/external/tournaments/{idx}/teams":{"get":{"description":"Ordered by seed, then name. Narrow to one category with `division=<division idx>`. An unknown or out-of-organization tournament is a 404. `populate` is a comma-separated list of relation paths. Allowed: playerProfiles, captainProfile, leagueTeam, division. Default when omitted: playerProfiles, division. A path outside that list is a 400. Relations that were not requested are absent from the response body (not null). All identifiers (`idx`) are v4 UUIDs.","operationId":"listTeams","parameters":[{"name":"idx","required":true,"in":"path","description":"Tournament identifier","schema":{"format":"uuid","type":"string"}},{"name":"populate","required":false,"in":"query","description":"Comma-separated. Allowed: playerProfiles, captainProfile, leagueTeam, division","schema":{"example":"playerProfiles","type":"string"}},{"name":"division","required":false,"in":"query","description":"Only teams in this division (division idx)","schema":{"format":"uuid","example":"f1e2d3c4-b5a6-4978-8a9b-0c1d2e3f4a5b","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExternalTeamDto"}}}}},"400":{"description":"Malformed request, in one of two shapes. A path identifier that is not a v4 UUID is rejected by `ExternalUuidPipe` and answers in this API’s own error body — `{ statusCode, code: \"INVALID_ID\", message }`. A bad query parameter (an unknown `populate` path, `limit`/`offset` out of range, a non-UUID `division`) is rejected by the api-wide ValidationPipe, which answers in Nest’s shape — `{ statusCode, message: string[], error: \"Bad Request\" }` — with one entry per failed constraint.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExternalErrorDto"},{"$ref":"#/components/schemas/ExternalValidationErrorDto"}]}}}},"401":{"description":"Missing, malformed, unknown or expired token — `MISSING_API_TOKEN`, `INVALID_API_TOKEN`, `EXPIRED_API_TOKEN`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"403":{"description":"The token lacks the `read` scope — `INSUFFICIENT_SCOPE`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"404":{"description":"No such tournament in the calling organization — `TOURNAMENT_NOT_FOUND`. A tournament owned by another organization is also a 404, never a 403: this endpoint is not an existence oracle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}},"429":{"description":"More than 120 requests in 60s — `RATE_LIMITED`. The response carries `Retry-After` alongside the `X-RateLimit-*` headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalErrorDto"}}}}},"security":[{"apiToken":[]}],"summary":"A tournament's teams (pairs, players or league teams)","tags":["Teams"]}}},"info":{"title":"SETTO External API","description":"Read-only access to a SETTO organization’s tournaments, categories, teams and results.\n\nAuthenticate with an organization API token as `Authorization: Bearer setto_live_…`.\nA token carries the `read` scope and is scoped to exactly one organization: every\nresponse is filtered to that organization, and a resource owned by another one is a\n404, never a 403.\n\nAll identifiers (`idx`) are v4 UUIDs; the internal numeric primary keys are never\nexposed. Relations are opt-in through the `populate` query parameter, and a relation\nthat was not requested is absent from the response body rather than null.","version":"1.0.0","contact":{}},"tags":[{"name":"Organization","description":""},{"name":"Tournaments","description":""},{"name":"Divisions","description":""},{"name":"Teams","description":""},{"name":"Rounds","description":""}],"servers":[{"url":"https://api-production-ea80.up.railway.app","description":"SETTO API"}],"components":{"securitySchemes":{"apiToken":{"scheme":"bearer","bearerFormat":"setto_live_…","type":"http","description":"Organization API token"}},"schemas":{"CircuitGender":{"type":"string","enum":["MEN","WOMEN","MIXED"],"description":"Category gender"},"DrawAssignment":{"type":"string","enum":["QUALIFYING","MAIN_DRAW"],"description":"Which draw the team belongs to"},"ExternalCircuitCategoryDto":{"type":"object","properties":{"idx":{"type":"string","description":"Circuit category identifier","example":"b2c3d4e5-f6a7-4890-8b1c-2d3e4f5a6b7c"},"name":{"type":"string","description":"Category name","example":"Primera Fuerza"},"gender":{"description":"Category gender","example":"MIXED","allOf":[{"$ref":"#/components/schemas/CircuitGender"}]},"color":{"type":"string","description":"Category colour, hex","example":"#1E3A8A"}},"required":["idx","name","gender","color"]},"ExternalCircuitDto":{"type":"object","properties":{"idx":{"type":"string","description":"Circuit identifier","example":"a1b2c3d4-e5f6-4789-8a0b-1c2d3e4f5a6b"},"name":{"type":"string","description":"Circuit name","example":"Circuito Nacional de Padel"},"slug":{"type":"string","description":"URL-friendly identifier","example":"circuito-nacional-de-padel"},"seasonYear":{"type":"number","description":"Season year","example":2026}},"required":["idx","name","slug","seasonYear"]},"ExternalClubDto":{"type":"object","properties":{"idx":{"type":"string","description":"Club identifier","example":"7c1b9d2e-3f45-4a68-8b90-1c2d3e4f5a6b"},"name":{"type":"string","description":"Club name","example":"Club Deportivo Santa Fe"},"address":{"type":"string","description":"Street address as typed by the organizer","example":"Av. Vasco de Quiroga 3800"},"website":{"type":"string","nullable":true,"description":"Club website","example":"https://clubsantafe.mx"},"image":{"type":"string","nullable":true,"description":"Club logo or photo URL","example":"https://cdn.setto.io/clubs/santa-fe.png"},"location":{"nullable":true,"description":"Geocoded location; null when the club was never geocoded","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalLocationDto"}]},"courts":{"description":"Present only when `club.courts` is populated","type":"array","items":{"$ref":"#/components/schemas/ExternalCourtDto"}}},"required":["idx","name","address","website","image","location"]},"ExternalCourtDto":{"type":"object","properties":{"idx":{"type":"string","description":"Court identifier","example":"0f3a8c1e-59d4-4b2a-9c77-1b8e2d4f6a90"},"name":{"type":"string","description":"Court name","example":"Cancha 1"},"position":{"type":"number","nullable":true,"description":"Display order within the club","example":1}},"required":["idx","name","position"]},"ExternalDivisionDto":{"type":"object","properties":{"idx":{"type":"string","description":"Division identifier","example":"a7b8c9d0-e1f2-4345-8a6b-7c8d9e0f1a2b"},"name":{"type":"string","description":"Division name","example":"Primera Varonil"},"number":{"type":"number","description":"Display order within the tournament","example":1},"color":{"type":"string","description":"Division colour, hex","example":"#1E3A8A"},"isDoubles":{"type":"boolean","description":"Whether the division is played in pairs","example":true},"isVisible":{"type":"boolean","description":"Whether the division is shown on public surfaces","example":true},"price":{"type":"number","nullable":true,"description":"Inscription price override for this division; null falls back to the tournament price","example":1200},"minParticipants":{"type":"number","nullable":true,"description":"Team format only: minimum roster size; null means 2","example":null},"maxParticipants":{"type":"number","nullable":true,"description":"Team format only: maximum roster size; null means 2","example":null},"maxRegistrations":{"type":"number","nullable":true,"description":"Capacity in registered teams; null means unlimited. Counts teams, not people.","example":32},"createdAt":{"type":"string","format":"date-time","description":"When the division was created","example":"2026-08-01T16:44:00.000Z"},"tournament":{"description":"The tournament this division belongs to","allOf":[{"$ref":"#/components/schemas/ExternalTournamentRefDto"}]},"rounds":{"description":"Rounds. Present only when `rounds` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalRoundDto"}},"teams":{"description":"Registered teams. Present only when `teams` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalTeamDto"}},"circuitCategory":{"nullable":true,"description":"Circuit category this division maps to. Present only when `circuitCategory` is populated.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalCircuitCategoryDto"}]}},"required":["idx","name","number","color","isDoubles","isVisible","price","minParticipants","maxParticipants","maxRegistrations","createdAt","tournament"]},"ExternalDivisionRefDto":{"type":"object","properties":{"idx":{"type":"string","description":"Division (category) identifier","example":"a7b8c9d0-e1f2-4345-8a6b-7c8d9e0f1a2b"},"name":{"type":"string","description":"Division (category) name","example":"Primera Varonil"}},"required":["idx","name"]},"ExternalDrawDto":{"type":"object","properties":{"idx":{"type":"string","description":"Draw identifier","example":"f8a9b0c1-d2e3-4456-8f70-819203142536"},"placement":{"type":"number","description":"Placement this draw decides; 1 is the main draw","example":1},"rounds":{"description":"Bracket columns in play order. Present only when `draws.rounds` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalDrawRoundDto"}}},"required":["idx","placement"]},"ExternalDrawRoundDto":{"type":"object","properties":{"idx":{"type":"string","description":"Draw round identifier","example":"e7f8a9b0-c1d2-4345-8e6f-708192031425"},"label":{"type":"string","description":"Draw round label, e.g. Cuartos de final","example":"Semifinal"},"order":{"type":"number","description":"Position within the draw; 0 is the deepest round (played first), the highest value is the final","example":2},"games":{"description":"Games in this bracket column. Present only when `draws.rounds.games` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalGameDto"}}},"required":["idx","label","order"]},"ExternalErrorDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"HTTP status code","example":404},"code":{"type":"string","description":"Stable machine-readable error code","example":"TOURNAMENT_NOT_FOUND"},"message":{"type":"string","description":"Human-readable message; defaults to the code","example":"TOURNAMENT_NOT_FOUND"}},"required":["statusCode","code","message"]},"ExternalGameDto":{"type":"object","properties":{"idx":{"type":"string","description":"Game identifier","example":"a3b4c5d6-e7f8-4901-8a2b-3c4d5e6f7081"},"number":{"type":"number","description":"Game number within its round","example":7},"displayNumber":{"type":"number","nullable":true,"description":"Number shown to players, when it differs from `number`","example":7},"status":{"description":"Game status","example":"FINISHED","allOf":[{"$ref":"#/components/schemas/GameStatus"}]},"time":{"type":"string","format":"date-time","nullable":true,"description":"Scheduled start, UTC. Null on flexible schedules.","example":"2026-09-12T16:00:00.000Z"},"lengthInMinutes":{"type":"number","nullable":true,"description":"Scheduled length in minutes","example":90},"courtNumber":{"type":"number","nullable":true,"description":"Court number assigned by the scheduler","example":2},"matchDay":{"type":"number","nullable":true,"description":"Match day (jornada) this game belongs to","example":1},"roundDetail":{"type":"string","nullable":true,"description":"Round detail, e.g. the pool the game belongs to","example":"Grupo A"},"scheduleNumber":{"type":"number","nullable":true,"description":"Position in the ordered tournament schedule, 1-based","example":14},"sectionNumber":{"type":"number","nullable":true,"description":"Qualifier section this game belongs to","example":1},"isRetirement":{"type":"boolean","nullable":true,"description":"Whether the game ended in a retirement","example":false},"retiredTeamId":{"type":"string","nullable":true,"description":"Identifier of the team that retired","example":null},"liveStartedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the game was marked live; null when it never was","example":null},"resultApprovalStatus":{"nullable":true,"description":"Approval state of a player-submitted result; null when no player submitted one","example":null,"allOf":[{"$ref":"#/components/schemas/GameResultApprovalStatus"}]},"submittedAt":{"type":"string","format":"date-time","nullable":true,"description":"When a player submitted the result","example":null},"homeTeamDetails":{"nullable":true,"description":"Placeholder describing the home slot while it is unresolved","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalSlotDetailsDto"}]},"awayTeamDetails":{"nullable":true,"description":"Placeholder describing the away slot while it is unresolved","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalSlotDetailsDto"}]},"createdAt":{"type":"string","format":"date-time","description":"When the game was created","example":"2026-08-20T11:02:00.000Z"},"homeTeam":{"nullable":true,"description":"Home team; null while the slot is unresolved. Present only when `games.homeTeam` (or `draws.rounds.games.homeTeam`) is populated — both are in the default populate for `GET /rounds/:idx`.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalTeamRefDto"}]},"awayTeam":{"nullable":true,"description":"Away team; null while the slot is unresolved. Present only when `games.awayTeam` (or `draws.rounds.games.awayTeam`) is populated — both are in the default populate for `GET /rounds/:idx`.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalTeamRefDto"}]},"winner":{"nullable":true,"description":"Winning team; null until the game is finished. Present only when `games.winner` (or `draws.rounds.games.winner`) is populated — both are in the default populate for `GET /rounds/:idx`.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalTeamRefDto"}]},"court":{"nullable":true,"description":"Assigned court. Present only when `games.court` is populated.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalCourtDto"}]},"score":{"nullable":true,"description":"Result. Present only when `games.score` is populated.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalScoreDto"}]}},"required":["idx","number","displayNumber","status","time","lengthInMinutes","courtNumber","matchDay","roundDetail","scheduleNumber","sectionNumber","isRetirement","retiredTeamId","liveStartedAt","resultApprovalStatus","submittedAt","homeTeamDetails","awayTeamDetails","createdAt"]},"ExternalLeagueTeamDto":{"type":"object","properties":{"idx":{"type":"string","description":"League team identifier","example":"d0e1f2a3-b4c5-4678-8d9e-0f1a2b3c4d5e"},"name":{"type":"string","description":"League team name","example":"Club Santa Fe"},"color":{"type":"string","description":"League team colour, hex","example":"#1E3A8A"},"logo":{"type":"string","nullable":true,"description":"League team logo URL","example":"https://cdn.setto.io/league-teams/santa-fe.png"},"position":{"type":"number","description":"Display order in the league standings","example":1},"pointsAdjustment":{"type":"number","description":"Signed manual adjustment folded into the league standings points","example":0}},"required":["idx","name","color","logo","position","pointsAdjustment"]},"ExternalLocationDto":{"type":"object","properties":{"formattedAddress":{"type":"string","description":"Full postal address as geocoded","example":"Av. Vasco de Quiroga 3800, Santa Fe, 05348 Ciudad de Mexico"},"city":{"type":"string","nullable":true,"description":"City","example":"Ciudad de Mexico"},"country":{"type":"string","nullable":true,"description":"Country","example":"Mexico"},"lat":{"type":"number","description":"Latitude","example":19.3607},"lng":{"type":"number","description":"Longitude","example":-99.2739},"postalCode":{"type":"string","nullable":true,"description":"Postal code","example":"05348"},"province":{"type":"string","nullable":true,"description":"State or province","example":"CDMX"}},"required":["formattedAddress","city","country","lat","lng","postalCode","province"]},"ExternalMeOrganizationDto":{"type":"object","properties":{"idx":{"type":"string","description":"Organization identifier","example":"e5f6a7b8-c9d0-4123-8e4f-5a6b7c8d9e0f"},"name":{"type":"string","description":"Organization name","example":"Setto Padel Tour"},"slug":{"type":"string","description":"URL-friendly identifier","example":"setto-padel-tour"},"avatar":{"type":"string","nullable":true,"description":"Organization logo URL","example":"https://cdn.setto.io/orgs/setto-padel-tour.png"},"website":{"type":"string","nullable":true,"description":"Organization website","example":"https://settopadeltour.mx"}},"required":["idx","name","slug","avatar","website"]},"ExternalMeResponseDto":{"type":"object","properties":{"organization":{"description":"The organization the token belongs to","allOf":[{"$ref":"#/components/schemas/ExternalMeOrganizationDto"}]},"token":{"description":"The token that authenticated this request","allOf":[{"$ref":"#/components/schemas/ExternalMeTokenDto"}]},"rateLimit":{"description":"Rate limit applied to this token","allOf":[{"$ref":"#/components/schemas/ExternalRateLimitDto"}]}},"required":["organization","token","rateLimit"]},"ExternalMeTokenDto":{"type":"object","properties":{"idx":{"type":"string","description":"Token identifier","example":"b0c1d2e3-f4a5-4678-8b90-1a2b3c4d5e6f"},"name":{"type":"string","description":"Name the organizer gave this token","example":"Federation feed"},"prefix":{"type":"string","description":"First 16 characters of the secret, safe to display and to log","example":"setto_live_9fA2"},"scopes":{"description":"Scopes granted to this token","example":["read"],"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","description":"When the token was created","example":"2026-09-17T09:12:00.000Z"},"expiresAt":{"type":"string","format":"date-time","nullable":true,"description":"When the token expires; null means it never does","example":null},"lastUsedAt":{"type":"string","format":"date-time","nullable":true,"description":"Last use, recorded at most once every five minutes; null until first use","example":"2026-09-17T09:40:00.000Z"}},"required":["idx","name","prefix","scopes","createdAt","expiresAt","lastUsedAt"]},"ExternalOrganizationRefDto":{"type":"object","properties":{"idx":{"type":"string","description":"Organization identifier","example":"e5f6a7b8-c9d0-4123-8e4f-5a6b7c8d9e0f"},"name":{"type":"string","description":"Organization name","example":"Setto Padel Tour"},"slug":{"type":"string","description":"URL-friendly identifier","example":"setto-padel-tour"}},"required":["idx","name","slug"]},"ExternalPageMetaDto":{"type":"object","properties":{"limit":{"type":"number","description":"Page size used","example":25},"offset":{"type":"number","description":"Rows skipped","example":0},"total":{"type":"number","description":"Total rows matching the filter, ignoring limit/offset","example":137}},"required":["limit","offset","total"]},"ExternalPlayerDto":{"type":"object","properties":{"idx":{"type":"string","description":"Player profile identifier","example":"c9d0e1f2-a3b4-4567-8c8d-9e0f1a2b3c4d"},"firstName":{"type":"string","description":"First name","example":"Mario"},"lastName":{"type":"string","description":"Last name","example":"Lugo"},"avatar":{"type":"string","nullable":true,"description":"Avatar URL from the linked account; null when unlinked","example":"https://cdn.setto.io/avatars/mario-lugo.png"}},"required":["idx","firstName","lastName","avatar"]},"ExternalPoolDto":{"type":"object","properties":{"idx":{"type":"string","description":"Pool identifier","example":"d6e7f8a9-b0c1-4234-8d5e-6f7081920314"},"name":{"type":"string","description":"Pool name","example":"Grupo A"},"number":{"type":"number","description":"Pool number","example":1},"teams":{"description":"Pool membership as references. Present only when `pools.teams` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalTeamRefDto"}},"standings":{"description":"Pool table in rank order. Present only when `pools.standings` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalStandingDto"}}},"required":["idx","name","number"]},"ExternalRateLimitDto":{"type":"object","properties":{"limit":{"type":"number","description":"Requests allowed per window, per token","example":120},"windowSeconds":{"type":"number","description":"Window length in seconds","example":60}},"required":["limit","windowSeconds"]},"ExternalRoundDto":{"type":"object","properties":{"idx":{"type":"string","description":"Round identifier","example":"a9b0c1d2-e3f4-4567-8a81-920314253647"},"name":{"description":"Round name","example":"Pool Play","allOf":[{"$ref":"#/components/schemas/RoundNames"}]},"type":{"description":"Round format","example":"ROUND_ROBIN_ROUND","allOf":[{"$ref":"#/components/schemas/RoundType"}]},"number":{"type":"number","description":"Round number within its division","example":1},"isSetup":{"type":"boolean","description":"Whether the organizer finished setting the round up","example":true},"isVisible":{"type":"boolean","description":"Whether the round is shown on public surfaces","example":true},"gamesPerTeam":{"type":"number","nullable":true,"description":"Games each team plays in this round","example":3},"gamesRequireWinners":{"type":"boolean","description":"Whether every game must end with a winner","example":true},"numberOfSets":{"type":"number","description":"Sets played per match","example":3},"proSets":{"type":"boolean","description":"Whether matches are played as a single pro set","example":false},"playAllSets":{"type":"boolean","description":"Whether every set is played even after one side has clinched the match","example":false},"pointsPerSet":{"type":"number","nullable":true,"description":"Target points per set (11 for pickleball, or the total games per pairs-Americano match); null = unconstrained","example":11},"placements":{"description":"Placements this round decides","example":[1,2],"type":"array","items":{"type":"number"}},"playEachTeamOnce":{"type":"boolean","nullable":true,"description":"Whether each team plays every other exactly once","example":true},"trueDoubleEliminationRound":{"type":"boolean","nullable":true,"description":"Whether this is a true double-elimination round","example":null},"numQualifiers":{"type":"number","nullable":true,"description":"Number of qualifying sections","example":null},"drawSize":{"type":"number","nullable":true,"description":"Total draw size including byes","example":null},"hasNextRoundTransitioned":{"type":"boolean","description":"Whether teams have already advanced out of this round","example":false},"createdAt":{"type":"string","format":"date-time","description":"When the round was created","example":"2026-08-20T10:55:00.000Z"},"division":{"nullable":true,"description":"The division (category) this round belongs to. Present only when `division` is populated — it is in the default populate for `GET /rounds/:idx`, and there is no such path under `divisions.rounds`.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalDivisionRefDto"}]},"pools":{"description":"Pools. Present only when `pools` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalPoolDto"}},"games":{"description":"Games. Present only when `games` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalGameDto"}},"draws":{"description":"Elimination draws. Present only when `draws` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalDrawDto"}}},"required":["idx","name","type","number","isSetup","isVisible","gamesPerTeam","gamesRequireWinners","numberOfSets","proSets","playAllSets","pointsPerSet","placements","playEachTeamOnce","trueDoubleEliminationRound","numQualifiers","drawSize","hasNextRoundTransitioned","createdAt"]},"ExternalScoreDto":{"type":"object","properties":{"idx":{"type":"string","description":"Score identifier","example":"f2a3b4c5-d6e7-4890-8f1a-2b3c4d5e6f70"},"home":{"type":"number","description":"Sets won by home","example":2},"away":{"type":"number","description":"Sets won by away","example":1},"playerPointsBalanced":{"type":"boolean","nullable":true,"description":"PB_INDIVIDUAL_LEAGUE only: whether captured per-player points reconcile with the set scores. Null when none were captured.","example":null},"sets":{"description":"Sets in set number order. Present only when `games.score.sets` (or `draws.rounds.games.score.sets`) is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalSetDto"}}},"required":["idx","home","away","playerPointsBalanced"]},"ExternalSetDto":{"type":"object","properties":{"idx":{"type":"string","description":"Set identifier","example":"e1f2a3b4-c5d6-4789-8e0f-1a2b3c4d5e6f"},"home":{"type":"number","description":"Home games won","example":6},"away":{"type":"number","description":"Away games won","example":4},"number":{"type":"number","description":"Set number, 1-based","example":1},"isTieBreak":{"type":"boolean","description":"Whether the set was played as a super tiebreak (counts as a set won, but only 1-0 toward games)","example":false}},"required":["idx","home","away","number","isTieBreak"]},"ExternalSlotDetailsDto":{"type":"object","properties":{"label":{"type":"string","description":"Label identifying the slot","example":"Del juego 3"},"teamNumber":{"type":"number","nullable":true,"description":"Team number from the advancement sequence","example":2},"poolNumber":{"type":"number","nullable":true,"description":"Pool number when the slot comes from pool play","example":1},"poolRank":{"type":"number","nullable":true,"description":"Pool rank when the slot comes from pool play","example":1},"sourceGameNumber":{"type":"number","nullable":true,"description":"Game number this slot resolves from","example":3},"sourceResult":{"nullable":true,"description":"Whether the slot takes the winner or the loser of the source game","example":"WINNER","allOf":[{"$ref":"#/components/schemas/ExternalSlotSourceResult"}]}},"required":["label","teamNumber","poolNumber","poolRank","sourceGameNumber","sourceResult"]},"ExternalSlotSourceResult":{"type":"string","enum":["WINNER","LOSER"],"description":"Whether the slot takes the winner or the loser of the source game"},"ExternalSponsorDto":{"type":"object","properties":{"idx":{"type":"string","description":"Sponsor identifier","example":"d4e5f6a7-b8c9-4012-8345-6789abcdef01"},"name":{"type":"string","description":"Sponsor name","example":"Bebidas del Valle"},"logoUrl":{"type":"string","nullable":true,"description":"Sponsor logo URL","example":"https://cdn.setto.io/sponsors/bebidas-del-valle.png"},"websiteUrl":{"type":"string","nullable":true,"description":"Sponsor website","example":"https://bebidasdelvalle.mx"},"description":{"type":"string","nullable":true,"description":"Sponsor description","example":"Patrocinador oficial de hidratacion"},"position":{"type":"number","nullable":true,"description":"Display order on public surfaces","example":1}},"required":["idx","name","logoUrl","websiteUrl","description","position"]},"ExternalStandingColumnDto":{"type":"object","properties":{"ordering":{"type":"number","description":"Display order, ascending","example":1},"type":{"description":"Which statistic the column shows","example":"GAMES_WON","allOf":[{"$ref":"#/components/schemas/StandingColumns"}]}},"required":["ordering","type"]},"ExternalStandingDto":{"type":"object","properties":{"idx":{"type":"string","description":"Standing row identifier","example":"c5d6e7f8-a9b0-4123-8c4d-5e6f70819203"},"rank":{"type":"number","description":"Stored rank as last recomputed. The public standings page re-applies the tournament head-to-head tiebreak rules on read, so its displayed order can differ from this value.","example":1},"awardedPoints":{"type":"number","description":"Circuit points awarded for this placement","example":250},"team":{"description":"The ranked team. Present only when `pools.standings.team` is populated.","allOf":[{"$ref":"#/components/schemas/ExternalTeamRefDto"}]},"teamStats":{"description":"Accumulated stats. Present only when `pools.standings.teamStats` is populated.","allOf":[{"$ref":"#/components/schemas/ExternalTeamStatsDto"}]}},"required":["idx","rank","awardedPoints"]},"ExternalTeamDto":{"type":"object","properties":{"idx":{"type":"string","description":"Team identifier","example":"b8c9d0e1-f2a3-4456-8b7c-8d9e0f1a2b3c"},"name":{"type":"string","description":"Team name","example":"Lugo / Ramirez"},"seed":{"type":"number","nullable":true,"description":"Registration seed used for ordering","example":3},"seedNumber":{"type":"number","nullable":true,"description":"Bracket seed number for tennis-style placement","example":1},"club":{"type":"string","nullable":true,"description":"Free-text club the team represents","example":"Club Deportivo Santa Fe"},"picture":{"type":"string","nullable":true,"description":"Team picture URL","example":"https://cdn.setto.io/teams/lugo-ramirez.png"},"description":{"type":"string","nullable":true,"description":"Team description","example":"Campeones 2025"},"ranking":{"type":"number","nullable":true,"description":"Organizer-entered ranking","example":12},"isWildCard":{"type":"boolean","description":"Whether the team entered as a wild card","example":false},"qualifierStatus":{"nullable":true,"description":"Progress through the qualifying draw","example":"QUALIFIED","allOf":[{"$ref":"#/components/schemas/QualifierStatus"}]},"drawAssignment":{"nullable":true,"description":"Which draw the team belongs to","example":"MAIN_DRAW","allOf":[{"$ref":"#/components/schemas/DrawAssignment"}]},"createdAt":{"type":"string","format":"date-time","description":"When the team was created","example":"2026-08-01T17:30:00.000Z"},"division":{"nullable":true,"description":"The division (category) this team competes in. Present only when `division` is populated — it is in the default populate for `GET /tournaments/:idx/teams`, and there is no such path under `divisions.teams`.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalDivisionRefDto"}]},"players":{"description":"Roster. Present only when `playerProfiles` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalPlayerDto"}},"captainProfileIdx":{"type":"string","nullable":true,"description":"Team format only: idx of the roster player who is captain. Match against `players[].idx`. Present only when `captainProfile` is populated.","example":"c9d0e1f2-a3b4-4567-8c8d-9e0f1a2b3c4d"},"leagueTeam":{"nullable":true,"description":"TEAM_LEAGUE only. Present only when `leagueTeam` is populated.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalLeagueTeamDto"}]}},"required":["idx","name","seed","seedNumber","club","picture","description","ranking","isWildCard","qualifierStatus","drawAssignment","createdAt"]},"ExternalTeamRefDto":{"type":"object","properties":{"idx":{"type":"string","description":"Team identifier","example":"b8c9d0e1-f2a3-4456-8b7c-8d9e0f1a2b3c"},"name":{"type":"string","description":"Team name. In doubles this is the two player names; in team format it is the captain-authored name.","example":"Lugo / Ramirez"}},"required":["idx","name"]},"ExternalTeamStatsDto":{"type":"object","properties":{"idx":{"type":"string","description":"Team stats identifier","example":"b4c5d6e7-f8a9-4012-8b3c-4d5e6f708192"},"points":{"type":"number","description":"Standings points","example":9},"wins":{"type":"number","description":"Matches won","example":3},"losses":{"type":"number","description":"Matches lost","example":1},"ties":{"type":"number","description":"Matches tied","example":0},"cancelled":{"type":"number","description":"Matches cancelled","example":0},"forfeits":{"type":"number","description":"Matches forfeited","example":0},"pointsFor":{"type":"number","description":"Games won","example":24},"pointsAgainst":{"type":"number","description":"Games lost","example":15},"setsPointsFor":{"type":"number","description":"Sets won","example":7},"setsPointsAgainst":{"type":"number","description":"Sets lost","example":3},"totalGamesPlayed":{"type":"number","description":"Matches played","example":4},"pointsDifference":{"type":"number","description":"Games won minus games lost","example":9},"setsPointsDifference":{"type":"number","description":"Sets won minus sets lost","example":4}},"required":["idx","points","wins","losses","ties","cancelled","forfeits","pointsFor","pointsAgainst","setsPointsFor","setsPointsAgainst","totalGamesPlayed","pointsDifference","setsPointsDifference"]},"ExternalTiebreakRuleDto":{"type":"object","properties":{"idx":{"type":"string","description":"Ranked tiebreak rule identifier","example":"d4e5f6a7-b8c9-4012-8d3e-4f5a6b7c8d9e"},"rank":{"type":"number","description":"Position in the tiebreak order; 1 is applied first","example":1},"rule":{"description":"The rule this position applies","allOf":[{"$ref":"#/components/schemas/ExternalTiebreakRuleRefDto"}]}},"required":["idx","rank","rule"]},"ExternalTiebreakRuleRefDto":{"type":"object","properties":{"idx":{"type":"string","description":"Tiebreak rule identifier","example":"c3d4e5f6-a7b8-4901-8c2d-3e4f5a6b7c8d"},"name":{"type":"string","description":"Rule name","example":"Head to head"},"acronym":{"type":"string","description":"Short label used in standings tables","example":"H2H"}},"required":["idx","name","acronym"]},"ExternalTournamentDto":{"type":"object","properties":{"idx":{"type":"string","description":"Tournament identifier","example":"f6a7b8c9-d0e1-4234-8f5a-6b7c8d9e0f1a"},"slug":{"type":"string","description":"URL-friendly identifier","example":"liga-conquistadores-2026"},"name":{"type":"string","description":"Tournament name","example":"Liga Conquistadores 2026"},"type":{"description":"Competition format","example":"TOURNAMENT","allOf":[{"$ref":"#/components/schemas/TournamentType"}]},"sport":{"description":"Sport played","example":"PADEL","allOf":[{"$ref":"#/components/schemas/Sport"}]},"status":{"description":"Lifecycle status","example":"IN_PROGRESS","allOf":[{"$ref":"#/components/schemas/TournamentStatus"}]},"startDate":{"type":"string","format":"date-time","description":"First day of play, UTC","example":"2026-09-12T00:00:00.000Z"},"endDate":{"type":"string","format":"date-time","description":"Last day of play, UTC","example":"2026-09-14T00:00:00.000Z"},"timezone":{"type":"string","nullable":true,"description":"IANA timezone the schedule is authored in","example":"America/Mexico_City"},"addOneHour":{"type":"boolean","nullable":true,"description":"Legacy display offset applied to start and end dates","example":false},"matchDays":{"type":"number","nullable":true,"description":"Number of match days (jornadas)","example":3},"americanoRounds":{"type":"number","nullable":true,"description":"PADEL_AMERICANO only: number of rounds","example":null},"courtNames":{"type":"object","nullable":true,"additionalProperties":{"type":"string"},"description":"Custom court names, keyed by court number","example":{"1":"Cancha Central","2":"Cancha 2"}},"scheduleType":{"nullable":true,"description":"Whether games get assigned courts and times or players self-arrange; null until the organizer chooses","example":"ASSIGNED","allOf":[{"$ref":"#/components/schemas/ScheduleType"}]},"isPublic":{"type":"boolean","description":"Whether the public tournament page is reachable","example":true},"isFormatComplete":{"type":"boolean","description":"Whether the organizer finished configuring the format","example":true},"banner":{"type":"string","nullable":true,"description":"Banner image URL","example":"https://cdn.setto.io/banners/liga-conquistadores-2026.jpg"},"whoCanSubmit":{"description":"Who may submit match results","example":"ADMINS_ONLY","allOf":[{"$ref":"#/components/schemas/WhoCanSubmitResults"}]},"resultApprovalMode":{"description":"Whether player-submitted results need approval","example":"NONE","allOf":[{"$ref":"#/components/schemas/ResultApprovalMode"}]},"displayPoints":{"type":"boolean","description":"Whether points are shown on public standings","example":true},"matchdayBonusEnabled":{"type":"boolean","description":"TEAM_LEAGUE only: whether the winner of each match day earns a bonus ranking point","example":true},"inscriptionCost":{"type":"number","nullable":true,"description":"Inscription price, in whole pesos","example":1200},"totalPrize":{"type":"number","nullable":true,"description":"Advertised prize pool, in whole pesos","example":50000},"standingColumns":{"nullable":true,"description":"Standings table columns the organizer chose, in order","type":"array","items":{"$ref":"#/components/schemas/ExternalStandingColumnDto"}},"createdAt":{"type":"string","format":"date-time","description":"When the tournament was created","example":"2026-08-01T16:40:00.000Z"},"publicUrl":{"type":"string","description":"Canonical public page for this tournament","example":"https://www.setto.io/t/liga-conquistadores-2026"},"organization":{"description":"The organization that owns this tournament","allOf":[{"$ref":"#/components/schemas/ExternalOrganizationRefDto"}]},"club":{"nullable":true,"description":"Host club. Present only when `club` is populated.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalClubDto"}]},"divisions":{"description":"Divisions (categorias). Present only when `divisions` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalDivisionDto"}},"sponsors":{"description":"Sponsors. Present only when `sponsors` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalSponsorDto"}},"circuit":{"nullable":true,"description":"Parent circuit. Present only when `circuit` is populated.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalCircuitDto"}]},"circuitCategory":{"nullable":true,"description":"Circuit category. Present only when `circuitCategory` is populated.","type":"object","allOf":[{"$ref":"#/components/schemas/ExternalCircuitCategoryDto"}]},"rankedTiebreakRules":{"description":"Standings tiebreak order. Present only when `rankedTiebreakRules` is populated.","type":"array","items":{"$ref":"#/components/schemas/ExternalTiebreakRuleDto"}}},"required":["idx","slug","name","type","sport","status","startDate","endDate","timezone","addOneHour","matchDays","americanoRounds","courtNames","scheduleType","isPublic","isFormatComplete","banner","whoCanSubmit","resultApprovalMode","displayPoints","matchdayBonusEnabled","inscriptionCost","totalPrize","standingColumns","createdAt","publicUrl","organization"]},"ExternalTournamentListResponseDto":{"type":"object","properties":{"data":{"description":"Tournaments, newest start date first","type":"array","items":{"$ref":"#/components/schemas/ExternalTournamentDto"}},"meta":{"description":"Paging information for this result set","allOf":[{"$ref":"#/components/schemas/ExternalPageMetaDto"}]}},"required":["data","meta"]},"ExternalTournamentRefDto":{"type":"object","properties":{"idx":{"type":"string","description":"Tournament identifier","example":"f6a7b8c9-d0e1-4234-8f5a-6b7c8d9e0f1a"}},"required":["idx"]},"ExternalValidationErrorDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"Always 400","example":400},"message":{"description":"One entry per failed constraint","example":["each value in populate must be one of the following values: club, club.courts, divisions"],"type":"array","items":{"type":"string"}},"error":{"type":"string","description":"Always the literal \"Bad Request\"","example":"Bad Request"}},"required":["statusCode","message","error"]},"GameResultApprovalStatus":{"type":"string","enum":["PENDING","APPROVED","REJECTED"],"description":"Approval state of a player-submitted result; null when no player submitted one"},"GameStatus":{"type":"string","enum":["UPCOMING","FINISHED","CANCELLED","FORFEIT","BYE"],"description":"Game status"},"QualifierStatus":{"type":"string","enum":["COMPETING","QUALIFIED","PLACED_IN_MAIN_DRAW","ELIMINATED"],"description":"Progress through the qualifying draw"},"ResultApprovalMode":{"type":"string","enum":["NONE","ADMIN"],"description":"Whether player-submitted results need approval"},"RoundNames":{"type":"string","enum":["Pool Play","Playoffs","Qualifiers"],"description":"Round name"},"RoundType":{"type":"string","enum":["ROUND_ROBIN_ROUND","SINGLE_ELIMINATION_ROUND","QUALIFIERS_ROUND"],"description":"Round format"},"ScheduleType":{"type":"string","enum":["ASSIGNED","FLEXIBLE_SCHEDULE"],"description":"Whether games get assigned courts and times or players self-arrange; null until the organizer chooses"},"Sport":{"type":"string","enum":["PADEL","TENNIS","PICKLEBALL"]},"StandingColumns":{"type":"string","enum":["GAMES_PLAYED","GAMES_WON","GAMES_TIED","GAMES_LOST","POINTS_DIFFERENCE","GAMES_CANCELLED","GAMES_FORFEITED","SETS","SETS_FOR","SETS_AGAINST","SETS_PLAYED","SETS_DIFFERENCE","POINTS_FOR","POINTS_AGAINST","GAMES_POINTS_WON","GAMES_POINTS_LOST","GAMES_POINTS_DIFFERENCE","GAMES_POINTS_TOTAL"],"description":"Which statistic the column shows"},"TournamentStatus":{"type":"string","enum":["DRAFT","UPCOMING","IN_PROGRESS","COMPLETED","ARCHIVED"]},"TournamentType":{"type":"string","enum":["TEAM_LEAGUE","LEAGUE","TOURNAMENT","INDIVIDUAL_LEAGUE","CPAM_EXPRESS_LUCKY_LOSER","PADEL_AMERICANO","PADEL_AMERICANO_TEAMS","PB_INDIVIDUAL_LEAGUE"],"description":"Competition format"},"WhoCanSubmitResults":{"type":"string","enum":["ADMINS_ONLY","PLAYERS"],"description":"Who may submit match results"}}},"security":[{"apiToken":[]}]}