API reference
The full reference for every endpoint, request schema, and response
shape. The spec is also available as a machine-readable
OpenAPI 3.1 document. Each API base URL also serves the
spec of the version it runs at /v1/openapi.yaml, with a browsable copy
at /docs; neither needs a key.
Recent changes
- 11.9.1
- Penalties have
serving(truewhile the athlete is serving the approved penalty at a penalty box or a stop-and-go; a paused serve is not serving) andserveStartedAt(when the running serve started, ornull).penaltyStatusstaysapproveduntil served. - New webhook events
penalty.serveStartedandpenalty.serveStopped— see Webhooks.
- Penalties have
- 11.9.0
- Four new race fields, all still editable after the race starts:
penaltySelfCorrectMinutes(0–60, default0= off) — for this many minutes after reporting a penalty, and until the penalty box acts on it, the official who reported it may cancel it or change its athlete number.penaltyTypeTimes— serve times for specific penalty types on this race, as[{"penaltyType": "<type id>", "seconds": 90}]: at most 50 entries, each type once, 1–3600 seconds. An entry replacespenaltyTimeS(ordraftingTimeSfor drafting and blue-card types) for that type.[]removes every override.penaltyBoxWalkInEnabledandbikePenaltyBoxWalkInEnabled(defaultfalse) — walk-in serves in the run or the bike penalty box. Each needs its box: turning one on whilepenaltyBoxEnabledorbikePenaltyBoxEnabledis off returns400.
- Penalties have
walkIn(served at the penalty box before any referee's report; itstimestampis when the serve started) andmergedWalkInId(the walk-in this referee's report absorbed, ornull). A merged walk-in is cancelled, so it no longer appears in the penalty list. - New webhook events
penalty.mergedandpenalty.unmerged— see Webhooks. - A published penalty that is cancelled, declined or put under
protest sends
penalty.statusChangedwith its newpenaltyStatus. - Penalty webhooks carry the same fields as the penalty list, plus
penaltyType, now the type's id. - Races return
penaltyBoxAcceptRequired. - Webhook subscriptions return their times as ISO 8601 strings.
PATCH /v1/events/{eventId}/webhooks/{webhookId}takesenabled:trueswitches a disabled subscription back on (same secret, the failure count from zero),falseswitches it off.- A delivery's
statusisdeliveredorfailed. - A revoked key stops working within about 10 seconds (was 60).
- Four new race fields, all still editable after the race starts:
- 11.8.3
- Replayed writes carry
Idempotent-Replayed: true, a retry while the first attempt is still running returns409, and the API returns503withRetry-Afterwhen it briefly can't check rate limits. - Listing a webhook's deliveries works, and org keys only reach events of their own organisation.
- Replayed writes carry
- 11.8.1 — Races carry
checkinType, the race's athlete check-in type. - 10.0.0 — Races and race webhooks carry a read-only
status:notActive,active(no penalty or incident recorded yet),running(penalties or incidents recorded) orfinished(stopped after that).