If you’re routing commercial vehicles, you need to know which bridges your truck can’t clear. An 11′8″ overpass meets an oversize load once a week somewhere in the US, and most of those hits are avoidable with good data.
The FHWA National Bridge Inventory has 621,000 bridges with height and weight data — but it’s buried in an ArcGIS FeatureServer with pagination limits, FIPS state iteration, and cryptic field codes (MIN_VERT_CLR_010, OPR_RATING_064, STRUCTURE_FLARED_035A). Then every state DOT layers their own posted-bridge dataset on top with a different schema.
Road511 normalizes all of it into one queryable API.
What Each Bridge Record Includes
- Height clearance — minimum vertical clearance in meters (over + under)
- Weight rating — operating and inventory load ratings in metric tons
- Posting status —
open,posted,posted_closed,closed - Condition ratings — deck, superstructure, substructure (0–9 NBI scale)
- Road carried / feature crossed — “I-80 over Passaic River”
- Year built, ADT, last inspection date — for infrastructure analysis
Query by Bounding Box
curl "https://api.road511.com/api/v1/features?type=bridge_clearances&bbox=-75.5,39.5,-74.5,40.5&limit=50" \
-H "X-API-Key: your_key"
Returns every bridge in the Philadelphia metro area with clearance and weight data in a single call.
{
"data": [
{
"id": "fhwa-nbi-42-101-0000000012345",
"jurisdiction": "PA",
"feature_type": "bridge_clearances",
"name": "I-95 over Cottman Avenue",
"latitude": 40.0421,
"longitude": -75.0589,
"properties": {
"min_vert_clearance_m": 4.42,
"operating_rating_tons": 36.3,
"inventory_rating_tons": 22.7,
"posting_status": "open",
"deck_condition": 6,
"super_condition": 5,
"sub_condition": 6,
"road_carried": "I-95",
"feature_crossed": "Cottman Avenue",
"year_built": 1969,
"adt": 184000,
"last_inspection": "2025-09-14"
}
}
],
"total": 847,
"has_more": true
}
Corridor Search — The Killer Feature
Bounding boxes are fine for dashboards, but fleet routing is about a line, not a box. The /truck/corridor endpoint takes an origin and destination, builds a PostGIS buffer around the great-circle path, and returns every restriction that intersects it:
curl "https://api.road511.com/api/v1/truck/corridor\
?from_lat=41.88&from_lng=-87.63\
&to_lat=40.71&to_lng=-74.01\
&buffer_km=5&height=4.2&weight=36" \
-H "X-API-Key: your_key"
This returns every bridge clearance, weight restriction, and truck restriction within 5 km of the Chicago→NYC corridor that a 4.2 m tall, 36-ton truck can’t clear. The height and weight filters drop anything the vehicle can safely pass, so the response is just conflicts — not the full inventory.
GeoJSON for Route Overlays
Need it on a map? Same query, different endpoint:
curl "https://api.road511.com/api/v1/truck/corridor/geojson\
?from_lat=41.88&from_lng=-87.63\
&to_lat=40.71&to_lng=-74.01\
&buffer_km=5" \
-H "X-API-Key: your_key"
Drop the response directly onto Leaflet, Mapbox, or QGIS and every conflict renders instantly:
const res = await fetch(
'https://api.road511.com/api/v1/truck/corridor/geojson'
+ '?from_lat=41.88&from_lng=-87.63'
+ '&to_lat=40.71&to_lng=-74.01'
+ '&buffer_km=5&height=4.2',
{ headers: { 'X-API-Key': 'your_key' } }
);
const geojson = await res.json();
L.geoJSON(geojson, {
pointToLayer: (f, latlng) => L.circleMarker(latlng, {
radius: 6, color: '#dc2626', fillOpacity: 0.8
}),
onEachFeature: (f, layer) => {
const p = f.properties;
layer.bindPopup(`
<strong>${p.name}</strong><br>
Clearance: ${p.min_vert_clearance_m} m<br>
Operating: ${p.operating_rating_tons} t<br>
Status: ${p.posting_status}
`);
}
}).addTo(map);
Data Sources
The core is the FHWA National Bridge Inventory, and we layer on state DOT inventories wherever the state publishes richer or more current posting data:
| Source | Count | Coverage |
|---|---|---|
| FHWA NBI | ~621,000 | All US states + DC + PR |
| Pennsylvania PennDOT | ~56,000 | PA bridges + 3K posted roads |
| Texas TxDOT | ~58,000 | Posted bridges (filtered) |
| Ohio ODOT | ~45,000 | Posted bridges |
| Virginia VDOT | ~40,000 | Posted structures + STAA routes |
| Washington WSDOT | ~10,800 | Bridge inventory + FGTS corridors |
| Indiana INDOT | ~4,400 | LiDAR per-lane clearances |
| New York NYSDOT | ~2,300 | Posted load + height bridges |
| Nova Scotia | ~296 | Canadian bridge inspections |
| Florida FDOT | ~824 | Weight-posted bridges |
Where sources overlap (e.g., PA NBI vs PennDOT), we prefer the state feed because posting changes hit the DOT first.
Who Uses This
- Fleet management software — pre-route clearance checks before dispatch
- Logistics and TMS platforms — automated route validation at order entry
- Oversize / overweight permitting — clearance verification for permit issuance
- Engineering firms — infrastructure condition analysis and asset management
- Insurance underwriters — bridge condition risk scoring for cargo policies
A Note on Staleness
NBI data is updated annually by each state. State DOT feeds refresh more often — typically weekly for postings. Neither is a real-time feed: a bridge struck by a truck yesterday will not appear as closed until a human updates the record. For current closures, combine bridge_clearances with live traffic_events (incidents, construction, lane closures).
Try It
- Live map — zoom into any area to see bridge markers
- API docs — full parameter reference
- Free API key — no credit card, 14-day trial
Stop hitting bridges
One API call gives you every clearance, weight rating, and posting status along the corridor. Free 14-day trial. No credit card.
Get Free API Key Explore the Map