Public API

Free public F1 API.

Twenty-five years of Formula 1 data. JSON. CORS-enabled. No key required. Standings, race results, qualifying, pit stops, circuits — 2001 to present.

No auth requiredCORS: *Edge-cached2001 – current14 endpoints

Quick start

Hit the health endpoint to verify it is up and get the full endpoint list:

curl https://sarmalinux.com/api/v1/f1/health
{
  "ok": true,
  "build": "2026-05-03",
  "source": "sarmalinux.com/f1",
  "version": "v1",
  "coverage": "2001–current",
  "endpoints": [
    "GET /api/v1/f1/health",
    "GET /api/v1/f1/next-race",
    "GET /api/v1/f1/season/{year}/standings",
    "...11 more"
  ]
}

Response envelope

Every response wraps its payload in a consistent envelope:

{
  "data": { ... },          // the actual payload
  "meta": {
    "generated_at": "2026-05-03T12:00:00.000Z",
    "season": "2026",       // present on season-scoped endpoints
    "source": "sarmalinux.com/f1",
    "version": "v1"
  }
}

Errors return { "error": "...", "meta": { ... } } with an appropriate HTTP status code (400, 404, or 502).

Code examples

curl

curl https://sarmalinux.com/api/v1/f1/season/current/standings

JavaScript (browser or Node)

const res = await fetch('https://sarmalinux.com/api/v1/f1/season/current/standings')
const { data, meta } = await res.json()

data.forEach(driver => {
  console.log(`${driver.position}. ${driver.name} — ${driver.points} pts`)
})
// meta.generated_at, meta.season, meta.source

Python (requests)

import requests

r = requests.get('https://sarmalinux.com/api/v1/f1/season/current/standings')
payload = r.json()

for driver in payload['data']:
    print(f"{driver['position']}. {driver['name']} — {driver['points']} pts")

Endpoint reference

GET
/api/v1/f1/health

API status, version, coverage, and full endpoint list.

cache 30 min

Example

curl https://sarmalinux.com/api/v1/f1/health

Sample response — truncated, see live endpoint for full shape

{
  "ok": true,
  "build": "2026-05-03",
  "source": "sarmalinux.com/f1",
  "version": "v1",
  "coverage": "2001–current",
  "endpoints": ["GET /api/v1/f1/health", "..."]
}
GET
/api/v1/f1/next-race

Next scheduled race with countdown in milliseconds and race-day weather forecast.

cache 30 min

Example

curl https://sarmalinux.com/api/v1/f1/next-race

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "round": 9,
    "name": "Canadian Grand Prix",
    "date": "2026-06-14",
    "time": "18:00:00Z",
    "countdownMs": 3240000,
    "circuit": "Circuit Gilles Villeneuve",
    "country": "Canada",
    "weather": { "tempMaxC": 22, "precipMm": 0.4, "raceTimePrecipPct": 15 }
  },
  "meta": { "generated_at": "...", "source": "sarmalinux.com/f1", "version": "v1" }
}
GET
/api/v1/f1/season/{year}/standings

Driver championship standings for any season from 2001 to current. Use "current" for the live season.

cache 30 min

Parameters

yearSeason year (2001–current) or "current"

Example

curl https://sarmalinux.com/api/v1/f1/season/current/standings

Sample response — truncated, see live endpoint for full shape

{
  "data": [
    { "position": 1, "driverId": "verstappen", "name": "Max Verstappen",
      "code": "VER", "nationality": "Dutch", "team": "Red Bull",
      "points": 220, "wins": 9 },
    ...
  ],
  "meta": { "generated_at": "...", "season": "2026", "source": "sarmalinux.com/f1", "version": "v1" }
}
GET
/api/v1/f1/season/{year}/constructors

Constructor championship standings for any season.

cache 30 min

Parameters

yearSeason year or "current"

Example

curl https://sarmalinux.com/api/v1/f1/season/current/constructors

Sample response — truncated, see live endpoint for full shape

{
  "data": [
    { "position": 1, "constructorId": "red_bull", "name": "Red Bull",
      "nationality": "Austrian", "points": 380, "wins": 11 },
    ...
  ],
  "meta": { "generated_at": "...", "season": "2026", "source": "sarmalinux.com/f1", "version": "v1" }
}
GET
/api/v1/f1/season/{year}/results

