Your scores. Your data. In one request.
Every public ScoreZen tournament is readable as JSON — fixtures, live scores, standings, champion. No account, no API key, no quota form to fill. Put your club's live scores on your own website in ten lines of JavaScript.
- No API key
- CORS enabled
- Read-only
- Free
Endpoints
/api/v1/tournament/{code}A whole tournament
Participants, every fixture with its live score, standings (overall and per group), progress and champion. The code is the one your organiser shares — the same one used by the public page /c/CODE.
/api/v1/match/{code}A single match
Teams, colours, status and live score of one shared match.
/api/ics/{code}.icsCalendar feed
Subscribe to a tournament from Google Calendar, Apple Calendar or Outlook. Kick-off times update by themselves.
/embed/{code}Embeddable scoreboard
Prefer zero code? Drop the live scoreboard straight into your page with an iframe.
Example
Live standings of a tournament, in your page:
const res = await fetch(
"https://www.getscorezen.com/api/v1/tournament/ABC123"
);
const data = await res.json();
for (const row of data.standings) {
console.log(row.rank, row.name, row.points);
}Response shape
{
"api": "scorezen.v1",
"tournament": {
"code": "ABC123",
"name": "Tournoi du club",
"sport": "petanque",
"format": "knockout",
"status": "live",
"progress": { "done": 3, "total": 7 },
"champion": null
},
"participants": [{ "id": "p1", "name": "Les Aigles" }],
"standings": [
{ "rank": 1, "participantId": "p1", "name": "Les Aigles",
"played": 2, "win": 2, "draw": 0, "loss": 0,
"for": 26, "against": 14, "diff": 12, "points": 6 }
],
"fixtures": [
{ "id": "k-r1-0", "round": 1, "order": 0, "state": "done",
"home": { "id": "p1", "name": "Les Aigles" },
"away": { "id": "p4", "name": "Les Loups" },
"score": { "home": 13, "away": 7 }, "winner": "home" }
],
"attribution": { "poweredBy": "ScoreZen", "url": "https://www.getscorezen.com" }
}Fair use
- Read-only: the API never writes. Scores are kept in the app by the scorer.
- Scores are replayed from the event log — never read from a stale column.
- Responses are cached ~15 seconds. Polling faster gains you nothing.
- Match access codes are never exposed: they are a scorekeeper capability, not data.
- A tournament stops answering when its organiser stops sharing it. That is their call, not ours.
- A link back to ScoreZen is appreciated — never required.
No tournament yet?
Create one in under two minutes — 34 sports, free to try, spectators always free.
Start a tournament