SETTO API

Listar torneos

Usa GET /v1/external/tournaments para encontrar los torneos que alcanza tu token, filtrarlos por estado y deporte, y paginar el archivo de una temporada.

GET /v1/external/tournaments es la puerta de entrada de toda integración: es como conviertes "mis torneos" en una lista de valores idx de torneo que toman los demás endpoints. Filtra por status y sport, pagina con limit/offset, y devuelve filas ordenadas por startDate descendente. Los usos típicos son una franja de "torneos actuales" en el sitio de un club, una página de archivo de temporada y el paso de descubrimiento de una exportación nocturna.

Petición

GET /v1/external/tournaments?status=IN_PROGRESS&sport=PADEL&limit=10 HTTP/1.1
Host: api.setto.io
Authorization: Bearer setto_live_…

Parámetros de consulta

ParámetroTipoPor defectoNotas
statusenum—DRAFT, UPCOMING, IN_PROGRESS, COMPLETED, ARCHIVED
sportenum—PADEL, TENNIS, PICKLEBALL, FUTBOL
populatelista(ninguno)Aquí solo se permite club
limitentero251–100
offsetentero00 o mayor
curl -s -G https://api.setto.io/v1/external/tournaments \
  -H "Authorization: Bearer $SETTO_API_TOKEN" \
  -d status=IN_PROGRESS \
  -d sport=PADEL \
  -d limit=10

Respuesta

200 OK (una fila, recortada)
{
  "data": [
    {
      "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",
      "matchDays": null,
      "isPublic": true,
      "isFormatComplete": true,
      "banner": "https://cdn.setto.io/banners/torneo-apertura-2026.jpg",
      "displayPoints": true,
      "inscriptionCost": 900,
      "totalPrize": 40000,
      "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"
      }
    }
  ],
  "meta": { "limit": 10, "offset": 0, "total": 1 }
}

Las filas de data son objetos de torneo completos — la misma forma que devuelve getTournament — menos las relaciones, ya que este endpoint no popula nada por defecto.

El campo cuya forma depende del deporte es sportSettings: un torneo FUTBOL lleva ahí un objeto, y los torneos de PADEL, TENNIS y PICKLEBALL llevan null. standingColumns también sigue al deporte: una fila de FUTBOL puede listar GOALS_FOR, GOALS_AGAINST y GOAL_DIFFERENCE, que nunca aparecen en un torneo de raqueta (consulta Modelo de datos).

200 OK (una fila de FUTBOL, fragmento)
{
  "sport": "FUTBOL",
  "type": "TOURNAMENT",
  "sportSettings": {
    "modality": "F7",
    "extraTime": true,
    "matchMinutes": 50,
    "h2hRequiresCompleteSubset": true,
    "forfeitScore": 3,
    "fairPlayWeights": null
  }
}

Consejos y trampas

  • Los borradores y archivados vienen incluidos. Sin filtro status obtienes también torneos DRAFT y ARCHIVED. Una franja pública de "qué hay" casi siempre quiere status=IN_PROGRESS más status=UPCOMING — dos llamadas, ya que status toma un solo valor.
  • sport=FUTBOL selecciona los torneos de fútbol. Esas filas siempre llevan type: "TOURNAMENT" y un sportSettings no nulo, inscriben equipos en lugar de parejas, y nunca forman parte de un circuito. Trata el enum como abierto: deja pasar un sport que no reconozcas en lugar de lanzar un error.
  • isPublic: false igual se devuelve. Te dice que el organizador apagó la página pública; la API no filtra por eso. Si estás replicando el sitio público, salta esas filas por tu cuenta.
  • Lo que trae la lista depende del token. Un token de organización lista los torneos de esa organización (incluidos los compartidos con ella); un token personal lista todos los torneos que su dueño administra hoy, incluidos los personales. Si falta un torneo que esperabas en la lista de un token de organización, probablemente pertenece a un usuario y no a la organización: usa un token personal para alcanzarlo. Con un token personal, la organization de cada fila es la organización principal del torneo, o null para un torneo personal.
  • No popules aquí. club es la única relación permitida, y en una página de 100 filas son 100 joins. Mejor trae el club una vez con getTournament.
  • Pagina con limit=100 para las exportaciones, y elimina duplicados por idx — consulta Paginación.
  • El orden es startDate descendente, así que "el torneo actual" suele ser data[0] cuando filtras por status=IN_PROGRESS.

Relacionado

Herramienta MCP: list_tournaments

En esta página