Obtener una ronda
Usa GET /v1/external/rounds/{idx} para leer los grupos, clasificación, partidos, marcadores y cuadro de eliminación de una ronda — el endpoint más rico de la API externa de SETTO.
GET /v1/external/rounds/{idx} es donde viven los resultados. Una ronda es una
fase de una categoría — juego de grupos, playoffs, calificación — y este endpoint
devuelve sus grupos y clasificación, su lista plana de partidos y la estructura
de su cuadro, con 22 rutas de populate para elegir. Un marcador en vivo, una
tabla de clasificación y un cuadro son todos esta misma llamada con un populate
distinto.
Los ids de ronda salen de getTournament con
populate=divisions.rounds, o de
listDivisions.
Petición
GET /v1/external/rounds/9d3c6a84-7e15-4b02-8f6d-1c4a9e7b53f2 HTTP/1.1
Host: api.setto.io
Authorization: Bearer setto_live_…Parámetros
| Parámetro | En | Notas |
|---|---|---|
idx | ruta | El UUID v4 de la ronda |
populate | consulta | Hasta 22 rutas — consulta Populate |
Enviada sin populate, el endpoint aplica un valor por defecto generoso:
division, pools, pools.teams, games, games.homeTeam, games.awayTeam,
games.winner, draws.rounds, draws.rounds.games,
draws.rounds.games.homeTeam, draws.rounds.games.awayTeam,
draws.rounds.games.winner, draws.rounds.games.score y
draws.rounds.games.score.sets.
# Tabla de clasificación de una ronda de fase de grupos
curl -s -G \
https://api.setto.io/v1/external/rounds/9d3c6a84-7e15-4b02-8f6d-1c4a9e7b53f2 \
-H "Authorization: Bearer $SETTO_API_TOKEN" \
-d populate=pools.standings.team,pools.standings.teamStatsRespuesta — fase de grupos
{
"idx": "9d3c6a84-7e15-4b02-8f6d-1c4a9e7b53f2",
"name": "Pool Play",
"type": "ROUND_ROBIN_ROUND",
"number": 1,
"isSetup": true,
"isVisible": true,
"numberOfSets": 3,
"proSets": false,
"playAllSets": false,
"gamesPerTeam": 3,
"hasNextRoundTransitioned": true,
"createdAt": "2026-06-02T18:25:10.338Z",
"division": {
"idx": "7b2f4d16-9c83-4e50-a7d1-3f6c8b204e59",
"name": "Cuarta Fuerza Varonil"
},
"pools": [
{
"idx": "5a8d2c71-3f96-4e18-b0d7-9c2e6a4f8b13",
"name": "Grupo A",
"number": 1,
"standings": [
{
"idx": "3f8b0d25-7a14-4e69-b2c8-0d5e9f1a6c73",
"rank": 1,
"awardedPoints": 6,
"team": {
"idx": "e0c4b839-2d17-4a56-9fb3-6e8d1c05a274",
"name": "Álvarez / Peña"
},
"teamStats": {
"idx": "7c1a4e08-9d35-42b7-8f60-3a2e5b9d1f47",
"points": 6,
"wins": 2,
"losses": 0,
"ties": 0,
"cancelled": 0,
"forfeits": 0,
"pointsFor": 4,
"pointsAgainst": 1,
"setsPointsFor": 48,
"setsPointsAgainst": 31,
"totalGamesPlayed": 2,
"pointsDifference": 3,
"setsPointsDifference": 17
}
}
]
}
],
"games": [
{
"idx": "4f6e9b27-5a03-4c81-bd52-7e1a8c3f9d06",
"number": 1,
"displayNumber": 1,
"status": "FINISHED",
"time": "2026-09-18T17:00:00.000Z",
"lengthInMinutes": 90,
"courtNumber": 3,
"matchDay": null,
"isRetirement": false,
"homeTeamDetails": null,
"awayTeamDetails": null,
"createdAt": "2026-06-02T18:26:44.019Z",
"homeTeam": {
"idx": "e0c4b839-2d17-4a56-9fb3-6e8d1c05a274",
"name": "Álvarez / Peña"
},
"awayTeam": {
"idx": "b71f3a05-6c28-49ed-8a94-2f5b0d7e1c63",
"name": "Ramos / Ortega"
},
"winner": {
"idx": "e0c4b839-2d17-4a56-9fb3-6e8d1c05a274",
"name": "Álvarez / Peña"
}
}
]
}El valor por defecto no incluye games.score
El arreglo plano games de arriba no tiene clave score, porque el populate
por defecto cubre draws.rounds.games.score pero no games.score. Para tener
marcadores en la lista plana, pídelos — y recuerda que populate reemplaza el
valor por defecto, así que vuelve a listar lo que aún necesites:
populate=division,pools,pools.teams,games,games.homeTeam,games.awayTeam,games.winner,games.score,games.score.sets.
Respuesta — cuadro de eliminación
{
"idx": "2e7f5b10-8c94-4d63-a1b8-7f0e3d6c2a95",
"name": "Playoffs",
"type": "SINGLE_ELIMINATION_ROUND",
"number": 2,
"isSetup": true,
"isVisible": true,
"drawSize": 8,
"numQualifiers": 8,
"placements": [1, 3],
"division": {
"idx": "7b2f4d16-9c83-4e50-a7d1-3f6c8b204e59",
"name": "Cuarta Fuerza Varonil"
},
"draws": [
{
"idx": "8e5c2a90-4b17-4d63-9f28-1c7a0e3b5d64",
"placement": 1,
"rounds": [
{
"idx": "d16b8f43-0c95-4e72-a835-6b2d9f1c4e07",
"label": "Semifinals",
"order": 2,
"games": [
{
"idx": "0a7d3c58-6e21-4b94-8f05-2d9c1e7a4b36",
"number": 5,
"displayNumber": 5,
"status": "FINISHED",
"time": "2026-09-20T16:00:00.000Z",
"courtNumber": 1,
"homeTeam": {
"idx": "e0c4b839-2d17-4a56-9fb3-6e8d1c05a274",
"name": "Álvarez / Peña"
},
"awayTeam": {
"idx": "b71f3a05-6c28-49ed-8a94-2f5b0d7e1c63",
"name": "Ramos / Ortega"
},
"winner": {
"idx": "e0c4b839-2d17-4a56-9fb3-6e8d1c05a274",
"name": "Álvarez / Peña"
},
"homeTeamDetails": null,
"awayTeamDetails": null,
"score": {
"idx": "1b9d7c36-4e58-40af-92c1-6d3f8a05b7e2",
"home": 2,
"away": 1,
"playerPointsBalanced": null,
"sets": [
{
"idx": "aa1c4e72-0b96-4d38-85f7-3e2a9c1d6b04",
"number": 1,
"home": 6,
"away": 4,
"isTieBreak": false
},
{
"idx": "bb2d5f83-1c07-4e49-96a8-4f3b0d2e7c15",
"number": 2,
"home": 3,
"away": 6,
"isTieBreak": false
},
{
"idx": "cc3e6094-2d18-4f5a-a7b9-5041ce3f8d26",
"number": 3,
"home": 7,
"away": 5,
"isTieBreak": false
}
]
}
}
]
},
{
"idx": "e27c9a56-1d08-4f83-b946-7c3e0a2f5b18",
"label": "Final",
"order": 3,
"games": [
{
"idx": "5c8f1b04-7a26-4d93-8e51-0b4d9c2a7f63",
"number": 7,
"displayNumber": 7,
"status": "UPCOMING",
"time": "2026-09-20T19:00:00.000Z",
"homeTeam": null,
"awayTeam": null,
"winner": null,
"homeTeamDetails": {
"label": "Winner of Game 5",
"teamNumber": null,
"poolNumber": null,
"poolRank": null,
"sourceGameNumber": 5,
"sourceResult": "WINNER"
},
"awayTeamDetails": {
"label": "Winner of Game 6",
"teamNumber": null,
"poolNumber": null,
"poolRank": null,
"sourceGameNumber": 6,
"sourceResult": "WINNER"
}
}
]
}
]
}
]
}Consejos y trampas
- Los partidos pueden aparecer dos veces. Un partido de cuadro está en
draws[].rounds[].games[]y puede estar también en elgames[]plano. Elimina duplicados porgame.idxantes de contar cualquier cosa. - Ordena las rondas del cuadro por
order, no por su posición en el arreglo, y acomódalas de izquierda a derecha.label(Quarterfinals,Semifinals,Final) es una cadena en inglés que produce SETTO — tradúcela tú si tu sitio no está en inglés. placementsepara los cuadros.placement: 1es el cuadro principal; los valores mayores son cuadros de consolación y de tercer lugar. Filtra en lugar de dar por hechodraws[0].- Los huecos vacíos son normales. Antes de que se llene un cuadro,
homeTeam/awayTeamsonnullyhomeTeamDetailste dice de dónde va a salir el equipo. RenderizasourceResult+sourceGameNumber(Ganador del juego 5) en lugar dellabelalmacenado en inglés. score.home/score.awayson sets ganados, no puntos. Los puntos por set están ensets[], ordenados pornumber.statusno es solo UPCOMING/FINISHED. ManejaBYE(un pase sin rival),FORFEITyCANCELLED— unBYEtiene un equipo y un ganador pero ningún marcador con sentido.rankes el rango almacenado. El sitio público aplica encima los desempates head-to-head, así que una tabla armada solo conrankpuede diferir de la de setto.io. Consulta Modelo de datos.- Las rondas de liga por equipos pueden tener
division: null. La ronda pertenece al torneo, no a una categoría; no supongas que puedes agrupar cada ronda bajo una categoría. - Las rondas ocultas regresan con
isVisible: false. Revísalo antes de publicar. - Este es el payload que vale la pena cachear. Cambia solo cuando alguien
captura un resultado. Combina una caché de 30–60 s del lado del servidor con
If-None-Match— consulta Límites de uso.
Relacionado
- Populate — las 22 rutas y la lista por defecto.
- Modelo de datos — grupos, cuadros, partidos, marcadores.
- Referencia:
getRound.
Herramienta MCP: get_round
Listar equipos
Usa GET /v1/external/tournaments/{idx}/teams para leer cada pareja o jugador inscrito, filtrar por categoría e incrustar jugadores, capitán y equipo de liga.
Referencia de la API
Cómo funciona la referencia generada de la API externa de SETTO — una página por operación, un panel Try it donde puedes pegar un token, y el documento OpenAPI crudo.