BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://racinghub.net/api/v1/drivers?limit=2'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://racinghub.net/api/v1/drivers?limit=2", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "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_race

Parameters

ParameterTypeRequiredDescription
limitqueryOptionalItems per page, 1 to 100. Defaults to 100. 2
pagequeryOptional1-based page number. 1
sortqueryOptionalSort field — name, number or code. name
/constructorspathOptionalConstructor records with the same style of precomputed totals.
/seasons/{year}/racespathOptionalRace 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

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.