back to docs

F1 Schedule API

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

RESTJSONOpenF1Jolpica

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 -X POST https://f1-schedule-api.vercel.app/api/v1/keys \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com"}'

Example Response

{
  "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 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

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 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.