Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Formula 1 Fundamentals

The Formula 1 API is stage-based: every level of the sport, from the championship down to a single lap, is modeled as a stage, and you move between levels by changing one path parameter, the stage ID. The rest of this guide builds on the stage hierarchy, so start here.



The Stage Hierarchy

A stage can contain sub-stages, which can contain their own sub-stages. Each level nests inside the one above, and the chips on the right are the type values you branch on:

Formula 1 Stage HierarchyEach level nests inside the one above
Sport: the top of the tree (Formula 1); contains the seasonssport
Season: a championship year (Formula 1 2025); driver and team standings live hereseason
Event: a Grand Prix weekend (Australian Grand Prix 2025), with its competitors and circuitevent
Session: the on-track parts of a weekend; sprint weekends add a sprint racepracticequalifyingsprint_racerace
Qualifying parts: Q1, Q2, and Q3
qualifying_partonly under Qualifying
Laps: Lap 1 through Lap N
laponly under Race and Sprint Race
Practice has no sub-stages.

Every node in this hierarchy is a stage with its own sr:stage: ID, and the Stage Summary feed reads any of them by that ID; the level you get back depends on the ID you pass:

One Feed, Every LevelStage Summary returns the level you pass
Season IDtype: seasondriver and constructor standings
Event IDtype: eventcompetitors, teams, and the circuit
Session IDpracticequalifyingsprint_raceracethat session's results
Lap IDtype: lapthe running order at that lap
Stage Schedule accepts the same IDs and returns the schedule nested below the stage you pass.

Stage Types

Stage Typetype valueInformation includedSub-stages
SportsportThe seasons available (current and previous only)Seasons
SeasonseasonSeason schedule, driver and team standings, and statisticsEvents
EventeventA single Grand Prix: competitors, teams, and the circuitSessions
PracticepracticePractice competitors and results (fastest times)None
QualifyingqualifyingConditions, competitors, and overall qualifying resultsQualifying Parts
Qualifying Partqualifying_partConditions, competitors, and results for Q1, Q2, or Q3None
Sprint Racesprint_raceSprint competitors, laps, and resultsLaps
RaceraceRace competitors, lap-by-lap data, and overall resultsLaps
LaplapPer-lap driver positions, gaps, and timesNone

The full table with definitions lives in the Stage Types reference.


ℹ️

Probabilities Apply Only to Some Stages

Win probabilities are returned for the season, event, and race stages only. The sport, practice, qualifying, and lap stages do not return valid probability data. See Retrieving Race Probabilities.



Where to Start: Seasons

The starting point for any integration is the Seasons feed. It returns every covered season as a season stage. Note the id of the season you want and use it as the stage ID for the next call.

{
  "generated_at": "2026-06-13T05:05:04+00:00",
  "schema": "https://schemas.sportradar.com/sportsapi/formula1/v2/schemas/seasons.json",
  "stages": [
    {
      "id": "sr:stage:1285547",
      "description": "Formula 1 2026",
      "scheduled": "2026-03-06T01:30:00+00:00",
      "scheduled_end": "2026-12-06T15:00:00+00:00",
      "type": "season",
      "category": { "id": "sr:category:36", "name": "Formula 1" },
      "sport": { "id": "sr:sport:40", "name": "Formula 1" },
      "single_event": false
    },
    {
      "id": "sr:stage:1189123",
      "description": "Formula 1 2025",
      "scheduled": "2025-03-14T01:35:00+00:00",
      "scheduled_end": "2025-12-07T15:00:00+00:00",
      "type": "season",
      "category": { "id": "sr:category:36", "name": "Formula 1" },
      "sport": { "id": "sr:sport:40", "name": "Formula 1" },
      "single_event": false,
      "gender": "men"
    }
  ]
}

The list above is trimmed to two seasons; the live feed returns the full list of available seasons. See Historical Data for working with past seasons.



Drilling Into the Tree

Passing a season stage ID to Stage Schedule returns that season's events, each with its sessions nested inside, each with its own stage ID. The excerpt below shows one event (the 2025 Australian Grand Prix) with its practice, qualifying (and its three parts), and race sessions:

{
  "stages": [
    {
      "id": "sr:stage:1189125",
      "description": "Australian Grand Prix 2025",
      "type": "event",
      "status": "Closed",
      "unique_stage_id": "sr:stage_unique:1",
      "venue": {
        "id": "sr:venue:1011",
        "name": "Albert Park Circuit",
        "city": "Melbourne",
        "country": "Australia",
        "length": 5278,
        "timezone": "Australia/Melbourne"
      },
      "stages": [
        { "id": "sr:stage:1189127", "description": "Practice 1", "type": "practice", "status": "Closed" },
        { "id": "sr:stage:1189129", "description": "Practice 2", "type": "practice", "status": "Closed" },
        { "id": "sr:stage:1189131", "description": "Practice 3", "type": "practice", "status": "Closed" },
        {
          "id": "sr:stage:1189133",
          "description": "Qualification",
          "type": "qualifying",
          "status": "Closed",
          "stages": [
            { "id": "sr:stage:1189141", "description": "Q1", "type": "qualifying_part" },
            { "id": "sr:stage:1189143", "description": "Q2", "type": "qualifying_part" },
            { "id": "sr:stage:1189145", "description": "Q3", "type": "qualifying_part" }
          ]
        },
        { "id": "sr:stage:1189139", "description": "Race", "type": "race", "status": "Closed" }
      ]
    }
  ]
}

Each venue object is trimmed above; the live feed also returns capacity, coordinates, lap count, corner counts, and the official website. To read the result of any node, pass its id to Stage Summary. See Pulling Schedules.



Knowing Which Stage You Are On

Every stage carries a type attribute that tells you what you are looking at. Branch on type rather than on the description text, which is localized:

  • season responses carry competitors (drivers) and teams (constructors) with championship result objects.
  • race and sprint_race responses carry a competitors list with finishing results and a nested stages list of lap stages.
  • lap responses carry the running order at that lap.


The Shared result Object

Across stage types, each competitor's per-stage data lives in a result object. The same object is reused for every stage type, but only the fields meaningful to that stage are populated, so always check the stage type before interpreting a result. For example:

  • In a race result you get position, points, grid, time, gap_to_leader, interval_to_position_ahead, laps, lapsled, pitstop_count, fastest_lap_time, status, and substatus.
  • In a season (standings) result you get championship aggregates: points, position, victories, podiums, polepositions, fastest_laps, races, races_with_points, and car_number.
  • In a lap result you get only the running-order fields: position, gap_to_leader, interval_to_position_ahead, status, and substatus.

The Statistics Summary reference lists exactly which fields each stage type returns.



Concept-to-Feed Map

You want...Use this feedPass this stage / ID
The list of seasonsSeasons(none)
A season's events and sessionsStage Schedulea season stage ID
Driver and constructor standingsStage Summarya season stage ID
Event detail, competitors, circuitStage Summaryan event stage ID
Race, qualifying, practice, or sprint resultsStage Summarythe session's stage ID
Lap-by-lap running orderStage Summarya lap stage ID
Win probabilitiesStage Probabilitiesa season, event, or race stage ID
Driver biographyCompetitor Profilea competitor_id
Team / car detailsTeam Profilea competitor_id
Deleted stages in a seasonDeleted Stagesa season stage ID
Merged competitor IDsCompetitor Merge Mappings(none)


Next Steps



Did this page help you?