Navigation SDK
Seamless vehicle integration with LDEVR
To seamlessly integrate a new vehicle with Long Distance EV Routing in Navigation SDK , use com.tomtom.sdk.vehicle.VehicleMetadataProvider and com.tomtom.sdk.vehicle.Motorized::modelId.
With this approach, OEMs provide only essential static vehicle information during registration, not detailed consumption parameters. TomTom derives initial consumption parameters based on the provided vehicle data.
TomTom continuously improves energy consumption predictions and range estimates for each registered vehicle using advanced data analytics. The system refines predictions based on real-world driving patterns, environmental factors, and vehicle performance metrics, ensuring drivers receive reliable information about vehicle energy efficiency and range.
Each vehicle model variant receives a unique identifier for use in LDEV route planning via Navigation SDK.
Vehicle registration is a foundational step that enables future innovations in energy consumption prediction and optimization.
The concepts of Brand, Model, and Variant
The diagram below illustrates the relationship.

Brand, Model, and Variant relationship diagram
Brand
A brand name distinguishes one manufacturer’s vehicles from others. A brand consists of a group of models.
Model
A model is a group of variants sharing the same OEM-assigned name. Models organize vehicles into collections.
Models do not restrict variants based on any parameter. A model can include types such as CAR and VAN, various engine types, etc. Integrators determine which variants to add. This flexibility exists because combustion and hybrid electric engines may be offered within the same model, and manufacturers may reuse the same platform for electric models under the same name.
Variant
A variant is a vehicle type characterized by specific attributes: brand, model, variant name, and vehicle specifications. These attributes define unique features and characteristics, enabling differentiation within the vehicle lineup.
What defines a new variant?
A new variant is defined by changes in parameters that significantly impact consumption, charging, or range. This includes modifications that alter WLTP (Worldwide Harmonised Light Vehicle Test), NEDC (New European Driving Cycle), or EPA (Environmental Protection Agency) standards, including physical characteristics such as size and weight.
Less critical information can also play a role:
- Production start date: If unspecified, the vehicle may be a prototype
- Production stop date: If unspecified, the vehicle may still be in production
- New brand or model names: For example, variations between Opel and Vauxhall
Any parameter affecting consumption or charging time should be treated as a basis for creating a new variant entry.
Examples
| Brand | Model | Variant Name | Drive Train | Range in km |
|---|---|---|---|---|
| Toyota | bZ4X | Comfort | 4x2 | 514 |
| Prestige | 4x2 | 504 | ||
| 4x4 | 461 | |||
| Executive | 4x2 | 443 | ||
| 4x4 | 416 | |||
| Tesla | Model 3 | Long Range | 4x2 | 584 |
| 4x4 | 556 | |||
| Performance | 4x4 | 479 |
Disclaimer: The brands, models, and manufacturers listed in this table are provided for illustrative purposes only. We do not claim any rights to these names or logos. All data included in this table is based on publicly available information.
Vehicle registration
TomTom currently supports manual vehicle registration via Thru service. If you haven’t been onboarded, send a request to ev-integration-support@tomtom.com to register a vehicle.
Once onboarded, you can access the service to send vehicle data for registration.
After onboarding, TomTom will send you an Excel sheet to complete and return via Thru service. Encrypt each Excel sheet using the built-in password protection feature. Attach the file using Thru email service, and share the password in the encrypted private message box.
After registering the new vehicle, TomTom will send you the unique modelId for the registered vehicle variant. This modelId can then be used for LDEV route planning via Navigation SDK.
The parameters to be filled in the Excel sheet are described in detail below.
Vehicle parameters
| Parameter | Description | ||||
|---|---|---|---|---|---|
| Type | Unit | Required | Default value | Valid range | |
| Brand Name | Vehicle brand name. Commercial name, not commercial entity (e.g., Fiat, not Stellantis). Consists of a group of models. | ||||
| String | - | True | [1, 40] characters | ||
| Model Name | The model name of a vehicle. | ||||
| String | - | True | [1, 50] characters | ||
| Variant Name | The variant name of a vehicle. | ||||
| String | - | False | [1, 50] characters | ||
| Produced From | Production start date. Empty indicates vehicle is not yet in production. | ||||
| String | - | False | Format: YYYY-MM YYYY: indicates a four-digit year MM: indicates a two-digit month 01-12 Empty: not in production yet | ||
| Produced To | Production end date. Empty indicates vehicle is still in production. Applies only if “Produced From” is not empty. | ||||
| String | - | False | Format: YYYY-MM YYYY: indicates a four-digit year MM: indicates a two-digit month 01-12 Empty: still in production | ||
| Drive Train | Type of the drivetrain. | ||||
| Enum | - | True | FWD: Front-wheel drive RWD: Rear-wheel drive AWD: All-wheel drive | ||
| Length | Overall length of the vehicle in centimeters. | ||||
| Float | Centimeters | True | [200, 2500] | ||
| Width | Width of the vehicle across the widest extreme in centimeters. | ||||
| Float | Centimeters | True | [100, 300] | ||
| Height | Height of the vehicle from the ground to the highest point on the complete vehicle in centimeters. | ||||
| Float | Centimeters | True | [100, 400] | ||
| Max Speed | Maximum speed of the vehicle. | ||||
| Integer | Kilometers per hour | True | [0, 250] | ||
| Curb Weight | Vehicle weight with all standard equipment, excluding passengers, cargo, or optional equipment. | ||||
| Integer | Kilograms | True | [400, 18000] | ||
| Vehicle Type | Type of the vehicle. | ||||
| Enum | - | True | Possible values:CAR | ||
| Engine Type | Type of the engine. | ||||
| Enum | - | True | Possible values:BATTERY_ELECTRIC | ||
| WLTP Range | WLTP (Worldwide Harmonized Light Vehicles Test Procedure): A global performance standard that simulates real-world driving conditions more accurately than older tests, used to assess vehicle emissions, energy consumption, and range. | ||||
| Float | Kilometers | True | - | (0, ) | |
| WLTP Energy Consumption | WLTP (Worldwide Harmonized Light Vehicles Test Procedure): Global performance standard that simulates real-world driving conditions to assess vehicle fuel consumption and emissions. | ||||
| Float | Watt-hours per kilometer | True | - | (0, ) | |
| Battery Capacity Nominal | Maximum battery energy storage capacity as specified by manufacturer. Rated or standard energy the battery can hold under normal conditions, including safety buffers. | ||||
| Float | Watt-hours | True | - | (0, 250 000] | |
| Battery Capacity Usable | Portion of battery capacity that can be used to power the vehicle. Often lower than nominal capacity, sometimes intentionally limited by manufacturer to protect battery and extend lifespan. Measurement resolution should be at least full watt-hours. | ||||
| Float | Watt-hours | True | - | [0, Nominal Battery Capacity] | |
| Auxiliary Power | Energy consumed by auxiliary systems (air conditioning, heating, infotainment, lighting) not used for propulsion. | ||||
| Float | Watt-hours | False | 1000 | [0, 15 000] | |
| Charging time offset | Additional time for plugging and unplugging which is added to the raw charging time. | ||||
| Integer | Second | False | 120 | [0, 3600] | |
Battery Charging Curve
Provide charging curve as a list of “State of Energy” and “Max power” pairs. Include 2 to 20 pairs for interpolation using a piecewise-linear function. If a single curve is insufficient, provide individual charging curves for each connector and omit this global curve.
Validation rules for the curve:
- first pair must have “State of charge” equal to 0.0
- “Max power” must be greater than 0.0
- no duplicated values for “State of Energy”
- order pairs by “State of Energy” ascending
| Parameter | Description | ||||
|---|---|---|---|---|---|
| Type | Unit | Required | Default value | Valid range | |
| State of energy | The state of the charge level of the battery in kilowatt hours. | ||||
| Float | kWh | True | - | [0, Battery Capacity Usable] | |
| Max Power | Max power in kilowatts that the vehicle can accept at a given state of energy. | ||||
| Float | kW | True | - | [0, ) | |
Connectors
| Parameter | Description | ||||
|---|---|---|---|---|---|
| Type | Unit | Required | Default value | Valid range | |
| Current Type | The charging current type. | ||||
| Enum | True | Possible values:Direct_CurrentAlternating_Current_1_PhaseAlternating_Current_3_Phase | |||
| Efficiency | Optional efficiency factor applied to the power provided by a charging facility and the maximum charging power for each point of the battery charging curve. | ||||
| Float | False | 0.9 | (0, 1] | ||
| Base Load | An optional base load considered when determining the available charging power. The base load is subtracted from the power provided by the charging facility prior to applying the efficiency factor. | ||||
| Float | Kilowatt | False | 0.4 | (0, ) | |
| Max Charging Power | An upper limit for the charging power. | ||||
| Float | Kilowatt | Required only if not providing maxChargingVoltageInV and maxChargingCurrentInA | [0, ) 0: implies the power is only limited by the charging facility | ||
| Max Charging Voltage | An upper limit for the voltage when charging. The resulting voltage is the minimum of the voltage supported by the respective charging facility and this value. | ||||
| Float | Volt | [0, ) 0: implies the voltage is only limited by the charging facility | |||
| Max Charging Amperage | An upper limit for the current when charging. The resulting amperage is the minimum of the amperage supported by the respective charging facility and this value. | ||||
| Float | Ampere | Required if not provided maxPowerInKw | [0, ) 0: implies the amperage is only limited by the charging facility positive number | ||
| Voltage Range Min | A bottom limit for the voltage connector range, The voltage range is only used for selecting suitable charging modes. | ||||
| Float | Volt | False | 0 | ||
| Voltage Range Max | An upper limit for the voltage connector range. The voltage range is only used for selecting suitable charging modes. 0 is treated as infinity. During charging, the above Max Power/Voltage/Amperage are used instead. | ||||
| Float | Volt | False | 0 | ||
| Plug Types List | List of a plug types that corresponds to above parameters | ||||
| Plug Types List: Connector Type | |||||
| Enum | True | Possible values: | |||
| Plug Types List: Requires Adapter | Indicates that an additional adapter is required for a provided connector type | ||||
| Boolean | True | TrueFalse | |||
Battery Charging Curves for Connectors
Each vehicle must have at least one connector. Multiple connectors can represent different charging capabilities. Each connector can have its own battery charging curve instead of using a single vehicle charging curve. Connector charging curves follow the same rules as the general battery charging curve. A connector can use its maximum power without defining a curve. To use maximum connector power, omit the charging curve for the connector and explicitly state this in the table.
This is a list of 2 up to 20 pairs.
| Parameter | Description | ||||
|---|---|---|---|---|---|
| Type | Unit | Required | Default value | Valid range | |
| State of Energy | The state of energy of the battery. | ||||
| Float | Kilowatt-hours | True | - | [0, Battery Capacity Usable] | |
| Max Power | Maximum power that the vehicle can accept at a given state of energy. | ||||
| Float | Kilowatts | True | - | [0, ) | |
Applying changes to variants
Variant entries are treated as unchangeable objects to keep data consistent and reliable.
Changes affecting consumption or charging can lead to variations in service quality and less accurate consumption predictions. Consider the impact of updates carefully to maintain prediction quality.
These fields can be changed without affecting consumption predictions:
- Brand name
- Model name
- Produced from
- Produced to
To change other parameters, create a new vehicle entry:
- Register a new variant entry with updated parameters. Specify which variant to replace. The new version will be associated with the selected variant.
- Use the new variant in Navigation SDK.
This approach maintains vehicle history integrity while allowing necessary modifications.
Using newly registered vehicles in LDEVR
The Variant ID provided to Navigation SDK should be easily changeable (e.g., through Over-The-Air updates) while the vehicle is in production and use. This flexibility enables smooth implementation of necessary variant changes.
Online-only scenario
Every registered vehicle variant has a unique ID to provide in RoutePlanningOptions::Vehicle::Car::modelId.
This code creates a vehicle of type Car with an electric engine and provides the variant ID:
val modelId = "" // Fill with received Model ID of registered vehicleval electricEngine = ElectricEngine( chargeLevel = ChargeLevel( currentCharge = Energy.kilowattHours(10), maxCharge = Energy.kilowattHours(50) ))val vehicle = Vehicle.Car( electricEngine = electricEngine, modelId = modelId)VehicleProvider.vehicle = vehicle // Set vehicle to VehicleProviderConsumption and charging parameters cannot be provided separately. These details were submitted during vehicle registration, and TomTom maintains and optimizes consumption values using AI-powered EV consumption prediction.
Online-first scenario
For an online-first scenario with offline fallback, create the vehicle as follows:
val context = ContextProvider.getApplicationContext()val apiKey = "<Your-Api-Key>"val modelId = VehicleMetadataId(UUID.fromString("")) // Fill with received Model ID of registered vehicleval metadataProvider = VehicleMetadataProvider( context = context, apiKey = apiKey, cacheDirectory = CacheDirectory.DefaultDirectory,)val vehicle = metadataProvider.createVehicle( CreateVehicleOptions.CreateElectricVehicleOptions( id = modelId, chargeLevel = ChargeLevel( maxCharge = 18.8.kilowattHours, currentCharge = 2.kilowattHours, ), vehicleType = VehicleType.Car, ),).value()VehicleProvider.vehicle = vehicle // Assign vehicle to VehicleProviderEnhancing State of Energy predictions
Integrating vehicles into Navigation SDK’s Vehicle Metadata Provider and LDEVR simplifies determining detailed consumption parameters.
TomTom-generated consumption parameters are sufficient to start experimenting with EV Routing calls and prototyping. To fully benefit from TomTom smart EV consumption prediction, provide additional dynamic vehicle signals. These signals and custom attributes enable the system to learn vehicle-specific characteristics and automatically refine consumption predictions over time. Navigation SDK’s telemetry module transmits this data. All collected data is linked to the vehicle variant ID in the Vehicle object.
Before sending signals or attributes, enable RedesignedTelemetryFeature and provide consent for telemetry data:
FeatureToggleController.enable(RedesignedTelemetryFeature)Telemetry.userConsent = Consent.PersonalizedFeatureToggleController.enable(VehicleDataCollectionFeature)Providing dynamic vehicle signals
To send additional vehicle signals or custom consumption attributes, create a Navigation SDK vehicle and assign it to the VehicleProvider singleton.
Make all subsequent vehicle changes through the vehicle provider using the appropriate property:
val numberOfOpenWindows = NumberOfOpenWindowsProperty(2)VehicleProvider.updateVehicleProperties(listOf(numberOfOpenWindows))VehicleProvider updates the dynamic vehicle signals in the VehicleSignals class within the managed Vehicle.
TomTom smart EV consumption prediction model automatically extracts signals from VehicleSignals when creating RoutePlanningOptions.
Vehicle signals parameters
Use these vehicle signals and property names in the VehicleProvider.updateVehicleProperties(...) method:
| Vehicle Signals Parameter (com.tomtom.sdk.vehicle.VehicleSignals) | Vehicle Provider Property (com.tomtom.sdk.vehicle.property.signals) |
|---|---|
VehicleSignals::totalDrivenDistance | TotalDrivenDistanceProperty |
VehicleSignals::driveMode | DriveModeProperty |
VehicleSignals::regenerativeBrakingMode | RegenerativeBrakingModeProperty |
VehicleSignals::outsideTemperature | OutsideTemperatureProperty |
VehicleSignals::acMode | AcModeProperty |
VehicleSignals::cabinZoneData | CabinZoneDataProperty |
VehicleSignals::numberOfOpenWindows | NumberOfOpenWindowsProperty |
VehicleSignals::windshieldWipersState | WindshieldWipersStateProperty |
VehicleSignals::windshieldWipersPeriod | WindshieldWipersPeriodProperty |
VehicleSignals::tiresData | TiresDataProperty |
VehicleSignals::numberOfSeatsOccupied | NumberOfSeatsOccupiedProperty |
Providing custom consumption attributes
Integrators may identify other attributes important for consumption modeling beyond the vehicle signals above. Provide custom consumption attributes even if TomTom does not know their exact semantic definitions. Detailed, vehicle-specific information can significantly improve consumption prediction accuracy.
Each custom consumption attribute must have a unique name for setting the attribute in Navigation SDK. Keep this name consistent during and across trips to ensure meaningful usage in TomTom smart EV consumption prediction.
Provide custom consumption attributes via VehicleProvider using ConsumptionModelCustomAttributesProperty:
val customAttributes = ConsumptionModelCustomAttributesProperty( mapOf("attribute1" to 0.75))
VehicleProvider.updateVehicleProperties(listOf(customAttributes))Examples of custom consumption attributes
As outlined in Consumption model integration , the navigation system should receive current battery capacity and State of Energy (SoE) projected to equilibrium conditions (corrected for thermal effects).
Additionally providing battery capacity and SoE based on current thermal conditions is advantageous.
This supplementary data enhances TomTom smart EV consumption prediction by better accounting for environmental impact on vehicle consumption.
Supply these attributes to Navigation SDK via VehicleProvider for automatic telemetry collection and smart EV consumption prediction:
val customAttributes = ConsumptionModelCustomAttributesProperty( mapOf( "capacity_at_battery_temp_kwh" to 74.3, "soe_at_battery_temp_kwh" to 25.75 ))
VehicleProvider.updateVehicleProperties(listOf(customAttributes))Another custom consumption attribute example is State of Charge (SoC) as displayed in the IVI cluster. While SoC is not required for EV routing in Navigation SDK (Navigation SDK focuses on energy consumption), it is a valuable signal for smart EV consumption prediction. SoC helps the model learn how the vehicle maps State of Energy (SoE) to the SoC visible to the driver.