A routing API will happily hand a truck the fastest line between two points. What it usually won't tell you is that the line runs under a 4.0 m overpass with a 4.2 m load on the trailer, crosses an at-grade rail line you're legally required to stop at with placarded hazmat, or threads a county road that's posted closed for construction this week.
Flow APIs — HERE, TomTom, INRIX — are excellent at speed: where traffic is moving, how long the trip takes. That's congestion data. It is not infrastructure data. The overpass height, the bridge weight rating, the truck-restricted segment, the rail crossing, the active work zone — those live in 57 different state and provincial 511 systems, and a flow API doesn't read them.
That gap is what Road511's routing endpoint closes. We take the route geometry from HERE, then enrich the corridor from our own live traffic database — the same normalized 511 data behind the rest of the API — and return the hazards as a structured warnings[] array scored against your truck's dimensions.
How It Works
One call to POST /api/v1/routing/route. You send an origin, a destination, and — required — a truck profile. The profile is what makes a clearance "critical" instead of trivia: a 4.2 m height flags the 4.0 m overpass; a 36-tonne gross weight flags the posted 30-tonne bridge; a hazmat flag turns public at-grade rail crossings into mandatory-stop warnings.
curl -X POST "https://api.road511.com/api/v1/routing/route" \
-H "X-API-Key: your_key" \
-H "Content-Type: application/json" \
-d '{
"origin": { "lat": 47.6062, "lng": -122.3321 },
"destination": { "lat": 47.6588, "lng": -117.4260 },
"truck": {
"profile": "tractor",
"weight_t": 36.0,
"height_m": 4.2,
"width_m": 2.6,
"length_m": 21.0,
"axles": 5,
"hazmat": true
},
"alternatives": 1,
"avoid": ["tolls"],
"enrichment": {
"buffer_m": 100,
"clearance_pad_m": 0.15,
"min_severity": "warning",
"include_features": ["truck_parking", "rest_areas"]
}
}'
That's Seattle to Spokane for a 4.2 m, 36-tonne, placarded tractor-trailer. The truck object accepts profile (tractor, straight_truck, or van), weight_t, height_m, and optional width_m, length_m, axles, and hazmat. You can add waypoints, request up to 3 alternatives, and avoid any of tolls, ferries, or tunnels.
The Response
You get back a routes[] array. Each route carries a summary, a GeoJSON geometry (a LineString you can drop straight onto a map), and the part that matters — a warnings[] array. Every warning is positioned: a type, a severity (info, warning, or critical), a distance_along_route, a projected_arrival_time, its own geometry, and type-specific properties.
{
"routes": [
{
"summary": { "distance_m": 449300, "duration_s": 16980, "has_tolls": false },
"geometry": {
"type": "LineString",
"coordinates": [ [-122.3321, 47.6062], [-120.5, 47.4], [-117.4260, 47.6588] ]
},
"warnings": [
{
"type": "bridge_clearance",
"severity": "critical",
"distance_along_route": 38200,
"projected_arrival_time": "2026-05-29T15:12:00Z",
"geometry": { "type": "Point", "coordinates": [-121.97, 47.51] },
"properties": {
"name": "I-90 over Snoqualmie Pass on-ramp",
"clearance_m": 4.11,
"truck_height_m": 4.2,
"clearance_pad_m": 0.15,
"deficit_m": 0.29
}
},
{
"type": "rail_crossing",
"severity": "critical",
"distance_along_route": 201400,
"projected_arrival_time": "2026-05-29T17:41:00Z",
"geometry": { "type": "Point", "coordinates": [-119.85, 47.20] },
"properties": {
"crossing_id": "BNSF-094821X",
"grade": "at_grade",
"public": true,
"reason": "placarded_hazmat_mandatory_stop_49cfr39210"
}
},
{
"type": "traffic_event",
"severity": "warning",
"distance_along_route": 372600,
"projected_arrival_time": "2026-05-29T19:08:00Z",
"geometry": { "type": "Point", "coordinates": [-118.20, 47.45] },
"properties": {
"event_type": "construction",
"description": "US-2 EB right lane closed for paving",
"jurisdiction": "WA"
}
}
],
"features": [
{ "type": "truck_parking", "distance_along_route": 250100,
"properties": { "name": "Ritzville Rest Area", "spaces": 28 } }
]
}
],
"route_id": "rt_8f3c2a1b"
}
The route geometry is HERE's. Everything in warnings[] and features[] is Road511's enrichment of the corridor.
The Warning Types
A warning is only emitted when the corridor actually contains the hazard — and for the dimension-checked types, only when your profile would violate it.
| Type | What it flags |
|---|---|
bridge_clearance |
Overpass clearance vs your height_m + clearance_pad_m. Critical — the one that ends loads. |
truck_restriction |
A segment your profile is barred from. Critical, per violated dimension. |
weight_restriction |
Posted or seasonal weight limit your gross weight exceeds. Critical. |
rail_crossing |
Public at-grade crossing. Critical for placarded hazmat (49 CFR 392.10 mandatory stop); info for high-volume otherwise. |
traffic_event |
Live incident, closure, or construction on the corridor. |
future_construction |
Planned work zones the route passes through. |
special_event |
Scheduled events affecting nearby roads. |
weigh_station / inspection_station
|
Scale houses and inspection sites along the route. |
alert |
Jurisdiction-issued advisories on the corridor. |
weather |
Conditions reported near the route. |
Each warning's properties are type-specific: a bridge_clearance reports the measured clearance_m, your truck_height_m, and the deficit_m. The data is only as fresh as the underlying feed — clearances come from inventories that refresh on the order of days, while traffic_event warnings ride the live incident feed.
Tuning the Enrichment
The enrichment object controls how aggressively the corridor is scanned:
-
buffer_m— how far off the line to look, 10–1000 m (default 100). -
clearance_pad_m— safety margin added to your height before a clearance flags, 0–1 m (default 0.15). -
min_severity— drop everything belowinfo,warning, orcritical. -
exclude_types— suppress warning types you don't care about. -
skip_temporal_filter— include time-bounded items outside their active window. -
max_distance_m— cap how far along the route enrichment runs. -
include_features— opt into a separatefeatures[]channel oftruck_parking,truck_rest_areas, andrest_areasnear the route.
Saved Routes, Re-Evaluation, and Monitoring
Every routing call is auto-saved for 30 minutes under the route_id. Refetch with GET /api/v1/routing/route/saved/{id} inside that window and the warnings are re-evaluated against current conditions — a closure that popped up since you planned shows up on the refetch. Refetches do not consume routing quota.
To keep a route past the 30-minute TTL, call POST /api/v1/routing/route/saved/{id}/persist. Persisted routes count against your plan's saved-route slots, and they can be put under webhook monitoring — so when a new critical warning lands on a route you've already dispatched, you get notified instead of polling.
Quota and Access
Routing is a paid-plan feature, featured most heavily on Pro+. The Free 14-day trial includes a small daily cap so you can try it. Quota is a monthly routing-call bucket; FIFO top-up packs add calls on top. Refetching a saved route is free.
Why This Is Different
HERE and TomTom sell you flow — how fast the road is moving. Road511 adds the infrastructure — what your specific truck physically and legally can't do on that road. The routing endpoint puts both in one response: a drivable HERE geometry, plus a corridor scan against the live 511 data that flow APIs were never built to read.
Top comments (0)