Letour APIracecenter.letour.fr ↗
Track live Tour de France race updates by accessing real-time rider positions, detailed stage information, and current general classification standings. Monitor how your favorite cyclists are performing throughout each stage and their overall ranking in the competition.
curl -X GET 'https://api.parse.bot/scraper/0984e08b-bfe8-4fd6-b955-866c5133a406/get_stage_info?stage_number=10' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace racecenter-letour-fr-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Tour de France Race Center SDK — bounded, re-runnable; every call capped."""
from parse_apis.racecenter_letour_fr_api import TourDeFrance, StageNotFound
client = TourDeFrance()
# List all stages in the current Tour edition
for stage in client.stages.list(limit=3):
print(stage.stage_number, stage.departure_city, "→", stage.arrival_city, stage.length_km, "km")
# Get live positions for the current stage (stage 10)
current = client.stage(10)
for group in current.live_positions(limit=3):
print(group.name, f"gap={group.gap_seconds}s", f"speed={group.speed_kmh}km/h")
for rider in group.riders[:2]:
print(f" bib {rider.bib}: {rider.firstname} {rider.lastname} ({rider.nationality})")
# Get general classification after stage 9
try:
gc = client.stage(9).classification()
print(gc.classification_type, f"({len(gc.rankings)} riders)")
for entry in gc.rankings[:3]:
print(f" #{entry.position} {entry.firstname} {entry.lastname} gap={entry.gap_seconds}s")
except StageNotFound as e:
print(f"Stage not found: {e.stage_number}")
print("exercised: stages.list / stage.live_positions / stage.classification")
Returns stage details for the current Tour de France edition. When stage_number is supplied, returns that single stage; when omitted, returns all 21 stages. Each stage includes route (departure/arrival cities), distance, scheduled times, type code, and cancellation status.
| Param | Type | Description |
|---|---|---|
| stage_number | integer | Stage number (1-21). Omit to retrieve all stages. |
{
"type": "object",
"fields": {
"stages": "array of stage objects with route, timing, and type details"
},
"sample": {
"stages": [
{
"date": "2026-07-14T00:00:00+02:00",
"type": "HMG",
"end_time": "17:14:00",
"timezone": "Europe/Paris",
"length_km": 166.6,
"start_time": "13:15:00",
"arrival_city": "Le Lioran",
"is_cancelled": false,
"stage_number": 10,
"departure_city": "Aurillac"
}
]
}
}About the Letour API
The Letour API on Parse exposes 3 endpoints for the publicly available data on racecenter.letour.fr. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.