Changelog
Version history of the SETTO External API — what shipped, what changed, and what counts as a breaking change.
Every change to the External API is recorded here, newest first. The API is
versioned in its path (/v1/): additive changes ship inside v1, and anything
that would break an existing integration would ship as a new path prefix.
What counts as a change
| Change | Breaking? |
|---|---|
A new endpoint, field or populate path | No — additive |
A new member in an existing enum (a new status, sport or type) | No — treat enums as open |
A new error code for a status you already handle | No |
Removing or renaming a field, endpoint or populate path | Yes |
| Changing a field's type, or a list's default ordering | Yes |
| Tightening validation on a parameter that used to be accepted | Yes |
Build for the additive cases: ignore fields you do not recognise, and fall
through on enum values you have not seen. That way a release like "pickleball
individual leagues now expose a new tournament type" never reaches your
on-call.
1.0.0 — 2026-09
Initial public release.
- Six read-only endpoints, all under
/v1/external/:getMe,listTournaments,getTournament,listDivisions,listTeams,getRound. - Organization API tokens. Created from
app.setto.io→ Organización → the API tab by the organization creator or anADMINmember. Shown once, read-only, revocable, with an optional 30/90/365-day expiry and a maximum of 10 active tokens per organization. - Bearer authentication with
setto_live_(production) andsetto_test_(non-production) prefixes, and the error codesMISSING_API_TOKEN,INVALID_API_TOKEN,EXPIRED_API_TOKENandINSUFFICIENT_SCOPE. - Organization scoping. A token reads only the tournaments its organization
owns; anything else — including another organization's data and personal
tournaments — answers
404, never403, so ids cannot be probed. populate, an allow-listed comma-separated relation list per endpoint, with implicit parent expansion and per-endpoint defaults. Unknown values are a400.- Offset pagination on
listTournaments:limit1..100(default25),offset, and ametaenvelope withlimit,offsetandtotal. Rows are ordered bystartDatedescending. - Rate limiting at 120 requests per 60 seconds per token, with
X-RateLimit-Limit,X-RateLimit-RemainingandX-RateLimit-Reseton every response andRetry-Afteron a429. - Conditional requests. Strong
ETagplusIf-None-Matchreturns304 Not Modifiedso polling a round costs almost nothing. - A privacy-safe projection. No emails, phone numbers or social handles; no
payment or billing data. Player objects carry
idx,firstName,lastNameandavataronly. - Hidden and draft material is returned, flagged rather than filtered —
isVisible: falseon divisions and rounds, andDRAFT/ARCHIVEDtournaments inlistTournaments. - This documentation site, with a generated reference and a Try it
playground, a published
/openapi.json, a Markdown rendition of every page,/llms.txtand/llms-full.txt, a remote MCP server and an Agent Skill.