WayMatrix Developer Portal
  • Getting started
  • API reference
Information
Matrix
    Travel-time and distance matrixpostTravel-time and distance matrix (explicit JSON form)post
Directions
    Route between two pointsgetRoute with full optionspostRoute, JSON formpostRoute, GeoJSON formpostRoute, GPX formpost
Isochrones
    Reachability polygonspostReachability polygons (explicit GeoJSON form)post
Service
    LivenessgetLiveness, headers onlyheadEngine and graph provenancegetEngine and graph provenance, headers onlyhead
Schemas
powered by Zuplo
WayMatrix Routing API
WayMatrix Routing API

Isochrones

Reachability polygons.


Reachability polygons

POST
https://routing-api-main-d2f2b11.zuplo.app
/v2/isochrones/{profile}

Areas reachable within given time or distance ranges from one or more locations.

Cost: 100 elements per request, approved as a launch default on 2026-09-04. Isochrones are far more expensive to compute than a matrix lookup — a maximum-range isochrone occupies a CPU core for about twenty seconds, measured on the running engine — which is why they cost more per call than a route.

Limits today are the engine's own and are lower than hosted openrouteservice on every axis: locations, intervals and maximum range. Exceeding any of them returns the engine's 3004 or 3012 error naming the limit.

Reachability polygons › path Parameters

profile
​string · required

The routing profile. driving-car is the only profile served. Any other value returns the engine's own error, the same one hosted openrouteservice returns for a profile it does not carry.

Example: driving-car

Reachability polygons › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Reachability polygons › Request Body

IsochronesRequest
locations
​Coordinate[] · required

The centres of the isochrones.

range
​number[] · required

The ranges to compute, in seconds or metres depending on range_type. The engine enforces a maximum; exceeding it returns error 3004 naming the limit.

range_type
​string · enum

Whether range is seconds or metres. Default time.

Enum values:
time
distance
interval
​number

Produce intermediate bands at this step within each range.

units
​string · enum
Enum values:
m
km
mi
area_units
​string · enum
Enum values:
m
km
mi
location_type
​string · enum

Whether the locations are origins (start, the default) or destinations — the difference matters on one-way roads.

Enum values:
start
destination
attributes
​string[]
Enum values:
area
reachfactor
total_pop
intersections
​boolean
smoothing
​number
id
​string

Reachability polygons › Responses

Reachability polygons, as GeoJSON.

A GeoJSON FeatureCollection of reachability polygons.
IsochronesResponse
type
​string
bbox
​number[]
​object[]
​Metadata

The engine's metadata block, passed through unchanged, plus our added element count.

POST/v2/isochrones/{profile}
curl https://routing-api-main-d2f2b11.zuplo.app/v2/isochrones/:profile \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "locations": [ { "0": -87.6298, "1": 41.8781 } ], "range": [ 600, 1200 ], "range_type": "time", "attributes": [ "area" ] }'
Example Request Body
{ "locations": [ { "0": -87.6298, "1": 41.8781 } ], "range": [ 600, 1200 ], "range_type": "time", "attributes": [ "area" ] }
json
application/json
Example Responses
{ "type": "FeatureCollection", "bbox": [ -87.64674, 41.86549, -87.61286, 41.89071 ], "features": [ { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ { "0": [ -87.6298, 41.89071 ], "1": [ -87.61782, 41.88702 ], "2": [ -87.61286, 41.8781 ], "3": [ -87.61782, 41.86918 ], "4": [ -87.6298, 41.86549 ], "5": [ -87.64178, 41.86918 ], "6": [ -87.64674, 41.8781 ], "7": [ -87.64178, 41.88702 ], "8": [ -87.6298, 41.89071 ] } ] }, "properties": { "group_index": 0, "value": 600, "center": [ -87.62975, 41.87812 ], "area": 6120344.5 } }, { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ { "0": [ -87.6298, 41.90331 ], "1": [ -87.60584, 41.89594 ], "2": [ -87.59592, 41.8781 ], "3": [ -87.60584, 41.86026 ], "4": [ -87.6298, 41.85289 ], "5": [ -87.65376, 41.86026 ], "6": [ -87.66368, 41.8781 ], "7": [ -87.65376, 41.89594 ], "8": [ -87.6298, 41.90331 ] } ] }, "properties": { "group_index": 0, "value": 1200, "center": [ -87.62975, 41.87812 ], "area": 24481378.1 } } ], "metadata": { "attribution": "© openrouteservice by HeiGIT | Data from OpenStreetMap", "service": "isochrones", "timestamp": 1788412800000, "query": { "locations": [ { "0": -87.6298, "1": 41.8781 } ], "profile": "driving-car", "range": [ 600, 1200 ], "range_type": "time", "attributes": [ "area" ] }, "engine": { "version": "9.10.0", "build_date": "2026-07-28T00:00:00Z", "graph_date": "2026-07-31T00:00:00Z", "osm_date": "2026-07-30T00:00:00Z" }, "element_count": 100 } }
json
application/geo+json

