Skip to content

ILCA Worlds walkthrough ​

Follow a real API capture from the ILCA 6 Worlds final series, September 12: two races and ten tracked boats. Use your own token; your account’s access and current responses may differ.

ResourceID
Event15
Day assignment119
Session3455
First racecomment_6918
GPS track26082

Set up ​

Make SAILSYNC_API_TOKEN available through your secret manager:

sh
export SAILSYNC_API_BASE_URL=https://www.sailsync.io
sailsync_get() {
  curl --fail-with-body \
    --header "Authorization: Bearer ${SAILSYNC_API_TOKEN}" \
    "${SAILSYNC_API_BASE_URL}$1"
}

1. Find the event and check access ​

sh
sailsync_get '/api/integrations/v1/events?q=ILCA%206%20Worlds'
sailsync_get '/api/integrations/v1/events/15?limit=100'
sailsync_get '/api/integrations/v1/events/15/days/119/access'
json
{
  "event_id": 15,
  "assignment_id": 119,
  "session_id": 3455,
  "allowed": true,
  "state": "already_available",
  "day": "2026-09-12",
  "unit": null,
  "allowance_debited": 0,
  "flo_credits_debited": 0,
  "data_path": "/api/integrations/v1/sessions/3455/data"
}

already_available confirms access. Follow data_path for the session’s tracks and analysis links.

Event response · Session manifest

2. Read GPS ​

sh
sailsync_get '/api/integrations/v1/sessions/3455/data/tracks/26082/points?limit=3'
json
{
  "available": true,
  "session_id": 3455,
  "session_track_id": 26082,
  "resolution": "committed_full_resolution_gps",
  "source_ref": "0ef4be0ce0b1b9e0bcb8b72653f85d2728727287dfc7da5dd7878b18bad38154",
  "time_basis": "session_epoch_seconds_with_track_offset",
  "time_offset": 0,
  "window": {
    "start": 1789215781,
    "end": 1789219800
  },
  "point_count": 3303,
  "points": [
    {
      "time_epoch": 1789215781.1,
      "lat": 53.3144298,
      "lng": -6.1299651
    },
    {
      "time_epoch": 1789215783.3,
      "lat": 53.3144469,
      "lng": -6.1299779999999995
    },
    {
      "time_epoch": 1789215786.5,
      "lat": 53.3144924,
      "lng": -6.1300146
    }
  ],
  "next_cursor": "EXAMPLE_CURSOR_REPLACE_WITH_CURRENT_RESPONSE"
}

This page has three of 3,303 points. The sample cursor is a placeholder. Use your own response’s next_cursor as the URL-encoded cursor parameter until it is null. For actual exports, use larger pages and cache downloads.

3. Read wind ​

sh
sailsync_get '/api/integrations/v1/sessions/3455/data/wind?series=direction&limit=3'
json
{
  "series": "direction",
  "unit": "degrees",
  "representation": "configured_session_step_series",
  "snapshot_ref": "699e214a2028281ba73957ef2d3ddf8e91035bf88d6f01110f7b466456094817",
  "total_count": 3,
  "default_direction_deg": 263,
  "default_speed_kt": null,
  "points": [
    {
      "t": 1789216081,
      "direction": 263
    },
    {
      "t": 1789218181,
      "direction": 262
    },
    {
      "t": 1789218984.7654676,
      "direction": 256
    }
  ],
  "next_offset": null
}

Wind is the configured series. The null default speed means unavailable, not zero knots.

4. Read race results ​

