Routing Engine API Documentation


This Routing Engine API is mainly for users with their own platform. If you wish to make use of this Routing Engine API for planning, kindly contact and indicate the following:

  • Your ElasticRoute email account
  • Nature of your business, e.g. software integrator, logistic company etc.
  • Estimated number of stops to be planned per day
  • Estimated number of vehicles required for planning

Thereafter, we will get back to you as soon as possible.

Alternatively, you may also make use of our Dashboard API Documentation if your data needs to interact with the ElasticRoute dashboard.


ElasticRoute is served on an HTTP REST API, allowing you to easily integrate systems with ElasticRoute. This page aims to explain how to use our API to plan your routes.

Any program capable of sending HTTP requests and parsing JSON is able to interact with our API.

Plans created by your API are separate from the ones created in the dashboard. This means that plans created in your dashboard cannot be modified by the API, and plans created by the API cannot be seen in the dashboard.


You need to obtain an API Key before you can use the ElasticRoute API. First, provide a name for the new API Key under Settings > API:

A new window will appear display the API Key. Keep it somewhere safe, as it will only be displayed once. If you lose this token, you must delete this and generate a new one.

You will need to set the following HTTP headers in all the API calls made to us:

1. Set HTTP header ‘Content-Type‘ to ‘application/json‘.

Content-Type: application/json

2. Set Custom HTTP header ‘Authorization‘ with your ElasticRoute API key.

Authorization: Bearer {YOUR_API_KEY}

Content-Type: application/json
Authorization: Bearer y05p5DOXcRAr3ZmaJflWpoNJacSIReWpOq9Hzy6UZKf3hXM3HrrOaHqqg72F

Request URL

You can post to the following end point for route planning and optimization:

POST{ plan_id }?c=sync&w=false

Parameters Description Type
plan_id You can specify a unique id for the routing plan. The plan_id can be referenced later for retrieval of planned results. The results, referenced by each plan_id, can be overridden by a new API call made using the plan_id. Required. String
c This API call will perform the routing tasks in a queue. However, when c=sync is specified, the server will return the result synchronously. Please note that this option is only to be used on small number of stops/ jobs as the server will throw a timeout error after 60 seconds. Optional String
w Set true to trigger webhook after planning has been completed. Optional.
Default: false (when c=sync). Default: true (when c is not specified).

