@apicity/openf1
v0.6.2
Published
OpenF1 API provider for Formula 1 historical and authenticated live REST data.
Maintainers
Readme
@apicity/openf1
OpenF1 API provider for Formula 1 historical and authenticated live REST data.
Runtime dependencies:
zod@^4.4.3— request schemas attached to OpenF1 endpoint methods as.schema
Installation
npm install @apicity/openf1
# or
pnpm add @apicity/openf1Quick Start
import { createOpenF1 } from "@apicity/openf1";
const openf1 = createOpenF1();REST Examples
OpenF1 historical REST data is public and does not require an API key.
import { createOpenF1 } from "@apicity/openf1";
const openf1 = createOpenF1();
const meetings = await openf1.v1.meetings({
year: 2024,
country_name: ["Singapore", "Monaco"],
});
const recentMeetings = await openf1.v1.meetings({
filters: [
{ field: "date_start", op: ">=", value: "2024-01-01T00:00:00Z" },
],
});Use arrays for repeated equality filters and filters for OpenF1
comparison operators such as >=, <, and >.
Authenticated REST
OpenF1 live REST access uses the same /v1/{collection} endpoints with
a Bearer token. See the OpenF1 auth guide
for the upstream token contract.
import { createOpenF1 } from "@apicity/openf1";
const openf1 = createOpenF1();
const token = await openf1.token({
username: "[email protected]",
password: "placeholder-password",
});
const liveOpenF1 = createOpenF1({
accessToken: token.access_token,
});
const liveSessions = await liveOpenF1.v1.sessions({
session_key: "latest",
});For refreshable tokens, provide a tokenProvider. The provider is called
for REST reads and this package does not store credentials or tokens
outside the client instance.
const openf1 = createOpenF1({
tokenProvider: async () => {
const token = await fetchTokenSomewhereElse();
return token.access_token;
},
});API Reference
19 endpoints across 19 groups. Each method mirrors an upstream URL path.
carData
GET https://api.openf1.org/v1/car_data{query}
const res = await openf1.v1.carData({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
championshipDrivers
GET https://api.openf1.org/v1/championship_drivers{query}
const res = await openf1.v1.championshipDrivers({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
championshipTeams
GET https://api.openf1.org/v1/championship_teams{query}
const res = await openf1.v1.championshipTeams({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
drivers
GET https://api.openf1.org/v1/drivers{query}
const res = await openf1.v1.drivers({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
intervals
GET https://api.openf1.org/v1/intervals{query}
const res = await openf1.v1.intervals({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
laps
GET https://api.openf1.org/v1/laps{query}
const res = await openf1.v1.laps({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
location
GET https://api.openf1.org/v1/location{query}
const res = await openf1.v1.location({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
meetings
GET https://api.openf1.org/v1/meetings{query}
const res = await openf1.v1.meetings({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
overtakes
GET https://api.openf1.org/v1/overtakes{query}
const res = await openf1.v1.overtakes({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
pit
GET https://api.openf1.org/v1/pit{query}
const res = await openf1.v1.pit({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
position
GET https://api.openf1.org/v1/position{query}
const res = await openf1.v1.position({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
raceControl
GET https://api.openf1.org/v1/race_control{query}
const res = await openf1.v1.raceControl({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
sessionResult
GET https://api.openf1.org/v1/session_result{query}
const res = await openf1.v1.sessionResult({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
sessions
GET https://api.openf1.org/v1/sessions{query}
const res = await openf1.v1.sessions({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
startingGrid
GET https://api.openf1.org/v1/starting_grid{query}
const res = await openf1.v1.startingGrid({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
stints
GET https://api.openf1.org/v1/stints{query}
const res = await openf1.v1.stints({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
teamRadio
GET https://api.openf1.org/v1/team_radio{query}
const res = await openf1.v1.teamRadio({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
token
POST https://api.openf1.org/token
const token = await openf1.token({
username: "[email protected]",
password: "placeholder-password",
});Source: packages/provider/openf1/src/openf1.ts
weather
GET https://api.openf1.org/v1/weather{query}
const res = await openf1.v1.weather({ /* ... */ });Source: packages/provider/openf1/src/openf1.ts
Part of the apicity monorepo.
License
MIT — see LICENSE.
