RacingHub API
Free F1 data API with no key: driver, constructor and race records back to 1950, with career totals precomputed. Open source and OpenAPI-documented. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the RacingHub API?
RacingHub is a free, key-free REST API serving Formula 1 historical data from 1950 onward. Driver records arrive with career totals already aggregated — wins, podiums, points, poles, fastest laps and championships — alongside biographical detail.
With Ergast retired, the F1 data ecosystem fragmented into several successors. RacingHub is one of them, built on the open-source F1DB dataset and published with a proper OpenAPI specification at `/api/v1/openapi.json` — which means you can generate a typed client rather than reverse-engineering the shapes by hand.
Its distinguishing feature is precomputation. Rather than making you aggregate results to answer "how many races has this driver won", every driver record ships with `total_race_wins`, `total_podiums`, `total_pole_positions`, `total_grand_slams` and the rest already summed. For a leaderboard or a career-summary card that removes the entire aggregation step. Two things to watch: point totals come back as strings such as `"0.00"` because F1 has awarded half points, and the default page size is 100, so paging matters on the driver list.
Quick facts
- Base URL
https://racinghub.net/api/v1- Authentication
- No API key and no account. The project is open source and independent of Formula 1.
- Rate limit
- No published limit. Historical data is static — cache it rather than re-fetching.
- Pricing
- Free, MIT licensed.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the RacingHub API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List Formula 1 drivers with career totals
GET https://racinghub.net/api/v1/drivers?limit=2
curl 'https://racinghub.net/api/v1/drivers?limit=2'const res = await fetch("https://racinghub.net/api/v1/drivers?limit=2");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://racinghub.net/api/v1/drivers?limit=2", timeout=20)
res.raise_for_status()
print(res.json()){
"data": [
{
"id": "adderly-fong",
"name": "Adderly Fong",
"first_name": "Adderly",
"last_name": "Fong",
"full_name": "Adderly Fong Cheun-yue",
"abbreviation": "FON",
"gender": "MALE",
"date_of_birth": "1990-03-02",
"place_of_birth": "Vancouver",
"nationality_country_id": "hong-kong",
"country_of_birth_country_id": "canada",
"second_nationality_country_id": null,
"permanent_number": null,
"date_of_death": null,
"total_championship_wins": 0,
"total_race_entries": 0,
"total_race_starts": 0,
"total_race_wins": 0,
"total_race_laps": 0,
"total_podiums": 0,
"total_points": "0.00",
"total_championship_points": "0.00",
"total_pole_positions": 0,
"total_fastest_laps": 0,
"total_driver_of_the_day": 0,
"total_grand_slams": 0,
"best_championship_position": null,
"best_starting_grid_position": null,
"best_race_result": null
},
{
"id": "adolf-brudes",
"name": "Adolf Brudes",
"first_name": "Adolf",
"last_name": "Brudes",
"full_name": "Adolf Brudes von Breslau",
"abbreviation": "BRU",
"gender": "MALE",
"date_of_birth": "1899-10-15",
"place_of_birth": "Groß Kottulin",
"nationality_country_id": "germany",
"country_of_birth_country_id": "germany",
"second_nationality_country_id": null,
"permanent_number": null,
"date_of_death": "1986-11-05",
"total_championship_wins": 0,
"total_race_entries": 1,
"total_raceParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | query | Optional | Items per page, 1 to 100. Defaults to 100. 2 |
page | query | Optional | 1-based page number. 1 |
sort | query | Optional | Sort field — name, number or code. name |
/constructors | path | Optional | Constructor records with the same style of precomputed totals. |
/seasons/{year}/races | path | Optional | Race calendar and results for a season. |
Response fields
data[].idstring- Slug identifier such as `adderly-fong`, used in the detail paths.
data[].name / first_name / last_name / full_namestring- Display name, its components, and the full formal name including any additional given names.
data[].abbreviationstring- Three-letter broadcast code, for example `FON`.
data[].date_of_birth / date_of_deathstring- ISO dates. `date_of_death` is null for living drivers.
data[].place_of_birthstring- City of birth.
data[].nationality_country_id / country_of_birth_country_id / second_nationality_country_idstring- Country slugs, which can differ — nationality raced under is not always country of birth.
data[].permanent_numberinteger- Career number where the driver has one. Null for the great majority.
data[].total_race_entries / total_race_startsinteger- Entries and actual starts. They differ when a driver failed to qualify or withdrew.
data[].total_race_wins / total_podiums / total_pole_positions / total_fastest_lapsinteger- Precomputed career totals — no aggregation needed.
data[].total_points / total_championship_pointsstring- Points as decimal strings, because half points have been awarded in shortened races. Parse before arithmetic.
data[].total_championship_wins / total_grand_slams / total_driver_of_the_dayinteger- Titles, grand slams and modern fan-award counts.
What you can build with the RacingHub API
- Build an F1 statistics site without aggregating results yourself
- Generate driver career summary cards
- Compare constructors across eras using precomputed totals
- Produce a typed API client straight from the published OpenAPI spec
Common errors and how to fix them
Point arithmetic produces string concatenation
`total_points` is a string like `"0.00"`.
Fix: Parse to a float first. The decimal form exists because half points are real in F1.
Only 100 drivers returned
That is the default and maximum page size.
Fix: Page with `limit` and `page`. The full driver list runs to several hundred entries.
Zero totals on a real driver
Entries with no starts genuinely have zero career statistics.
Fix: Check `total_race_entries` against `total_race_starts` before treating a driver as having competed.
Unfamiliar response shape
The API is versioned and evolving.
Fix: Fetch `/api/v1/openapi.json` and generate a client from it rather than hand-coding field access.
RacingHub API — frequently asked questions
Is the RacingHub API free?
Yes, free with no key and no account. It is MIT-licensed open source, independent of and not endorsed by Formula 1.
How far back does the data go?
To 1950, the first world championship season. It is built on the open-source F1DB dataset.
Do I have to calculate career totals myself?
No, and that is the main draw. Wins, podiums, poles, fastest laps, grand slams and championships all arrive precomputed on each driver record.
Why are points returned as strings?
Because F1 has awarded half points in shortened races, so totals are decimal values. They are serialised as strings like `"0.00"` and need parsing before arithmetic.
Tools that pair with this API
CSV Column Statistics Calculator
Profile a CSV column by column: type, blanks, distinct values, min, max, mean, median, standard deviation and percentiles, plus top values — all in-browser.
Percentage Calculator
Calculate what X% of a number is, what percent one number is of another, and percentage increase or decrease between two values — instantly and free.
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
RacingHub is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.