Discover/Letour API
live

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.

This API takes change requests — .
Endpoint health
monitored
get_general_classification
get_live_positions
get_stage_info
Checks pendingself-healing
Endpoints
3
Updated
3h ago
Try it
Stage number (1-21). Omit to retrieve all stages.
api.parse.bot/scraper/0984e08b-bfe8-4fd6-b955-866c5133a406/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
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'
Python SDK · recommended

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")
All endpoints · 3 totalmissing one? ·

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.

Input
ParamTypeDescription
stage_numberintegerStage number (1-21). Omit to retrieve all stages.
Response
{
  "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.