# OpenF1 Live Timing API
> Formula 1 live timing and telemetry as an API, powered by OpenF1 — clean JSON, no key. List race weekends and their sessions (practice, qualifying, sprint, race), the drivers in any session with team and colours, and dive into the timing: lap times with sector splits and speed-trap speeds, pit stops with durations, tyre stints with compound and lap range, track weather (air and track temperature, humidity, rainfall, wind), race-control messages (flags, safety cars, penalties) and team-radio clips. Granular session-by-session data from 2023 onward. Distinct from F1 reference data: this is the live-timing and telemetry layer — ideal for live dashboards, strategy and lap-time analysis, second-screen apps and Discord bots. 9 data endpoints. Authenticated with an x-oanor-key; fair-use rate limits per plan.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/openf1-api/..."
```

## Pricing
- **Free** (Free) — 3,000 calls/Mo, 5 req/s
- **Starter** ($8/Mo) — 55,000 calls/Mo, 15 req/s
- **Pro** ($31/Mo) — 300,000 calls/Mo, 30 req/s
- **Mega** ($97/Mo) — 1,300,000 calls/Mo, 80 req/s

## Endpoints

### Schedule

#### `GET /v1/meetings` — Race weekends

**Parameters:**
- `year` (query, optional, string) — Season year Example: `2024`
- `country` (query, optional, string) — Country name

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/meetings?year=2024"
```

**Response:**
```json
{
    "data": {
        "count": 25,
        "meetings": [
            {
                "name": "Pre-Season Testing",
                "year": 2024,
                "circuit": "Sakhir",
                "country": "Bahrain",
                "location": "Sakhir",
                "date_start": "2024-02-21T07:00:00+00:00",
                "meeting_key": 1228,
                "official_name": "FORMULA 1 ARAMCO PRE-SEASON TESTING 2024"
            },
            {
                "name": "Bahrain Grand Prix",
                "year": 2024,
                "circuit": "Sakhir",
                "country": "Bahrain",
                "location": "Sakhir",
                "date_start": "2024-02-29T11:30:00+00:00",
                "meeting_key": 1229,
                "official_name": "FORMULA 1 GULF AIR BAHRAIN GRAND PRIX 2024"
            },
            {
                "name": "Saudi Arabian Grand Prix",
                "year": 2024,
                "circuit": "Jeddah",
                "country": "Saudi Arabia",
                "location": "Jeddah",
                "date_start": "2024-03-07T13:30:00+00:00",
                "meeting_key": 1230,
                "official_name": "FORMULA 1 STC SAUDI ARABIAN GRAND PRIX 2024"
            },
            {
                "name": "Australian Grand Prix",
                "year": 2024,
                "circuit": "Melbourne",
                "country": "Australia",
                "location": "Melbourne",
                "date_start": "2024-03-22
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/sessions` — Sessions

