A unified data plane for single-seater motorsport. Live timing, historical race data, and full championship standings — across F1, F2, F3 and F1 Academy — behind one consistent schema.
# REST — driver standings for F2 in 2026 curl https://api.formulaapi.codai.app/v1/series/f2/seasons/2026/standings/drivers \ -H "Authorization: Bearer $FORMULA_API_KEY" # Live timing over WebSocket (Indie plan and up) wscat -c "wss://api.formulaapi.codai.app/v1/live?key=$FORMULA_API_KEY" # then send: {"subscribe":"session:f2:<sessionPublicId>"}
From a hobbyist building a fantasy league to a broadcaster powering a second-screen app — same endpoints, same schema, same API key.
Subscribe to a session's public id over /v1/live and receive a typed stream of timing, sector, position, pit, race-control and team-radio frames as they happen.
F1 back to 1950 via f1db, F2/F3/F1 Academy back to their inaugural seasons via the official timing feeds. Every round, every session, every lap — queryable by season, round or driver.
One driver model, one session model, one team model — across F1, F2, F3 and F1 Academy. Swap series with a URL slug; no field renames, no surprises.
Yellow/SC/VSC flags, penalties, investigations and restarts delivered as race_control frames with millisecond timestamps. Ordering within a channel is guaranteed.
Sector splits and lap times, both as historical /sessions/:id/laps responses and as sector / lap_time frames on the live stream.
A single driver entity spans every series they have ever raced in. /v1/drivers/:publicId/results returns the full timeline in one call.
GET /v1/drivers/:publicId/results returns a driver's full career across series in a single call. Example: Lando Norris — 391 result rows spanning 2 series.
No more reconciling driver lists between feeder series and the top tier. The same publicId follows a driver through their entire single-seater career — useful for fantasy apps, career pages, and stats sites that need to attribute every lap.
Endpoint reference →Swap the series segment in any URL — no schema drift, no per-series field renames, no separate rate-limit pools to reason about.
Indie covers a hobby app or league. Pro powers a stats site or fantasy product. Enterprise comes with a private rate-limit pool, dedicated support, and an SLA.