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

Directions

Point-to-point routes with geometry and turn instructions.


Route between two points

GET
https://routing-api-main-d2f2b11.zuplo.app
/v2/directions/{profile}

The simplest form: a start and an end, as lon,lat. Returns GeoJSON.

This is the one endpoint that accepts the key as a query parameter, because that is how openrouteservice's own GET form works.

Route between two points › 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

Route between two points › query Parameters

start
​string · required

Start coordinate as lon,lat.

Example: -87.6298,41.8781
end
​string · required

End coordinate as lon,lat.

Example: -87.6244,41.8796

Route between two points › 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.

Route between two points › Responses

A route, as GeoJSON.

GET/v2/directions/{profile}
curl 'https://routing-api-main-d2f2b11.zuplo.app/v2/directions/:profile?start=<string>&end=<string>' \ --header 'Authorization: Bearer <token>'
Example Responses
{ "type": "FeatureCollection", "bbox": [ -87.629773, 41.8781, -87.624445, 41.880835 ], "features": [ { "type": "Feature", "bbox": [ -87.629773, 41.8781, -87.624445, 41.880835 ], "geometry": { "type": "LineString", "coordinates": [ { "0": -87.629771, "1": 41.8781 }, { "0": -87.629773, "1": 41.878174 }, { "0": -87.627695, "1": 41.878211 }, { "0": -87.62776, "1": 41.880755 }, { "0": -87.624445, "1": 41.879599 } ] }, "properties": { "summary": { "distance": 873.2, "duration": 105.4 }, "way_points": [ 0, 18 ] } } ], "metadata": { "attribution": "© openrouteservice by HeiGIT | Data from OpenStreetMap", "service": "routing", "element_count": 10 } }
json
application/geo+json

Route with full options

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

Returns JSON with an encoded polyline geometry.

Cost: 10 elements per request, regardless of the number of waypoints. Approved as a launch default on 2026-09-04.

Limits today: up to 50 waypoints, and a maximum total route distance enforced by the engine. Exceeding either returns the engine's own 2004 error naming the limit.

Route with full options › 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

Route with full options › 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.

Route with full options › Request Body

DirectionsRequest
coordinates
​Coordinate[] · required

The waypoints, in order, starting at the origin.

preference
​string · enum
Enum values:
fastest
shortest
recommended
units
​string · enum
Enum values:
m
km
mi
language
​string

Language for turn instructions.

instructions
​boolean

Include turn-by-turn instructions. Default true.

instructions_format
​string · enum
Enum values:
text
html
geometry
​boolean

Include the route geometry. Default true.

geometry_simplify
​boolean
elevation
​boolean
extra_info
​string[]
attributes
​string[]
continue_straight
​boolean
alternative_routes
​object

Request alternative routes.

options
​object

Advanced routing options such as avoid_features or avoid_polygons.

Note: requests carrying options are computed in the engine's flexible mode, which bypasses its speed-up structures and is roughly ten times more expensive. The engine applies a much smaller size limit to them.

radiuses
​number[]
bearings
​array[]
maximum_speed
​number
suppress_warnings
​boolean
id
​string

Route with full options › Responses

The computed route.

DirectionsJsonResponse
​object[]
bbox
​number[]
​Metadata

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