Sample Request Body

  "date": "2019-11-15",
  "stops": [
      "name": "SUTD",
      "address": "8 Somapah Road Singapore 487372",
      "lat": "1.3410211",
      "lng": "103.960695"
      "name": "Changi Airport",
      "address": "80 Airport Boulevard (S)819642",
      "lat": "1.3644202",
      "lng": "103.9893421"
      "name": "Gardens By the Bay",
      "address": "18 Marina Gardens Drive Singapore 018953",
      "lat": "1.2815683",
      "lng": "103.8614245"
      "name": "Singapore Zoo",
      "address": "80 Mandai Lake Road Singapore 729826",
      "lat": "1.4044825",
      "lng": "103.7898931"
  "depots": [
      "name": "Main Warehouse",
      "lat": "1.3358054",
      "lng": "103.9102647"
  "vehicles": [
      "name": "Van 1"
      "name": "Van 2"
  "rushHours": [],
  "generalSettings": {
    "country": "SG",
    "timezone": "Asia/Singapore"

Sample Response Body

  "data": {
    "plan_id": "plan1",
    "date": "2019-11-15",
    "details": {
      "stops": [
          "name": "Changi Airport",
          "address": "80 Airport Boulevard (S)819642",
          "lat": 1.3644202,
          "lng": 103.9893421,
          "depot": "Main Warehouse",
          "from": 900,
          "till": 1700,
          "vehicle_type": "Default",
          "priority": 10,
          "assign_to": "Van 2",
          "run": 1,
          "sequence": 1,
          "eta": "2019-11-15T09:18:33.000000Z",
          "service_time": 0,
          "time_from_previous_stop": 18.56,
          "distance_from_previous_stop": 12.82,
          "postal_code": null,
          "weight_load": null,
          "volume_load": null,
          "seating_load": null,
          "preassign_to": null,
          "exception": null
          "name": "SUTD",
          "address": "8 Somapah Road Singapore 487372",
          "lat": 1.3410211,
          "lng": 103.960695,
          "depot": "Main Warehouse",
          "from": 900,
          "till": 1700,
          "vehicle_type": "Default",
          "priority": 10,
          "assign_to": "Van 2",
          "run": 1,
          "sequence": 2,
          "eta": "2019-11-15T09:29:06.000000Z",
          "service_time": 0,
          "time_from_previous_stop": 10.57,
          "distance_from_previous_stop": 6.28,
          "postal_code": null,
          "weight_load": null,
          "volume_load": null,
          "seating_load": null,
          "preassign_to": null,
          "exception": null
          "name": "Gardens By the Bay",
          "address": "18 Marina Gardens Drive Singapore 018953",
          "lat": 1.2815683,
          "lng": 103.8614245,
          "depot": "Main Warehouse",
          "from": 900,
          "till": 1700,
          "vehicle_type": "Default",
          "priority": 10,
          "assign_to": "Van 2",
          "run": 1,
          "sequence": 3,
          "eta": "2019-11-15T09:50:08.000000Z",
          "service_time": 0,
          "time_from_previous_stop": 21.04,
          "distance_from_previous_stop": 15.91,
          "postal_code": null,
          "weight_load": null,
          "volume_load": null,
          "seating_load": null,
          "preassign_to": null,
          "exception": null
          "name": "Singapore Zoo",
          "address": "80 Mandai Lake Road Singapore 729826",
          "lat": 1.4044825,
          "lng": 103.7898931,
          "depot": "Main Warehouse",
          "from": 900,
          "till": 1700,
          "vehicle_type": "Default",
          "priority": 10,
          "assign_to": "Van 2",
          "run": 1,
          "sequence": 4,
          "eta": "2019-11-15T10:19:18.000000Z",
          "service_time": 0,
          "time_from_previous_stop": 29.17,
          "distance_from_previous_stop": 22.01,
          "postal_code": null,
          "weight_load": null,
          "volume_load": null,
          "seating_load": null,
          "preassign_to": null,
          "exception": null
      "depots": [
          "name": "Main Warehouse",
          "lat": 1.3358054,
          "lng": 103.9102647,
          "auto_select": false,
          "loading_time": 0,
          "address": null,
          "postal_code": null
      "vehicles": [
          "name": "Van 1",
          "depot": "Main Warehouse",
          "vehicle_types": [
          "priority": 10,
          "service_radius": null,
          "break_from": null,
          "break_till": null,
          "buffer": 40,
          "avail_from": 900,
          "avail_till": 1700,
          "return_to_depot": false,
          "weight_capacity": null,
          "volume_capacity": null,
          "seating_capacity": null
          "name": "Van 2",
          "depot": "Main Warehouse",
          "vehicle_types": [
          "priority": 10,
          "service_radius": null,
          "break_from": null,
          "break_till": null,
          "buffer": 40,
          "avail_from": 900,
          "avail_till": 1700,
          "return_to_depot": false,
          "weight_capacity": null,
          "volume_capacity": null,
          "seating_capacity": null
      "rushHours": [],
      "generalSettings": {
        "country": "SG",
        "timezone": "Asia/Singapore",
        "depot_selection": "Default",
        "depot_selection_radius": null,
        "priority_value": "lower_lower",
        "loading_time": null,
        "buffer": null,
        "service_time": null,
        "distance_unit": null,
        "max_time": null,
        "max_distance": null,
        "max_stops": null,
        "max_runs": null,
        "webhook_url": null
    "stage": "planned",
    "stats": {
      "total_plan_stops": 4,
      "total_plan_depots": 1,
      "total_plan_vehicles": 1,
      "total_plan_distance": 57.02,
      "total_stops_served": 4,
      "total_exceptions": 0,
      "total_runs": 1,
      "total_plan_time": 7
    "progress": 100,
    "submitted": "2019-11-14 17:39:17",
    "planning": "2019-11-14 17:39:18",
    "planned": "2019-11-14 17:39:25"
  • The above response with the planned results will be given with using the synchronous api call with parameter (c=sync)
  • Results can also be retrieved using the plan_id. Please refer to the other supporting api below.

API Fields And Description

The JSON request for planning can be divided into 6 sections.

POST{ plan_id }?c=sync&w=false

The Required sections are Stops, Depot and Vehicles.
If not provided, the Date, General Settings and Rush Hour will take reference from the default values.

  • Date Optional.
  • Stops Required.
  • Depot Required.
  • Vehicles Required.
  • General Settings Optional.
  • Rush Hour Optional.


Step 1: Click on the profile icon at the top right corner.

Step 2: A drop-down will appear.

Step 3: Click on API Request Logs.

Other Supporting APIs

API Description
GET{ plan_id } Get the current status/ results of the plan specified by the plan_id.
GET{ plan_id }/status Get the current status of the plan specified by the plan_id.
GET Get a list of plan results.
POST{ plan_id }/stop Stop the progress of the plan specified by the plan_id.
DELETE{ plan_id } Delete the plan specified by the plan_id.

Start Routing Today!

FREE to use till 31st October 2019. Don't wait.

Supported Countries

  "AF": "Afghanistan",
  "AX": "Åland Islands",
  "AL": "Albania",
  "DZ": "Algeria",
  "AS": "American Samoa",
  "AD": "Andorra",
  "AO": "Angola",
  "AI": "Anguilla",
  "AQ": "Antarctica",
  "AG": "Antigua & Barbuda",
  "AR": "Argentina",
  "AM": "Armenia",
  "AW": "Aruba",
  "AU": "Australia",
  "AT": "Austria",
  "AZ": "Azerbaijan",
  "BS": "Bahamas",
  "BH": "Bahrain",
  "BD": "Bangladesh",
  "BB": "Barbados",
  "BY": "Belarus",
  "BE": "Belgium",
  "BZ": "Belize",
  "BJ": "Benin",
  "BM": "Bermuda",
  "BT": "Bhutan",
  "BO": "Bolivia",
  "BA": "Bosnia & Herzegovina",
  "BW": "Botswana",
  "BR": "Brazil",
  "IO": "British Indian Ocean Territory",
  "VG": "British Virgin Islands",
  "BN": "Brunei",
  "BG": "Bulgaria",
  "BF": "Burkina Faso",
  "BI": "Burundi",
  "KH": "Cambodia",
  "CM": "Cameroon",
  "CA": "Canada",
  "IC": "Canary Islands",
  "CV": "Cape Verde",
  "BQ": "Caribbean Netherlands",
  "KY": "Cayman Islands",
  "CF": "Central African Republic",
  "EA": "Ceuta & Melilla",
  "TD": "Chad",
  "CL": "Chile",
  "CN": "China",
  "CX": "Christmas Island",
  "CC": "Cocos (Keeling) Islands",
  "CO": "Colombia",
  "KM": "Comoros",
  "CG": "Congo - Brazzaville",
  "CD": "Congo - Kinshasa",
  "CK": "Cook Islands",
  "CR": "Costa Rica",
  "CI": "Côte d’Ivoire",
  "HR": "Croatia",
  "CU": "Cuba",
  "CW": "Curaçao",
  "CY": "Cyprus",
  "CZ": "Czechia",
  "DK": "Denmark",
  "DG": "Diego Garcia",
  "DJ": "Djibouti",
  "DM": "Dominica",
  "DO": "Dominican Republic",
  "EC": "Ecuador",
  "EG": "Egypt",
  "SV": "El Salvador",
  "GQ": "Equatorial Guinea",
  "ER": "Eritrea",
  "EE": "Estonia",
  "ET": "Ethiopia",
  "FK": "Falkland Islands",
  "FO": "Faroe Islands",
  "FJ": "Fiji",
  "FI": "Finland",
  "FR": "France",
  "GF": "French Guiana",
  "PF": "French Polynesia",
  "TF": "French Southern Territories",
  "GA": "Gabon",
  "GM": "Gambia",
  "GE": "Georgia",
  "DE": "Germany",
  "GH": "Ghana",
  "GI": "Gibraltar",
  "GR": "Greece",
  "GL": "Greenland",
  "GD": "Grenada",
  "GP": "Guadeloupe",
  "GU": "Guam",
  "GT": "Guatemala",
  "GG": "Guernsey",
  "GN": "Guinea",
  "GW": "Guinea-Bissau",
  "GY": "Guyana",
  "HT": "Haiti",
  "HN": "Honduras",
  "HK": "Hong Kong",
  "HU": "Hungary",
  "IS": "Iceland",
  "IN": "India",
  "ID": "Indonesia",
  "IR": "Iran",
  "IQ": "Iraq",
  "IE": "Ireland",
  "IM": "Isle of Man",
  "IL": "Israel",
  "IT": "Italy",
  "JM": "Jamaica",
  "JP": "Japan",
  "JE": "Jersey",
  "JO": "Jordan",
  "KZ": "Kazakhstan",
  "KE": "Kenya",
  "KI": "Kiribati",
  "XK": "Kosovo",
  "KW": "Kuwait",
  "KG": "Kyrgyzstan",
  "LA": "Laos",
  "LV": "Latvia",
  "LB": "Lebanon",
  "LS": "Lesotho",
  "LR": "Liberia",
  "LY": "Libya",
  "LI": "Liechtenstein",
  "LT": "Lithuania",
  "LU": "Luxembourg",
  "MO": "Macau",
  "MK": "Macedonia",
  "MG": "Madagascar",
  "MW": "Malawi",
  "MY": "Malaysia",
  "MV": "Maldives",
  "ML": "Mali",
  "MT": "Malta",
  "MH": "Marshall Islands",
  "MQ": "Martinique",
  "MR": "Mauritania",
  "MU": "Mauritius",
  "YT": "Mayotte",
  "MX": "Mexico",
  "FM": "Micronesia",
  "MD": "Moldova",
  "MC": "Monaco",
  "MN": "Mongolia",
  "ME": "Montenegro",
  "MS": "Montserrat",
  "MA": "Morocco",
  "MZ": "Mozambique",
  "MM": "Myanmar (Burma)",
  "NA": "Namibia",
  "NR": "Nauru",
  "NP": "Nepal",
  "NL": "Netherlands",
  "NC": "New Caledonia",
  "NZ": "New Zealand",
  "NI": "Nicaragua",
  "NE": "Niger",
  "NG": "Nigeria",
  "NU": "Niue",
  "NF": "Norfolk Island",
  "KP": "North Korea",
  "MP": "Northern Mariana Islands",
  "NO": "Norway",
  "OM": "Oman",
  "PK": "Pakistan",
  "PW": "Palau",
  "PA": "Panama",
  "PG": "Papua New Guinea",
  "PY": "Paraguay",
  "PE": "Peru",
  "PH": "Philippines",
  "PN": "Pitcairn Islands",
  "PL": "Poland",
  "PT": "Portugal",
  "PR": "Puerto Rico",
  "QA": "Qatar",
  "RE": "Réunion",
  "RO": "Romania",
  "RU": "Russia",
  "RW": "Rwanda",
  "WS": "Samoa",
  "SM": "San Marino",
  "ST": "São Tomé & Príncipe",
  "SA": "Saudi Arabia",
  "SN": "Senegal",
  "RS": "Serbia",
  "SC": "Seychelles",
  "SL": "Sierra Leone",
  "SG": "Singapore",
  "SX": "Sint Maarten",
  "SK": "Slovakia",
  "SI": "Slovenia",
  "SB": "Solomon Islands",
  "SO": "Somalia",
  "ZA": "South Africa",
  "GS": "South Georgia & South Sandwich Islands",
  "KR": "South Korea",
  "SS": "South Sudan",
  "ES": "Spain",
  "LK": "Sri Lanka",
  "BL": "St. Barthélemy",
  "SH": "St. Helena",
  "KN": "St. Kitts & Nevis",
  "LC": "St. Lucia",
  "MF": "St. Martin",
  "PM": "St. Pierre & Miquelon",
  "VC": "St. Vincent & Grenadines",
  "SD": "Sudan",
  "SR": "Suriname",
  "SJ": "Svalbard & Jan Mayen",
  "SZ": "Swaziland",
  "SE": "Sweden",
  "CH": "Switzerland",
  "SY": "Syria",
  "TW": "Taiwan",
  "TJ": "Tajikistan",
  "TZ": "Tanzania",
  "TH": "Thailand",
  "TL": "Timor-Leste",
  "TG": "Togo",
  "TK": "Tokelau",
  "TO": "Tonga",
  "TT": "Trinidad & Tobago",
  "TN": "Tunisia",
  "TR": "Turkey",
  "TM": "Turkmenistan",
  "TC": "Turks & Caicos Islands",
  "TV": "Tuvalu",
  "UM": "U.S. Outlying Islands",
  "VI": "U.S. Virgin Islands",
  "UG": "Uganda",
  "UA": "Ukraine",
  "AE": "United Arab Emirates",
  "GB": "United Kingdom",
  "US": "United States",
  "UY": "Uruguay",
  "UZ": "Uzbekistan",
  "VU": "Vanuatu",
  "VA": "Vatican City",
  "VE": "Venezuela",
  "VN": "Vietnam",
  "WF": "Wallis & Futuna",
  "EH": "Western Sahara",
  "YE": "Yemen",
  "ZM": "Zambia",
  "ZW": "Zimbabwe"

Supported Timezones

  "list": [

Have questions?

Let's find an answer in our list of tutorials

Start routing today

Sign up for a FREE ElasticRoute account