Every approved event is available as JSON, and its entries and results as CSV. There is no key and
no account: a GET is the whole protocol. The feed serves only what is public on the event page.
Endpoints
All paths are under https://saildex.com/api/event-data/v0.
| Path | Returns |
|---|---|
/events/{id} |
The event, its classes and its races |
/events/{id}/entries |
The entry list |
/events/{id}/entries.csv |
The entry list as CSV |
/events/{id}/results |
The latest published results |
/events/{id}/results.csv |
The latest published results as CSV, one row per boat per race |
/events/{id}/races/{race_id}/course |
A race's official course, if one has been designated |
/events/{id}/races/{race_id}/course.gpx |
The same course as GPX |
{id} is the event's id or any address it has had. {race_id} is a race id from the event
document, and must belong to that event.
Documents
Every JSON document carries "schema": "event-data/v0" and generated_at, the time the document
was produced. Times are UTC ISO-8601; start_date and end_date are calendar dates.
- Event:
event(id, slug, title, location, dates, time zone, status, organizing authority, public URL),classes(name, division, one design or not, entry count),races(label, sequence, status, start time, rating system, distance, class ids),countsandlinks. - Entries: one record per entry with boat name, sail number, design, skipper, club, home port, classes, rating and rating status.
- Results:
result_versionsays which publication you are reading (its number, whether it is provisional or final, and when it was published),scoringgives the options in force,series_standingsgives each boat's place, total, discards and net points with race points, andrace_resultsgives each race's places, points, codes, and elapsed and corrected times.
CSV columns
- Entries:
entry_id, boat_name, sail_number, sail_number_country, sail_number_value, design, skipper, yacht_club, home_port, classes, divisions, rating, rating_status - Results:
entry_id, boat_name, sail_number, rating, series_place, total_points, dropped_points, net_points, race_id, race_label, race_start_time, race_place, race_points, race_dropped, penalty, elapsed_seconds, corrected_seconds, class_id, scoring_format, handicap_system
Explanations and time-correction arithmetic are available in JSON only. A normal finish has an
empty penalty cell. class_id, scoring_format and handicap_system identify the class and its
selected scoring kernels.
For class publications, result_version.source is publication, version is the event's count
of publication records (including superseded records), and publication_ids identifies the current
race/class publications. The state is official only when all current publications are final;
otherwise it is provisional. Legacy whole-event snapshots use source: snapshot, their snapshot
id and version. An event without a publication has source: live and a null version.
Caching
Responses carry cache-control: public, max-age=60, s-maxage=120. Results move while an event is
being scored, so poll no more than once a minute.
Errors
Errors are JSON with success: false and an error object holding a code and a message. An
unknown event or a race from another event answers 404.
What is never in the feed
Email addresses, phone numbers, registration answers and unpublished results.