Skip to content

Documentation

Event data API

Read-only JSON and CSV for every published event. Endpoints, fields, caching and errors.


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), counts and links.
  • Entries: one record per entry with boat name, sail number, design, skipper, club, home port, classes, rating and rating status.
  • Results: result_version says which publication you are reading (its number, whether it is provisional or final, and when it was published), scoring gives the options in force, series_standings gives each boat's place, total, discards and net points with race points, and race_results gives 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.

Looking for step-by-step help? Browse the guides. Ready to run an event? Get started.