SETTO API

List tournaments

Use GET /v1/external/tournaments to find your organization's tournaments, filter them by status and sport, and page through a season archive.

GET /v1/external/tournaments is the entry point of every integration: it is how you turn "my organization" into a list of tournament idx values that the other endpoints take. It filters by status and sport, pages with limit/offset, and returns rows ordered by startDate descending. Typical uses are a "current tournaments" strip on a club website, a season archive page, and the discovery step of a nightly export.

Request

GET /v1/external/tournaments?status=IN_PROGRESS&sport=PADEL&limit=10 HTTP/1.1
Host: api-production-ea80.up.railway.app
Authorization: Bearer setto_live_…

Query parameters

ParameterTypeDefaultNotes
statusenumDRAFT, UPCOMING, IN_PROGRESS, COMPLETED, ARCHIVED
sportenumPADEL, TENNIS, PICKLEBALL
populatelist(none)Only club is allowed here
limitinteger251100
offsetinteger00 or greater
curl -s -G https://api-production-ea80.up.railway.app/v1/external/tournaments \
  -H "Authorization: Bearer $SETTO_API_TOKEN" \
  -d status=IN_PROGRESS \
  -d sport=PADEL \
  -d limit=10

Response

200 OK (one row, trimmed)
{
  "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 }
}

The data rows are full tournament objects — the same shape getTournament returns — minus any relations, since this endpoint populates nothing by default.

Tips and pitfalls

  • Drafts and archives are included. With no status filter you get DRAFT and ARCHIVED tournaments too. A public "what's on" strip almost always wants status=IN_PROGRESS plus status=UPCOMING — two calls, since status takes a single value.
  • isPublic: false is still returned. It tells you the organizer has turned the public page off; the API does not filter on it. If you are mirroring the public site, skip those rows yourself.
  • Personal tournaments are invisible. Only tournaments attached to your organization appear. If an expected tournament is missing, it is probably owned by a user rather than by the organization.
  • Do not populate here. club is the only allowed relation, and on a page of 100 rows it is 100 joins. Fetch the club once with getTournament instead.
  • Page with limit=100 for exports, and de-duplicate on idx — see Pagination.
  • Sort is startDate descending, so "the current tournament" is usually data[0] when you filter by status=IN_PROGRESS.

MCP tool: list_tournaments

On this page