VeloViewer WorldTour – API

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"
    }
  ]
}