Every race result summary (winner, pole, fastest lap) for the season. One object per round.

cache 30 min

Parameters

yearSeason year or "current"

Example

curl https://sarmalinux.com/api/v1/f1/season/2024/results

Sample response — truncated, see live endpoint for full shape

{
  "data": [
    { "round": 1, "name": "Bahrain Grand Prix", "date": "2024-03-02",
      "circuit": "Bahrain International Circuit", "country": "Bahrain",
      "winner": { "driverId": "verstappen", "name": "Max Verstappen", "team": "Red Bull" },
      "pole": { ... }, "fastestLap": { ... }, "finishers": 19 },
    ...
  ]
}
GET
/api/v1/f1/season/{year}/round/{round}

Full detail for a single race: results, qualifying times, pit stops per driver. Use "last" for the most recent race.

cache 30 min

Parameters

yearSeason year or "current"
roundRound number or "last"

Example

curl "https://sarmalinux.com/api/v1/f1/season/current/round/last"

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "season": "2026", "round": 8, "name": "Monaco Grand Prix",
    "circuit": { "name": "Circuit de Monaco", "country": "Monaco" },
    "results": [
      { "position": 1, "name": "Charles Leclerc", "team": "Ferrari",
        "grid": 1, "laps": 78, "time": "1:48:12.345",
        "qualifying": { "position": 1, "q1": "1:10.2", "q2": "1:09.8", "q3": "1:09.1" },
        "pitStops": [{ "stop": 1, "lap": 35, "duration": "2.4", "durationMs": 2400 }]
      }, ...
    ],
    "hasQualifying": true, "hasPitStops": true
  }
}
GET
/api/v1/f1/season/{year}/schedule

Full season calendar with circuit coordinates, session times, countdown per round, and upcoming flag.

cache 30 min

Parameters

yearSeason year or "current"

Example

curl https://sarmalinux.com/api/v1/f1/season/current/schedule

Sample response — truncated, see live endpoint for full shape

{
  "data": [
    { "round": 1, "name": "Australian Grand Prix", "date": "2026-03-15",
      "circuitId": "albert_park", "country": "Australia",
      "lat": -37.8497, "long": 144.9680,
      "isUpcoming": false, "countdownMs": 0 },
    ...
  ]
}
GET
/api/v1/f1/drivers/{driverId}

Full career profile for a driver: all-time stats, season-by-season breakdown, win list, championship years.

cache 24 h

Parameters

driverIdDriver slug, e.g. hamilton, verstappen, alonso

Example

curl https://sarmalinux.com/api/v1/f1/drivers/hamilton

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "driverId": "hamilton", "name": "Lewis Hamilton", "nationality": "British",
    "totalRaces": 332, "totalWins": 103, "totalPodiums": 197,
    "totalPoints": 4639.5, "totalPoles": 104, "totalFastestLaps": 67,
    "championships": 7, "championshipYears": [2008,2014,2015,2017,2018,2019,2020],
    "seasonStats": [ { "season": 2007, "races": 17, "wins": 4, ... }, ... ],
    "wins": [ ... ]
  }
}
GET
/api/v1/f1/constructors/{constructorId}

Full career profile for a constructor: season stats, championship years, top circuits, all drivers fielded.

cache 24 h

Parameters

constructorIdConstructor slug, e.g. ferrari, mercedes, red_bull

Example

curl https://sarmalinux.com/api/v1/f1/constructors/ferrari

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "constructorId": "ferrari", "name": "Ferrari",
    "totalRaces": 1089, "totalWins": 243,
    "championships": 16, "championshipYears": [2000,2001,...],
    "seasonStats": [ ... ],
    "topCircuits": [ { "name": "Italian Grand Prix", "wins": 19 }, ... ]
  }
}
GET
/api/v1/f1/circuits/{circuitId}

25-year historical record for a circuit: race-by-race results, lap record evolution, DNF rate, grid P1 win rate.

cache 24 h

Parameters

circuitIdCircuit slug, e.g. silverstone, monza, monaco

Example

