API Reference
A REST API for querying our curated database of 27,000+ low-clearance structures across the United States, United Kingdom and Canada. Filter by vehicle clearance, search by route, radius, state, country or structure ID, and receive results as JSON or map-ready GeoJSON.
Introduction
The Low Clearance Map API exposes the same clearance data that powers our routing products. It’s designed to drop into routing engines, transportation-management systems (TMS), and fleet-safety tools so you can flag height-restricted structures before a vehicle ever reaches them.
Every endpoint is read-only and returns JSON by default. Pass
geojson=true on any bridge endpoint to get a GeoJSON
FeatureCollection you can render directly on a map.
Access is granted per account. If you don’t have a key yet, request commercial access and tell us about your use case.
Authentication
Authenticate every request by sending your key in the X-Api-Secret HTTP header. Keys are issued per account and tied to your licensing terms. Keep them secret and never expose them in client-side code.
Requests without a valid key receive a 403 Forbidden response.
X-Api-Secret: YOUR_API_KEY
Base URL & requests
All endpoints are served from a single base URL over HTTPS:
https://lowclearancemap.com
Bridge lookups use GET with query-string parameters. The Safe Route
endpoint uses POST with a JSON body. When a parameter value contains
JSON (for example a clearance range), URL-encode it before adding it to the
query string.
curl "https://lowclearancemap.com/api/all_bridges?vehicle_clearance=13.5" \
-H "X-Api-Secret: YOUR_API_KEY"
Clearance filtering
Every bridge endpoint accepts a required vehicle_clearance parameter that filters results to the structures relevant to your vehicle. It accepts two forms:
Single value
A number (in feet) representing your maximum vehicle clearance. Returns every structure at or below that height.
Min / max range
A JSON object with min and/or max keys, URL-encoded. Useful for narrowing to a band of clearances.
Add the parameter to the request URL's query string. When the value is JSON (a clearance range), URL-encode it first. Most HTTP clients and language libraries do this for you.
# add to the request URL:
?vehicle_clearance=13.5
# readable JSON value:
?vehicle_clearance={"min":10,"max":15}
# URL-encoded (what you send):
?vehicle_clearance=%7B%22min%22%3A10%2C%22max%22%3A15%7D
Response format
By default, responses are JSON objects containing metadata plus a
bridges array. Each bridge includes its identifier, name,
coordinates, country, state and clearance.
Add geojson=true to receive a GeoJSON
FeatureCollection instead. Each hazard heading becomes a
LineString feature, ready to drop onto a Mapbox or Leaflet map.
{
"type": "Feature",
"properties": {
"Name": "CR 1 SLS",
"State": "WV",
"Clearance": 13.5,
"Feature_Type": "all_bridges"
},
"geometry": {
"type": "LineString",
"coordinates": [[-77.89, 39.38], [-77.89, 39.40]]
}
}
Errors
The API uses conventional HTTP status codes. Error responses include a JSON error message.
Safe Route POST
Safe Route is our flagship endpoint: the routing engine behind the Low Clearance Map web app and Headroom Turn-by-Turn navigation. It runs the exact same clearance-aware routing our own products rely on.
Given a start, an end, and your vehicle’s height, plus optional weight, length and
width, it returns a complete, turn-by-turn route that routes around every
structure your vehicle can’t safely clear, so a driver is never sent under a
too-low bridge. Start and end points accept either coordinates
({"lat","lng"}) or a street address ({"address": "…"}).
Send a JSON body with a Content-Type: application/json header. Set
geojson: true to get the route back as a map-ready
GeoJSON FeatureCollection; the response also reports how many
low-clearance hazards were avoided.
Body parameters
| Field | Description |
|---|---|
| start required | object{"lat","lng"} or {"address": "…"}. |
| end required | object{"lat","lng"} or {"address": "…"}. |
| clearance_feet required | number Vehicle height, feet component. |
| clearance_inches optional | number Vehicle height, inches component. |
| vehicle_weight_lbs optional | number Defaults to 80000. |
| vehicle_length_ft optional | number Defaults to 53. |
| vehicle_width_ft optional | number Passed to routing if provided. |
| geojson optional | boolean Return the route as GeoJSON. |
curl -X POST "https://lowclearancemap.com/api/saferoute" \
-H "X-Api-Secret: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"start": {"lat": 40.7, "lng": -73.9},
"end": {"lat": 42.36, "lng": -71.06},
"clearance_feet": 12,
"clearance_inches": 6,
"geojson": true
}'
{
"route": { "type": "FeatureCollection", "features": [ /* … */ ] },
"hazards_avoided": 3
}
Check Route POST
Already have a route? Check Route audits a route you already have (for example the geometry returned by Google Maps, HERE, or Mapbox Directions) against your vehicle’s clearance, and tells you whether it is safe. If it isn’t, every low-clearance structure that lies on the route is listed.
Unlike Safe Route, this endpoint does not build a route or suggest an alternative; it only validates the geometry you supply. Use Safe Route to generate a clearance-aware route; use Check Route to verify a route that came from somewhere else.
Send a JSON body with a Content-Type: application/json header. The
route geometry goes in route and may be an encoded
polyline (Google / Mapbox, precision 5 or 6), a HERE flexible polyline, a GeoJSON
LineString, a list of [lng, lat] pairs, or a list of
{"lat","lng"} objects. A bridge is only flagged when the route
actually travels through it in a hazardous direction.
Body parameters
| Field | Description |
|---|---|
| route required | string | array | object The route geometry to audit. Aliases geometry, polyline, linestring, coordinates are also accepted. |
| geometry_format optional | stringauto (default), polyline, polyline6, flexible, geojson, or coordinates. auto tries standard polyline, then precision 6, then HERE flexible. |
| coordinate_order optional | string Order of raw numeric pairs: lnglat (default, GeoJSON) or latlng. |
| clearance_feet required | number Vehicle height, feet component (combine with clearance_inches). |
| clearance_inches optional | number Vehicle height, inches component. |
| vehicle_clearance optional | number Vehicle height in decimal feet, an alternative to clearance_feet/clearance_inches. |
| on_route_m optional | number How close (meters) a structure must be to count as on-route. Defaults to 25. |
| heading_tol optional | number Travel-heading match tolerance in degrees. Defaults to 20. |
curl -X POST "https://lowclearancemap.com/api/check_route" \
-H "X-Api-Secret: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"route": "izpdFn~xtMhA}A",
"geometry_format": "polyline",
"clearance_feet": 11,
"clearance_inches": 6
}'
{
"status": "ok",
"safe": false,
"vehicle_clearance_ft": 11.5,
"route_points": 182,
"hazard_count": 1,
"hazards": [ {
"structure_id": "15999",
"name": "Main St Underpass",
"lat": 34.052235, "lng": -118.243683,
"clearance": 10.5,
"state": "CA", "country": "USA",
"distance_m": 1200, "distance_km": 1.2
} ],
"message": "Route is NOT safe: 1 low-clearance hazard(s) detected for a 11.5 ft vehicle."
}
When the route is clear, safe is true,
hazards is an empty array, and hazard_count is
0.
All bridges GET
Returns every structure in the database that matches the supplied clearance filter.
Query parameters
| Parameter | Description |
|---|---|
| vehicle_clearance required | number | json Maximum vehicle clearance, or a URL-encoded {"min","max"} range. See Clearance filtering. |
| geojson optional | boolean Set to true for GeoJSON output. Defaults to false. |
curl "https://lowclearancemap.com/api/all_bridges?vehicle_clearance=13.5" \
-H "X-Api-Secret: YOUR_API_KEY"
{
"number_of_bridges": 2,
"vehicle_clearance": { "max_clearance": 13.5 },
"bridges": [
{ "Name": "Bridge 1", "Latitude": 34.0522,
"Longitude": -118.2437, "Clearance": 13.5 }
]
}
Bridges by state GET
Returns low-clearance structures in one or more U.S. states (or U.K./Canadian regions), filtered by clearance.
Query parameters
| Parameter | Description |
|---|---|
| states required | string Comma-separated state/region codes, e.g. CA,NY. |
| vehicle_clearance required | number | json See Clearance filtering. |
| geojson optional | boolean Set to true for GeoJSON output. |
curl "https://lowclearancemap.com/api/bridges_by_state?states=CA,NY&vehicle_clearance=13.5" \
-H "X-Api-Secret: YOUR_API_KEY"
{
"states_given": ["CA", "NY"],
"number_of_bridges": 2,
"bridges": [
{ "Name": "Bridge 1", "Clearance": 13.5 },
{ "Name": "Bridge 2", "Clearance": 13.0 }
]
}
Bridges by country GET
Returns low-clearance structures in one or more countries, filtered by clearance.
Query parameters
| Parameter | Description |
|---|---|
| countries required | string Comma-separated country names, e.g. United States,Canada. |
| vehicle_clearance required | number | json See Clearance filtering. |
| geojson optional | boolean Set to true for GeoJSON output. |
curl "https://lowclearancemap.com/api/bridges_by_country?countries=United%20States,Canada&vehicle_clearance=13.5" \
-H "X-Api-Secret: YOUR_API_KEY"
{
"countries_given": ["United States", "Canada"],
"number_of_bridges": 2,
"bridges": [ /* … */ ]
}
Bridges by ID GET
Looks up specific structures by their Structure_ID. Pass IDs as a comma-separated list, or repeat the parameter. Unknown IDs are returned in an invalid_ids array.
Query parameters
| Parameter | Description |
|---|---|
| structure_ids required | string | array e.g. 1799,15999 or repeated structure_ids=1799&structure_ids=15999. |
| geojson optional | boolean Set to true for GeoJSON output. |
curl "https://lowclearancemap.com/api/bridges_by_id?structure_ids=1799,15999,16002" \
-H "X-Api-Secret: YOUR_API_KEY"
{
"number_of_bridges": 2,
"bridges": [ /* … */ ],
"invalid_ids": ["16002"]
}
Bridges within radius GET
Returns structures within a given radius of a point, filtered by clearance.
Query parameters
| Parameter | Description |
|---|---|
| latitude required | number Latitude of the center point. |
| longitude required | number Longitude of the center point. |
| radius required | number Search radius in kilometers. |
| vehicle_clearance required | number | json See Clearance filtering. |
| geojson optional | boolean Set to true for GeoJSON output. |
curl "https://lowclearancemap.com/api/bridges_within_radius?latitude=34.0522&longitude=-118.2437&radius=10&vehicle_clearance=13.5" \
-H "X-Api-Secret: YOUR_API_KEY"
{
"center": [34.0522, -118.2437],
"radius": 10,
"number_of_bridges": 1,
"bridges": [ /* … */ ]
}
Bridges along a route GET
Returns structures that fall on a route between two points, plus those within ~50 miles of the route corridor. The response separates the two sets.
Query parameters
| Parameter | Description |
|---|---|
| start_latitude required | number Latitude of the route start. |
| start_longitude required | number Longitude of the route start. |
| end_latitude required | number Latitude of the route end. |
| end_longitude required | number Longitude of the route end. |
| vehicle_clearance required | number | json See Clearance filtering. |
| geojson optional | boolean Set to true for GeoJSON output. |
curl "https://lowclearancemap.com/api/bridges_along_route?start_latitude=34.0522&start_longitude=-118.2437&end_latitude=36.1699&end_longitude=-115.1398&vehicle_clearance=13.5" \
-H "X-Api-Secret: YOUR_API_KEY"
{
"number_of_bridges_on_route": 1,
"number_of_bridges_50_miles_along_route": 1,
"bridges_on_route": [ /* … */ ],
"bridges_50miles_along_route": [ /* … */ ]
}
Rate limits & support
Usage limits are set per account as part of your licensing agreement. If you expect high request volumes or need a higher tier, let us know and we’ll size a plan to fit.
Questions, a new key, or trouble with a request? Email info@lowclearancemap.com or submit a commercial access request. Prefer the no-code route? The Database Portal gives you the same data as downloadable CSV, Excel and JSON.