Jolpica-F1
App · Sports · 15 actions
Look up any Formula 1 result since 1950. Read the race calendar with every session time, see what is on next and how long until lights out, pull race, qualifying and sprint classifications, follow a championship round by round, and go lap by lap or stop by stop through a single Grand Prix. Jolpica-F1 is the open successor to the Ergast API, and no account or API key is required.
Actions
| Action | What it does |
|---|---|
| Get constructor standings | Get the constructors' championship table for a season, leader first, with points and wins. |
| Get driver standings | Get the drivers' championship table for a season, leader first, with points, wins and the teams each driver raced for. |
| Get lap times | Get a race's lap-by-lap timings as one flat list, a row per driver per lap, each with the position at the end of that lap and the time in seconds. |
| Get pit stops | Get a race's pit stops in the order they happened, each with the lap, the time of day and the duration in seconds. |
| Get qualifying results | Get qualifying classifications with each of Q1, Q2 and Q3, both as the time was printed and converted to seconds, plus each driver's best of the three. |
| Get race results | Get race classifications, one row per driver per race, with the points, grid slot, status and fastest lap of each. |
| Get sprint results | Get sprint race classifications, in the same shape as a race result so the two can be added together. |
| Get the next race | Get the next Grand Prix that has not been run, with the hours and days left until lights out and until every other session of the weekend. |
| List circuits | List the circuits Formula 1 has raced at, with the town, country and coordinates of each. |
| List constructors | List the teams that have entered a Formula 1 race, with each one's nationality. |
| List database dumps | See what database dumps are available to download and how fresh each one is. |
| List drivers | List Formula 1 drivers with their car number, three-letter code, nationality and date of birth. |
| List finishing statuses | See how races ended, with a count for each status and the share that finished. |
| List races | Get the race calendar, with every session of each weekend given as a single timestamp rather than a separate date and time. |
| List seasons | List Formula 1 championship seasons, oldest first. |
Get constructor standings
Get the constructors' championship table for a season, leader first, with points and wins. Set a round to see the table as it stood after that race rather than as it stands now.
Inputs
- Season
seasontextRequired - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Championship position
positionnumber - Narrow to whichever team holds this place in the championship, counting 1 as the leader. Leave it empty for the whole table.From 1 to 100.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
leader_constructor_idtext- Constructor id at the top of this page
leader_pointsnumber- That constructor's points
offsetnumber- Rows skipped before this page
roundnumber- Round these standings follow
seasonnumber- Season these standings are for
standingslist- The championship table, leader first
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"filters": {
"season": "2024"
},
"leader_constructor_id": "mclaren",
"leader_points": 666.0,
"offset": 0,
"round": 24,
"season": 2024,
"standings": [
{
"constructor_id": "mclaren",
"constructor_name": "McLaren",
"nationality": "British",
"points": 666.0,
"position": 1,
"position_text": "1",
"round": 24,
"season": 2024,
"wins": 6
}
],
"total_count": 10,
"truncated": true
}Get driver standings
Get the drivers' championship table for a season, leader first, with points, wins and the teams each driver raced for. Leaving the round empty gives the table as it stands now; setting one gives it as it stood after that race, which is how to answer 'was the title already decided?'.
Inputs
- Season
seasontextRequired - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Championship position
positionnumber - Narrow to whoever holds this place in the championship, counting 1 as the leader. Leave it empty for the whole table.From 1 to 100.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
leader_driver_idtext- Driver id at the top of this page
leader_pointsnumber- That driver's points
offsetnumber- Rows skipped before this page
roundnumber- Round these standings follow
seasonnumber- Season these standings are for
standingslist- The championship table, leader first
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"filters": {
"season": "2024"
},
"leader_driver_id": "max_verstappen",
"leader_points": 437.0,
"offset": 0,
"round": 24,
"season": 2024,
"standings": [
{
"constructor_ids": [
"red_bull"
],
"constructor_names": [
"Red Bull"
],
"driver_code": "VER",
"driver_id": "max_verstappen",
"driver_name": "Max Verstappen",
"nationality": "Dutch",
"points": 437.0,
"position": 1,
"position_text": "1",
"round": 24,
"season": 2024,
"wins": 9
}
],
"total_count": 24,
"truncated": true
}Get lap times
Get a race's lap-by-lap timings as one flat list, a row per driver per lap, each with the position at the end of that lap and the time in seconds. Narrow to a single lap to see the whole field at one moment, or to a driver to follow their race. Lap data starts with the 1996 season.
Inputs
- Season
seasontextRequired - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited.
- Round
round_numbertextRequired - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date, plus the most recent race.
- Lap number
lapnumber - Narrow to one lap of the race, which gives the whole field at that moment. Leave it empty for every lap.From 1 to 200.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
fastest_driver_idtext- Whoever set the quickest lap on this page
fastest_secondsnumber- That lap time in seconds
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
race_nametext- Grand Prix name
roundnumber- Round of the race
seasonnumber- Season the race belongs to
timingslist- One row per driver per lap, by lap then position
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"fastest_driver_id": "max_verstappen",
"fastest_seconds": 97.284,
"filters": {
"lap": 1,
"round": "1",
"season": "2024"
},
"offset": 0,
"race_name": "Bahrain Grand Prix",
"round": 1,
"season": 2024,
"timings": [
{
"driver_id": "max_verstappen",
"lap": 1,
"position": 1,
"seconds": 97.284,
"time": "1:37.284"
}
],
"total_count": 20,
"truncated": true
}Get pit stops
Get a race's pit stops in the order they happened, each with the lap, the time of day and the duration in seconds. The answer also names the quickest stop of the page. Narrow to a driver, a lap or a stop number. Pit stop data starts with the 2011 season.
Inputs
- Season
seasontextRequired - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited.
- Round
round_numbertextRequired - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date, plus the most recent race.
- Stop number
stopnumber - Narrow to each driver's first stop, second stop and so on. Leave it empty for every stop.From 1 to 60.
- Lap number
lapnumber - Narrow to stops made on one lap of the race. Leave it empty for every lap.From 1 to 200.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
pit_stopslist- Pit stops in the order they happened
quickest_driver_idtext- Whoever had the shortest stop on this page
quickest_secondsnumber- That stop in seconds
race_nametext- Grand Prix name
roundnumber- Round of the race
seasonnumber- Season the race belongs to
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"filters": {
"round": "1",
"season": "2024"
},
"offset": 0,
"pit_stops": [
{
"driver_id": "hulkenberg",
"duration": "36.604",
"duration_seconds": 36.604,
"lap": 1,
"stop": 1,
"time_of_day": "18:05:33"
}
],
"quickest_driver_id": "stroll",
"quickest_seconds": 24.418,
"race_name": "Bahrain Grand Prix",
"round": 1,
"season": 2024,
"total_count": 43,
"truncated": true
}Get qualifying results
Get qualifying classifications with each of Q1, Q2 and Q3, both as the time was printed and converted to seconds, plus each driver's best of the three. The seconds are what make a gap workable: comparing '1:29.179' with '1:29.374' as text answers nothing.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Fastest lap rank
fastest_lap_ranknumber - Narrow to entries whose best lap ranked this fast in the race, counting 1 as the fastest lap of all. Leave it empty for every rank.From 1 to 100.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
resultslist- Matching qualifying results, by race then position
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"filters": {
"round": "1",
"season": "2024"
},
"offset": 0,
"results": [
{
"best_seconds": 89.179,
"car_number": 1,
"circuit_id": "bahrain",
"constructor_id": "red_bull",
"constructor_name": "Red Bull",
"date": "2024-03-02",
"driver_code": "VER",
"driver_id": "max_verstappen",
"driver_name": "Max Verstappen",
"position": 1,
"q1": "1:30.031",
"q1_seconds": 90.031,
"q2": "1:29.374",
"q2_seconds": 89.374,
"q3": "1:29.179",
"q3_seconds": 89.179,
"race_name": "Bahrain Grand Prix",
"round": 1,
"season": 2024
}
],
"total_count": 20,
"truncated": true
}Get race results
Get race classifications, one row per driver per race, with the points, grid slot, status and fastest lap of each. Points and positions come back as numbers rather than text, so a step can compare and total them directly. Every filter narrows the same list, so 'how did Ferrari finish at Monza?' and 'who has won from tenth on the grid?' are this action with different fields filled in.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Fastest lap rank
fastest_lap_ranknumber - Narrow to entries whose best lap ranked this fast in the race, counting 1 as the fastest lap of all. Leave it empty for every rank.From 1 to 100.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Finishing position
finish_positionnumber - Narrow to entries that finished in this position, counting 1 as the win. Leave it empty for every position.From 1 to 100.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
resultslist- Matching classifications, by race then finishing position
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"filters": {
"round": "1",
"season": "2024"
},
"offset": 0,
"results": [
{
"car_number": 1,
"circuit_id": "bahrain",
"constructor_id": "red_bull",
"constructor_name": "Red Bull",
"date": "2024-03-02",
"driver_code": "VER",
"driver_id": "max_verstappen",
"driver_name": "Max Verstappen",
"fastest_lap": 39,
"fastest_lap_rank": 1,
"fastest_lap_seconds": 92.608,
"fastest_lap_speed_kph": 210.383,
"fastest_lap_time": "1:32.608",
"finished": true,
"grid": 1,
"laps_completed": 57,
"points": 26.0,
"position": 1,
"position_text": "1",
"race_name": "Bahrain Grand Prix",
"round": 1,
"season": 2024,
"status": "Finished",
"total_time": "1:31:44.742",
"total_time_millis": 5504742
}
],
"total_count": 20,
"truncated": true
}Get sprint results
Get sprint race classifications, in the same shape as a race result so the two can be added together. Sprints started in 2021, so an earlier season comes back empty rather than as an error.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
resultslist- Matching classifications, by race then finishing position
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"filters": {
"round": "5",
"season": "2024"
},
"offset": 0,
"results": [
{
"car_number": 1,
"circuit_id": "shanghai",
"constructor_id": "red_bull",
"constructor_name": "Red Bull",
"date": "2024-04-21",
"driver_code": "VER",
"driver_id": "max_verstappen",
"driver_name": "Max Verstappen",
"fastest_lap": 3,
"fastest_lap_rank": 1,
"fastest_lap_seconds": 100.331,
"fastest_lap_speed_kph": null,
"fastest_lap_time": "1:40.331",
"finished": true,
"grid": 4,
"laps_completed": 19,
"points": 8.0,
"position": 1,
"position_text": "1",
"race_name": "Chinese Grand Prix",
"round": 5,
"season": 2024,
"status": "Finished",
"total_time": "32:04.660",
"total_time_millis": 1924660
}
],
"total_count": 20,
"truncated": true
}Get the next race
Get the next Grand Prix that has not been run, with the hours and days left until lights out and until every other session of the weekend. This is the action a race-day reminder is built on: it needs nothing filled in, and it stays correct as the season moves on.
Inputs
- Season
seasontext - Which season's next race to look for. Leave it empty for the season running now, which is what a reminder wants.
Outputs
days_until_racenumber- The same wait expressed in days
foundtrue/false- False when the season is over and no calendar is published yet
hours_until_racenumber- Hours from now until lights out
next_sessiontext- The next session still to run, e.g. 'Practice 1'
raceobjectseasonnumber- Season the race belongs to
Example output
{
"days_until_race": 13.64,
"found": true,
"hours_until_race": 327.45,
"next_session": "Practice 1",
"race": {
"circuit_id": "monza",
"circuit_name": "Autodromo Nazionale di Monza",
"country": "Italy",
"date": "2026-09-06",
"is_sprint_weekend": false,
"locality": "Monza",
"race_name": "Italian Grand Prix",
"round": 13,
"season": 2026,
"sessions": [
{
"date": "2026-09-04",
"hours_until": 276.95,
"session": "Practice 1",
"starts_at": "2026-09-04T10:30:00Z"
},
{
"date": "2026-09-05",
"hours_until": 304.45,
"session": "Qualifying",
"starts_at": "2026-09-05T14:00:00Z"
},
{
"date": "2026-09-06",
"hours_until": 327.45,
"session": "Race",
"starts_at": "2026-09-06T13:00:00Z"
}
],
"starts_at": "2026-09-06T13:00:00Z",
"url": "https://en.wikipedia.org/wiki/2026_Italian_Grand_Prix"
},
"season": 2026
}List circuits
List the circuits Formula 1 has raced at, with the town, country and coordinates of each. Narrow to one season for that year's calendar of tracks, or to a driver or team for the circuits they have raced at.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date, plus the most recent and the next race. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Fastest lap rank
fastest_lap_ranknumber - Narrow to entries whose best lap ranked this fast in the race, counting 1 as the fastest lap of all. Leave it empty for every rank.From 1 to 100.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing position
finish_positionnumber - Narrow to entries that finished in this position, counting 1 as the win. Leave it empty for every position.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
circuitslist- Matching circuits, in id order
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"circuits": [
{
"circuit_id": "albert_park",
"country": "Australia",
"latitude": -37.8497,
"locality": "Melbourne",
"longitude": 144.968,
"name": "Albert Park Grand Prix Circuit",
"url": "https://en.wikipedia.org/wiki/Albert_Park_Circuit"
}
],
"count": 1,
"filters": {
"season": "2024"
},
"offset": 0,
"total_count": 24,
"truncated": true
}List constructors
List the teams that have entered a Formula 1 race, with each one's nationality. Narrow to a season for that year's grid, or to a driver for the teams they have driven for.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Fastest lap rank
fastest_lap_ranknumber - Narrow to entries whose best lap ranked this fast in the race, counting 1 as the fastest lap of all. Leave it empty for every rank.From 1 to 100.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing position
finish_positionnumber - Narrow to entries that finished in this position, counting 1 as the win. Leave it empty for every position.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
constructorslist- Matching constructors, in id order
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"constructors": [
{
"constructor_id": "alpine",
"name": "Alpine F1 Team",
"nationality": "French",
"url": "https://en.wikipedia.org/wiki/Alpine_F1_Team"
}
],
"count": 1,
"filters": {
"season": "2024"
},
"offset": 0,
"total_count": 10,
"truncated": true
}List database dumps
See what database dumps are available to download and how fresh each one is. Jolpica-F1 publishes its whole database periodically for anyone who needs more than the API's page limits. The open tier runs a couple of weeks behind the latest, and this reports both with the delay between them.
Inputs
None.
Outputs
available_typeslist- The dump formats on offer, e.g. ['csv']
countnumber- How many dumps were listed
delay_daysnumber- How far behind the latest dump the open one runs
dumpslist- Every published dump, latest tier first
newest_uploaded_attext- When the freshest dump was made
Example output
{
"available_types": [
"csv"
],
"count": 1,
"delay_days": 14,
"dumps": [
{
"download_url": "https://api.jolpi.ca/data/dumps/download/delayed/?dump_type=csv",
"dump_type": "csv",
"file_hash": "a6e8104572cdb291116325d804e999221277a15cff03f7f80edbf0c6e888b55c",
"file_size_bytes": 14289820,
"file_size_mb": 14.29,
"tier": "delayed",
"uploaded_at": "2026-08-01T09:02:06.922560Z"
}
],
"newest_uploaded_at": "2026-08-23T16:58:55.431783Z"
}List drivers
List Formula 1 drivers with their car number, three-letter code, nationality and date of birth. Narrow to a season for that year's field, or to a team for its line-up. This is also how to find the exact driver id every other action filters by.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Fastest lap rank
fastest_lap_ranknumber - Narrow to entries whose best lap ranked this fast in the race, counting 1 as the fastest lap of all. Leave it empty for every rank.From 1 to 100.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing position
finish_positionnumber - Narrow to entries that finished in this position, counting 1 as the win. Leave it empty for every position.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
driverslist- Matching drivers, in id order
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"drivers": [
{
"code": "BEA",
"date_of_birth": "2005-05-08",
"driver_id": "bearman",
"family_name": "Bearman",
"full_name": "Oliver Bearman",
"given_name": "Oliver",
"nationality": "British",
"permanent_number": 87,
"url": "http://en.wikipedia.org/wiki/Oliver_Bearman"
}
],
"filters": {
"constructor_id": "ferrari",
"season": "2024"
},
"offset": 0,
"total_count": 3,
"truncated": true
}List finishing statuses
See how races ended, with a count for each status and the share that finished. Narrowed to a driver or a team it becomes a reliability record: how often the car got to the flag, and what stopped it when it did not.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Fastest lap rank
fastest_lap_ranknumber - Narrow to entries whose best lap ranked this fast in the race, counting 1 as the fastest lap of all. Leave it empty for every rank.From 1 to 100.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing position
finish_positionnumber - Narrow to entries that finished in this position, counting 1 as the win. Leave it empty for every position.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
entries_countednumber- Total entries behind the statuses on this page
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
finished_countnumber- How many of those entries were classified as Finished
finished_percentnumber- Finished entries as a percentage of the entries counted
offsetnumber- Rows skipped before this page
statuseslist- Finishing statuses, most common first
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"entries_counted": 474,
"filters": {
"season": "2024"
},
"finished_count": 287,
"finished_percent": 60.55,
"offset": 0,
"statuses": [
{
"count": 287,
"is_stable_id": true,
"status": "Finished",
"status_id": "1"
}
],
"total_count": 5,
"truncated": true
}List races
Get the race calendar, with every session of each weekend given as a single timestamp rather than a separate date and time. Practice, qualifying, the sprint and the race come back as one ordered list, so a step can put the whole weekend in a calendar without knowing which sessions this season runs.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Round
round_numbertext - Which race of the season. Fill in the season first and this list loads with each round's Grand Prix and date, plus the most recent and the next race. Leave it empty for the whole season.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- From date
from_datedate - Leave out races before this day. The API has no date filter of its own, so this is applied to the races the query returned: set a season and the whole calendar fits in one page.
- To date
to_datedate - Leave out races after this day.
- Include session times
include_sessionstrue/false - Turn off to return just the race itself, without the practice, qualifying and sprint times. On by default.Default:
true. - Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
fetched_countnumber- Rows the API returned before the date window was applied
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
raceslist- Matching races, oldest first
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"fetched_count": 1,
"filters": {
"season": "2024"
},
"offset": 0,
"races": [
{
"circuit_id": "bahrain",
"circuit_name": "Bahrain International Circuit",
"country": "Bahrain",
"date": "2024-03-02",
"is_sprint_weekend": false,
"locality": "Sakhir",
"race_name": "Bahrain Grand Prix",
"round": 1,
"season": 2024,
"sessions": [
{
"date": "2024-02-29",
"session": "Practice 1",
"starts_at": "2024-02-29T11:30:00Z"
},
{
"date": "2024-03-01",
"session": "Qualifying",
"starts_at": "2024-03-01T16:00:00Z"
},
{
"date": "2024-03-02",
"session": "Race",
"starts_at": "2024-03-02T15:00:00Z"
}
],
"starts_at": "2024-03-02T15:00:00Z",
"url": "https://en.wikipedia.org/wiki/2024_Bahrain_Grand_Prix"
}
],
"total_count": 24,
"truncated": true
}List seasons
List Formula 1 championship seasons, oldest first. Narrowing by driver or constructor turns this into a career span: the seasons Hamilton raced in, or the ones Ferrari entered. Narrowing by circuit gives the seasons a track was on the calendar.
Inputs
- Season
seasontext - Which championship season to look at. Pick 'Current season' and the step keeps working next year without being edited. Leave it empty to search every season since 1950.
- Circuit
circuit_idtext - Narrow to one circuit, chosen from every track Formula 1 has raced at. Leave it empty for all of them.
- Constructor
constructor_idtext - Narrow to one team, chosen from every constructor that has entered a Formula 1 race. Leave it empty for all of them.
- Driver
driver_idtext - Narrow to one driver, chosen from every driver who has started a Formula 1 race. Leave it empty for all of them.
- Grid position
grid_positionnumber - Narrow to entries that started the race from this slot on the grid, counting 1 as pole. Leave it empty for every grid slot.From 1 to 100.
- Finishing status
status_idtext - Narrow to entries that ended a given way, such as Finished or Retired. The statuses marked stable are the five the API guarantees will keep their id. Leave it empty for every status.
- Limit
limitnumber - How many rows to return, from 1 to 100, which is the most the API serves in one request. The answer always says how many rows there were in total, so a limited list never reads as a complete one. Defaults to 30.From 1 to 100. Default:
30. - Offset
offsetnumber - How many rows to skip before returning results, for reading a long list a page at a time. Defaults to 0.At least 0. Default:
0.
Outputs
countnumber- Rows in this answer
filtersobject- The filters this query actually applied, repeated so an empty answer says what was asked for
offsetnumber- Rows skipped before this page
seasonslist- Matching seasons, oldest first
total_countnumber- Rows the API holds for the query
truncatedtrue/false- Whether more rows remain
Example output
{
"count": 1,
"filters": {
"driver_id": "hamilton"
},
"offset": 0,
"seasons": [
{
"season": 2007,
"url": "https://en.wikipedia.org/wiki/2007_Formula_One_World_Championship"
}
],
"total_count": 20,
"truncated": true
}