SETTO API

SETTO External API

An HTTP API that lets an organizer pull their own SETTO tournaments, categories, teams, rounds, games and standings into a website, a spreadsheet or an AI agent, set tournaments up, set up their groups and knockout draws, record results, and schedule their games on courts.

The SETTO External API is an HTTP API over the SETTO tournaments you manage. With a personal API token you can read every tournament you manage, and with an organization API token every tournament of that organization — their categories (divisions), teams, rounds, groups, brackets, games and standings — and render them wherever you want; with a token that holds the «Gestionar torneos» permission you can also set tournaments up (create them and their categories, register teams, replace a player, withdraw a team) and set up each category's format, groups and knockout draw, with «Cargar resultados» record and clear game results, and with «Programar partidos» set when and on which court each game is played. There are 38 endpoints, all under /v1/external/. This page explains what the API covers and where to go next; the quickstart has a working request in under five minutes.

What you can read

ResourceEndpoint
Who owns the token behind the requestGET /v1/external/me
The tournaments the token can reachGET /v1/external/tournaments
One tournament, with optional relationsGET /v1/external/tournaments/{idx}
A tournament's categories (divisions)GET /v1/external/tournaments/{idx}/divisions
A tournament's teams and their playersGET /v1/external/tournaments/{idx}/teams
One round: groups, standings, games and bracketsGET /v1/external/rounds/{idx}
Courts, games, locks and petitions, for planningGET /v1/external/tournaments/{idx}/schedule
«Actividad»: what apps and tokens changed, and whoGET /v1/external/activity
Categories, rounds, groups, teams and players by nameGET /v1/external/tournaments/{idx}/search

What you can set up

With «Gestionar torneos» (manage); every path is under /v1/external.

ActionEndpoint
Create a tournament (a FREE-plan draft), edit itPOST /tournaments, PATCH /tournaments/{idx}
Publish it, take it back to draft, archive or restore itPOST /tournaments/{idx}/publish, POST /tournaments/{idx}/lifecycle
Add, edit or delete a category; set its seedsPOST /tournaments/{idx}/divisions, PATCH / DELETE /tournaments/{idx}/divisions/{divisionIdx}, PUT …/seeds
Register one team, or up to 50 (no email is sent)POST /tournaments/{idx}/registrations, POST …/registrations/batch
Edit or delete a team; edit a playerPATCH / DELETE /tournaments/{idx}/teams/{teamIdx}, PATCH /tournaments/{idx}/players/{playerIdx}
Replace a player («Sustitución»)POST /tournaments/{idx}/teams/{teamIdx}/substitute
Withdraw a team («Baja»): preview, then applyPOST /tournaments/{idx}/teams/{teamIdx}/withdraw/preview, POST …/withdraw

Groups, draws and results

The three previews write nothing and need only «Leer» (read); results need «Cargar resultados» (results); applying a format, groups or a draw, «Confirmar cuadro» and every other action in this table need «Gestionar torneos» (manage). Every path is under /v1/external.

ActionEndpoint
Set a category's format («Formato»): preview, then applyPOST /tournaments/{idx}/divisions/{divisionIdx}/format/preview, POST …/format
Add the knockout after a group stagePOST /tournaments/{idx}/divisions/{divisionIdx}/rounds/append
Set up the groups («Configurar grupos»): preview, then applyPOST /tournaments/{idx}/rounds/{roundIdx}/pools/preview, POST …/pools
Set up the knockout draw («Configurar eliminatorias»): preview, then applyPOST /tournaments/{idx}/rounds/{roundIdx}/draw/preview, POST …/draw
Seat the knockout from the group standings («Confirmar cuadro»)POST /tournaments/{idx}/rounds/{roundIdx}/draw/confirm
Record or clear a game's result («Borrar resultado»)POST / DELETE /tournaments/{idx}/games/{gameIdx}/result
Set who plays a gamePATCH /tournaments/{idx}/games/{gameIdx}/teams

What you can schedule

ActionEndpoint
Propose one day «un grupo por cancha» (saves nothing)POST /v1/external/tournaments/{idx}/schedule/proposals
Apply placements: start, court, length (needs «Programar partidos»)POST /v1/external/tournaments/{idx}/schedule/placements

That is the whole surface. Nothing else is written: the API cannot create or delete a single game, set up qualifiers or consolation games, delete a tournament or send an email, and no price, paid mark, payment record or refund changes (a withdrawal closes the team's unpaid payment links). Fútbol and league draws and results stay in the dashboard.

Who it is for

  • Clubs and federations embedding live draws, schedules and standings on their own website.
  • Sponsors and media partners pulling fixtures and results for a broadcast graphic or a newsletter.
  • Analysts exporting a season into a spreadsheet or a database.
  • AI agents — every page here is also served as Markdown, and there is an MCP server and an Agent Skill for the same 38 endpoints.

Base URL

https://api.setto.io/v1

Every path in this documentation is written in full (/v1/external/tournaments), so it appends directly to the host. api.setto.io is the canonical host; the Railway-generated host it replaced still answers, but new integrations should not use it.

Authentication in one line

Send your API token as a bearer token on every request:

GET /v1/external/tournaments HTTP/1.1
Host: api.setto.io
Authorization: Bearer setto_live_YOUR_TOKEN_HERE

Tokens are created in the SETTO organizer dashboard, in Configuración → Tokens de API. A token is personal (yours, reaching every tournament you manage) or an organization's (reaching only that organization's tournaments). See Authentication.

What the API never returns

The External API is designed to be safe to put in front of a public website. It never returns personal contact data (no emails, no phone numbers, no social handles) and never returns payment or billing data. Player objects carry only idx, firstName, lastName and avatar.

Two things it does return, which surprise people:

  • Hidden divisions and rounds. They come back with isVisible: false instead of being dropped, so you decide whether to render them.
  • Draft and archived tournaments. Filter them out with the status query parameter if you only want live ones.

Where to go next

On this page