The VeloViewer WorldTour package has an API available to teams to access their race and training camp data, lat/lng/elevation data streams and waymarkers.
Authorisation
In order to get access to your team’s data you will need to request a token which is then used on each API call. Please email worldtour@veloviewer.com for more information. We will need confirmation from one of the key team personnel before creating/sharing a team token.
If the token is shared beyond the required set of people or someone leaves the team then please email and a new token can be generated to ensure access is removed from people who shouldn’t have it.
Team Race-Stage List
Retrieves a comprehensive list of race stages for a specific team/organisation. This endpoint returns detailed information about each race-stage with distance/climbing totals, UCI info and waymarker/datastream checksums. These checksums can be used to check for changes to the course or waymarkers provided by organiser and the context team.
Endpoint Structure
GET https://veloviewer.com/api/team/{teamId}/races
Path Parameters
teamId(required): The unique identifier for the team.
Query Parameters
token(required): Authentication token for API access.startDate(optional): The start date for the race stages to be returned. Defaults to today’s date. Required format: YYYY-MM-DD.endDate(optional): The end date for the race stages to be returned. Defaults to 10 years from today’s date. Required format: YYYY-MM-DD.uciId(optional): Used to return just the stages for the race corresponding to the uciId. startDate and endDate are ignored if uciId is provided.
Response Structure
The endpoint returns an array of race objects. Each race object contains the following fields:
| Field | Type | Description |
|---|---|---|
raceId |
Integer | Unique identifier for the race |
raceName |
String | Full name of the race event |
stageId |
Integer | Unique identifier for the specific stage |
type |
String | Race type: “One day”, “Stage”, “ITT” or “TTT” |
date |
String | Race-stage date in YYYY-MM-DD format |
vvom |
Float | VeloViewer Objective Measure – difficulty rating |
elevation |
Integer | Total elevation gain in meters (from km zero) |
distance |
Integer | Total distance in meters (from km zero) |
stageNumber |
String | Stage number (empty for one-day races) |
neutral |
Integer | Neutral zone distance in meters |
startTime |
String | Scheduled start time at km zero (may be empty) |
description |
String | Additional stage description, for example “Start Town / Finish Town” |
trainingCamp |
Integer | Flag indicating if this is a training camp: 0 = no, 1 = yes |
uciId |
String | UCI race identifier |
uciSex |
String | UCI gender classification: “1” = Men, “2” = Women, “3” = Mixed |
uciClass |
String | UCI race classification, for example “1.UWT”, “2.Pro”, “1.1”, “2.WWT” |
md5LatLngElv |
String | MD5 hash of the route’s latitude/longitude/elevation data |
md5Waymarker |
String | MD5 hash of waymarker data, may be empty |
Example Response
[
{
"raceId": 1025587,
"raceName": "Volta Comunitat Valenciana",
"stageId": 1077955,
"type": "Stage",
"date": "2026-02-04",
"vvom": 41.8998,
"elevation": 1619,
"distance": 160211,
"stageNumber": "1",
"neutral": 3131,
"startTime": "13:12",
"description": "Segorbe / Torreblanca",
"trainingCamp": 0,
"uciId": "77984",
"uciSex": "1",
"uciClass": "2.Pro",
"md5LatLngElv": "95e0bdc5e5adbc4876cb1e1b06a2a6c6",
"md5Waymarker": "340ca1af048811c381b09833a0d891d2"
}
]
Team Race-Stage Streams
This endpoint retrieves location, distance and elevation stream data for a specific race-stage from VeloViewer.
Endpoint Structure
GET https://veloviewer.com/api/team/{teamId}/raceStage/{raceStageId}/streams
Path Parameters
teamId(required): The unique identifier for the team.raceStageId(required): The race stage identifier.
Query Parameters
token(required): Authentication token for API access.
Response Structure
The API returns a JSON object containing data streams of the following fields:
| Field | Type | Description |
|---|---|---|
id |
Integer | Unique identifier for the race-stage |
latlngs |
Array of Arrays | Coordinates as [latitude, longitude] pairs representing points along the route |
distances |
Array of Numbers | Distance values (in meters) along the course corresponding to each location |
elevations |
Array of Numbers | Elevation values (in meters) for each location |
Example Response
{
"id": 1077294,
"latlngs": [
[50.82821, 3.26508],
[50.8288, 3.26454],
[50.82993, 3.26415]
],
"distances": [-7000, -6924.2, -6795.5],
"elevations": [16.8, 14.8, 12.4]
}
Note: All three arrays (latlngs, distances, elevations) are synchronized by index — the first element in each array corresponds to the same point on the route.
Team Race-Stage Waymarkers
This endpoint retrieves a list of waymarkers set against the race-stage visible to the team/organisation. This will include any waymarkers created by users of the team as well as any provided and shared by the Race Organiser.
Endpoint Structure
GET https://veloviewer.com/api/team/{teamId}/raceStage/{raceStageId}/waymarkers
Path Parameters
teamId(required): The unique identifier for the team.raceStageId(required): The race stage identifier.
Query Parameters
token(required): Authentication token for API access.
Response Structure
The API returns a JSON object containing data streams of the following fields:
| Field | Type | Description |
|---|---|---|
id |
Integer | Unique identifier for the race-stage |
type |
String | The type of waymarker |
description |
String | Description set against the waymarker |
lat |
Number | Latitude |
lng |
Number | Longitude |
distances |
String | Binary string showing whether the waymarker is enabled for each time the location is passed by the route |
isRaceOrg |
Integer | Is the waymarker provided by the Race Organiser (1 for yes) |
level |
Integer | The level of the waymarker (race organiser waymarkers only). |
color |
String | Hex value for colour |
distanceArray |
Array of Integer | Array of distances in metres for where along the course length the waymarker occurs. These are the distance from the finish as this is more stable (i.e. handles late changes in km zero location). The population of these values is currently under development and may require the loading of the course to populate. |
createdBy |
Integer | Strava number for the user that created the waymarker |
createdDate |
String | Date time in YYYY-MM-DD format when the waymarker was created |
updatedBy |
Integer | Strava number for the user that last updated the waymarker |
updatedDate |
String | Date time in YYYY-MM-DD format when the waymarker was last updated |
Example Response
{
"id": 1077294,
"waymarkers": [
{
"id": 3678600,
"type": "bin",
"description": "",
"lat": 50.864445,
"lng": 3.291554,
"distances": "111",
"isRaceOrg": 1,
"level": "3",
"color": "",
"distanceArray": [
6433,
33547
],
"createdBy": 123456,
"createdDate": "2026-01-22 11:41:19",
"updatedBy": 234567,
"updatedDate": "2026-02-24 16:35:39"
}
]
}