Tracking Championship Standings
This scenario explains how to retrieve the two Formula 1 championship tables, the Drivers' Championship and the Constructors' Championship, and keep them current as races are scored. Both come from a single feed: Stage Summary called on a season stage ID.
This is commonly used to:
- Display the drivers' and constructors' standings
- Power "points behind the leader" and title-race experiences
- Show season performance (wins, poles, podiums, fastest laps)
Relevant Feeds
| Feed | Purpose |
|---|---|
| Seasons | Confirm the season and get its stage ID |
| Stage Summary | Driver (competitors) and constructor (teams) standings |
High-Level Workflow
Seasons → Stage Summary (season) → Read competitors and teams → Refresh after each race
- Get the season's stage ID from Seasons.
- Call Stage Summary with that season stage ID.
- Read driver standings from
competitorsand constructor standings fromteams. - Refresh after each race and during post-race validation.
1. Get the Season Stage ID
GET https://api.sportradar.com/formula1/trial/v2/en/seasons.json
x-api-key: YOUR_API_KEYTake the id for the season you want, for example sr:stage:1189123 for Formula 1 2025. See Pulling Schedules.
2. Request the Season Summary
Call Stage Summary with the season stage ID. A season stage returns the championship tables: competitors (drivers) and teams (constructors), each ranked by result.position.
GET https://api.sportradar.com/formula1/trial/v2/en/sport_events/sr:stage:1189123/summary.json
x-api-key: YOUR_API_KEY3. Read the Drivers' Championship
The competitors array is the drivers' standings. Each driver carries a team and a result with championship aggregates.
{
"stage": {
"id": "sr:stage:1189123",
"description": "Formula 1 2025",
"type": "season",
"competitors": [
{
"id": "sr:competitor:495898",
"name": "Norris, Lando",
"abbreviation": "NOR",
"nationality": "Great Britain",
"team": { "id": "sr:competitor:4514", "name": "McLaren" },
"result": { "points": 423, "car_number": 4, "position": 1, "victories": 7, "races": 24, "races_with_points": 21, "polepositions": 7, "podiums": 18, "fastest_laps": 6, "victory_pole_and_fastest_lap": 2 }
},
{
"id": "sr:competitor:178318",
"name": "Verstappen, Max",
"abbreviation": "VER",
"nationality": "Netherlands",
"team": { "id": "sr:competitor:4978", "name": "Red Bull Racing" },
"result": { "points": 421, "car_number": 1, "position": 2, "victories": 8, "races": 24, "races_with_points": 23, "polepositions": 8, "podiums": 15, "fastest_laps": 3, "victory_pole_and_fastest_lap": 1 }
},
{
"id": "sr:competitor:953189",
"name": "Piastri, Oscar",
"abbreviation": "PIA",
"nationality": "Australia",
"team": { "id": "sr:competitor:4514", "name": "McLaren" },
"result": { "points": 410, "car_number": 81, "position": 3, "victories": 7, "races": 24, "races_with_points": 22, "polepositions": 6, "podiums": 16, "fastest_laps": 6, "victory_pole_and_fastest_lap": 3 }
}
]
}
}<?xml version="1.0" ?>
<summary xmlns="http://schemas.sportradar.com/sportsapi/formula1/v2" generated_at="2026-06-13T13:04:13+00:00">
<stage id="sr:stage:1189123" description="Formula 1 2025" type="season" single_event="false" gender="men">
<competitors>
<competitor id="sr:competitor:495898" name="Norris, Lando" abbreviation="NOR" gender="male" nationality="Great Britain" country_code="GBR">
<team id="sr:competitor:4514" name="McLaren" gender="male" nationality="England" country_code="ENG"/>
<result points="423" car_number="4" position="1" victories="7" races="24" races_with_points="21" polepositions="7" podiums="18" fastest_laps="6" victory_pole_and_fastest_lap="2"/>
</competitor>
<competitor id="sr:competitor:178318" name="Verstappen, Max" abbreviation="VER" gender="male" nationality="Netherlands" country_code="NLD">
<team id="sr:competitor:4978" name="Red Bull Racing" gender="male" nationality="Austria" country_code="AUT"/>
<result points="421" car_number="1" position="2" victories="8" races="24" races_with_points="23" polepositions="8" podiums="15" fastest_laps="3" victory_pole_and_fastest_lap="1"/>
</competitor>
</competitors>
</stage>
</summary>4. Read the Constructors' Championship
The teams array is the constructors' standings, ranked the same way. Each team carries a result and the season's drivers for that team (the driver roster is omitted below for brevity).
{
"stage": {
"id": "sr:stage:1189123",
"type": "season",
"teams": [
{
"id": "sr:competitor:4514",
"name": "McLaren",
"nationality": "England",
"result": { "points": 833, "position": 1, "victories": 14, "races": 24, "races_with_points": 23, "polepositions": 13, "podiums": 34, "fastest_laps": 12 }
},
{
"id": "sr:competitor:41127",
"name": "Mercedes AMG Motorsport",
"nationality": "Germany",
"result": { "points": 469, "position": 2, "victories": 2, "races": 24, "races_with_points": 23, "polepositions": 2, "podiums": 12, "fastest_laps": 6 }
},
{
"id": "sr:competitor:4978",
"name": "Red Bull Racing",
"nationality": "Austria",
"result": { "points": 451, "position": 3, "victories": 8, "races": 24, "races_with_points": 23, "polepositions": 8, "podiums": 15, "fastest_laps": 3 }
}
]
}
}Standings Field Glossary
Each championship result carries:
position: rank in the championshippoints: championship pointsvictories: race winspodiums: top-three finishespolepositions: pole positionsfastest_laps: fastest-lap countsraces: races enteredraces_with_points: races in which points were scoredvictory_pole_and_fastest_lap: "grand slam" count (win from pole with the fastest lap; drivers only)car_number: the driver's car number (drivers only)
Compute "points behind the leader" as the leader's points minus the row's points. See the Statistics Summary for the full field list per stage type.
Competitors and teams are ranked by points and position. Compute championship outcomes, such as a clinched title, in your application from the points and the races remaining.
One Feed, Two TablesBoth championships come from the same season Stage Summary call: drivers in
competitors, constructors inteams. You do not need separate standings endpoints.
Refresh Strategy
- Standings change after each race and reflect the official result, which can differ from the order at the flag during post-race validation (for example a time penalty reordering positions). Race points populate once the race is
Closed; refresh after a race finishes and again once it closes, and treat theClosedstandings as authoritative. - On a race weekend, refresh the season summary after the race session closes. See Update Frequencies.
- Treat the season Stage Summary as the authoritative source for ranks and points; do not recompute order locally beyond the "points behind" delta.
Best Practices
- Confirm the season via the Seasons feed before requesting standings (see Pulling Schedules).
- Display the API's
position; do not re-sort unless you are deriving a custom view. - Resolve each driver's team through the nested
teamobject; both use thesr:competitor:namespace (see ID Handling).
Updated 8 days ago
