List boats visible to the authenticated user

Returns boats the user has read access to. Use this as the entry point for any analysis scoped to specific boats — the user typically needs to pick a boat before drilling into events, races, or performance data.

listBoats is the recommended entry point — cursor-paginated, sortable, with a rich filter input:

query ListMyBoats($limit: Int = 50, $after: ID) {
  listBoats(limit: $limit, after: $after, sort: Name) {
    cursor
    boat {
      key
      name
      boatClass {
        key
        name
      }
      liveDataStatus {
        isOnline
        lastSourceTimestamp
      }
    }
  }
}

For more boats, pass the last item's cursor value as the next request's after.

Common filters

listBoats(filter: ListBoatFilterInput) supports:

  • nameMatches: "..." — case-insensitive substring on boat name
  • minimumRole: Manager — narrows to boats the user can edit
  • boatClass: ID — filter to one boat class
  • dataBetween: { start, end } — boats with logged data overlapping the range (e.g. "what was sailing last weekend?")
  • hasLiveDataAfter: Date — boats that streamed live data after a given time
  • event: ID — boats in a specific event

sort accepts Key, Name, or Created.

Legacy alternative: allBoats

allBoats(...) is kept for back-compat — flat list, no pagination, fewer filters. Reach for it only if you specifically need the unpaginated array shape; prefer listBoats for new work.

query AllBoatsLegacy {
  allBoats(onlyManagerBoats: false) {
    key
    name
  }
}

Notes

  • liveDataStatus.isOnline reflects whether the boat is currently streaming, not whether it has streamed recently. Use lastSourceTimestamp for the most recent ingestion time.
  • Boats can belong to multiple events; this query returns the boats themselves, not their event memberships.