Toll Cost
A toll figure is not a property of a road. It is a property of a road and a vehicle together. Change the axle count and the number changes. Change the emission class and, in parts of Europe, it changes again. The failure mode is not a missing number. It is a plausible number for a vehicle you did not describe — one that returns200, passes review, gets quoted to a customer, and is discovered at settlement.
Everything below is elaboration on those two sentences.
Short verdict
Use HERE Routing v8 withreturn=tolls when you need toll cost for a described commercial vehicle. It supports car, truck, taxi and bus, and the vehicle profile you supply drives the price.
Google’s large vehicle routing documentation lists truck toll prices among its unsupported features. If your dispatch process needs a toll figure for a commercial vehicle, that is a capability you have to source elsewhere.
Requesting toll cost on HERE
Toll cost is not a separate endpoint. It is areturn value on /v8/routes.
car, truck, taxi, bus.
currency takes a three-letter code and converts prices from local currency. Without it you get local currency only, which on a multi-country route means several currencies in one response.
departureTime matters more than it looks. Several toll systems price by time of passage, and the time is derived from the ETA — so a route computed with departureTime=any cannot price a time-of-day toll correctly.
Verified August 2026 against HERE’s toll cost for a route documentation. Field names and supported modes change; check the current reference before implementing.
From a GPS trace
If you are starting from telematics data rather than an origin-destination pair, the route import service does not return tolls directly. It takes two calls:POST /v8/importwithreturn=routeHandleand your trace points, which returns arouteHandleGET /v8/routes/{routeHandle}withreturn=tolls
What comes back
Tolls are returned per section, not per route. A route with three sections returns three toll arrays, and the trip total is your sum.tollSystem name, a country code, and one or more fares. Each fare carries a price with a currency and a value, and where the system supports it, the payment method that produces that price.
The vehicle profile determines the number
This is the part that gets skipped, and it is the whole point of the endpoint. SendtransportMode=truck with no vehicle dimensions and HERE will price the route. It will return a value, HTTP 200, and no warning. That value reflects a vehicle you did not describe.
On a single Illinois lane, tested with the same origin, destination and departure time:
A 166% difference on one lane, with no error, no notice, and no indication that the first number describes a different vehicle.
At 500 runs a year — roughly two a working day for a single tractor on a fixed lane — that gap is about $17,000 of unbilled toll on one truck.Assumptions stated so you can substitute your own: one lane, one vehicle configuration, 500 annual runs, no toll pass discount applied. Run your own lane at Truck Route Comparison rather than adopting ours.
vehicle[axleCount]— the primary driver of commercial toll class in the United Statesvehicle[grossWeight]and dimensions — weight and height bands in most European systemsvehicle[hovOccupancy]— occupancy-based pricing where it existstolls[emissionType]— emission class, and in Germany the CO2 class
Emission class has a silent default
HERE acceptstolls[emissionType] in the form EmissionType[;co2class=N], with emission values euro1 through euro6 plus euroEev, and co2class values 1 through 5.
Billing
Toll data is not a free rider on a route you were computing anyway. HERE documents that requesting toll cost information for a route counts as an additional transaction. Budget it as its own line, and cache it — toll prices for a fixed lane and vehicle configuration are stable for far longer than the ETA on the same route.What toll cost is not
It is also not a routing preference. Getting the toll cost of a route and getting the cheapest route are different operations.return=tolls prices the route the router chose. If you want the router to trade distance against toll, that is a cost-optimization problem — see Choosing Routing vs Matrix and evaluate whether the saving justifies the additional calls.
And dynamic pricing is out of scope. HERE returns no toll information for HOT lanes, because the price is dynamic.
Common mistakes
Requesting tolls without describing the vehicle. Returns200 and a number for a vehicle you did not specify. On the lane above, that number was 166% low.
Reading tolls[0] instead of summing sections. Consistently wrong on any multi-jurisdiction route, and never wrong enough to look broken.
Leaving co2class unset in Germany. It defaults to 1. That is a price, not an absence of one.
Using departureTime=any on a time-priced toll system. No ETA means no time of passage means no correct price.
Treating the API figure as a settlement number. Best-effort by documentation. Build reconciliation that tolerates a delta.
Not caching. Tolls are stable where ETAs are not, and the request is billed as an additional transaction.
Assuming a currency. Without currency, a cross-border route returns several local currencies in one response, and summing them is a type error your language will happily let you commit.
Planning a commercial vehicle dispatch on a platform that does not price commercial tolls. Google’s large vehicle routing documentation lists truck toll prices as unsupported. Confirm the capability exists before the toll figure becomes load-bearing in a quoting workflow.
How to verify on your own lanes
One. Pick five lanes your fleet actually runs, with real toll invoices for them. Two. Request each lane twice on HERE — once withtransportMode=truck and no vehicle profile, once with your full profile including axleCount. Record both numbers. The gap between them is the size of the error you would ship by omitting the profile.
Three. Compare the full-profile figure against the invoice. You are testing whether best-effort is close enough for your quoting margin, not whether it is exact.
Four. Repeat with a toll pass specified and without one. In several US systems the pass price and the cash price differ enough to matter at fleet scale.
Five. Put the profiled figure next to whatever your current dispatch process assumes. If your quoting spreadsheet carries a flat per-mile toll allowance, that comparison is usually the shortest route to a decision.
Related documentation
Truck Routing
Constraints, units, and the trap geometry that proves they apply.
HERE Routing vs Google Maps
Google Large Vehicle Routing versus HERE truck routing, constraint by constraint.
ELD Platform
Pricing routes that were driven, not planned. Route handles and traces.
Cost Optimization Patterns
What to cache, and why toll cost caches better than anything else here.
Sources
HERE- Get toll cost information for route —
return=tolls, supported modes, currency conversion, best-effort statement - Get toll cost with route import service — route handle flow for GPS traces
- Get toll cost for multi-section route — per-section toll arrays
- Toll calculation with emission type and CO2 class —
tolls[emissionType],co2classdefault - Routing API v8 developer guide
- Large vehicle routing overview — truck toll prices listed among unsupported features
- Truck Route Comparison — run the profiled and unprofiled request on your own lane
Need to know what your lanes actually cost? Placematic can run profiled and unprofiled toll calculations across your real lane set and reconcile the output against your invoices. Placematic is an official HERE Technologies reseller and implementation partner. Cost Reduction Audit.