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
| Resource | Endpoint |
|---|---|
| Who owns the token behind the request | GET /v1/external/me |
| The tournaments the token can reach | GET /v1/external/tournaments |
| One tournament, with optional relations | GET /v1/external/tournaments/{idx} |
| A tournament's categories (divisions) | GET /v1/external/tournaments/{idx}/divisions |
| A tournament's teams and their players | GET /v1/external/tournaments/{idx}/teams |
| One round: groups, standings, games and brackets | GET /v1/external/rounds/{idx} |
| Courts, games, locks and petitions, for planning | GET /v1/external/tournaments/{idx}/schedule |
| «Actividad»: what apps and tokens changed, and who | GET /v1/external/activity |
| Categories, rounds, groups, teams and players by name | GET /v1/external/tournaments/{idx}/search |
What you can set up
With «Gestionar torneos» (manage); every path is under /v1/external.
| Action | Endpoint |
|---|---|
| Create a tournament (a FREE-plan draft), edit it | POST /tournaments, PATCH /tournaments/{idx} |
| Publish it, take it back to draft, archive or restore it | POST /tournaments/{idx}/publish, POST /tournaments/{idx}/lifecycle |
| Add, edit or delete a category; set its seeds | POST /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 player | PATCH / 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 apply | POST /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.
| Action | Endpoint |
|---|---|
| Set a category's format («Formato»): preview, then apply | POST /tournaments/{idx}/divisions/{divisionIdx}/format/preview, POST …/format |
| Add the knockout after a group stage | POST /tournaments/{idx}/divisions/{divisionIdx}/rounds/append |
| Set up the groups («Configurar grupos»): preview, then apply | POST /tournaments/{idx}/rounds/{roundIdx}/pools/preview, POST …/pools |
| Set up the knockout draw («Configurar eliminatorias»): preview, then apply | POST /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 game | PATCH /tournaments/{idx}/games/{gameIdx}/teams |
What you can schedule
| Action | Endpoint |
|---|---|
| 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/v1Every 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_HERETokens 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: falseinstead of being dropped, so you decide whether to render them. - Draft and archived tournaments. Filter them out with the
statusquery parameter if you only want live ones.
Where to go next
Quickstart
Create a token and make your first three requests.
Authentication
Token format, permissions, rotation, and 401 vs 403.
Data model
Tournament, division, round, pool, draw, game, team.
API reference
Generated per-endpoint reference with a Try it panel.
Guides
One worked example per endpoint.
For AI agents
llms.txt, per-page Markdown, OpenAPI and MCP.