Sail TV Mobile APP
Manage Race Series
Equipment Services
List of Race Classes
Request parameters
List of Organisagtions
Responses
Body
GET /raceclasses HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "guid",
"Name": "Handicap",
"Description": "Handicap Class"
}
{race_id}
/results{id}
/results{id}
/results{race_id}
/resultsPath variables
Responses
Body
Results ID used for update
Event Entry Member
Equipment Owner from Entry to Event
Name of ther Member
Unique ID of Equipment
Unique ID of Rig
Rig Class Name
Handicap Rating for the System and Rig
Time of Race in Seconds
Time of Race in Seconds
Number of Laps
Is the Race Discarded
Postion in Series on This Date
GET /events/{id}/races/{race_id}/results HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "event_race_id_guid",
"member": {
"id": "guid",
"memberName": "Sam Steward"
},
"equipment": {
"id": "guid",
"equipmentName": "Seen Leaving",
"rigId": "guid",
"rigClassName": "Laser Radial",
"sailNumber": "213537"
},
"crew": [
{
"id": "guid",
"memberName": "Bill Smith",
"crewRole": "crew"
}
],
"raceResult": {
"position": 1,
"raceStatus": "OK",
"handicap": 1045,
"elapsedTime": 3634,
"correctedTime": 2987,
"laps": 3,
"isDiscard": true
}
}
{id}
/resultsPath variables
Request body
Responses
Body
POST /race/{id}/results HTTP/1.1
Content-Type: application/json
{
"results": [
{
"eventRaceId": "guid",
"eventMemberId": "guid",
"rig_id": "guid",
"hullNumber": "15",
"handicap": 1135,
"elapsedTime": 3789,
"laps": 3,
"raceStatus": "OK"
}
]
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"raceResult": [
{
"eventEntryId": "guid",
"position": 1,
"points": 1,
"raceStatus": "OK",
"elapsedTime": 3634,
"correctedTime": 2987,
"laps": 3,
"isDiscard": true
}
]
}
{id}
/resultsPath variables
Responses
Body
GET /event/{id}/results HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"content": [
{
"position": 1,
"points": 1,
"member": {
"id": "guid",
"memberName": "Sam Steward"
},
"equipment": {
"id": "guid",
"equipmentName": "Seen Leaving",
"rigId": "guid",
"rigClassName": "Laser Radial",
"sailNumber": "213537"
},
"raceResults": [
{
"raceId": "guid",
"raceNumber": 1,
"position": 1,
"points": 1,
"isDiscard": true,
"raceStatus": "OK"
},
{
"raceId": "guid",
"raceNumber": 2,
"position": null,
"points": 19,
"isDiscard": true,
"raceStatus": "DNC"
}
]
}
],
"pageable": {
"page": 1,
"size": 10,
"sort": {
"orders": [
null
]
}
},
"total": 1
}
Event Management
{id}
{id}
/enter{id}
/entries{id}
/races{id}
/tallyCreate a New Event as either a Race Series, Training or Social
Request body
POST /event HTTP/1.1
Content-Type: application/json
{
"name": "SEA VIEW YACHT CLUB REGATTA",
"description": "lorem ipsum",
"eventType": "RACESERIES",
"entryType": "INDIVIDUAL",
"host": [
{
"organisationId": "guid_seaview",
"role": "HOST"
}
],
"startDate": 1568764800,
"endDate": 1568764800,
"entryCloseDate": 1568764800,
"maxParticipants": null
}
Should use the Authentication Token to check the Member and use that to find list of Organisations they belong to for the list.
Request parameters
Organisation to filter the list, can be a multiple
Responses
Body
Number of Races in Event
GET /events HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"content": [
{
"externalId": "dd68fd8b-bf8b-11e9-95ee-42010a9c00a0",
"name": "SEA VIEW YACHT CLUB REGATTA",
"description": "lorem ipsum",
"eventType": "RACESERIES",
"entryType": "INDIVIDUAL",
"host": [
{
"organisationId": "guid",
"name": "Seaview Yacht Club",
"isHost": true,
"role": "HOST"
}
],
"startDate": 1568764800,
"endDate": 1568764800,
"entryCloseDate": 1568764800,
"maxEntries": null,
"noOfRaces" : 6
"nextDate": null,
"member": {
"isEntered": true
}
}
],
"pageable": {
"page": 1,
"size": 10,
"sort": {
"orders": [
null
]
}
},
"total": 1
}
{id}
Path variables
Responses
Body
GET /events/{id} HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"raceClass":
{
"id": "guid",
"name": "Handicap",
"description": "Handicap",
"races": [
{
"id": "guid",
"raceNumber": 1,
"startTime": 15345677,
"isHeat": true,
"raceStatus": "RACED"
},
{
"id": "guid",
"raceNumber": 2,
"startTime": 15345677,
"isHeat": true,
"raceStatus": "RACED"
}
]
}
},
{
"raceClass":
{
"id": "guid",
"name": "Scow",
"description": "Scow",
"races": [
{
"id": "guid",
"raceNumber": 1,
"startTime": 15345677,
"isHeat": true,
"raceStatus": "RACED"
},
{
"id": "guid",
"raceNumber": 1,
"startTime": 15345677,
"isHeat": true,
"raceStatus": "RACED"
}
]
}
}
]
{id}
/enterEnter an event as a race particpant, with Optional equipment, or each equipment can be added or changed per race.
Path variables
Request body
Guid of Member Entering Event
Mandatory
Role Peforming
Equipment Entering Event With, If allowed an inidividual race can use different equipment
List of Crew Members
Guid of Member who is allocated as Crew in this Series.
Responses
Body
POST /events/{id}/enter HTTP/1.1
Content-Type: application/json
{
"member_id": "",
"role": "OWNER",
"equipment_id": "GUID",
"crew": [
{
"member_id": "Guid",
"role": "CREW"
}
]
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"entry_id": "guid"
}
{id}
/entriesList of Entries for the Event
Path variables
Responses
Body
The initial entry as the primary, alternates will be selected from the Member list of Equipment
name of Boat / equipment
Sail Number
Class details
Unique Guid for the Product Purchased
Name of Product Purchased
GET /event/123456/entries HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"offers": [
{
"id": "6A24D2B5E44F44B28451FE021FCAD51E",
"member": {
"id": "guid",
"forename": "Sam",
"surname": "Steward",
"avatar_url": ""
},
"equipment": {
"id": "",
"name": "",
"sail_number": "213537",
"class": {
"id": "guid",
"name": "",
"Description": ""
}
},
"crew": [
{
"id": "guid",
"forename": "Bill",
"surname": "Smith",
"role": "Trimmer"
}
],
"payment": {
"transaction_id": "",
"transaction_date": 1,
"product_id": "",
"product_name": "",
"total": 15.99
}
}
],
"pageable": {
"page": 1,
"size": 10,
"sort": {
"orders": [
{
"sort": "DESC",
"property": "",
"ignoreCase": true,
"nullHandling": "NATIVE"
}
]
}
},
"total": 25
}
{id}
/racesPath variables
Request parameters
Provide a list of classes top filter
Responses
Body
GET /events/{id}/races HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"raceClasses": [
{
"externalId": "8212cb85-bf88-11e9-95ee-42010a9c00a0",
"name": "Handicap",
"description": "Handicap",
"races": [
{
"isHeat": true,
"raceStatus": "RACED",
"raceNumber": 1,
"raceNotes": "",
"id": "bdf68576-03aa-11ea-aa47-42010a9c0fdc",
"startTime": 1572170400
}
]
}
]
}
{id}
/tallybefore racing starts a member will “tally” in and register they intend to race, for a given day this can be more than one race.
Path variables
Request body
Member ID of Entered Person
Member ID Of Crew Sailing With Entered Person
In or Out Tally Use Search for Date for the OUT to make sure there is an IN. between 00:00:00 and 23:59:59
{id}
/class{event_id}
/class/{class_id}
/races{id}
{id}
/classPath variables
Request body
Starting Sequence
POST /event/{id}/class HTTP/1.1
Content-Type: application/json
{
"class": [
{
"classId": "guid of class",
"startSequence": 1,
"handicap": "PY",
"maxEntries": 1,
"warning": 5,
"prepup": 4,
"prepdown": 1,
"scoringSystem": "LP",
"bowNumbers": true,
"discards": [
{
"raceCount": 1,
"raceToCount": 1
}
],
"scoring": [
{
"outcome": "DNS",
"totalBoats": "SERIES",
"incremental": 1
}
]
}
]
}
{event_id}
/class/{class_id}
/racesAdd Races to a Class
Path variables
Request body
GET /event/{event_id}/class/{class_id}/races HTTP/1.1
Content-Type: application/json
{
"races": [
{
"start_date": 15678965,
"is_heat": true,
"raceStatus": "RACED",
"raceNumber": 1,
"raceNotes": "lorem ipsome"
}
]
}
{id}
/equipment{id}
/entries{id}
/results{id}
/equipmentGet List of Equipment for a Member or Organisation
Path variables
Request parameters
External ID of Class to allow selection of equipment relevant ot a class
Responses
Body
GET /member/{id}/equipment HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "guid",
"name": "Sam's Laser",
"description": "Laser Radial With two Rigs",
"rigs": [
{
"rig_name": "Laser Radial",
"is_default": true,
"class": {
"id": "guid",
"name": "Laser Radial",
"description": "description",
"crew_limit": 0,
"handicap": [
{
"id": "guid",
"system": "PY",
"rating": 1145
}
]
}
},
{
"rig_name": "Laser 4.7",
"is_default": false,
"class": {
"id": "guid",
"name": "Laser 4.7",
"description": "description",
"crew_limit": 0,
"handicap": [
{
"id": "guid",
"system": "PY",
"rating": 1240
}
]
}
}
]
}
{id}
/entriesPath variables
Request parameters
Date of Event - Checks for a current event to allow tag in / tag out
Responses
Body
GET /members/{id}/entry HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "dd68fd8b-bf8b-11e9-95ee-42010a9c00a0",
"name": "SEA VIEW YACHT CLUB REGATTA",
"description": "lorem ipsum",
"eventEntryID": "guid",
"tagged": [
{
"tag_id": "guid",
"tag_in": 156789566,
"tag_out": 156789566
}
],
"equipment": [
{
"id": "guid",
"name": "name",
"rigId": "guid",
"rigClassName": "Laser Radial",
"isEntry": true
}
],
"crew": [
{
"memberId": "guid",
"crewName": "Billy Smith",
"crewEntryId": "guid",
"tagged": [
{
"tag_id": "guid",
"tag_in": 156789566,
"tag_out": 156789566
}
]
}
]
}
{id}
/results