Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.footstep.ai/llms.txt

Use this file to discover all available pages before exploring further.

Get turn-by-turn directions between two or more locations. Supports car, pedestrian, bicycle, bus, and truck routing. Every response includes terrain analytics (elevation gain, difficulty, grade profiles) by default. Your agent can also fine-tune the route: avoid hills, prefer lit streets, set vehicle dimensions for truck routing, or request alternate routes.

Example prompts

  • “Get me walking directions from Kings Cross to Tower Bridge”
  • “How do I drive from Heathrow to Cambridge avoiding tolls?”
  • “Plan a cycling route from Greenwich to Richmond Park that avoids hills”
  • “What’s the flattest walking route between these two coordinates?”

What you get back

A full route with distance, duration, and turn-by-turn steps. Terrain analytics include total ascent/descent, elevation profile, grade percentages, and a difficulty classification (flat, rolling, hilly, or mountainous). Route flags (has_toll, has_highway, has_ferry) tell you if the route uses any of those — and are omitted entirely when none apply (the common case in urban routing). Only the truthy entries are emitted, so absence of a flag means it doesn’t apply. Each step carries instruction, distance_meters, duration_seconds, travel_mode, type, and streets. The streets array lists the named roads the step traverses; it’s omitted on unnamed manoeuvres (forks, “destination on the left”, some roundabout exits) so absence means “no street name to attach”, not an empty list. Step-level ferry/toll/highway flags are emitted only when true.

Step type values

type is one of a fixed set of manoeuvre kinds. Grouped by category:
CategoryValues
Start / endstart, start_left, start_right, destination, destination_left, destination_right
Directionleft, right, slight_left, slight_right, sharp_left, sharp_right, u_turn_left, u_turn_right
Continuationcontinue, becomes, stay_straight, stay_left, stay_right
Highwaymerge, merge_left, merge_right, ramp_straight, ramp_left, ramp_right, exit_left, exit_right
Roundaboutroundabout_enter, roundabout_exit
Ferryferry_enter, ferry_exit
Fallbacknone, unknown
Treat the enum as a closed set — these are the only values an auto, pedestrian, bicycle, bus, or truck route will produce. The none and unknown values are present for completeness and shouldn’t appear in normal output. All numeric distance / duration fields are always in meters / seconds regardless of the request units (which only affects the natural-language narrative summary). Pass narrative: true for an AI-generated plain-English summary of the route — the response then also includes a narrative_units field telling you which units the summary was rendered in (kilometers or miles). For 2-waypoint routes, the route’s totals/terrain/flags are reported once at the top level — the single leg only carries steps. Multi-waypoint routes (3+ waypoints) keep the per-leg breakdown so you can see distance/terrain per segment. Geometry for the route lives in the render envelope as a GeoJSON linestring layer.

Alternate routes: alternates

Set alternates: 1-3 to request alternative routings. When found, the response carries an alternates array of full route objects (same shape as route), each with their own distance, duration, terrain analytics, and turn-by-turn steps. The LLM can reason about “which is flatter?” or “which avoids the highway?” by comparing them. Alternates aren’t always available — for short urban routes there often isn’t a meaningfully different option. The alternates field is omitted when none are available.

Map rendering

Responses include a render envelope with a linestring layer for the route. Pass compact: true for summary-only responses. See response defaults & controls and render envelopes.

Example response

{
  "structuredContent": {
    "route": {
      "distance_meters": 5765,
      "duration_seconds": 812,
      "terrain": {
        "difficulty": "flat",
        "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
      },
      "legs": [{ "steps": [/* turn-by-turn directions */] }]
    },
    "render": [
      {
        "kind": "linestring",
        "label": "Route",
        "data": {
          "type": "Feature",
          "geometry": { "type": "LineString", "coordinates": [/* [lng, lat] pairs */] },
          "properties": {}
        },
        "bbox": [-0.13, 51.49, -0.06, 51.54]
      }
    ]
  }
}