curl https://sarmalinux.com/api/v1/f1/circuits/silverstone

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "circuitId": "silverstone", "totalRaces": 25,
    "avgDNFRate": 12, "grid1WinRate": 44,
    "topTeams": [ { "team": "Mercedes", "wins": 8 }, ... ],
    "lapRecordEvolution": [ { "season": 2019, "poleSec": 82.1, "poleTime": "1:22.134" }, ... ],
    "races": [ ... ]
  }
}
GET
/api/v1/f1/all-time/drivers

25-year aggregate leaderboard: championships, race wins, seasons active, total points. All drivers who scored in 2001–2025.

cache 24 h

Example

curl https://sarmalinux.com/api/v1/f1/all-time/drivers

Sample response — truncated, see live endpoint for full shape

{
  "data": [
    { "driverId": "schumacher", "name": "Michael Schumacher",
      "championships": 5, "raceWins": 91, "seasons": 11, "totalPoints": 1566 },
    ...
  ],
  "meta": { "season": "2001-2025", ... }
}
GET
/api/v1/f1/all-time/constructors

25-year constructor aggregate plus era breakdown (V10/V8, KERS, Hybrid, Ground effect) showing which team dominated each era.

cache 24 h

Example

curl https://sarmalinux.com/api/v1/f1/all-time/constructors

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "overall": [ { "constructorId": "ferrari", "championships": 16, ... }, ... ],
    "eras": [
      { "era": "hybrid", "label": "Hybrid V6 era", "yearRange": "2014-2021",
        "titles": { "Mercedes": 8 } },
      ...
    ]
  }
}
GET
/api/v1/f1/poll/{season}/{round}

Aggregated anonymous poll results for a race — winner, pole, safety car, and top-3 DNF predictions. Updates as votes come in.

cache 1 min

Parameters

seasonSeason year (e.g. 2026)
roundRound number (1–23)

Example

curl https://sarmalinux.com/api/v1/f1/poll/2026/8

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "season": 2026,
    "round": 8,
    "total_voters": 143,
    "questions": [
      {
        "question": "winner",
        "total": 143,
        "breakdown": [
          { "answer": "Max Verstappen", "votes": 61, "pct": 43 },
          { "answer": "Lando Norris",   "votes": 38, "pct": 27 },
          ...
        ]
      },
      { "question": "pole", ... },
      { "question": "safety_car",  "total": 143, "breakdown": [{ "answer": "Yes", "votes": 92, "pct": 64 }, ...] },
      { "question": "top3_dnf",    "total": 143, "breakdown": [{ "answer": "No",  "votes": 88, "pct": 62 }, ...] }
    ]
  },
  "meta": { "generated_at": "...", "season": "2026", "round": "8", "source": "sarmalinux.com/f1", "version": "v1" }
}
GET
/api/v1/f1/poll/{season}/{round}/insight

AI-generated analysis of the poll consensus for a race — circuit history, championship context, and where the crowd is likely right or wrong.

cache 30 min

Parameters

seasonSeason year
roundRound number

Example

curl https://sarmalinux.com/api/v1/f1/poll/2026/8/insight

Sample response — truncated, see live endpoint for full shape

{
  "data": {
    "insight": "Verstappen holds five wins at this circuit since...",
    "season": 2026,
    "round": 8,
    "race": "Monaco Grand Prix",
    "total_voters": 143,
    "generated_at": "2026-05-22T09:14:00Z"
  },
  "meta": { "source": "sarmalinux.com/f1", "version": "v1", ... }
}

Caching

TypeEndpointsCache-Control
livestandings, results, schedule, round, next-racepublic, s-maxage=1800, stale-while-revalidate=3600
historicaldrivers, constructors, circuits, all-timepublic, s-maxage=86400, stale-while-revalidate=86400
pollpoll/{season}/{round}public, s-maxage=60, stale-while-revalidate=300
poll-insightpoll/{season}/{round}/insightpublic, s-maxage=1800, stale-while-revalidate=3600

Rate limits

There is no hard rate limit enforced by the API. Most responses are cached at the edge, so repeated calls within the cache window are served instantly without hitting upstream. Be reasonable — if you need higher throughput or a dedicated tier for a production product, get in touch.

Also on sarmalinux.com