F1 Schedule API

A free public API for F1 race schedules and live session status.

RESTJSONOpenF1Jolpica

Base URL

https://f1-schedule-api.vercel.app

A free public API for F1 race schedules and live session status. Built on top of Jolpica (schedules) and OpenF1 (live session data), with its own caching layer so it stays fast and doesn't hammer either upstream service.

Unofficial project — not affiliated with Formula 1, the FIA, or any team.

Endpoints

Rate limit: 60 requests/minute per key. CORS is open for browser JS calls.

GET/api/v1/schedule?year=2026Full season schedule
GET/api/v1/schedule/nextNext upcoming race
GET/api/v1/session/statusLive session right now, if any
GET/api/v1/session/:sessionKeyDetail for a specific session
POST/api/v1/keysIssue a new API key

Authentication

All endpoints require an API key sent via the x-api-key header. Get one by POSTing your email to /api/v1/keys.

curl
curl -X POST https://f1-schedule-api.vercel.app/api/v1/keys \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com"}'

Example Response

response.json
{
  "year": 2026,
  "races": [
    {
      "round": 1,
      "name": "Australian Grand Prix",
      "circuit": "Albert Park Circuit",
      "date": "2026-03-15",
      "sessions": {
        "fp1": "2026-03-13T02:30:00Z",
        "fp2": "2026-03-13T06:00:00Z",
        "qualifying": "2026-03-14T05:00:00Z",
        "race": "2026-03-15T04:00:00Z"
      }
    }
  ]
}

Deploy Your Own

1. Install deps

npm
npm install

2. Setup Supabase

Create a Supabase project and run supabase/schema.sql in the SQL editor. Create an Upstash Redis database (free tier is fine).

3. Configure environment

.env
SUPABASE_URL=
SUPABASE_SERVICE_ROLE_KEY=
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
REVALIDATE_SECRET=some-random-string
REQUIRE_AUTH=false

4. Run locally

npm
npm run dev

Attribution

Built on top of Jolpica (Apache 2.0) for schedule data and OpenF1 for live session status. Credit both data sources anywhere this API is used publicly.

Share