**Parameters:**
- `year` (query, optional, string) — Season year Example: `2024`
- `country` (query, optional, string) — Country name Example: `Singapore`
- `session_name` (query, optional, string) — Practice 1, Qualifying, Race…

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/sessions?year=2024&country=Singapore"
```

**Response:**
```json
{
    "data": {
        "count": 5,
        "sessions": [
            {
                "name": "Practice 1",
                "type": "Practice",
                "year": 2024,
                "circuit": "Singapore",
                "country": "Singapore",
                "date_end": "2024-09-20T10:30:00+00:00",
                "location": "Marina Bay",
                "date_start": "2024-09-20T09:30:00+00:00",
                "meeting_key": 1246,
                "session_key": 9599
            },
            {
                "name": "Practice 2",
                "type": "Practice",
                "year": 2024,
                "circuit": "Singapore",
                "country": "Singapore",
                "date_end": "2024-09-20T14:00:00+00:00",
                "location": "Marina Bay",
                "date_start": "2024-09-20T13:00:00+00:00",
                "meeting_key": 1246,
                "session_key": 9600
            },
            {
                "name": "Practice 3",
                "type": "Practice",
                "year": 2024,
                "circuit": "Singapore",
                "country": "Singapore",
                "date_end": "2024-09-21T10:30:00+00:00",
                "location": "Marina Bay",
                "date_start": "2024-09-21T09:30:00+00:00",
                "meeting_key": 1246,
                "session_key": 9601
            },
            {
                "name": "Qualifying",
                "type": "Qualifying",
                "yea
…(truncated, see openapi.json for full schema)
```

### Session

#### `GET /v1/drivers` — Drivers in a session

**Parameters:**
- `session_key` (query, required, string) — Session key (from /v1/sessions, or "latest") Example: `9590`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/drivers?session_key=9590"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "drivers": [
            {
                "team": "Red Bull Racing",
                "acronym": "VER",
                "headshot": "https://media.formula1.com/d_driver_fallback_image.png/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png",
                "full_name": "Max VERSTAPPEN",
                "team_colour": "3671C6",
                "country_code": "NED",
                "driver_number": 1
            },
            {
                "team": "RB",
                "acronym": "RIC",
                "headshot": "https://media.formula1.com/d_driver_fallback_image.png/content/dam/fom-website/drivers/D/DANRIC01_Daniel_Ricciardo/danric01.png.transform/1col/image.png",
                "full_name": "Daniel RICCIARDO",
                "team_colour": "6692FF",
                "country_code": "AUS",
                "driver_number": 3
            },
            {
                "team": "McLaren",
                "acronym": "NOR",
                "headshot": "https://media.formula1.com/d_driver_fallback_image.png/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.png",
                "full_name": "Lando NORRIS",
                "team_colour": "FF8000",
                "country_code": "GBR",
                "driver_number": 4
            },
            {
                "team": "Alpine",
                "acronym": "GAS",
                "headshot": "ht
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/race-control` — Race-control messages

**Parameters:**
- `session_key` (query, required, string) — Session key (from /v1/sessions, or "latest") Example: `9590`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/race-control?session_key=9590"
```

**Response:**
```json
{
    "data": {
        "count": 61,
        "messages": [
            {
                "date": "2024-09-01T12:08:03+00:00",
                "flag": null,
                "scope": null,
                "sector": null,
                "message": "BLUE HEAD PADDING MATERIAL MUST BE USED",
                "category": "Other",
                "lap_number": 1,
                "driver_number": null
            },
            {
                "date": "2024-09-01T12:20:01+00:00",
                "flag": "GREEN",
                "scope": "Track",
                "sector": null,
                "message": "GREEN LIGHT - PIT EXIT OPEN",
                "category": "Flag",
                "lap_number": 1,
                "driver_number": null
            },
            {
                "date": "2024-09-01T12:30:01+00:00",
                "flag": null,
                "scope": null,
                "sector": null,
                "message": "PIT EXIT CLOSED",
                "category": "Other",
                "lap_number": 1,
                "driver_number": null
            },
            {
                "date": "2024-09-01T12:45:09+00:00",
                "flag": null,
                "scope": null,
                "sector": null,
                "message": "RISK OF RAIN FOR F1 RACE IS 40 %",
                "category": "Other",
                "lap_number": 1,
                "driver_number": null
            },
            {
                "date": "2024-09-01T12:57:04+00:00",

…(truncated, see openapi.json for full schema)
```

#### `GET /v1/team-radio` — Team radio clips

**Parameters:**
- `session_key` (query, required, string) — Session key (from /v1/sessions, or "latest") Example: `9590`
- `driver_number` (query, optional, string) — Driver number Example: `1`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/team-radio?session_key=9590&driver_number=1"
```

**Response:**
```json
{
    "data": {
        "count": 7,
        "radio": [
            {
                "date": "2024-09-01T13:05:30.784000+00:00",
                "driver_number": 1,
                "recording_url": "https://livetiming.formula1.com/static/2024/2024-09-01_Italian_Grand_Prix/2024-09-01_Race/TeamRadio/MAXVER01_1_20240901_150504.mp3"
            },
            {
                "date": "2024-09-01T13:13:47.132000+00:00",
                "driver_number": 1,
                "recording_url": "https://livetiming.formula1.com/static/2024/2024-09-01_Italian_Grand_Prix/2024-09-01_Race/TeamRadio/MAXVER01_1_20240901_151337.mp3"
            },
            {
                "date": "2024-09-01T13:37:25.925000+00:00",
                "driver_number": 1,
                "recording_url": "https://livetiming.formula1.com/static/2024/2024-09-01_Italian_Grand_Prix/2024-09-01_Race/TeamRadio/MAXVER01_1_20240901_153657.mp3"
            },
            {
                "date": "2024-09-01T13:50:07.970000+00:00",
                "driver_number": 1,
                "recording_url": "https://livetiming.formula1.com/static/2024/2024-09-01_Italian_Grand_Prix/2024-09-01_Race/TeamRadio/MAXVER01_1_20240901_154937.mp3"
            },
            {
                "date": "2024-09-01T13:55:05.845000+00:00",
                "driver_number": 1,
                "recording_url": "https://livetiming.formula1.com/static/2024/2024-09-01_Italian_Grand_Prix/2024-09-01_Race/TeamRadio/MAXVER01_1_20240901_155456.mp3"
     
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/weather` — Track weather

**Parameters:**
- `session_key` (query, required, string) — Session key (from /v1/sessions, or "latest") Example: `9590`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/weather?session_key=9590"
```

**Response:**
```json
{
    "data": {
        "count": 133,
        "weather": [
            {
                "date": "2024-09-01T12:08:10.059000+00:00",
                "humidity": 38,
                "pressure": 993.8,
                "rainfall": 0,
                "wind_speed": 0.7,
                "wind_direction": 318,
                "air_temperature": 33.2,
                "track_temperature": 52.1
            },
            {
                "date": "2024-09-01T12:09:10.057000+00:00",
                "humidity": 37,
                "pressure": 993.9,
                "rainfall": 0,
                "wind_speed": 1,
                "wind_direction": 207,
                "air_temperature": 33.2,
                "track_temperature": 52.1
            },
            {
                "date": "2024-09-01T12:10:10.059000+00:00",
                "humidity": 37,
                "pressure": 993.9,
                "rainfall": 0,
                "wind_speed": 1.3,
                "wind_direction": 230,
                "air_temperature": 33.2,
                "track_temperature": 52.8
            },
            {
                "date": "2024-09-01T12:11:10.064000+00:00",
                "humidity": 36,
                "pressure": 993.8,
                "rainfall": 0,
                "wind_speed": 0.7,
                "wind_direction": 200,
                "air_temperature": 33.2,
                "track_temperature": 52.8
            },
            {
                "date": "2024-09-01T12:12:10.069000+0
…(truncated, see openapi.json for full schema)
```

### Timing

#### `GET /v1/laps` — Lap times (sectors, speeds)

**Parameters:**
- `session_key` (query, required, string) — Session key (from /v1/sessions, or "latest") Example: `9590`
- `driver_number` (query, optional, string) — Driver number Example: `1`
- `lap_number` (query, optional, string) — Lap number Example: `10`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/laps?session_key=9590&driver_number=1&lap_number=10"
```

**Response:**
```json
{
    "data": {
        "laps": [
            {
                "i1_speed": 310,
                "i2_speed": 317,
                "sector_1": 27.82,
                "sector_2": 29.008,
                "sector_3": 28.136,
                "st_speed": 318,
                "date_start": "2024-09-01T13:16:28.212000+00:00",
                "lap_number": 10,
                "lap_duration": 84.964,
                "driver_number": 1,
                "is_pit_out_lap": false
            }
        ],
        "count": 1,
        "session_key": "9590"
    },
    "meta": {
        "timestamp": "2026-06-07T16:46:14.439Z",
        "request_id": "9bb12f95-7a83-4222-96d6-dcc91776b262"
    },
    "status": "ok",
    "message": "Laps retrieved successfully",
    "success": true
}
```

#### `GET /v1/pit` — Pit stops

**Parameters:**
- `session_key` (query, required, string) — Session key (from /v1/sessions, or "latest") Example: `9590`
- `driver_number` (query, optional, string) — Driver number

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/pit?session_key=9590"
```

**Response:**
```json
{
    "data": {
        "count": 30,
        "pit_stops": [
            {
                "date": "2024-09-01T13:11:37.491000+00:00",
                "lap_number": 5,
                "pit_duration": 38.8,
                "driver_number": 27
            },
            {
                "date": "2024-09-01T13:18:33.172000+00:00",
                "lap_number": 10,
                "pit_duration": 24.3,
                "driver_number": 10
            },
            {
                "date": "2024-09-01T13:19:55.341000+00:00",
                "lap_number": 11,
                "pit_duration": 32.6,
                "driver_number": 63
            },
            {
                "date": "2024-09-01T13:20:02.519000+00:00",
                "lap_number": 11,
                "pit_duration": 30.3,
                "driver_number": 3
            },
            {
                "date": "2024-09-01T13:21:19.343000+00:00",
                "lap_number": 12,
                "pit_duration": 24.8,
                "driver_number": 14
            },
            {
                "date": "2024-09-01T13:23:51.408000+00:00",
                "lap_number": 14,
                "pit_duration": 24.1,
                "driver_number": 4
            },
            {
                "date": "2024-09-01T13:24:14.191000+00:00",
                "lap_number": 14,
                "pit_duration": 25.6,
                "driver_number": 20
            },
            {
                "date": "2024-09-01T13:25:17.17600
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/stints` — Tyre stints

**Parameters:**
- `session_key` (query, required, string) — Session key (from /v1/sessions, or "latest") Example: `9590`
- `driver_number` (query, optional, string) — Driver number Example: `1`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/stints?session_key=9590&driver_number=1"
```

**Response:**
```json
{
    "data": {
        "count": 3,
        "stints": [
            {
                "lap_end": 22,
                "compound": "HARD",
                "lap_start": 1,
                "stint_number": 1,
                "driver_number": 1,
                "tyre_age_at_start": 0
            },
            {
                "lap_end": 41,
                "compound": "HARD",
                "lap_start": 23,
                "stint_number": 2,
                "driver_number": 1,
                "tyre_age_at_start": 0
            },
            {
                "lap_end": 53,
                "compound": "MEDIUM",
                "lap_start": 42,
                "stint_number": 3,
                "driver_number": 1,
                "tyre_age_at_start": 0
            }
        ],
        "session_key": "9590"
    },
    "meta": {
        "timestamp": "2026-06-07T16:46:15.035Z",
        "request_id": "1f96870a-af88-4f1b-89cc-d90ee81f738c"
    },
    "status": "ok",
    "message": "Stints retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Spec

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/openf1-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "service": "openf1-api",
        "endpoints": {
            "GET /v1/pit": "Pit stops (session_key=, driver_number=).",
            "GET /v1/laps": "Lap times (session_key=, driver_number=, lap_number=).",
            "GET /v1/meta": "This document.",
            "GET /v1/stints": "Tyre stints (session_key=, driver_number=).",
            "GET /v1/drivers": "Drivers in a session (session_key=).",
            "GET /v1/weather": "Track weather (session_key=).",
            "GET /v1/meetings": "Race weekends (year=, country=).",
            "GET /v1/sessions": "Sessions (year=, country=, session_name=, meeting_key=).",
            "GET /v1/team-radio": "Team radio clips (session_key=, driver_number=).",
            "GET /v1/race-control": "Race-control messages (session_key=)."
        },
        "description": "Formula 1 live timing & telemetry via OpenF1: race weekends and sessions, drivers in a session, lap times with sector splits and speed traps, pit stops, tyre stints, weather, race-control messages and team radio. Real data, no key."
    },
    "meta": {
        "timestamp": "2026-06-07T16:46:15.146Z",
        "request_id": "5f49b257-fad1-4c84-892e-9ec0dac09b02"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/openf1-api
OpenAPI spec: https://www.oanor.com/api/openf1-api/openapi.json
