> ## 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_isochrone

> Find everywhere reachable within a time or distance limit

<Frame>
  <img src="https://mintcdn.com/footstep/QNknRZ9DgHsEJ89b/images/isochrone.webp?fit=max&auto=format&n=QNknRZ9DgHsEJ89b&q=85&s=030e14ada13c9e53cba4a587240073ae" alt="Reachability contours" width="1408" height="768" data-path="images/isochrone.webp" />
</Frame>

Generate reachability contours from a starting point. Shows how far you can travel within a given time limit (in minutes) or distance limit (in kilometres). Returns polygon boundaries you can display on a map.

Supports multiple contours in one request, so you can show 5, 10, and 15-minute ranges together.

For "what's reachable from X" queries, pass `from` as a place name and the origin is geocoded for you — there is no need to call `geocode` first. If you already have coordinates, pass `location` instead.

## Example prompts

* "How far can I walk in 15 minutes from Liverpool Street station?" → `get_isochrone(from="Liverpool Street station, London", contours=[{time: 15}], travel="pedestrian")`
* "Show me the area I can cycle to in 20 minutes from my office" → `get_isochrone(location={lat: ..., lon: ...}, contours=[{time: 20}], travel="bicycle")`
* "What's within a 5km drive of this warehouse?" → `get_isochrone(location={lat: ..., lon: ...}, contours=[{distance: 5}], travel="auto")`
* "Compare 10-minute and 30-minute walking ranges from Kings Cross" → `get_isochrone(from="Kings Cross, London", contours=[{time: 10}, {time: 30}], travel="pedestrian")`

## What you get back

Each contour is returned with full polygon coordinates, a vertex-count + bbox summary, and a list of named anchors inside the polygon (see below). The response also includes the origin point and travel type used. Pass `compact: true` to suppress the polygon coordinates and the `render` envelope when the caller only needs summary fields.

## `reachable_places` — named anchors inside the polygon

For each contour, the response includes a `reachable_places` array: named venues, neighbourhoods, parks, stations, and landmarks that fall inside the polygon, ordered by relevance. This turns a polygon (which an LLM can't render) into something an LLM can actually speak:

> "In 15 minutes on foot from Kings Cross you can reach Russell Square, Holborn, Camden Town and Bloomsbury."

Each place carries `name`, `label`, `place_type`, and `coordinates`. This is best-effort enrichment: if no named anchors can be resolved for a contour, `reachable_places` is omitted and the rest of the response goes through unchanged.

## Contour ordering

Contours are returned **sorted ascending by `value`** — the smallest reach first, regardless of input order. So `contours: [{time: 10}, {time: 5}]` and `contours: [{time: 5}, {time: 10}]` both produce a response with the 5-minute contour at index 0.

## Map rendering

Each contour ships with a vertex-count + bbox summary plus a `polygon` layer per contour in the `render` envelope (with `style_hints.contour_value` carrying the contour's value for gradient ordering). Drop the layers straight into your map library. Pass `compact: true` for summary-only responses. See [response defaults & controls](/mcp/defaults) and [render envelopes](/mcp/render-envelopes).

## Example response

```json theme={null}
{
  "structuredContent": {
    "origin": { "lat": 51.532, "lon": -0.124 },
    "travel": "pedestrian",
    "contours": [
      {
        "metric": "time",
        "value": 15,
        "geometry_summary": { "type": "Polygon", "vertex_count": 137, "bbox": {/* … */} },
        "reachable_places": [/* named anchors inside the polygon */]
      }
    ],
    "render": [
      {
        "kind": "polygon",
        "label": "15-minute reach",
        "data": {/* GeoJSON Feature with full Polygon geometry */},
        "bbox": [/* … */],
        "style_hints": { "contour_value": 15, "contour_label": "15-minute reach" }
      }
    ]
  }
}
```
