Public API
Anonymous read-only meet data
These endpoints expose live competition data without authentication. All responses are JSON objects with an `ok` flag and a `data` payload on success.
Read only
Only `GET`, `HEAD`, and `OPTIONS` are supported. Mutation routes are not exposed here.
Rate limited
Requests are throttled per IP with `429` responses and `Retry-After` headers when limits are exceeded.
Response shape
{
"ok": true,
"data": {
"...": "endpoint-specific payload"
}
}{
"ok": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Please retry shortly."
}
}Endpoints
/api/public/competitionsLists public competitions with minimal summary data.
/api/public/competitions/currentReturns the active competition, or the newest running competition.
/api/public/competitions/{competitionId}Competition summary with settings, platforms, sessions, and categories.
/api/public/competitions/{competitionId}/platformsAll platforms in the competition plus each platform’s currently resolved session.
/api/public/competitions/{competitionId}/platforms/{platformId}Platform summary with current session, timer snapshot, and current athlete.
/api/public/competitions/{competitionId}/platforms/{platformId}/current-athleteCurrent athlete and attempt details for a platform.
/api/public/competitions/{competitionId}/platforms/{platformId}/current-timerCurrent timer state for a platform.
/api/public/competitions/{competitionId}/platforms/{platformId}/detailed-resultsDetailed live results for the current session on a platform.
/api/public/competitions/{competitionId}/resultsAll competition results, team standings, and medal-event results when enabled.
Examples
Current athlete on Platform A
curl "$BASE_URL/api/public/competitions/{competitionId}/platforms/{platformId}/current-athlete"Current timer
curl "$BASE_URL/api/public/competitions/{competitionId}/platforms/{platformId}/current-timer"Detailed live platform results
curl "$BASE_URL/api/public/competitions/{competitionId}/platforms/{platformId}/detailed-results"All competition results
curl "$BASE_URL/api/public/competitions/{competitionId}/results"Implementation notes
- Current platform session resolution prefers an in-progress session, then the next not-started one, then the first assigned session.
- Timer payloads are normalized so a fully elapsed running timer is reported as stopped with `0` remaining.
- Public payloads intentionally omit private fields such as emails, organizer comments, and internal notes.