CYCLINGdata api3 races live

Cycling Data API documentation

Build with every stage.

Races

Start list of an edition

Every rider who started, by team, and how each one ended.

GET/v1/races/{id}/startlistLive, Archive and Complete

Your keyNot saved in this browser. Paste it to run the examples, or get a free key.

Request

curl "https://api.cyclingapi.com/v1/races/rc_ed2bkwva/startlist?year=2025" \
  -H "Authorization: Bearer YOUR_KEY"
$ch = curl_init('https://api.cyclingapi.com/v1/races/rc_ed2bkwva/startlist?year=2025');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_KEY']]);
$data = json_decode(curl_exec($ch), true);
import requests
r = requests.get("https://api.cyclingapi.com/v1/races/rc_ed2bkwva/startlist?year=2025",
  headers={"Authorization": "Bearer YOUR_KEY"})
data = r.json()
const r = await fetch("https://api.cyclingapi.com/v1/races/rc_ed2bkwva/startlist?year=2025", {
  headers: { Authorization: "Bearer YOUR_KEY" } });
const data = await r.json();
Try itRuns from this page with your saved key. Needs a paid plan.

Parameters

NameTypeNeedAbout
idpathRequiredRace id (rc_...)
yearintegerRequiredSeason
pageintegerOptionalPage number, from 1
per_pageintegerOptionalRows per page (default 50, at most 50; more is read as 50)
cursorstringOptionalThe next_cursor from the previous answer

Example answer

Response200 OK · application/json

{
    "data": [
        {
            "team": "Team name",
            "rider": {
                "id": "rd_9xk2m4qa",
                "name": "Rider name",
                "nation": "SLO"
            },
            "status": "dnf",
            "final_place": 0,
            "left_on_stage": 0,
            "reason": ""
        }
    ],
    "meta": {
        "page": 1,
        "per_page": 50,
        "count": 1,
        "next_cursor": null
    }
}

Fields

FieldType
teamstring
riderobject
statusstring
final_placeinteger
left_on_stageinteger
reasonstring

Limits

PlansLive, Archive and Complete; each reads its own window of seasons (plans and windows)
RateFree key 10 a minute, Live 60 a minute, Archive 60 a minute, Complete 120 a minute
RowsUp to 50 a page; paging
Kept for1.1 hours; the X-Cache header says whether the answer was stored (hit) or worked out now (build), and X-Cache-Age how old it is
Errors401 unauthorized, 400 bad_request, 403 upgrade_required, 404 not_found, 429 rate_limited (errors)
CountedEach call counts toward your allowance