F1 APIf1.com ↗
Access F1 driver standings, constructor standings, race results, driver profiles, schedules, and awards data via a single REST API with 7 endpoints.
What is the F1 API?
The F1.com API exposes 7 endpoints covering Formula 1 championship data from standings to detailed race results. Use get_driver_standings to retrieve per-season driver positions, points, nationality, and team, or call get_race_result with a specific meeting_id to get lap counts, finishing times, gaps to leader, and points scored for every classified finisher.
curl -X GET 'https://api.parse.bot/scraper/cf31b48a-e6f4-4bee-82bc-3b1864cf9a19/get_driver_standings?year=2024' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace f1-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: F1 SDK — season standings, race results, driver profiles."""
from parse_apis.official_formula_1_api import F1, MeetingNotFound
client = F1()
# Get the 2024 season and list driver standings
season = client.season("2024")
for standing in season.driver_standings(limit=5):
print(standing.position, standing.driver, standing.team, standing.points)
# List races in the season, then drill into one race's result
race = season.races(limit=1).first()
if race:
try:
result = race.result()
print(result.session, result.season)
for finisher in result.results[:3]:
print(finisher.position, finisher.driver, finisher.team, finisher.time)
except MeetingNotFound as exc:
print(f"Race not found: {exc}")
# Fetch a driver profile with career stats
driver = client.drivers.get(identifier="max-verstappen")
print(driver.identifier, driver.biography[:80])
print(driver.career_stats.first_name, driver.career_stats.last_name, driver.career_stats.titles)
# Get the current race schedule
schedule = client.seasons.schedule()
for meeting in schedule.meetings[:3]:
print(meeting.city, meeting.meeting_id, meeting.timezone)
print("exercised: driver_standings / races / race.result / drivers.get / seasons.schedule")
Returns driver championship standings for a given season year. Each standing includes position, driver name, nationality, team, and points. One request returns the full season standings (no pagination).
| Param | Type | Description |
|---|---|---|
| year | string | Season year. |
{
"type": "object",
"fields": {
"season": "string — the requested season year",
"standings": "array of driver standing objects with position, driver, nationality, team, points"
},
"sample": {
"data": {
"season": "2024",
"standings": [
{
"team": "Red Bull Racing Honda RBPT",
"driver": "Max Verstappen",
"points": "437",
"position": 1,
"nationality": "NED"
},
{
"team": "McLaren Mercedes",
"driver": "Lando Norris",
"points": "374",
"position": 2,
"nationality": "GBR"
}
]
},
"status": "success"
}
}About the F1 API
Standings and Championship Data
Both get_driver_standings and get_constructor_standings accept an optional year parameter, making it straightforward to query historical seasons alongside the current one. Driver standing objects include position, driver, nationality, team, and points. Constructor standing objects follow the same pattern with position, team, and points. Omitting year returns the current season by default.
Race Results
Fetching race-level data is a two-step process. Call get_race_results_by_season with a year to get a list of all meetings for that season — each object contains grand_prix, meeting_id, country_code, and country_name. Pass any meeting_id to get_race_result to retrieve the full finishing order, including each driver's position, driver_tla, team, time, laps, status, gap_to_leader, and championship points earned. The session field identifies the session type (e.g., Race).
Schedule and Driver Profiles
get_schedule returns the current season calendar without any inputs: an array of meetingDates objects, each with city, meetingId, startDate, endDate, and timezone. The meetingId values align with those returned by get_race_results_by_season, so schedule and result lookups can be chained. get_driver_profile takes a driver_slug in firstname-lastname format and returns biography text, a driverProfileImage object with URL and dimensions, and an assemblyRegion object containing related articles.
Awards
get_awards accepts an optional year and returns two objects: fastest_laps, which includes the DHL Fastest Lap Award winner and per-race fastest lap data, and pit_stops, which contains fastest pit stop data broken down by race. This endpoint covers season-level award aggregates rather than session-level telemetry.
The F1 API is a managed, monitored endpoint for f1.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when f1.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official f1.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a season standings tracker that updates driver and constructor points after each race using get_driver_standings and get_constructor_standings.
- Power a race history browser by iterating all meeting_ids from get_race_results_by_season and fetching detailed results via get_race_result.
- Display a team's full season finishing data by filtering get_race_result responses by the team field across every meeting_id.
- Create a driver comparison tool using biography, images, and article links from get_driver_profile for multiple driver slugs.
- Build a race weekend countdown widget from get_schedule data, using startDate, endDate, and timezone fields.
- Track fastest lap and fastest pit stop award winners across seasons using get_awards with different year values.
- Generate a season calendar cross-referenced with results by matching meetingId values from get_schedule and get_race_results_by_season.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.