API / Isochrone
POST /v1/routing/isochrone

Isochrone API.

Generate road-network-accurate reachability polygons by driving time or distance. Returns GeoJSON MultiPolygons ready to render on any map layer.

Not a radius circle. The API calculates exactly which areas are reachable via the real road network from a given origin accounting for road classifications, speed limits, and network topology. Request up to 4 contour thresholds in a single call.

POST

Method

4

Max contours

GeoJSON

Output format

95ms

Median p95

API OPERATIONAL · View status
curl -X POST "https://api.farun.io/v1/routing/isochrone" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: farun-maps.p.rapidapi.com" \
  -H "Content-Type: application/json" \
  -d '{
    "locations":[{ "lon": 77.2090, "lat": 28.6139 }],
    "contours":[{"time": 15}, {"time": 30}, {"time": 45}],
    "costing":   "auto",
    "polygons":  true,
    "generalize":50
  }'

Returns

GeoJSON MultiPolygon

Profiles

driving · walking · cycling

Contours

time or distance, up to 4

Response anatomy

Road-network accuracy. GeoJSON output.

Each contour is a GeoJSON MultiPolygon representing the exact area reachable from your origin within that threshold - not an approximation, not a radius.

Example response (abbreviated) 200 OK
{
  "type": "FeatureCollection",
  "features": [

    // First contour - 15 minutes reachable area
    {
      "type": "Feature",
      "properties": {
        "contour":   15,    // minutes
        "metric":    "time",
        "area_km2":  48.3
      },
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [[[[77.18, 28.57], ...]]]
      }
    },

    // Second contour - 30 minutes
    // Third contour  - 45 minutes
    // ...each is a separate Feature

  ]
}
features[].properties.contour number

The threshold value for this contour - minutes if using contours_minutes, metres if using contours_meters. Use this to label zones in your UI (e.g. '30 min delivery zone').

features[].properties.area_km2 number

Area of the reachable polygon in square kilometres. Useful for coverage reporting, SLA documentation, and comparing service areas across locations.

features[].geometry GeoJSON MultiPolygon

The reachable area as a GeoJSON MultiPolygon. MultiPolygon (not Polygon) because road networks can produce disjoint reachable areas - e.g. across a river with few crossings.

features ordering ascending

Features are returned in ascending contour order. The smallest threshold is first. Each polygon is independent - they are not nested rings. Render them with decreasing opacity for a heatmap-style visualisation.

features[].properties.metric string

Either 'time' or 'distance' depending on which contour type you requested. Included so responses are self-describing when stored or passed to other systems.

Who uses it

Built for teams that need to know
their operational limits.

An isochrone answers one of the most commercially valuable questions in spatial analytics: given a location and a time or distance budget, exactly where can you go? That question appears across logistics, real estate, emergency services, insurance, and urban planning.

The Farun Isochrone API uses road-network graph traversal not straight-line buffers, so the polygons reflect real-world driveable or walkable areas.

Logistics & Delivery

Service area and delivery zone mapping

Calculate the true delivery zone from a warehouse or dark store. Show customers which postcodes fall within a 30-minute or 60-minute window. Update zones dynamically as you add or move distribution points.

Emergency Services

Response zone compliance mapping

Map which areas fall within a 15-minute ambulance or fire response time from each station. Identify coverage gaps, model the impact of adding a new station, and generate compliance documentation for regulators.

Real Estate & PropTech

Commute time catchment areas

Show homebuyers which neighbourhoods are within a 20 or 40-minute drive of a given workplace. Layer isochrones over property listings to build commute-aware search tools that filter by real travel time.

Insurance & Risk

Accessibility and risk scoring

Calculate how many hospitals, fire stations, or repair centres are reachable within 30 minutes of an insured asset. Use reachability as a risk factor in underwriting models for property, fleet, and health insurance.

Retail & Site Selection

Trade area and catchment analysis

Define a store's trade area as the population reachable within 10, 20, and 30 minutes of driving. Compare catchment areas across candidate sites before committing to a lease. Layer demographic data on top for demand estimation.

Marine & Coastal

Safe harbour reachability

Plot which marinas or safe anchorages are reachable within a given time from a vessel's current position. Combine with the tide engine to factor in tidal windows for shallow-draft harbour entry.

Endpoint reference

POST https://api.farun.io/v1/routing/isochrone

Request body (JSON)

locations req
array
Starting coordinate as an array containing one {lon, lat} object. Must be snappable to the road network.
costing
string
Routing profile. One of: auto (default), bicycle, pedestrian, truck, motorcycle.
contours req
array
Array of dictionaries specifying thresholds. E.g. [{"time": 15}, {"time": 30}] for minutes, or [{"distance": 5}] for kilometres. Max 4 values.
costing_options
object
Advanced per-mode overrides - speed limits, hazmat restrictions for truck, etc.
polygons
boolean
Return filled polygons (true, default) or LineString outlines only (false).
generalize
number
Simplification tolerance in metres. Higher values reduce polygon complexity. Default: 0 (no simplification).
denoise
number
0.0-1.0. Remove small disconnected polygons. 1.0 returns only the largest contour polygon. Default: 1.0.

Response codes

200 application/json GeoJSON FeatureCollection with one Feature per contour threshold.
400 Bad request Invalid origin, conflicting contour params, or too many contour values.
401 Unauthorized Missing or invalid RapidAPI key.
422 Unroutable Origin coordinate could not be snapped to the road network.
429 Rate limited Exceeded plan request rate. Upgrade on RapidAPI.

Integration example

Render isochrone on a MapLibre GL map JavaScript
const res = await fetch(
  'https://api.farun.io/v1/routing/isochrone',
  {
    method:  'POST',
    headers: {
      'X-RapidAPI-Key':  API_KEY,
      'Content-Type':   'application/json'
    },
    body: JSON.stringify({
      locations:[{ lon: 77.2090, lat: 28.6139 }],
      contours:[{time: 15}, {time: 30}, {time: 45}],
      costing:    'driving',
      polygons:   true,
      generalize: 50
    })
  }
);

const geojson = await res.json();

// Add to MapLibre GL as a fill layer
map.addSource('isochrone', {
  type: 'geojson',
  data: geojson
});

map.addLayer({
  id:     'isochrone-fill',
  type:   'fill',
  source: 'isochrone',
  paint: {
    'fill-color':   '#ea580c',
    'fill-opacity': 0.2
  }
});

Method

POST

Body format

application/json

Contour types

time (minutes) or distance (metres)

Max contours

4 per request

Output

GeoJSON FeatureCollection

Geometry type

MultiPolygon or LineString

Navigation API family

Often used together

Start building

100 free isochrone requests
every month.

The Starter plan on RapidAPI includes 100 isochrone requests per month at no cost. Enough to build and validate a full reachability integration before committing to Pro.