SETTO API

Obtener un torneo

Usa GET /v1/external/tournaments/{idx} para leer un torneo e incrustar su club, categorías, rondas, patrocinadores, circuito y reglas de desempate con populate.

GET /v1/external/tournaments/{idx} devuelve un torneo por su UUID, con cualquiera de siete relaciones incrustadas a petición. Es la llamada detrás de la página principal de un torneo: nombre, fechas, sede, categorías y patrocinadores en un solo viaje. Sin parámetro populate devuelve el torneo más club y divisions.

Petición

GET /v1/external/tournaments/3c9b7f52-6d41-4a8e-b1f0-2e7d5c9a4b18?populate=club,club.courts,divisions,divisions.rounds HTTP/1.1
Host: api.setto.io
Authorization: Bearer setto_live_…

Parámetros

ParámetroEnNotas
idxrutaEl UUID v4 del torneo, sacado de listTournaments
populateconsultaCualquiera de club, club.courts, divisions, divisions.rounds, sponsors, circuit, circuitCategory, rankedTiebreakRules. Por defecto club,divisions
curl -s -G \
  https://api.setto.io/v1/external/tournaments/3c9b7f52-6d41-4a8e-b1f0-2e7d5c9a4b18 \
  -H "Authorization: Bearer $SETTO_API_TOKEN" \
  -d populate=club,divisions,divisions.rounds,sponsors

Respuesta

200 OK (recortado)
{
  "idx": "3c9b7f52-6d41-4a8e-b1f0-2e7d5c9a4b18",
  "slug": "torneo-apertura-2026",
  "name": "Torneo Apertura 2026",
  "type": "TOURNAMENT",
  "sport": "PADEL",
  "status": "IN_PROGRESS",
  "startDate": "2026-09-18T00:00:00.000Z",
  "endDate": "2026-09-20T00:00:00.000Z",
  "timezone": "America/Monterrey",
  "courtNames": { "1": "Cancha Central", "2": "Cancha 2" },
  "scheduleType": "ASSIGNED",
  "isPublic": true,
  "isFormatComplete": true,
  "displayPoints": true,
  "standingColumns": [
    { "ordering": 1, "type": "GAMES_WON" },
    { "ordering": 2, "type": "POINTS_DIFFERENCE" }
  ],
  "createdAt": "2026-06-02T18:21:07.442Z",
  "publicUrl": "https://www.setto.io/t/torneo-apertura-2026",
  "organization": {
    "idx": "6f1d9c2e-4a7b-4f3d-9d2c-8b5e1a0f7c43",
    "name": "Club Padel Monterrey",
    "slug": "club-padel-monterrey"
  },
  "club": {
    "idx": "5e2b8c04-1a76-4f93-b8d5-7c0e3a9f41b2",
    "name": "Club Padel Monterrey",
    "address": "Av. Lázaro Cárdenas 2400, Monterrey",
    "website": "https://clubpadelmty.mx",
    "image": "https://cdn.setto.io/clubs/club-padel-monterrey.jpg",
    "location": {
      "formattedAddress": "Av. Lázaro Cárdenas 2400, Monterrey, N.L., México",
      "city": "Monterrey",
      "country": "México",
      "lat": 25.6514,
      "lng": -100.3561,
      "postalCode": "64920",
      "province": "Nuevo León"
    }
  },
  "divisions": [
    {
      "idx": "7b2f4d16-9c83-4e50-a7d1-3f6c8b204e59",
      "name": "Cuarta Fuerza Varonil",
      "number": 1,
      "color": "#2563eb",
      "isDoubles": true,
      "isVisible": true,
      "price": 900,
      "minParticipants": 8,
      "maxParticipants": 32,
      "createdAt": "2026-06-02T18:24:55.901Z",
      "tournament": { "idx": "3c9b7f52-6d41-4a8e-b1f0-2e7d5c9a4b18" },
      "rounds": [
        {
          "idx": "9d3c6a84-7e15-4b02-8f6d-1c4a9e7b53f2",
          "name": "Pool Play",
          "type": "ROUND_ROBIN_ROUND",
          "number": 1,
          "isSetup": true,
          "isVisible": true,
          "numberOfSets": 3,
          "division": {
            "idx": "7b2f4d16-9c83-4e50-a7d1-3f6c8b204e59",
            "name": "Cuarta Fuerza Varonil"
          }
        },
        {
          "idx": "2e7f5b10-8c94-4d63-a1b8-7f0e3d6c2a95",
          "name": "Playoffs",
          "type": "SINGLE_ELIMINATION_ROUND",
          "number": 2,
          "isSetup": true,
          "isVisible": true,
          "drawSize": 8,
          "division": {
            "idx": "7b2f4d16-9c83-4e50-a7d1-3f6c8b204e59",
            "name": "Cuarta Fuerza Varonil"
          }
        }
      ]
    }
  ],
  "sponsors": [
    {
      "idx": "af03d7e5-6b18-4c92-8d40-1e7b5a2c9f36",
      "name": "Head",
      "logoUrl": "https://cdn.setto.io/sponsors/head.png",
      "websiteUrl": "https://head.com",
      "position": 1
    }
  ]
}

Consejos y trampas

  • populate reemplaza el valor por defecto. ?populate=divisions elimina club de la respuesta. Vuelve a listar todo lo que necesites.
  • divisions.rounds es la forma barata de obtener los ids de ronda. Una sola llamada te da cada idx de ronda del torneo, que es exactamente la entrada que quiere getRound. No necesitas listDivisions para eso.
  • Revisa la clave, no un arreglo vacío. Una relación sin popular está ausente: tournament.sponsors es undefined, no []. 'sponsors' in tournament distingue entre "no lo pedí" y "no hay ninguno".
  • Las categorías ocultas regresan. Filtra por isVisible antes de renderizar una página pública.
  • Un 404 también significa "organización equivocada". La API no te va a decir cuál — consulta Errores.
  • rankedTiebreakRules explica el orden de la clasificación. Si estás reconstruyendo una tabla de clasificación y quieres que coincida con setto.io, popula las reglas y aplícalas en orden de rank en lugar de confiar solo en el rank almacenado.
  • courtNames es un objeto indexado por número de cancha, no un arreglo.

Relacionado

Herramienta MCP: get_tournament

En esta página