Skip to main content
Terrain-intelligent routing

Footstep Routing API

The Routing API provides terrain-intelligent routing, elevation queries, and spatial analysis. Every routing response includes terrain analytics by default: ascent, descent, grade profiles, and difficulty classification, without any extra configuration.

Design philosophy

Every endpoint works with just coordinates. Send locations, get a route with full terrain intelligence:
No transport mode, no options, no configuration required. The defaults give you a car route with terrain analytics, turn-by-turn directions, and an elevation profile. Power users can tune behaviour with optional parameters: travel to change how you travel, travel_options for fine-tuning preferences (hill avoidance, walking speed, vehicle dimensions), elevation_interval to control elevation sampling density, and language for localised navigation instructions.

Units

Numeric fields are always in SI base units regardless of the units request parameter — distances in meters, durations in seconds, elevations in meters, grades as a percentage, speeds in km/h. The units request parameter only affects the natural-language narrative summary; the response echoes that value back in narrative_units for reference.

Endpoints

All endpoints are POST requests under /v1/routing/:

Authentication

All endpoints require an API key passed via the x-api-key header. See the authentication guide for details on key format, states, and security practices.

Travel types

All routing endpoints accept a travel parameter: Each travel type has its own travel_options for fine-tuning. For example, pedestrian supports use_hills (0 = avoid hills, 1 = prefer hills), walking_speed (0.5-25 km/h), and max_hiking_difficulty (0-6, SAC hiking scale). See the route endpoint for the full schema.

Multi-format support

Every endpoint accepts a format parameter: GeoJSON responses work directly with Leaflet, Mapbox GL, deck.gl, and QGIS with no transformation needed.

Terrain analytics

Routing responses include a terrain object at both the route and per-leg level:
The elevation_profile is an array of distance/elevation points sampled along the route. Control the sampling interval with the elevation_interval parameter (10-200 meters, default 30). The difficulty classification is based on average and maximum grade:

Route flags

Every route and leg includes a flags object indicating infrastructure used:
Use these to inform users about tolls, filter routes, or display warnings in your UI.

Route narratives

Pass narrative: true to get an AI-generated natural language summary of the route. Useful for accessibility descriptions, trip previews, and chatbot integrations.
The response includes a narrative field on the route object:
This parameter is available on the route and optimise endpoints. Adds ~500ms latency due to AI generation.