DIMO gives developers API access to BMW 3-Series vehicle data. Model years 2006 and newer connect with a DIMO device (DIMO LTE R1 or AutoPi). Headline signals include odometer, fuel percentage and vehicle speed.
DIMO gives developers API access to vehicle-state data: diagnostics, fault codes, battery and fuel health, odometer, and maintenance signals. For the BMW 3-Series, the vehicle connects through a DIMO device, for model years 2006 and newer, and this coverage has been tested. You read the data through the Telemetry API with a Vehicle JWT. DIMO adds vehicle-state depth on top of GPS tracking; it doesn't replace it.
Signals by connection type
DIMO device — DIMO LTE R1 (2006 and newer)
| Signal | DIMO name | Unit |
|---|---|---|
| Odometer | powertrainTransmissionTravelledDistance | km |
| Fuel Percentage | powertrainFuelSystemRelativeLevel | % |
| Vehicle Speed | speed | km/h |
| Vehicle Ignition Status | isIgnitionOn | — |
| Engine RPM | powertrainCombustionEngineSpeed | rpm |
| Coolant Temperature | powertrainCombustionEngineECT | °C |
| Air Temperature | exteriorAirTemperature | °C |
| Back Left Wheel | chassisAxleRow2WheelLeftTirePressure | kPa |
| Back Right Wheel | chassisAxleRow2WheelRightTirePressure | kPa |
| Battery Range | powertrainTractionBatteryRange | km |
| Distance with MIL On | obdDistanceWithMIL | km |
| DTC Count | obdStatusDTCCount | — |
| Engine runtime | obdRunTime | seconds |
| Front Left Wheel | chassisAxleRow1WheelLeftTirePressure | kPa |
| Front Right Wheel | chassisAxleRow1WheelRightTirePressure | kPa |
| Fuel Type | obdFuelTypeName | — |
| Low Voltage Battery | lowVoltageBatteryCurrentVoltage | volts |
| OBD Device Plugged In | obdIsPluggedIn | — |
| Powertrain Type | powertrainType | — |
| Throttle Position | powertrainCombustionEngineTPS | % |
| Altitude Level | currentLocationAltitude | m |
| Coordinates | currentLocationCoordinates | — |
| Heading | currentLocationHeading | degrees |
DIMO device — AutoPi (2010 and newer)
| Signal | DIMO name | Unit |
|---|---|---|
| Vehicle Speed | speed | km/h |
| Engine RPM | powertrainCombustionEngineSpeed | rpm |
| Coolant Temperature | powertrainCombustionEngineECT | °C |
| Air Temperature | exteriorAirTemperature | °C |
| Barometric Pressure | obdBarometricPressure | kPa |
| Diagnostic Trouble Codes | obdDTCList | — |
| Engine Air Intake | powertrainCombustionEngineMAF | grams/second |
| Engine Load | obdEngineLoad | % |
| Engine runtime | obdRunTime | seconds |
| Intake temperature | obdIntakeTemp | °C |
| Low Voltage Battery | lowVoltageBatteryCurrentVoltage | volts |
| Throttle Position | powertrainCombustionEngineTPS | % |
| Altitude Level | currentLocationAltitude | m |
| Coordinates | currentLocationCoordinates | — |
No factory connectivity?
BMW 3-Series model years 2006 and newer have no OEM cloud connection listed. For these years, a DIMO device (DIMO LTE R1 or AutoPi) plugs into the OBD-II port and streams vehicle signals once the owner connects it and consents to sharing.
See the developer quickstart for how owners connect vehicles and grant access.
Events available
- Idling
- Refuel
- Harsh braking
- New diagnostic trouble code
Build it
Query the latest BMW 3-Series signals with the DIMO TypeScript SDK. The vehicle owner must first share access with your app through DIMO Connect.
import { DIMO } from '@dimo-network/data-sdk';
const dimo = new DIMO('Production');const tokenId = Number(process.env.DIMO_TOKEN_ID); // from DIMO Connect
const developerJwt = await dimo.auth.getDeveloperJwt({ client_id: process.env.DIMO_CLIENT_ID, domain: process.env.DIMO_REDIRECT_URI, private_key: process.env.DIMO_API_KEY,});const vehicleJwt = await dimo.tokenexchange.getVehicleJwt({ ...developerJwt, tokenId,});
// Latest BMW 3-Series signalsconst data = await dimo.telemetry.query({ ...vehicleJwt, query: ` query { signalsLatest(tokenId: ${tokenId}) { powertrainTransmissionTravelledDistance { value timestamp } powertrainFuelSystemRelativeLevel { value timestamp } speed { value timestamp } } }`,});console.log(JSON.stringify(data, null, 2));Full walkthrough: Developer quickstart.
FAQ
Can I read fuel level remotely on a BMW 3-Series?
Yes, with a DIMO device. The DIMO LTE R1 lists a Fuel Percentage signal, powertrainFuelSystemRelativeLevel, which you can query through the Telemetry API. Refuel events are listed for that device and can be detected with the refuel mechanism in the segments query.
How do I track a BMW 3-Series with no connected services?
Install a DIMO device, which is the connection type listed for this vehicle. Once the owner shares the vehicle with you, exchange your Developer JWT for a Vehicle JWT through the Token Exchange API and query signals in the Telemetry API. Trips are available through the segments query.
Can I get check-engine light alerts for a BMW 3-Series?
Yes, with the AutoPi DIMO device, which lists the dtc event and the obdDTCList signal (Diagnostic Trouble Codes). To get pushed alerts, use the Vehicle Triggers API (webhooks), which sends a POST to your targetURL when a condition you configure is met.
How do I detect idling on a BMW 3-Series?
Idling is listed as an event for both DIMO devices on this vehicle. Query the segments resource in the Telemetry API with the idling mechanism, which finds contiguous periods where engine RPM stays in the idle range and requires a DIMO device.
How do I verify BMW 3-Series mileage?
The DIMO LTE R1 lists an Odometer signal. Call the Attestation API's odometer-statement endpoint with a Vehicle JWT to generate a verifiable odometer attestation, then retrieve it through the Telemetry API.
Which BMW 3-Series model years work with DIMO?
DIMO devices have been seen working on BMW 3-Series model years 2006 and newer. For older vehicles, contact DIMO for additional support.
Do I need hardware to get BMW 3-Series data?
Yes. DIMO lists no OEM cloud connection for the BMW 3-Series, so data comes from a DIMO device.
Source: DIMO vehicle compatibility records. Coverage tested on a connected vehicle. Last verified .