Skip to content

Models

Telemetry

pyopenf1.models.telemetry.CarData

Bases: BaseModel

A single telemetry sample from the /car_data endpoint.

Each record represents a snapshot of a car's live telemetry at a specific timestamp during a session.

Attributes:

Name Type Description
brake int

Brake application percentage (0-100).

date datetime

ISO-8601 timestamp of the telemetry sample.

driver_number int

The unique number identifying the driver.

drs int

DRS (Drag Reduction System) status code.

meeting_key int

Unique key identifying the meeting (Grand Prix).

n_gear int

Current gear number (0 = neutral).

rpm int

Engine revolutions per minute.

session_key int

The unique key identifying the session.

speed int

Car speed in km/h.

throttle int

Throttle position percentage (0-100).

Source code in pyopenf1/models/telemetry.py
class CarData(BaseModel):
    """A single telemetry sample from the ``/car_data`` endpoint.

    Each record represents a snapshot of a car's live telemetry at a
    specific timestamp during a session.

    Attributes:
        brake: Brake application percentage (0-100).
        date: ISO-8601 timestamp of the telemetry sample.
        driver_number: The unique number identifying the driver.
        drs: DRS (Drag Reduction System) status code.
        meeting_key: Unique key identifying the meeting (Grand Prix).
        n_gear: Current gear number (0 = neutral).
        rpm: Engine revolutions per minute.
        session_key: The unique key identifying the session.
        speed: Car speed in km/h.
        throttle: Throttle position percentage (0-100).
    """

    model_config = ConfigDict(
        frozen=True,
        populate_by_name=True,
        str_strip_whitespace=True,
    )

    brake: int = Field(..., description="Brake percentage.")
    date: datetime = Field(..., description="ISO-8601 timestamp of the sample.")
    driver_number: int = Field(..., description="Unique driver number.")
    drs: int = Field(..., description="DRS status flag.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    n_gear: int = Field(..., description="Current gear (0 = neutral).")
    rpm: int = Field(..., description="Engine RPM.")
    session_key: int = Field(..., description="Unique session key.")
    speed: int = Field(..., description="Car speed in km/h.")
    throttle: int = Field(..., description="Throttle percentage.")

pyopenf1.models.telemetry.Location

Bases: BaseModel

A single GPS location sample from the /location endpoint.

Provides the approximate position of a car on the circuit at ~3.7 Hz.

Attributes:

Name Type Description
date datetime

ISO-8601 timestamp of the location sample.

driver_number int

Unique driver number.

meeting_key int

Unique meeting key.

session_key int

Unique session key.

x int

X coordinate on the circuit.

y int

Y coordinate on the circuit.

z int

Z coordinate (elevation).

Source code in pyopenf1/models/telemetry.py
class Location(BaseModel):
    """A single GPS location sample from the ``/location`` endpoint.

    Provides the approximate position of a car on the circuit at ~3.7 Hz.

    Attributes:
        date: ISO-8601 timestamp of the location sample.
        driver_number: Unique driver number.
        meeting_key: Unique meeting key.
        session_key: Unique session key.
        x: X coordinate on the circuit.
        y: Y coordinate on the circuit.
        z: Z coordinate (elevation).
    """

    model_config = ConfigDict(
        frozen=True,
        populate_by_name=True,
        str_strip_whitespace=True,
    )

    date: datetime = Field(..., description="ISO-8601 timestamp.")
    driver_number: int = Field(..., description="Unique driver number.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    session_key: int = Field(..., description="Unique session key.")
    x: int = Field(..., description="X coordinate on the circuit.")
    y: int = Field(..., description="Y coordinate on the circuit.")
    z: int = Field(..., description="Z coordinate (elevation).")

Sessions

pyopenf1.models.session.Session

Bases: BaseModel

A Formula 1 session (practice, qualifying, sprint, race, etc.).

Attributes:

Name Type Description
circuit_key int

Unique circuit identifier.

circuit_short_name str

Short name of the circuit.

country_code str

ISO 3-letter country code.

country_key int

Unique country identifier.

country_name str

Full country name.

date_end datetime

Session end timestamp.

date_start datetime

Session start timestamp.

gmt_offset str

GMT offset string (e.g. "02:00:00").

is_cancelled bool

Whether the session was cancelled.

location str

Circuit location name.

meeting_key int

Unique meeting key.

session_key int

Unique session key.

session_name str

Human-readable session name.

session_type str

Session type (Practice, Qualifying, Race, etc.).

year int

Season year.

Source code in pyopenf1/models/session.py
class Session(BaseModel):
    """A Formula 1 session (practice, qualifying, sprint, race, etc.).

    Attributes:
        circuit_key: Unique circuit identifier.
        circuit_short_name: Short name of the circuit.
        country_code: ISO 3-letter country code.
        country_key: Unique country identifier.
        country_name: Full country name.
        date_end: Session end timestamp.
        date_start: Session start timestamp.
        gmt_offset: GMT offset string (e.g. "02:00:00").
        is_cancelled: Whether the session was cancelled.
        location: Circuit location name.
        meeting_key: Unique meeting key.
        session_key: Unique session key.
        session_name: Human-readable session name.
        session_type: Session type (Practice, Qualifying, Race, etc.).
        year: Season year.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    circuit_key: int = Field(..., description="Unique circuit identifier.")
    circuit_short_name: str = Field(..., description="Short circuit name.")
    country_code: str = Field(..., description="ISO 3-letter country code.")
    country_key: int = Field(..., description="Unique country identifier.")
    country_name: str = Field(..., description="Full country name.")
    date_end: datetime = Field(..., description="Session end timestamp.")
    date_start: datetime = Field(..., description="Session start timestamp.")
    gmt_offset: str = Field(..., description="GMT offset string.")
    is_cancelled: bool = Field(False, description="Whether session was cancelled.")
    location: str = Field(..., description="Circuit location name.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    session_key: int = Field(..., description="Unique session key.")
    session_name: str = Field(..., description="Session name.")
    session_type: str = Field(..., description="Session type.")
    year: int = Field(..., description="Season year.")

pyopenf1.models.session.Meeting

Bases: BaseModel

A Formula 1 meeting (Grand Prix or testing weekend).

Attributes:

Name Type Description
circuit_key int

Unique circuit identifier.

circuit_short_name str

Short circuit name.

country_code str

ISO 3-letter country code.

country_key int

Unique country identifier.

country_name str

Full country name.

date_end datetime

Meeting end timestamp.

date_start datetime

Meeting start timestamp.

gmt_offset str

GMT offset string.

is_cancelled bool

Whether the meeting was cancelled.

location str

Circuit location name.

meeting_key int

Unique meeting key.

meeting_name str

Human-readable meeting name.

meeting_official_name str

Official FIA meeting name.

year int

Season year.

Source code in pyopenf1/models/session.py
class Meeting(BaseModel):
    """A Formula 1 meeting (Grand Prix or testing weekend).

    Attributes:
        circuit_key: Unique circuit identifier.
        circuit_short_name: Short circuit name.
        country_code: ISO 3-letter country code.
        country_key: Unique country identifier.
        country_name: Full country name.
        date_end: Meeting end timestamp.
        date_start: Meeting start timestamp.
        gmt_offset: GMT offset string.
        is_cancelled: Whether the meeting was cancelled.
        location: Circuit location name.
        meeting_key: Unique meeting key.
        meeting_name: Human-readable meeting name.
        meeting_official_name: Official FIA meeting name.
        year: Season year.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    circuit_key: int = Field(..., description="Unique circuit identifier.")
    circuit_short_name: str = Field(..., description="Short circuit name.")
    country_code: str = Field(..., description="ISO 3-letter country code.")
    country_key: int = Field(..., description="Unique country identifier.")
    country_name: str = Field(..., description="Full country name.")
    date_end: datetime = Field(..., description="Meeting end timestamp.")
    date_start: datetime = Field(..., description="Meeting start timestamp.")
    gmt_offset: str = Field(..., description="GMT offset string.")
    is_cancelled: bool = Field(False, description="Whether meeting was cancelled.")
    location: str = Field(..., description="Circuit location name.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    meeting_name: str = Field(..., description="Meeting name.")
    meeting_official_name: str = Field(..., description="Official FIA name.")
    year: int = Field(..., description="Season year.")

Drivers

pyopenf1.models.driver.Driver

Bases: BaseModel

Detailed information about a driver in a specific session.

Attributes:

Name Type Description
broadcast_name str

Broadcast-style name (e.g. "M VERSTAPPEN").

driver_number int

Unique driver number.

first_name str

Driver's first name.

full_name str

Full name (e.g. "Max VERSTAPPEN").

headshot_url str | None

URL to driver's headshot image.

last_name str

Driver's last name.

meeting_key int

Unique meeting key.

name_acronym str

Three-letter acronym (e.g. "VER").

session_key int

Unique session key.

team_colour str | None

Hex colour code of the team (without #).

team_name str

Full team name.

Source code in pyopenf1/models/driver.py
class Driver(BaseModel):
    """Detailed information about a driver in a specific session.

    Attributes:
        broadcast_name: Broadcast-style name (e.g. "M VERSTAPPEN").
        driver_number: Unique driver number.
        first_name: Driver's first name.
        full_name: Full name (e.g. "Max VERSTAPPEN").
        headshot_url: URL to driver's headshot image.
        last_name: Driver's last name.
        meeting_key: Unique meeting key.
        name_acronym: Three-letter acronym (e.g. "VER").
        session_key: Unique session key.
        team_colour: Hex colour code of the team (without #).
        team_name: Full team name.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    broadcast_name: str = Field(..., description="Broadcast-style name.")
    driver_number: int = Field(..., description="Unique driver number.")
    first_name: str = Field(..., description="First name.")
    full_name: str = Field(..., description="Full name.")
    headshot_url: str | None = Field(None, description="URL to headshot image.")
    last_name: str = Field(..., description="Last name.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    name_acronym: str = Field(..., description="Three-letter acronym.")
    session_key: int = Field(..., description="Unique session key.")
    team_colour: str | None = Field(None, description="Hex team colour.")
    team_name: str = Field(..., description="Full team name.")

Timing

pyopenf1.models.timing.Lap

Bases: BaseModel

Detailed data for a single lap from the /laps endpoint.

Attributes:

Name Type Description
date_start datetime | None

Lap start timestamp.

driver_number int

Unique driver number.

duration_sector_1 float | None

Sector 1 duration in seconds.

duration_sector_2 float | None

Sector 2 duration in seconds.

duration_sector_3 float | None

Sector 3 duration in seconds.

i1_speed int | None

Speed trap 1 in km/h.

i2_speed int | None

Speed trap 2 in km/h.

is_pit_out_lap bool

Whether this is a pit-out lap.

lap_duration float | None

Total lap duration in seconds.

lap_number int

Lap number.

meeting_key int

Unique meeting key.

segments_sector_1 list[int] | None

Mini-sector segment values for sector 1.

segments_sector_2 list[int] | None

Mini-sector segment values for sector 2.

segments_sector_3 list[int] | None

Mini-sector segment values for sector 3.

session_key int

Unique session key.

st_speed int | None

Speed trap speed in km/h.

Source code in pyopenf1/models/timing.py
class Lap(BaseModel):
    """Detailed data for a single lap from the ``/laps`` endpoint.

    Attributes:
        date_start: Lap start timestamp.
        driver_number: Unique driver number.
        duration_sector_1: Sector 1 duration in seconds.
        duration_sector_2: Sector 2 duration in seconds.
        duration_sector_3: Sector 3 duration in seconds.
        i1_speed: Speed trap 1 in km/h.
        i2_speed: Speed trap 2 in km/h.
        is_pit_out_lap: Whether this is a pit-out lap.
        lap_duration: Total lap duration in seconds.
        lap_number: Lap number.
        meeting_key: Unique meeting key.
        segments_sector_1: Mini-sector segment values for sector 1.
        segments_sector_2: Mini-sector segment values for sector 2.
        segments_sector_3: Mini-sector segment values for sector 3.
        session_key: Unique session key.
        st_speed: Speed trap speed in km/h.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    date_start: datetime | None = Field(None, description="Lap start timestamp.")
    driver_number: int = Field(..., description="Unique driver number.")
    duration_sector_1: float | None = Field(None, description="Sector 1 duration (s).")
    duration_sector_2: float | None = Field(None, description="Sector 2 duration (s).")
    duration_sector_3: float | None = Field(None, description="Sector 3 duration (s).")
    i1_speed: int | None = Field(None, description="Speed trap 1 (km/h).")
    i2_speed: int | None = Field(None, description="Speed trap 2 (km/h).")
    is_pit_out_lap: bool = Field(False, description="Whether this is a pit-out lap.")
    lap_duration: float | None = Field(None, description="Total lap duration (s).")
    lap_number: int = Field(..., description="Lap number.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    segments_sector_1: list[int] | None = Field(None, description="Sector 1 segments.")
    segments_sector_2: list[int] | None = Field(None, description="Sector 2 segments.")
    segments_sector_3: list[int] | None = Field(None, description="Sector 3 segments.")
    session_key: int = Field(..., description="Unique session key.")
    st_speed: int | None = Field(None, description="Speed trap speed (km/h).")

pyopenf1.models.timing.Interval

Bases: BaseModel

Real-time interval data from the /intervals endpoint.

Available during races only, updated approximately every 4 seconds.

Attributes:

Name Type Description
date datetime

Timestamp of the interval measurement.

driver_number int

Unique driver number.

gap_to_leader float | None

Gap to the race leader in seconds, or None.

interval float | None

Interval to the car ahead in seconds, or None.

meeting_key int

Unique meeting key.

session_key int

Unique session key.

Source code in pyopenf1/models/timing.py
class Interval(BaseModel):
    """Real-time interval data from the ``/intervals`` endpoint.

    Available during races only, updated approximately every 4 seconds.

    Attributes:
        date: Timestamp of the interval measurement.
        driver_number: Unique driver number.
        gap_to_leader: Gap to the race leader in seconds, or None.
        interval: Interval to the car ahead in seconds, or None.
        meeting_key: Unique meeting key.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    date: datetime = Field(..., description="Interval timestamp.")
    driver_number: int = Field(..., description="Unique driver number.")
    gap_to_leader: float | None = Field(None, description="Gap to leader (s).")
    interval: float | None = Field(None, description="Interval to car ahead (s).")
    meeting_key: int = Field(..., description="Unique meeting key.")
    session_key: int = Field(..., description="Unique session key.")

pyopenf1.models.timing.Position

Bases: BaseModel

Driver position data from the /position endpoint.

Attributes:

Name Type Description
date datetime

Timestamp of the position update.

driver_number int

Unique driver number.

meeting_key int

Unique meeting key.

position int

Current position.

session_key int

Unique session key.

Source code in pyopenf1/models/timing.py
class Position(BaseModel):
    """Driver position data from the ``/position`` endpoint.

    Attributes:
        date: Timestamp of the position update.
        driver_number: Unique driver number.
        meeting_key: Unique meeting key.
        position: Current position.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    date: datetime = Field(..., description="Position timestamp.")
    driver_number: int = Field(..., description="Unique driver number.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    position: int = Field(..., description="Current position.")
    session_key: int = Field(..., description="Unique session key.")

Race

pyopenf1.models.race.RaceControl

Bases: BaseModel

A race control message from the /race_control endpoint.

Attributes:

Name Type Description
category str

Message category (Flag, SafetyCar, SessionStatus, etc.).

date datetime

Timestamp of the message.

driver_number int | None

Related driver number, if applicable.

flag str | None

Flag type (GREEN, YELLOW, etc.), if applicable.

lap_number int | None

Related lap number, if applicable.

meeting_key int

Unique meeting key.

message str

Full text of the race control message.

qualifying_phase str | None

Qualifying phase, if applicable.

scope str | None

Scope of the message (Track, Driver, Sector).

sector int | None

Sector number, if applicable.

session_key int

Unique session key.

Source code in pyopenf1/models/race.py
class RaceControl(BaseModel):
    """A race control message from the ``/race_control`` endpoint.

    Attributes:
        category: Message category (Flag, SafetyCar, SessionStatus, etc.).
        date: Timestamp of the message.
        driver_number: Related driver number, if applicable.
        flag: Flag type (GREEN, YELLOW, etc.), if applicable.
        lap_number: Related lap number, if applicable.
        meeting_key: Unique meeting key.
        message: Full text of the race control message.
        qualifying_phase: Qualifying phase, if applicable.
        scope: Scope of the message (Track, Driver, Sector).
        sector: Sector number, if applicable.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    category: str = Field(..., description="Message category.")
    date: datetime = Field(..., description="Message timestamp.")
    driver_number: int | None = Field(None, description="Related driver number.")
    flag: str | None = Field(None, description="Flag type.")
    lap_number: int | None = Field(None, description="Related lap number.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    message: str = Field(..., description="Full message text.")
    qualifying_phase: str | None = Field(None, description="Qualifying phase.")
    scope: str | None = Field(None, description="Message scope.")
    sector: int | None = Field(None, description="Sector number.")
    session_key: int = Field(..., description="Unique session key.")

pyopenf1.models.race.Pit

Bases: BaseModel

Pit stop data from the /pit endpoint.

Attributes:

Name Type Description
date datetime

Timestamp of pit entry.

driver_number int

Unique driver number.

lane_duration float | None

Total time in the pit lane (s).

lap_number int

Lap number of pit entry.

meeting_key int

Unique meeting key.

pit_duration float | None

Total pit duration (s).

session_key int

Unique session key.

stop_duration float | None

Stationary stop time (s).

Source code in pyopenf1/models/race.py
class Pit(BaseModel):
    """Pit stop data from the ``/pit`` endpoint.

    Attributes:
        date: Timestamp of pit entry.
        driver_number: Unique driver number.
        lane_duration: Total time in the pit lane (s).
        lap_number: Lap number of pit entry.
        meeting_key: Unique meeting key.
        pit_duration: Total pit duration (s).
        session_key: Unique session key.
        stop_duration: Stationary stop time (s).
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    date: datetime = Field(..., description="Pit entry timestamp.")
    driver_number: int = Field(..., description="Unique driver number.")
    lane_duration: float | None = Field(None, description="Pit lane duration (s).")
    lap_number: int = Field(..., description="Pit entry lap number.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    pit_duration: float | None = Field(None, description="Total pit duration (s).")
    session_key: int = Field(..., description="Unique session key.")
    stop_duration: float | None = Field(None, description="Stationary stop time (s).")

pyopenf1.models.race.Stint

Bases: BaseModel

Stint data from the /stints endpoint.

Attributes:

Name Type Description
compound str

Tyre compound (SOFT, MEDIUM, HARD, etc.).

driver_number int

Unique driver number.

lap_end int | None

Last lap of the stint.

lap_start int

First lap of the stint.

meeting_key int

Unique meeting key.

session_key int

Unique session key.

stint_number int

Stint number within the session.

tyre_age_at_start int

Tyre age in laps at stint start.

Source code in pyopenf1/models/race.py
class Stint(BaseModel):
    """Stint data from the ``/stints`` endpoint.

    Attributes:
        compound: Tyre compound (SOFT, MEDIUM, HARD, etc.).
        driver_number: Unique driver number.
        lap_end: Last lap of the stint.
        lap_start: First lap of the stint.
        meeting_key: Unique meeting key.
        session_key: Unique session key.
        stint_number: Stint number within the session.
        tyre_age_at_start: Tyre age in laps at stint start.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    compound: str = Field(..., description="Tyre compound.")
    driver_number: int = Field(..., description="Unique driver number.")
    lap_end: int | None = Field(None, description="Last lap of stint.")
    lap_start: int = Field(..., description="First lap of stint.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    session_key: int = Field(..., description="Unique session key.")
    stint_number: int = Field(..., description="Stint number.")
    tyre_age_at_start: int = Field(..., description="Tyre age at stint start (laps).")

pyopenf1.models.race.Overtake

Bases: BaseModel

Overtake data from the /overtakes endpoint.

Attributes:

Name Type Description
date datetime

Timestamp of the overtake.

meeting_key int

Unique meeting key.

overtaken_driver_number int

Driver who was overtaken.

overtaking_driver_number int

Driver who overtook.

position int

Position at which the overtake occurred.

session_key int

Unique session key.

Source code in pyopenf1/models/race.py
class Overtake(BaseModel):
    """Overtake data from the ``/overtakes`` endpoint.

    Attributes:
        date: Timestamp of the overtake.
        meeting_key: Unique meeting key.
        overtaken_driver_number: Driver who was overtaken.
        overtaking_driver_number: Driver who overtook.
        position: Position at which the overtake occurred.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    date: datetime = Field(..., description="Overtake timestamp.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    overtaken_driver_number: int = Field(..., description="Overtaken driver.")
    overtaking_driver_number: int = Field(..., description="Overtaking driver.")
    position: int = Field(..., description="Position of overtake.")
    session_key: int = Field(..., description="Unique session key.")

Championship

pyopenf1.models.championship.ChampionshipDriver

Bases: BaseModel

Driver championship standing from /championship_drivers.

Attributes:

Name Type Description
driver_number int

Unique driver number.

meeting_key int

Unique meeting key.

points_current float

Current points tally.

points_start float

Points before this meeting.

position_current int

Current championship position.

position_start int

Position before this meeting.

session_key int

Unique session key.

Source code in pyopenf1/models/championship.py
class ChampionshipDriver(BaseModel):
    """Driver championship standing from ``/championship_drivers``.

    Attributes:
        driver_number: Unique driver number.
        meeting_key: Unique meeting key.
        points_current: Current points tally.
        points_start: Points before this meeting.
        position_current: Current championship position.
        position_start: Position before this meeting.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    driver_number: int = Field(..., description="Unique driver number.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    points_current: float = Field(..., description="Current points.")
    points_start: float = Field(..., description="Points before meeting.")
    position_current: int = Field(..., description="Current position.")
    position_start: int = Field(..., description="Position before meeting.")
    session_key: int = Field(..., description="Unique session key.")

pyopenf1.models.championship.ChampionshipTeam

Bases: BaseModel

Team championship standing from /championship_teams.

Attributes:

Name Type Description
meeting_key int

Unique meeting key.

points_current float

Current points tally.

points_start float

Points before this meeting.

position_current int

Current championship position.

position_start int

Position before this meeting.

session_key int

Unique session key.

team_name str

Full team name.

Source code in pyopenf1/models/championship.py
class ChampionshipTeam(BaseModel):
    """Team championship standing from ``/championship_teams``.

    Attributes:
        meeting_key: Unique meeting key.
        points_current: Current points tally.
        points_start: Points before this meeting.
        position_current: Current championship position.
        position_start: Position before this meeting.
        session_key: Unique session key.
        team_name: Full team name.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    meeting_key: int = Field(..., description="Unique meeting key.")
    points_current: float = Field(..., description="Current points.")
    points_start: float = Field(..., description="Points before meeting.")
    position_current: int = Field(..., description="Current position.")
    position_start: int = Field(..., description="Position before meeting.")
    session_key: int = Field(..., description="Unique session key.")
    team_name: str = Field(..., description="Full team name.")

Results

pyopenf1.models.results.SessionResult

Bases: BaseModel

Post-session result from the /session_result endpoint.

Attributes:

Name Type Description
dnf bool

Did not finish.

dns bool

Did not start.

dsq bool

Disqualified.

driver_number int

Unique driver number.

duration float | None

Fastest lap / race duration in seconds.

gap_to_leader float | str | None

Gap to leader in seconds or laps.

number_of_laps int | None

Number of laps completed.

meeting_key int

Unique meeting key.

position int

Final position.

session_key int

Unique session key.

Source code in pyopenf1/models/results.py
class SessionResult(BaseModel):
    """Post-session result from the ``/session_result`` endpoint.

    Attributes:
        dnf: Did not finish.
        dns: Did not start.
        dsq: Disqualified.
        driver_number: Unique driver number.
        duration: Fastest lap / race duration in seconds.
        gap_to_leader: Gap to leader in seconds or laps.
        number_of_laps: Number of laps completed.
        meeting_key: Unique meeting key.
        position: Final position.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    dnf: bool = Field(False, description="Did not finish.")
    dns: bool = Field(False, description="Did not start.")
    dsq: bool = Field(False, description="Disqualified.")
    driver_number: int = Field(..., description="Unique driver number.")
    duration: float | None = Field(None, description="Duration in seconds.")
    gap_to_leader: float | str | None = Field(None, description="Gap to leader.")
    number_of_laps: int | None = Field(None, description="Laps completed.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    position: int = Field(..., description="Final position.")
    session_key: int = Field(..., description="Unique session key.")

pyopenf1.models.results.StartingGrid

Bases: BaseModel

Starting grid position from the /starting_grid endpoint.

Attributes:

Name Type Description
driver_number int

Unique driver number.

lap_duration float | None

Qualifying lap duration in seconds.

meeting_key int

Unique meeting key.

position int

Grid position.

session_key int

Unique session key.

Source code in pyopenf1/models/results.py
class StartingGrid(BaseModel):
    """Starting grid position from the ``/starting_grid`` endpoint.

    Attributes:
        driver_number: Unique driver number.
        lap_duration: Qualifying lap duration in seconds.
        meeting_key: Unique meeting key.
        position: Grid position.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    driver_number: int = Field(..., description="Unique driver number.")
    lap_duration: float | None = Field(None, description="Qualifying lap (s).")
    meeting_key: int = Field(..., description="Unique meeting key.")
    position: int = Field(..., description="Grid position.")
    session_key: int = Field(..., description="Unique session key.")

Weather

pyopenf1.models.weather.Weather

Bases: BaseModel

Track weather data from the /weather endpoint.

Updated approximately every minute.

Attributes:

Name Type Description
air_temperature float

Air temperature in Celsius.

date datetime

Timestamp of the weather reading.

humidity float

Relative humidity percentage.

meeting_key int

Unique meeting key.

pressure float

Atmospheric pressure in hPa.

rainfall int

Rainfall indicator (0 = dry).

session_key int

Unique session key.

track_temperature float

Track surface temperature in Celsius.

wind_direction int

Wind direction in degrees.

wind_speed float

Wind speed in m/s.

Source code in pyopenf1/models/weather.py
class Weather(BaseModel):
    """Track weather data from the ``/weather`` endpoint.

    Updated approximately every minute.

    Attributes:
        air_temperature: Air temperature in Celsius.
        date: Timestamp of the weather reading.
        humidity: Relative humidity percentage.
        meeting_key: Unique meeting key.
        pressure: Atmospheric pressure in hPa.
        rainfall: Rainfall indicator (0 = dry).
        session_key: Unique session key.
        track_temperature: Track surface temperature in Celsius.
        wind_direction: Wind direction in degrees.
        wind_speed: Wind speed in m/s.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    air_temperature: float = Field(..., description="Air temperature (C).")
    date: datetime = Field(..., description="Weather reading timestamp.")
    humidity: float = Field(..., description="Relative humidity (%).")
    meeting_key: int = Field(..., description="Unique meeting key.")
    pressure: float = Field(..., description="Atmospheric pressure (hPa).")
    rainfall: int = Field(..., description="Rainfall indicator.")
    session_key: int = Field(..., description="Unique session key.")
    track_temperature: float = Field(..., description="Track temperature (C).")
    wind_direction: int = Field(..., description="Wind direction (degrees).")
    wind_speed: float = Field(..., description="Wind speed (m/s).")

Team Radio

pyopenf1.models.team_radio.TeamRadio

Bases: BaseModel

A team radio communication from the /team_radio endpoint.

Attributes:

Name Type Description
date datetime

Timestamp of the radio message.

driver_number int

Unique driver number.

meeting_key int

Unique meeting key.

recording_url str

URL to the MP3 recording.

session_key int

Unique session key.

Source code in pyopenf1/models/team_radio.py
class TeamRadio(BaseModel):
    """A team radio communication from the ``/team_radio`` endpoint.

    Attributes:
        date: Timestamp of the radio message.
        driver_number: Unique driver number.
        meeting_key: Unique meeting key.
        recording_url: URL to the MP3 recording.
        session_key: Unique session key.
    """

    model_config = ConfigDict(frozen=True, populate_by_name=True, str_strip_whitespace=True)

    date: datetime = Field(..., description="Radio message timestamp.")
    driver_number: int = Field(..., description="Unique driver number.")
    meeting_key: int = Field(..., description="Unique meeting key.")
    recording_url: str = Field(..., description="URL to MP3 recording.")
    session_key: int = Field(..., description="Unique session key.")