A free public API for F1 race schedules and live session status.
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.
Rate limit: 60 requests/minute per key. CORS is open for browser JS calls.
/api/v1/schedule?year=2026Full season schedule/api/v1/schedule/nextNext upcoming race/api/v1/session/statusLive session right now, if any/api/v1/session/:sessionKeyDetail for a specific session/api/v1/keysIssue a new API keyAll 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"}'{
"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"
}
}
]
}npm install
Create a Supabase project and run supabase/schema.sql in the SQL editor. Create an Upstash Redis database (free tier is fine).
SUPABASE_URL= SUPABASE_SERVICE_ROLE_KEY= UPSTASH_REDIS_REST_URL= UPSTASH_REDIS_REST_TOKEN= REVALIDATE_SECRET=some-random-string REQUIRE_AUTH=false
npm run dev
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.