Public Schedule
The public schedule exposes only upcoming meet metadata for clubs that a coach has explicitly published. It does not require an Athlora account or an Auth0 token. It is gated by the independent publicScheduleEnabled publication flag and never shares a gate with public results.
Visibility rules
- Only clubs with
publicScheduleEnabled = trueare visible; unknown or unpublished clubs return404 NOT_FOUNDwith the same generic code (non-enumerating). - Upcoming means
date >= today(UTC) with statusscheduledorin_progress. Completed and cancelled events are never returned. - Responses contain only club identity and event metadata: title, date, time, type, discipline, selected disciplines (
disciplines), venue (locationName), and status. - Athlete rosters, guest rosters, participants, results, timeline entries, injuries, and notes are never published by these endpoints — independent of either publication flag.
Publication control
The schedule flag is managed through the same coach-only endpoints as results (see the public statistics reference for auth details):
GET /api/v1/clubs/publication
PUT /api/v1/clubs/publication
{ "publicResultsEnabled": false, "publicScheduleEnabled": true }
Published schedule clubs
GET /api/v1/public/schedule/clubs?q={name}
Returns up to 100 clubs with a published schedule matching the optional case-insensitive name search. Unpublished clubs are never returned.
{ "data": [{ "id": "uuid", "name": "Open Track Club", "branding": { "description": null, "primaryColor": null, "logoUrl": null, "coverUrl": null } }], "meta": { count: 1 } }
Upcoming club schedule
GET /api/v1/public/schedule/clubs/{clubId}
Returns 404 NOT_FOUND if the club is unknown or its schedule is not published. The response contains the club identity and its upcoming events:
{
"data": {
"club": {
"id": "uuid",
"name": "Open Track Club",
"branding": { "description": null, "primaryColor": null, "logoUrl": null, "coverUrl": null }
},
"events": [
{
"id": "uuid",
"title": "Spring Open",
"date": "2026-10-01",
"time": "10:00:00",
"type": "competition",
"discipline": "100m",
"disciplines": [{ "code": "100m", "label": "100m" }],
"locationName": "City Track",
"status": "scheduled"
}
]
}
}
Events are ordered by date ascending, then time ascending (nulls last), then creation time, then ID. discipline is nullable for multi-discipline meets. disciplines lists the distinct, non-cancelled catalogue disciplines configured through the meet's sessions (discipline_sessions joined to discipline_definitions, deduplicated by code and ordered by code). An event with no sessions falls back to a single entry derived from the legacy discipline scalar; an event with neither returns an empty array. Cancelled sessions are excluded. club.branding is always present on these responses (the endpoints only serve clubs whose schedule publication is enabled).
AI declaration
This document was created or updated with the assistance of OpenCode[openai/gpt-5.6-terra].