Skip to content

Isochrones

An isochrone is the area reachable from (or to) a census block within a travel-time budget. GET /v1/isochrone returns it as GeoJSON contour polygons or as a list of reachable blocks. It is the cheapest way to ask “how far can I get”: one flat price regardless of how large the area is.

Identify the origin with block=<15-digit GEOID> or lon= + lat=. Then:

  • mode=walk|bike|transit (default walk).
  • direction=to|from (default to). to is the set of blocks that can reach the origin; from is where you can get to from the origin (the Mapbox-style travel shed). For a symmetric mode like walking the two are nearly the same; for transit they differ.
  • minutes=1..60 for a single threshold (default 30), or contours= with up to four ascending thresholds, for example contours=10,20,30.
  • format=geojson|blocks.

Times use the same assumptions as the rest of the data: a weekday ~8am departure and a good-day (10th-percentile) transit trip. Every reply echoes them under assumptions, and GET /v1/isochrone/meta lists the version, directions, modes, and assumptions for free.

Each contour carries two values you will use:

  • contour — the threshold in minutes (10, 20, 30 …). Features arrive largest contour first, so drawing them in order paints the shorter times on top.
  • reachable_blocks — how many blocks fall inside that contour.

Contours are drawn from block centres on an adaptive grid, so they describe block-level reachability, not a street-level boundary. Small interior holes (below about 1 square mile) are filled: a single large block such as a park or campus is one centre, so its footprint would otherwise read as an unreachable pocket that is really just a sampling artefact. Larger holes (lakes, airfields) are kept. Read a missing small hole as “not resolvable at block scale”, not as reachability.

format=geojson returns a FeatureCollection of contour polygons, with the origin block, direction, mode, store version, and echoed assumptions. An empty contour has a null geometry.

format=blocks returns the reachable blocks with their travel minutes instead of polygons — handy when you want the block list, not the shape:

{
"blocks": [ { "geoid": "440070036001010", "travel_min": 12 } ],
"reachable_blocks": 1,
"block": "440070036001010", "direction": "to", "mode": "walk"
}

Isochrones cost 10 tokens per contour level, in either format: minutes=30 costs 10, contours=10,20,30 costs 30. The price is by level, not by rows, so a whole 30-minute walkshed as format=blocks is 10 tokens no matter how many blocks it contains.

Responses are strongly cacheable, and revalidating with If-None-Match is free on a match. One wrinkle, unlike the row-metered routes: an isochrone revalidation at a zero balance returns 429 tokens-exhausted rather than a free 304.