Geospatial endpoints, over plain HTTP.
Stable, documented HTTP endpoints for routing, geocoding, terrain analytics, address parsing, and spatial probability. Use it from web apps, backends, batch pipelines, or anywhere an MCP client doesn't fit.
Authenticate with an x-api-key header. Standard JSON. Per-call billing. REST returns the full response payload; the MCP variants ship trimmed shapes tuned for agent context windows.
api.footstep.ai
Three lines of cURL, or whatever your stack speaks
Authentication is a single header. Body is JSON. There is no SDK to install. A `requests`-style helper or a generated TypeScript client would each be about ten lines if you want one.
curl -X POST https://api.footstep.ai/v1/routing/route \
-H "x-api-key: sk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"locations": [
{ "lat": 51.5322, "lon": -0.1240 },
{ "lat": 51.5055, "lon": -0.0754 }
]
}'const response = await fetch(
"https://api.footstep.ai/v1/routing/route",
{
method: "POST",
headers: {
"x-api-key": "sk_live_your_key_here",
"Content-Type": "application/json",
},
body: JSON.stringify({
locations: [
{ lat: 51.5322, lon: -0.1240 },
{ lat: 51.5055, lon: -0.0754 },
],
}),
},
);
const data = await response.json();import requests
response = requests.post(
"https://api.footstep.ai/v1/routing/route",
headers={"x-api-key": "sk_live_your_key_here"},
json={
"locations": [
{"lat": 51.5322, "lon": -0.1240},
{"lat": 51.5055, "lon": -0.0754},
]
},
)
data = response.json()What to expect from every endpoint
Predictable HTTP
Standard POST and GET semantics. JSON in, JSON out. No SDK to install, no proprietary protocol, your existing HTTP client is enough. Errors come back with descriptive error fields and proper status codes (400 / 401 / 402 / 429 / 500).
Explicit units, every field
distance_meters is always meters. duration_seconds is always seconds. grade_percent is always a percentage. No global units parameter to set, the field name carries the unit. Unambiguous in code review and in LLM context.
Hoisted context, lean payloads
Shared admin fields (country, region, district) are hoisted into a top-level context block when every result shares them. include_geometry is opt-in for endpoints that have heavy geometries, so your bytes go to the data.
Open formats end-to-end
Pass format: "geojson" for RFC 7946 FeatureCollection responses. Encoded polylines for compact route geometry. H3 hex grids for predict. Drop responses straight into deck.gl, Mapbox GL, Leaflet, or QGIS without a transformation step.
The full surface area
Click any endpoint for the full reference: parameter tables, response shapes, and copy-pasteable code samples.
Predict1
A probabilistic spatial model. Returns a per-hex H3 surface scored by likelihood, conditioned on behavioural profile, terrain, and weather.
Predict access and use
Restricted access. Predict is not part of the standard plan. Access is granted by application only, to organisations with appropriate operational expertise. Apply for access.
Decision support only, never a replacement. Predict outputs are probability priors. They must never replace expert human judgment, established response protocols, or any duty-of-care obligation. Outputs may be incorrect, incomplete, or unsuitable for a given scenario. Final decisions sit with qualified human operators.
Routing9
Terrain-aware routing across five travel modes (car, walk, bike, bus, truck), with explicit units everywhere. Your model never has to guess whether the number is metres or feet.
/v1/routing/routeDriving, walking, or cycling directions between locations with terrain analytics.
/v1/routing/optimizeFind the fastest order to visit multiple stops. Returns distance and time savings.
/v1/routing/compareCompare walk vs bike vs drive between the same locations side by side.
/v1/routing/find-and-routeFind a place by name and route to it in one step. Geocode plus route combined.
/v1/routing/isochroneEverywhere reachable within a time or distance budget. Returns a polygon boundary.
/v1/routing/matrixTravel times and distances between every origin and destination pair.
/v1/routing/elevationElevation values for coordinates or paths, with summary statistics.
/v1/routing/snapMap-match a GPS trace to the road network with surface, class, speed, and grade.
/v1/routing/search-along-routeFind places along a route ranked by how little detour they add.
Geocoding4
Forward, reverse, batch, and POI search backed by an open-data index refreshed weekly. Every result carries place type and confidence, so the agent can decide whether to ask the user or guess.
/v1/geocoding/searchConvert an address or place name to coordinates with a confidence score.
/v1/geocoding/reverseConvert coordinates to an address. Find what's at a lat/lng.
/v1/geocoding/batchGeocode up to 1,000 addresses in a single call.
/v1/geocoding/placesFind points of interest near a location by category or name.
Natural Language1
An LLM pre-step for the messy reality of customer-typed addresses. Cleans typos, expands abbreviations, reformats components. Downstream geocoding actually hits.
What you actually get back
A worked routing example, lightly trimmed. Explicit-unit field names, a structured terrain block, and turn-by-turn legs ready to deserialise.
{
"route": {
"distance_meters": 5765,
"duration_seconds": 812,
"terrain": {
"total_ascent_meters": 12.4,
"total_descent_meters": 8.1,
"max_elevation_meters": 28,
"min_elevation_meters": 5,
"avg_grade_percent": 1.2,
"max_grade_percent": 4.5,
"difficulty": "flat"
},
"legs": [
{
"distance_meters": 5765,
"duration_seconds": 812,
"steps": [
{
"instruction": "Drive north on Midland Road.",
"distance_meters": 120,
"duration_seconds": 15
}
]
}
]
}
}Building an agent? You probably want MCP.
The same endpoints are exposed as MCP tools at mcp.footstep.ai. Better fit for tool-calling LLMs, same data underneath.