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

GET/api/public/competitions

Lists public competitions with minimal summary data.

GET/api/public/competitions/current

Returns the active competition, or the newest running competition.

GET/api/public/competitions/{competitionId}

Competition summary with settings, platforms, sessions, and categories.

GET/api/public/competitions/{competitionId}/platforms

All platforms in the competition plus each platform’s currently resolved session.

GET/api/public/competitions/{competitionId}/platforms/{platformId}

Platform summary with current session, timer snapshot, and current athlete.

GET/api/public/competitions/{competitionId}/platforms/{platformId}/current-athlete

Current athlete and attempt details for a platform.

GET/api/public/competitions/{competitionId}/platforms/{platformId}/current-timer

Current timer state for a platform.

GET/api/public/competitions/{competitionId}/platforms/{platformId}/detailed-results

Detailed live results for the current session on a platform.

GET/api/public/competitions/{competitionId}/results

All 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.