POST/v2/directions/{profile}
curl https://routing-api-main-d2f2b11.zuplo.app/v2/directions/:profile \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }'
Example Request Body
{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }
json
application/json
Example Responses
{ "bbox": [ -87.6298, 41.8781, -87.6244, 41.8796 ], "routes": [ { "summary": { "distance": 2.61, "duration": 421.3 }, "segments": [ { "distance": 2.61, "duration": 421.3, "steps": [ { "distance": 1.14, "duration": 182.6, "instruction": "Head east on West Adams Street", "name": "West Adams Street", "way_points": [ 0, 2 ] }, { "distance": 1.47, "duration": 238.7, "instruction": "Arrive at your destination, on the left", "name": "-", "way_points": [ 2, 3 ] } ] } ], "geometry": "cir~FfezuOkC{OoA_IoA{E", "bbox": [ -87.6298, 41.8781, -87.6244, 41.8796 ], "way_points": [ 0, 3 ] } ], "metadata": { "attribution": "© openrouteservice by HeiGIT | Data from OpenStreetMap", "service": "routing", "timestamp": 1788412800000, "query": { "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "profile": "driving-car", "preference": "recommended", "units": "km" }, "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": 10 } }
json
application/json

Route, JSON form

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

Identical to POST /v2/directions/{profile}, with the format named explicitly.

Route, JSON 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

Route, JSON 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.

Route, JSON form › Request Body

DirectionsRequest
coordinates
​Coordinate[] · required

The waypoints, in order, starting at the origin.

preference
​string · enum
Enum values:
fastest
shortest
recommended
units
​string · enum
Enum values:
m
km
mi
language
​string

Language for turn instructions.

instructions
​boolean

Include turn-by-turn instructions. Default true.

instructions_format
​string · enum
Enum values:
text
html
geometry
​boolean

Include the route geometry. Default true.

geometry_simplify
​boolean
elevation
​boolean
extra_info
​string[]
attributes
​string[]
continue_straight
​boolean
alternative_routes
​object

Request alternative routes.

options
​object

Advanced routing options such as avoid_features or avoid_polygons.

Note: requests carrying options are computed in the engine's flexible mode, which bypasses its speed-up structures and is roughly ten times more expensive. The engine applies a much smaller size limit to them.

radiuses
​number[]
bearings
​array[]
maximum_speed
​number
suppress_warnings
​boolean
id
​string

Route, JSON form › Responses

The computed route.

DirectionsJsonResponse
​object[]
bbox
​number[]
​Metadata

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

POST/v2/directions/{profile}/json
curl https://routing-api-main-d2f2b11.zuplo.app/v2/directions/:profile/json \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }'
Example Request Body
{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }
json
application/json
Example Responses
{ "routes": [ { "summary": { "distance": 0, "duration": 0 }, "segments": [ {} ], "geometry": "geometry", "bbox": [ 0 ], "way_points": [ 0 ] } ], "bbox": [ 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/json

Route, GeoJSON form

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

The same route as a GeoJSON FeatureCollection, with decoded geometry — the convenient form for map libraries.

Route, 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

Route, 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.

Route, GeoJSON form › Request Body

DirectionsRequest
coordinates
​Coordinate[] · required

The waypoints, in order, starting at the origin.

preference
​string · enum
Enum values:
fastest
shortest
recommended
units
​string · enum
Enum values:
m
km
mi
language
​string

Language for turn instructions.

instructions
​boolean

Include turn-by-turn instructions. Default true.

instructions_format
​string · enum
Enum values:
text
html
geometry
​boolean

Include the route geometry. Default true.

geometry_simplify
​boolean
elevation
​boolean
extra_info
​string[]
attributes
​string[]
continue_straight
​boolean
alternative_routes
​object

Request alternative routes.

options
​object

Advanced routing options such as avoid_features or avoid_polygons.

Note: requests carrying options are computed in the engine's flexible mode, which bypasses its speed-up structures and is roughly ten times more expensive. The engine applies a much smaller size limit to them.

radiuses
​number[]
bearings
​array[]
maximum_speed
​number
suppress_warnings
​boolean
id
​string

Route, GeoJSON form › Responses

The computed route, as GeoJSON.

POST/v2/directions/{profile}/geojson
curl https://routing-api-main-d2f2b11.zuplo.app/v2/directions/:profile/geojson \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }'
Example Request Body
{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }
json
application/json
Example Responses
{}
json
application/geo+json

Route, GPX form

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

The same route as GPX XML.

Note this response is not JSON, so it carries no added element count. The attribution travels in the GPX metadata, as the engine emits it.

Route, GPX 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

Route, GPX 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.

Route, GPX form › Request Body

DirectionsRequest
coordinates
​Coordinate[] · required

The waypoints, in order, starting at the origin.

preference
​string · enum
Enum values:
fastest
shortest
recommended
units
​string · enum
Enum values:
m
km
mi
language
​string

Language for turn instructions.

instructions
​boolean

Include turn-by-turn instructions. Default true.

instructions_format
​string · enum
Enum values:
text
html
geometry
​boolean

Include the route geometry. Default true.

geometry_simplify
​boolean
elevation
​boolean
extra_info
​string[]
attributes
​string[]
continue_straight
​boolean
alternative_routes
​object

Request alternative routes.

options
​object

Advanced routing options such as avoid_features or avoid_polygons.

Note: requests carrying options are computed in the engine's flexible mode, which bypasses its speed-up structures and is roughly ten times more expensive. The engine applies a much smaller size limit to them.

radiuses
​number[]
bearings
​array[]
maximum_speed
​number
suppress_warnings
​boolean
id
​string

Route, GPX form › Responses

The computed route, as GPX.

string
POST/v2/directions/{profile}/gpx
curl https://routing-api-main-d2f2b11.zuplo.app/v2/directions/:profile/gpx \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }'
Example Request Body
{ "coordinates": [ { "0": -87.6298, "1": 41.8781 }, { "0": -87.6244, "1": 41.8796 } ], "preference": "recommended", "units": "km", "instructions": true }
json
application/json
Example Responses
string
xml
application/gpx+xml

MatrixIsochrones