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 en los deportes de raqueta, no puntos. Los puntos por set están ensets[], ordenados pornumber.- En
FUTBOLesos mismos campos son goles.score.home/score.awayson los goles al tiempo reglamentario, ysets[]lleva exactamente un elemento que los repite conisTieBreak: false. Los desempates van en campos aparte, y los tres sonnullen los deportes de raqueta: revisa que no sean nulos antes de leerlos.score.extraTimecuenta solo los goles marcados durante el tiempo extra (súmalos ascore.home/score.awaypara el total tras el tiempo extra) y esnullcuando no se jugó tiempo extra;score.penaltiescuenta los penales convertidos en la tanda — nunca son goles ni entran en la tabla de posiciones — y esnullcuando no hubo tanda;score.decisionMethod(REGULATION,EXTRA_TIME,SHOOTOUT,WALKOVER) dice qué definió el juego, y solo esnullmientras el juego no tenga resultado oficial (FINISHEDoFORFEIT). Así, un juego de grupo terminado y resuelto en el tiempo reglamentario traeextraTime: null,penalties: nullydecisionMethod: "REGULATION": los desempates van vacíos, el método no. Un juego de grupo o de liga que termina igualado simplemente es un empate, conwinner: null. 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.