sh
sailsync_get '/api/integrations/v1/sessions/3455/data/analysis'
sailsync_get '/api/integrations/v1/sessions/3455/data/races/comment_6918/results?limit=3'
Full result response
json
{
  "schema_version": "subscriber_saved_analysis_v1",
  "session_id": 3455,
  "scope_id": "comment_6918",
  "snapshot": {
    "ref": "dbf5c1f09a60d24f03f3a78c35c3c40012f5ccb202a22f7be8bf50f616ae1636",
    "schema_version": "race_debrief_facts_v1",
    "artifact_run_id": "20261023T223430Z-327193c0",
    "computed_at": "2026-10-23T22:34:30.105Z",
    "revision_completeness": "partial",
    "missing_revision_components": [
      "artifact_source_revision_binding"
    ],
    "freshness": "no_newer_recorded_inputs",
    "refresh_required": false,
    "raw_gps_coverage_verified": false
  },
  "fleet_count": 10,
  "next_before_boat_id": 26089,
  "paging_order": "boat_id_descending",
  "scope": "within_this_race_only",
  "model_called": false,
  "results": [
    {
      "boat_id": "26091",
      "boat_name": "USA-222035 | Rose C.",
      "boat_color": "#42D4F4",
      "status": "finished",
      "finish_time": 1789217476.8393393,
      "elapsed_seconds": 1095.8393392562866,
      "legs_completed": 5,
      "legs_expected": 5,
      "result_source": "completion.elapsed_seconds",
      "overall_order": 2,
      "position": 2,
      "finish_time_local": {
        "epoch": 1789217476.8393393,
        "utc": "2026-09-12T12:51:16.839Z",
        "local": "2026-09-12T05:51:16-07:00",
        "label": "2026-09-12 05:51:16 PDT",
        "time_zone": "America/Los_Angeles"
      },
      "last_recorded_leg_end_local": {
        "epoch": 1789217477,
        "utc": "2026-09-12T12:51:17.000Z",
        "local": "2026-09-12T05:51:17-07:00",
        "label": "2026-09-12 05:51:17 PDT",
        "time_zone": "America/Los_Angeles"
      }
    },
    {
      "boat_id": "26089",
      "boat_name": "HUN-211551 | Erdi M.",
      "boat_color": "#E6194B",
      "status": "finished",
      "finish_time": 1789217485.7685676,
      "elapsed_seconds": 1104.7685675621033,
      "legs_completed": 5,
      "legs_expected": 5,
      "result_source": "completion.elapsed_seconds",
      "overall_order": 3,
      "position": 3,
      "finish_time_local": {
        "epoch": 1789217485.7685676,
        "utc": "2026-09-12T12:51:25.768Z",
        "local": "2026-09-12T05:51:25-07:00",
        "label": "2026-09-12 05:51:25 PDT",
        "time_zone": "America/Los_Angeles"
      },
      "last_recorded_leg_end_local": {
        "epoch": 1789217486,
        "utc": "2026-09-12T12:51:26.000Z",
        "local": "2026-09-12T05:51:26-07:00",
        "label": "2026-09-12 05:51:26 PDT",
        "time_zone": "America/Los_Angeles"
      }
    },
    {
      "boat_id": "26090",
      "boat_name": "FRA-212121 | Cervera L.",
      "boat_color": "#BFEF45",
      "status": "finished",
      "finish_time": 1789217524.8534248,
      "elapsed_seconds": 1143.8534247875214,
      "legs_completed": 5,
      "legs_expected": 5,
      "result_source": "completion.elapsed_seconds",
      "overall_order": 9,
      "position": 9,
      "finish_time_local": {
        "epoch": 1789217524.8534248,
        "utc": "2026-09-12T12:52:04.853Z",
        "local": "2026-09-12T05:52:04-07:00",
        "label": "2026-09-12 05:52:04 PDT",
        "time_zone": "America/Los_Angeles"
      },
      "last_recorded_leg_end_local": {
        "epoch": 1789217525,
        "utc": "2026-09-12T12:52:05.000Z",
        "local": "2026-09-12T05:52:05-07:00",
        "label": "2026-09-12 05:52:05 PDT",
        "time_zone": "America/Los_Angeles"
      }
    }
  ],
  "summary": {
    "boat_count": 10,
    "finish_count": 10,
    "partial_count": 0,
    "not_started_count": 0,
    "excluded_count": 0,
    "other_count": 0
  }
}

Rows are ordered by boat ID; position is the fleet-relative result for this race. Continue with before_boat_id=next_before_boat_id and expected_snapshot=snapshot.ref.

Use UTC/epoch values for time comparisons; display-local times may differ from the venue timezone.

5. Read starts and compare a leg ​

sh
sailsync_get '/api/integrations/v1/sessions/3455/data/races/comment_6918/starts?limit=3'
sailsync_get '/api/integrations/v1/sessions/3455/data/races/comment_6918/facts?subject_id=26082&rival_id=26083&comparison_policy=named_rival&leg_index=1'

Start statistics · First-leg comparison · Analysis catalog

The reference includes examples for every operation. Event/data samples use this capture; account and write samples use test fixtures. Queued 202 responses are separate from completed receipts.

Built for sailors. Open to your tools.