Reachability polygons (explicit GeoJSON form)

POST
https://routing-api-main-d2f2b11.zuplo.app
/v2/isochrones/{profile}/geojson

Identical to POST /v2/isochrones/{profile}. This is the path openrouteservice-py sends.

Reachability polygons (explicit GeoJSON form) › path Parameters

profile
​string · required

The routing profile. driving-car is the only profile served. Any other value returns the engine's own error, the same one hosted openrouteservice returns for a profile it does not carry.

Example: driving-car

Reachability polygons (explicit GeoJSON form) › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Reachability polygons (explicit GeoJSON form) › Request Body

IsochronesRequest
locations
​Coordinate[] · required

The centres of the isochrones.

range
​number[] · required

The ranges to compute, in seconds or metres depending on range_type. The engine enforces a maximum; exceeding it returns error 3004 naming the limit.

range_type
​string · enum

Whether range is seconds or metres. Default time.

Enum values:
time
distance
interval
​number

Produce intermediate bands at this step within each range.

units
​string · enum
Enum values:
m
km
mi
area_units
​string · enum
Enum values:
m
km
mi
location_type
​string · enum

Whether the locations are origins (start, the default) or destinations — the difference matters on one-way roads.

Enum values:
start
destination
attributes
​string[]
Enum values:
area
reachfactor
total_pop
intersections
​boolean
smoothing
​number
id
​string

Reachability polygons (explicit GeoJSON form) › Responses

Reachability polygons, as GeoJSON.

A GeoJSON FeatureCollection of reachability polygons.
IsochronesResponse
type
​string
bbox
​number[]
​object[]
​Metadata

The engine's metadata block, passed through unchanged, plus our added element count.

POST/v2/isochrones/{profile}/geojson
curl https://routing-api-main-d2f2b11.zuplo.app/v2/isochrones/:profile/geojson \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "locations": [ { "0": -87.6298, "1": 41.8781 } ], "range": [ 600, 1200 ], "range_type": "time", "attributes": [ "area" ] }'
Example Request Body
{ "locations": [ { "0": -87.6298, "1": 41.8781 } ], "range": [ 600, 1200 ], "range_type": "time", "attributes": [ "area" ] }
json
application/json
Example Responses
{ "type": "FeatureCollection", "bbox": [ 0 ], "features": [ { "type": "type", "geometry": {}, "properties": { "group_index": 0, "value": 0, "center": { "0": -87.6298, "1": 41.8781 }, "area": 0, "reachfactor": 0 } } ], "metadata": { "attribution": "© openrouteservice by HeiGIT | Data from OpenStreetMap", "service": "service", "timestamp": 0, "query": {}, "engine": { "version": "version", "build_date": "build_date", "graph_date": "graph_date", "osm_date": "osm_date" }, "element_count": 0 } }
json
application/geo+json

DirectionsService