OpenF1
App · Sports · 18 actions
Read Formula 1 timing and telemetry from OpenF1: the race calendar and session list, entry lists with team colours, classifications and starting grids, championship standings, and how a session actually unfolded - lap and sector times, pit stops, tyre stints, running order, gaps to the car ahead, overtakes, race control's flags and safety cars, trackside weather, and team radio with audio links. Down to the car itself: speed, throttle, brake, gear, RPM, DRS and track position, sampled about 3.7 times a second. Every session from 2023 onward is free and needs no API key. This is an independent integration. OpenF1 is an unofficial, open-source project and is not associated with the Formula 1 companies; F1, FORMULA 1, GRAND PRIX and related marks are trade marks of Formula One Licensing B.V.
Actions
| Action | What it does |
|---|---|
| Get car location | Get one car's position on track as 3D coordinates, sampled about 3.7 times a second - useful for following its progress around a lap. |
| Get car telemetry | Get one car's telemetry - speed, throttle, brake, gear, RPM and DRS - sampled about 3.7 times a second. |
| Get constructors' championship | Get the constructors' championship standings around a race: points and position before and after it, and the points and places the race moved each team. |
| Get drivers' championship | Get the drivers' championship standings around a race: points and position before it, points and position after it, and the points and places the race moved each driver. |
| Get session result | Get the classification after a session: finishing position, laps completed, time or best lap, gap to the leader, and whether a driver was disqualified or failed to finish or start. |
| Get starting grid | Get the grid a race started from: each slot, the driver in it, and the qualifying lap that earned it. |
| List drivers | List the drivers entered for a session: car number, full and broadcast name, three-letter acronym, team, headshot and the team's livery colour (both as the API's bare RRGGBB and as a ready-to-use #RRGGBB). |
| List intervals | List the gap to the car ahead and to the race leader, updated about every four seconds. |
| List laps | List individual laps with sector times, the two intermediate speeds and the speed-trap speed, whether the lap was an out lap from the pits, and the mini-sector codes - decoded here into the yellow/green/purple/pitlane colours a timing screen shows. |
| List meetings | List Formula 1 race weekends - each Grand Prix and testing weekend from 2023 onward - with the circuit, country, local GMT offset, start and end times, and the meeting key every other action is keyed on. |
| List overtakes | List position swaps between two drivers, with who passed whom and the position gained. |
| List pit stops | List trips through the pit lane, with the lap they happened on, the time spent stationary and the time spent in the lane overall. |
| List positions | List the running order through a session - where each driver started and every change afterwards, each stamped with the moment it happened. |
| List race control messages | List race control's own narration of a session: flags, safety cars, DRS enabled and disabled, incidents noted, investigated and penalised, and the session being stopped and restarted. |
| List sessions | List sessions - practice, qualifying, sprint and race - with their start and end times, circuit and session key. |
| List stints | List stints - each unbroken run on one set of tyres - with the compound, the laps it spanned, how many laps that was, and how old the tyres already were when it began. |
| List team radio | List radio exchanges between drivers and their teams, each with a link to the audio recording. |
| List weather readings | List trackside weather taken once a minute: air and track temperature, humidity, air pressure, wind speed and direction, and whether it was raining. |
Get car location
Get one car's position on track as 3D coordinates, sampled about 3.7 times a second - useful for following its progress around a lap. It does not say which side of the track the car is on, and the origin is arbitrary rather than a fixed point on the circuit. A session and a driver are both required, and a time window is the way to narrow it further.
Inputs
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Session
session_keytextRequired - Required. The session to read telemetry from. Pick a meeting first and this lists its sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertextRequired - Required. The driver's car number. Telemetry is per-car, and one car's session is already tens of thousands of samples, so a driver must be chosen. Pick a session first and this lists that session's entries.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 5000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 5000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"date": "2023-09-16T13:03:35.292000+00:00",
"driver_number": 81,
"meeting_key": 1219,
"session_key": 9161,
"x": 567,
"y": 3195,
"z": 187
}
],
"total_matched": 1,
"truncated": false
}Get car telemetry
Get one car's telemetry - speed, throttle, brake, gear, RPM and DRS - sampled about 3.7 times a second. The DRS code and the 0/100 brake reading are decoded into readable fields beside the raw values. A session and a driver are both required because a single car's session is already tens of thousands of samples; narrow it further with a time window or a speed floor.
Inputs
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Session
session_keytextRequired - Required. The session to read telemetry from. Pick a meeting first and this lists its sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertextRequired - Required. The driver's car number. Telemetry is per-car, and one car's session is already tens of thousands of samples, so a driver must be chosen. Pick a session first and this lists that session's entries.
- Minimum speed (km/h)
min_speednumber - Optional. Only samples at or above this speed - 300 finds the fastest parts of a lap.At least 0.
- Maximum speed (km/h)
max_speednumber - Optional. Only samples at or below this speed.At least 0.
- Gear
n_gearnumber - Optional. Only samples in this gear, 1 to 8. 0 is neutral or no gear engaged.From 0 to 8.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 5000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 5000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"brake": 0,
"brake_pressed": false,
"date": "2023-09-15T13:08:19.923000+00:00",
"driver_number": 55,
"drs": 12,
"drs_active": true,
"drs_status": "DRS on",
"meeting_key": 1219,
"n_gear": 8,
"rpm": 11141,
"session_key": 9159,
"speed": 315,
"throttle": 99
}
],
"total_matched": 1,
"truncated": false
}Get constructors' championship
Get the constructors' championship standings around a race: points and position before and after it, and the points and places the race moved each team. Race sessions only, and in beta on OpenF1's side.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Team name
team_nametext - Optional. The team's name, e.g. 'McLaren'. Matches the whole value.
- Top N in the championship
max_positionnumber - Optional. Only teams at or above this championship position after the race.At least 1.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"meeting_key": 1276,
"points_current": 833,
"points_gained": 33,
"points_start": 800,
"position_current": 1,
"position_start": 1,
"positions_gained": 0,
"session_key": 9839,
"team_name": "McLaren"
}
],
"total_matched": 1,
"truncated": false
}Get drivers' championship
Get the drivers' championship standings around a race: points and position before it, points and position after it, and the points and places the race moved each driver. Race sessions only, and in beta on OpenF1's side.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Top N in the championship
max_positionnumber - Optional. Only drivers at or above this championship position after the race.At least 1.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"driver_number": 4,
"meeting_key": 1276,
"points_current": 423,
"points_gained": 15,
"points_start": 408,
"position_current": 1,
"position_start": 1,
"positions_gained": 0,
"session_key": 9839
}
],
"total_matched": 1,
"truncated": false
}Get session result
Get the classification after a session: finishing position, laps completed, time or best lap, gap to the leader, and whether a driver was disqualified or failed to finish or start. Published a few minutes after the official F1 results. In qualifying the time and gap are three values (Q1, Q2, Q3), so a single best_duration is provided beside them.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Position
positionnumber - Optional. Only the driver in this exact position.At least 1.
- Top N positions
max_positionnumber - Optional. Only positions at or above this one - 3 for the podium, 10 for the points.At least 1.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"best_duration": 77.565,
"classified": true,
"dnf": false,
"dns": false,
"driver_number": 1,
"dsq": false,
"duration": 77.565,
"gap_to_leader": 0,
"gap_to_leader_seconds": 0,
"is_lapped": false,
"is_qualifying_format": false,
"meeting_key": 1143,
"number_of_laps": 24,
"position": 1,
"session_key": 7782
}
],
"total_matched": 1,
"truncated": false
}Get starting grid
Get the grid a race started from: each slot, the driver in it, and the qualifying lap that earned it. Published a few minutes after the official F1 results, so it reflects any penalties already applied.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Top N grid slots
max_positionnumber - Optional. Only grid slots at or above this one, e.g. 10 for the top ten starters.At least 1.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"driver_number": 1,
"lap_duration": 76.732,
"meeting_key": 1143,
"position": 1,
"session_key": 7783
}
],
"total_matched": 1,
"truncated": false
}List drivers
List the drivers entered for a session: car number, full and broadcast name, three-letter acronym, team, headshot and the team's livery colour (both as the API's bare RRGGBB and as a ready-to-use #RRGGBB). Car numbers are reassigned between seasons and substitutes come and go, so this is keyed on a session rather than being a standing list.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Team name
team_nametext - Optional. The team's name, e.g. 'Red Bull Racing' or 'McLaren'. Matches the whole value.
- Driver acronym
name_acronymtext - Optional. The driver's three-letter acronym, e.g. 'VER' or 'NOR'.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"broadcast_name": "M VERSTAPPEN",
"driver_number": 1,
"first_name": "Max",
"full_name": "Max VERSTAPPEN",
"headshot_url": "https://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png",
"last_name": "Verstappen",
"meeting_key": 1219,
"name_acronym": "VER",
"session_key": 9158,
"team_colour": "3671C6",
"team_colour_hex": "#3671C6",
"team_name": "Red Bull Racing"
}
],
"total_matched": 1,
"truncated": false
}List intervals
List the gap to the car ahead and to the race leader, updated about every four seconds. Races only. Each gap is a number, '+1 LAP' for a lapped driver, or empty for the leader, so plain interval_seconds, gap_to_leader_seconds, is_lapped and is_leader fields are provided beside them to compare on.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Maximum interval (seconds)
max_intervalnumber - Optional. Only readings where the gap to the car ahead is at or under this many seconds - 1 finds the moments a driver was within a second and eligible for DRS.At least 0.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"date": "2023-09-17T13:31:02.395000+00:00",
"driver_number": 1,
"gap_to_leader": 41.019,
"gap_to_leader_seconds": 41.019,
"interval": 0.003,
"interval_seconds": 0.003,
"is_lapped": false,
"is_leader": false,
"meeting_key": 1219,
"session_key": 9165
}
],
"total_matched": 1,
"truncated": false
}List laps
List individual laps with sector times, the two intermediate speeds and the speed-trap speed, whether the lap was an out lap from the pits, and the mini-sector codes - decoded here into the yellow/green/purple/pitlane colours a timing screen shows. Filter to one driver, one lap, a range of laps, or laps under a given time. Mini-sectors are not published during races.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Lap number
lap_numbernumber - Optional. Only this exact lap of the session.At least 1.
- From lap
min_lap_numbernumber - Optional. Only laps at or after this lap number.At least 1.
- To lap
max_lap_numbernumber - Optional. Only laps at or before this lap number.At least 1.
- Pit out laps only
is_pit_out_laptrue/false - Optional. True for only out laps from the pits, false for only laps that are not. Leave blank for both - which is a different question from 'false'.
- Maximum lap time (seconds)
max_lap_durationnumber - Optional. Only laps at or under this many seconds - a way to skip safety-car and in/out laps.At least 0.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"date_start": "2023-09-16T13:59:07.606000+00:00",
"driver_number": 63,
"duration_sector_1": 26.966,
"duration_sector_2": 38.657,
"duration_sector_3": 26.12,
"i1_speed": 307,
"i2_speed": 277,
"is_pit_out_lap": false,
"lap_duration": 91.743,
"lap_number": 8,
"meeting_key": 1219,
"segments_sector_1": [
2049,
2049,
2049,
2051,
2049,
2051,
2049,
2049
],
"segments_sector_1_colours": [
"green",
"green",
"green",
"purple",
"green",
"purple",
"green",
"green"
],
"segments_sector_2": [
2049,
2049,
2049,
2049,
2049,
2049,
2049,
2049
],
"segments_sector_2_colours": [
"green",
"green",
"green",
"green",
"green",
"green",
"green",
"green"
],
"segments_sector_3": [
2048,
2048,
2048,
2048,
2048,
2064,
2064,
2064
],
"segments_sector_3_colours": [
"yellow",
"yellow",
"yellow",
"yellow",
"yellow",
"pitlane",
"pitlane",
"pitlane"
],
"session_key": 9161,
"st_speed": 298
}
],
"total_matched": 1,
"truncated": false
}List meetings
List Formula 1 race weekends - each Grand Prix and testing weekend from 2023 onward - with the circuit, country, local GMT offset, start and end times, and the meeting key every other action is keyed on. Filter by season, country or circuit, or leave everything blank for the whole calendar. No API key required.
Inputs
- Season
yearnumber - Optional. The season, e.g. 2024. OpenF1's coverage starts at 2023, so an earlier year is refused rather than returning nothing.From 2023 to 2100.
- Country name
country_nametext - Optional. The country the weekend was held in, spelled in full, e.g. 'Singapore'. Matches the whole value.
- Country code
country_codetext - Optional. The three-letter country code, e.g. 'SGP'.
- Circuit
circuit_short_nametext - Optional. The circuit's short name, e.g. 'Spa-Francorchamps' or 'Singapore'.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"circuit_image": "https://media.formula1.com/content/dam/fom-website/2018-redesign-assets/Track%20icons%204x3/Singapore%20carbon.png",
"circuit_info_url": "https://api.multiviewer.app/api/v1/circuits/61/2026",
"circuit_key": 61,
"circuit_short_name": "Singapore",
"circuit_type": "Temporary - Street",
"country_code": "SGP",
"country_flag": "https://media.formula1.com/content/dam/fom-website/2018-redesign-assets/Flags%2016x9/singapore-flag.png",
"country_key": 157,
"country_name": "Singapore",
"date_end": "2026-10-11T14:00:00+00:00",
"date_start": "2026-10-09T09:30:00+00:00",
"gmt_offset": "08:00:00",
"is_cancelled": false,
"location": "Marina Bay",
"meeting_key": 1296,
"meeting_name": "Singapore Grand Prix",
"meeting_official_name": "FORMULA 1 SINGAPORE AIRLINES SINGAPORE GRAND PRIX 2026",
"year": 2026
}
],
"total_matched": 1,
"truncated": false
}List overtakes
List position swaps between two drivers, with who passed whom and the position gained. Races only. This counts changes from pit stops and post-race penalties as well as on-track passes, and OpenF1 notes the data may be incomplete.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Overtaking driver
overtaking_driver_numbertext - Optional. The car number of the driver doing the passing.
- Overtaken driver
overtaken_driver_numbertext - Optional. The car number of the driver being passed.
- Position gained
positionnumber - Optional. Only passes that put the overtaking driver into this position - 1 finds passes for the lead.At least 1.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"date": "2024-11-03T15:50:07.565000+00:00",
"meeting_key": 1249,
"overtaken_driver_number": 4,
"overtaking_driver_number": 63,
"position": 1,
"session_key": 9636
}
],
"total_matched": 1,
"truncated": false
}List pit stops
List trips through the pit lane, with the lap they happened on, the time spent stationary and the time spent in the lane overall. The stationary time is only recorded from the 2024 US Grand Prix onward; the lane time is available throughout.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Lap number
lap_numbernumber - Optional. Only stops made on this lap.At least 1.
- Maximum stationary time (seconds)
max_stop_durationnumber - Optional. Only stops at or under this many seconds stationary - 2.5 finds the quick ones. Note this excludes stops before the 2024 US Grand Prix, which have no stationary time recorded.At least 0.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"date": "2025-10-26T20:46:37.358000+00:00",
"driver_number": 16,
"lane_duration": 22.215,
"lap_number": 31,
"meeting_key": 1272,
"pit_duration": 22.215,
"session_key": 9877,
"stop_duration": 2.2
}
],
"total_matched": 1,
"truncated": false
}List positions
List the running order through a session - where each driver started and every change afterwards, each stamped with the moment it happened. A row is written when a position changes rather than at a fixed rate, so a quiet race produces few rows and a chaotic one many.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Position
positionnumber - Optional. Only changes into this exact position.At least 1.
- Top N positions
max_positionnumber - Optional. Only positions at or above this one, e.g. 3 to follow the podium places.At least 1.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"date": "2023-08-26T09:30:47.199000+00:00",
"driver_number": 40,
"meeting_key": 1217,
"position": 2,
"session_key": 9144
}
],
"total_matched": 1,
"truncated": false
}List race control messages
List race control's own narration of a session: flags, safety cars, DRS enabled and disabled, incidents noted, investigated and penalised, and the session being stopped and restarted. Filter by category, flag colour, scope, lap or driver.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Category
categorytext - Optional. The event category, e.g. 'Flag', 'SafetyCar', 'Drs', 'CarEvent' or 'SessionStatus'.
- Flag
flagtext - Optional. The flag shown, e.g. 'GREEN', 'YELLOW', 'DOUBLE YELLOW', 'RED', 'BLACK AND WHITE' or 'CHEQUERED'.
- Scope
scopetext - Optional. What the message applied to: 'Track', 'Driver' or 'Sector'.
- Lap number
lap_numbernumber - Optional. Only messages from this lap of a race.At least 1.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"category": "Flag",
"date": "2023-06-04T14:21:01+00:00",
"driver_number": 1,
"flag": "BLACK AND WHITE",
"lap_number": 59,
"meeting_key": 1211,
"message": "BLACK AND WHITE FLAG FOR CAR 1 (VER) - TRACK LIMITS",
"qualifying_phase": null,
"scope": "Driver",
"sector": null,
"session_key": 9102
}
],
"total_matched": 1,
"truncated": false
}List sessions
List sessions - practice, qualifying, sprint and race - with their start and end times, circuit and session key. A session key is what nearly every other OpenF1 action is keyed on, so this is usually the first step of a workflow. Filter by season, country, circuit, session name or race weekend.
Inputs
- Season
yearnumber - Optional. The season, e.g. 2024. OpenF1 covers 2023 onward.From 2023 to 2100.
- Country name
country_nametext - Optional. The country, spelled in full.
- Circuit
circuit_short_nametext - Optional. The circuit's short name.
- Session name
session_nametext - Optional. The session's name, e.g. 'Practice 1', 'Qualifying', 'Sprint Qualifying' or 'Race'.
- Session type
session_typetext - Optional. The broader type, e.g. 'Practice', 'Qualifying' or 'Race'.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"circuit_key": 7,
"circuit_short_name": "Spa-Francorchamps",
"country_code": "BEL",
"country_key": 16,
"country_name": "Belgium",
"date_end": "2023-07-29T15:35:00+00:00",
"date_start": "2023-07-29T15:05:00+00:00",
"gmt_offset": "02:00:00",
"is_cancelled": false,
"location": "Spa-Francorchamps",
"meeting_key": 1216,
"session_key": 9140,
"session_name": "Sprint Qualifying",
"session_type": "Sprint Qualifying",
"year": 2023
}
],
"total_matched": 1,
"truncated": false
}List stints
List stints - each unbroken run on one set of tyres - with the compound, the laps it spanned, how many laps that was, and how old the tyres already were when it began. Filtering on tyre age is how a workflow finds runs started on a scrubbed set.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- Tyre compound
compoundtext - Optional. The compound, e.g. SOFT, MEDIUM, HARD, INTERMEDIATE or WET.
- Stint number
stint_numbernumber - Optional. Only this stint of the session, counting from 1.At least 1.
- Minimum tyre age (laps)
min_tyre_age_at_startnumber - Optional. Only stints begun on tyres at least this many laps old. 1 or more finds every run on a used set.At least 0.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"compound": "SOFT",
"driver_number": 16,
"lap_count": 20,
"lap_end": 20,
"lap_start": 1,
"meeting_key": 1219,
"session_key": 9165,
"stint_number": 1,
"tyre_age_at_start": 3
}
],
"total_matched": 1,
"truncated": false
}List team radio
List radio exchanges between drivers and their teams, each with a link to the audio recording. Only a selection of a session's radio is ever released, and OpenF1 notes that far less has been published from 2026 onward - many sessions carry none at all, so an empty result is normal rather than a fault.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Driver
driver_numbertext - Optional. The driver's car number. Pick a session first and this lists that session's entries; a number from an earlier step also works.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"date": "2023-09-15T09:40:43.005000+00:00",
"driver_number": 11,
"meeting_key": 1219,
"recording_url": "https://livetiming.formula1.com/static/2023/2023-09-17_Singapore_Grand_Prix/2023-09-15_Practice_1/TeamRadio/SERPER01_11_20230915_104008.mp3",
"session_key": 9158
}
],
"total_matched": 1,
"truncated": false
}List weather readings
List trackside weather taken once a minute: air and track temperature, humidity, air pressure, wind speed and direction, and whether it was raining. Filter to the readings above a temperature or wind speed to find when conditions turned.
Inputs
- Session
session_keytext - Optional. The session to read - pick a meeting first and this lists its practice, qualifying, sprint and race sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Meeting (Grand Prix)
meeting_keytext - Optional. The race weekend to read. Setting this also fills the Session dropdown with that weekend's sessions. Accepts a key from an earlier step, or 'latest' for the session or meeting happening now.
- Minimum air temperature (°C)
min_air_temperaturenumber - Optional. Only readings at or above this air temperature.
- Minimum track temperature (°C)
min_track_temperaturenumber - Optional. Only readings at or above this track temperature - the number that decides tyre behaviour.
- Minimum wind speed (m/s)
min_wind_speednumber - Optional. Only readings at or above this wind speed.At least 0.
- From
date_fromdate and time - Optional. Only include records at or after this UTC moment. Narrowing the window is the main way to keep a busy session's result readable.
- To
date_todate and time - Optional. Only include records at or before this UTC moment.
- Maximum rows
limitnumber - Optional. How many rows to return, 1 to 1000 (default 100). OpenF1 has no paging, so the whole matching set is fetched and cut to this; the result says how many matched in total and whether it was cut.From 1 to 1000. Default:
100. - Show in the run
output_detailtext - How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the Maximum rows field above decides that, not this one. 'One line each' gives the fields that matter for this collection; 'Every field' adds everything else the API sent. This only changes what is displayed, never what is saved - a later step sees the same data whichever is chosen. Defaults to one line each.One of:
summary(One line each),full(Every field). Default:summary.
Outputs
output_detailtextresult_countnumberresultslisttotal_matchednumbertruncatedtrue/false
Example output
{
"output_detail": "summary",
"result_count": 1,
"results": [
{
"air_temperature": 27.8,
"date": "2023-05-07T18:42:25.233000+00:00",
"humidity": 58,
"meeting_key": 1208,
"pressure": 1018.7,
"rainfall": 0,
"rainfall_detected": false,
"session_key": 9078,
"track_temperature": 52.5,
"wind_direction": 136,
"wind_speed": 2.4
}
],
"total_matched": 1,
"truncated": false
}