SETTO API

Inicio rápido

Crea un token de API de organización en el panel de SETTO y haz tus primeras tres peticiones a la API externa con curl, JavaScript o Python.

Esta página te lleva de cero a un payload de torneo en cinco minutos: crea un token en el panel de organizador de SETTO, confírmalo con GET /v1/external/me, lista tus torneos y luego trae un torneo con sus categorías incrustadas. Cada petición es un GET simple con una cabecera Authorization: Bearer — sin SDK, sin baile de OAuth, sin client secret.

Antes de empezar

Necesitas una organización en SETTO y haberla creado tú o tener el rol ADMIN en ella. Los torneos personales — los que no están ligados a una organización — no son accesibles a través de esta API.

Crea un token de API

En app.setto.io, abre Organización, elige tu organización y ve a la pestaña API. Selecciona Crear token, ponle un nombre que reconozcas después (Website widget, Season export, …), opcionalmente elige una expiración de 30, 90 o 365 días, y confirma.

El secreto se muestra exactamente una vez

SETTO guarda solo un hash del token. El valor completo setto_live_… aparece en el diálogo justo después de crearlo y nunca más — cópialo a tu gestor de secretos antes de cerrarlo. Si lo pierdes, revoca el token y crea uno nuevo.

Una organización puede tener hasta 10 tokens activos. Todos los tokens son de solo lectura (scopes: ["read"]) y se pueden revocar en cualquier momento desde esa misma pestaña.

Confirma el token

GET /v1/external/me es la forma más barata de comprobar que un token funciona. Te dice a qué organización pertenece el token, cuándo se creó, cuándo expira y cuál es tu límite de uso.

export SETTO_API_TOKEN="setto_live_YOUR_TOKEN_HERE"

curl -s https://api.setto.io/v1/external/me \
  -H "Authorization: Bearer $SETTO_API_TOKEN"
200 OK
{
  "organization": {
    "idx": "6f1d9c2e-4a7b-4f3d-9d2c-8b5e1a0f7c43",
    "name": "Club Padel Monterrey",
    "slug": "club-padel-monterrey",
    "avatar": "https://cdn.setto.io/organizations/club-padel-monterrey.png",
    "website": "https://clubpadelmty.mx"
  },
  "token": {
    "idx": "b8e3f107-5c92-4d6a-8e71-0a4c9d2b3f65",
    "name": "Website widget",
    "prefix": "setto_live_9f2ca",
    "scopes": ["read"],
    "createdAt": "2026-09-01T16:04:22.113Z",
    "expiresAt": null,
    "lastUsedAt": "2026-09-17T09:12:44.005Z"
  },
  "rateLimit": { "limit": 120, "windowSeconds": 60 }
}

Un 401 aquí significa que falta la cabecera o que el token es incorrecto — consulta Errores.

Lista tus torneos

GET /v1/external/tournaments devuelve una página de torneos ordenados por startDate descendente, del más reciente al más antiguo.

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=5
200 OK (recortado)
{
  "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",
      "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": 5, "offset": 0, "total": 1 }
}

Guarda el idx — es el identificador que toman todos los demás endpoints.

Trae un torneo con sus categorías

Las relaciones son opcionales. Pídelas con populate, una lista separada por comas. GET /v1/external/tournaments/{idx} usa por defecto club,divisions; pedir solo divisions mantiene el payload pequeño.

curl -s -G \
  https://api.setto.io/v1/external/tournaments/3c9b7f52-6d41-4a8e-b1f0-2e7d5c9a4b18 \
  -H "Authorization: Bearer $SETTO_API_TOKEN" \
  -d populate=divisions
200 OK (recortado)
{
  "idx": "3c9b7f52-6d41-4a8e-b1f0-2e7d5c9a4b18",
  "slug": "torneo-apertura-2026",
  "name": "Torneo Apertura 2026",
  "type": "TOURNAMENT",
  "sport": "PADEL",
  "status": "IN_PROGRESS",
  "publicUrl": "https://www.setto.io/t/torneo-apertura-2026",
  "divisions": [
    {
      "idx": "7b2f4d16-9c83-4e50-a7d1-3f6c8b204e59",
      "name": "Cuarta Fuerza Varonil",
      "number": 1,
      "color": "#2563eb",
      "isDoubles": true,
      "isVisible": true,
      "price": 900,
      "tournament": { "idx": "3c9b7f52-6d41-4a8e-b1f0-2e7d5c9a4b18" }
    }
  ]
}

Siguientes pasos

  • Populate — la lista exacta de relaciones por endpoint y por qué una ruta anidada necesita a sus padres.
  • Obtener una ronda — grupos, clasificación, partidos y cuadros en una sola petición. Es el endpoint donde la mayoría de las integraciones pasan su tiempo.
  • Límites de uso — 120 peticiones por minuto por token, y un segundo techo de 300 peticiones por minuto por IP.
  • Referencia de la API — cada parámetro, con un panel Try it donde puedes pegar un token.

En esta página