/graphhopper | Type: Application | PCID required: Yes
Tools
| Tool | Description |
|---|---|
graphhopper_async_clustering_problem | Submit a clustering job |
graphhopper_async_vrp | Submit a route optimization job |
graphhopper_calculate_matrix | Submit a matrix computation job |
graphhopper_calculate_profile | Submit a profile creation job |
graphhopper_delete_profile | Delete a custom routing profile |
graphhopper_get_cluster_solution | Retrieve solution of a clustering job |
graphhopper_get_geocode | Geocoding Endpoint |
graphhopper_get_isochrone | Compute an isochrone |
graphhopper_get_matrix | Compute a matrix |
graphhopper_get_matrix_solution | Retrieve result of a matrix computation job |
graphhopper_get_profile | List your custom routing profiles |
graphhopper_get_profile_solution | Retrieve result of a profile creation job |
graphhopper_get_route | Calculate a route |
graphhopper_get_solution | Retrieve solution of a route optimization job |
graphhopper_post_gpx | Map-match a GPX file |
graphhopper_post_matrix | Compute a matrix |
graphhopper_post_profile | Create a custom routing profile |
graphhopper_post_route | Calculate a route |
graphhopper_solve_clustering_problem | Solve a clustering problem |
graphhopper_solve_vrp | Solve a route optimization problem |
graphhopper_async_clustering_problem
Submit a clustering job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
clusters | object[] | No | — | The clusters value |
configuration | object | No | — | The configuration value |
customers | object[] | No | — | The customers value |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"clusters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "id of customer"
},
"center": {
"type": "object",
"description": "The center value"
},
"min_quantity": {
"type": "number",
"format": "int32",
"description": "Specifies min. quantity of this cluster"
},
"max_quantity": {
"type": "number",
"format": "int32",
"description": "Specifies max. quantity of this cluster"
}
}
},
"description": "The clusters value"
},
"configuration": {
"type": "object",
"description": "The configuration value",
"properties": {
"response_type": {
"type": "string",
"description": "Specifies the response format. You can either choose `geojson` or `json`."
},
"routing": {
"type": "object",
"description": "The routing value"
},
"clustering": {
"type": "object",
"description": "The clustering value"
}
}
},
"customers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "id of customer"
},
"address": {
"type": "object",
"description": "The address value"
},
"quantity": {
"type": "number",
"format": "int32",
"description": "demand of customer"
}
}
},
"description": "The customers value"
}
},
"required": [
"PCID"
]
}
graphhopper_async_vrp
Submit a route optimization job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
algorithm | object | No | — | Use objectives instead. |
configuration | object | No | — | Specifies general configurations that are taken into account when solving the vehicle routing problem. |
cost_matrices | object[] | No | — | Specifies your own transport time and distance matrices. |
objectives | object[] | No | — | Specifies an objective function. The vehicle routing problem is solved in such a way that this objective function is minimized. |
relations | any[] | No | — | Defines additional relationships between orders. |
services | object[] | No | — | Specifies the orders of the type “service”. These are, for example, pickups, deliveries, or other stops to be visited by the specified vehicles. Each of these orders contains only one location. |
shipments | object[] | No | — | Specifies the available shipments. Each shipment consists of a pickup and a delivery. For a single shipment, the pickup must always occur before the delivery. However, pickups and deliveries from multiple shipments can be sequenced independently. |
vehicle_types | object[] | No | — | Specifies the available vehicle types. These types can be assigned to vehicles. |
vehicles | object[] | No | — | Specifies the available vehicles. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"algorithm": {
"type": "object",
"description": "Use `objectives` instead.",
"properties": {
"problem_type": {
"type": "string",
"description": "Problem Type",
"enum": [
"min",
"min-max"
]
},
"objective": {
"type": "string",
"description": "The objective value",
"enum": [
"transport_time",
"completion_time"
]
}
}
},
"configuration": {
"type": "object",
"description": "Specifies general configurations that are taken into account when solving the vehicle routing problem.",
"properties": {
"routing": {
"type": "object",
"description": "This contains all routing specific configurations."
},
"optimization": {
"type": "object",
"description": "This contains all optimization specific configurations."
}
}
},
"cost_matrices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"default",
"google"
],
"description": "Type of cost matrix. Currently \"default\" and \"google\" are supported."
},
"location_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Location Ids"
},
"data": {
"type": "object",
"description": "JSON data of matrix response"
},
"profile": {
"type": "string",
"description": "Vehicle profile, or empty for a catch-all fallback."
}
}
},
"description": "Specifies your own transport time and distance matrices."
},
"objectives": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"min",
"min-max",
"balance"
],
"description": "Type of objective function, i.e. `min`, `min-max`, or `balance`. * `min`: Minimizes the objective value. * `min-max`: Minimizes the maximum objective value. * `balance`: **(Beta)** Optimizes for balanced workloads across drivers. Use with `value: completion_time` to balance working time, or `value: activities` to balance the number of stops per driver. For instance, `min` -> `vehicles` minimizes the number of employed vehicles. `min` -> `completion_time` minimizes the sum of your vehicle routes' completion time. If you use, for example, `min-max` -> `completion_time`, it minimizes the maximum of your vehicle routes' completion time, i.e. it minimizes the overall makespan. This only makes sense if you have more than one vehicle. In case of one vehicle, switching from `min` to `min-max` should not have any impact. If you have more than one vehicle, then the algorithm tries to constantly move stops from one vehicle to another such that the completion time of longest vehicle route can be further reduced. For example, if you have one vehicle that takes 8 hours to serve all customers, adding another vehicle (and using `min-max`) might halve the time to serve all customers to 4 hours. However, this usually comes with higher transport costs. If you want to minimize `vehicles` first and, second, `completion_time`, you can also combine different objectives like this: ```json \"objectives\" : [ { \"type\": \"min\", \"value\": \"vehicles\" }, { \"type\": \"min\", \"value\": \"completion_time\" } ] ``` If you want to balance activities or the number of stops among all employed drivers, you need to specify it as follows: ```json \"objectives\" : [ { \"type\": \"min-max\", \"value\": \"completion_time\" }, { \"type\": \"min-max\", \"value\": \"activities\" } ] ``` #### Balance Objective (Beta) The `balance` objective type provides a more sophisticated approach to workload balancing compared to `min-max`. While `min-max` only minimizes the maximum route value, `balance` optimizes for equal distribution of work across all drivers by minimizing the coefficient of variation (CV) of workloads. Use `balance` with: * `value: completion_time` - Balance working time (service time + travel time + waiting time) across drivers * `value: activities` - Balance the number of stops per driver The optional `level` parameter (1-3) controls how strongly to prioritize balance: * `level: 1` - Mild balance preference, allows some variation for better travel efficiency * `level: 2` - Moderate balance (default), good trade-off between balance and efficiency * `level: 3` - Strict balance, prioritizes equal workloads even at the cost of longer travel Example: ```json \"objectives\" : [ { \"type\": \"balance\", \"value\": \"completion_time\", \"level\": 2 } ] ``` **When to use `balance` vs `min-max`:** * Use `balance` when you want all drivers to have similar workloads (fairness) * Use `min-max` when you only care about minimizing the longest route (makespan) **Note:** The `balance` objective currently only supports services. Requests that combine `balance` objectives with shipments will return a `400` error."
},
"value": {
"type": "string",
"enum": [
"completion_time",
"completion_time_last_stop",
"route_duration",
"transport_time",
"vehicles",
"activities"
],
"description": "The value of the objective function. The objective value `transport_time` solely considers the time your drivers spend on the road, i.e. transport time. In contrary to `transport_time`, `completion_time` also takes waiting times at customer sites into account. The `completion_time` of a route is defined as the time from starting to ending the route, i.e. the route's transport time, the sum of waiting times plus the sum of activity durations. The `completion_time_last_stop`, on the other hand, refers to the completion time of the very last order in a tour or, in other words, the completion time without the last section from the last stop to the end of the tour. This is typically used if the orders are to be processed as quickly as possible. If you solely want to minimize route duration, you should use simply use `route_duration`. The objective value `vehicles` can only be used along with `min` and minimizes vehicles. For `balance` objective type, only `completion_time` and `activities` are supported."
},
"level": {
"type": "integer",
"format": "int32",
"description": "**(Beta)** Level for `balance` objectives (1-3). Controls how strongly to prioritize balanced workloads. * `1` - Accept some workload variation for better travel efficiency * `2` - Moderate balance (default) * `3` - Strictly equal workloads, even at cost of longer travel Only valid when `type` is `balance`. Ignored for other objective types."
}
},
"required": [
"type",
"value"
]
},
"description": "Specifies an objective function. The vehicle routing problem is solved in such a way that this objective function is minimized."
},
"relations": {
"type": "array",
"description": "Defines additional relationships between orders."
},
"services": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specifies the id of the service. Ids need to be unique so there must not be two services/shipments with the same id."
},
"type": {
"type": "string",
"enum": [
"service",
"pickup",
"delivery"
],
"description": "Specifies type of service. This makes a difference if items are loaded or unloaded, i.e. if one of the size dimensions > 0. If it is specified as `service` or `pickup`, items are loaded and will stay in the vehicle for the rest of the route (and thus consumes capacity for the rest of the route). If it is a `delivery`, items are implicitly loaded at the beginning of the route and will stay in the route until delivery (and thus releases capacity for the rest of the route)."
},
"priority": {
"type": "integer",
"format": "int32",
"description": "Specifies the priority. Can be 1 = high priority to 10 = low priority. Priority only affects the solution when not all services can be assigned (e.g., due to insufficient vehicle capacity, conflicting time windows, or vehicle constraints). In these cases, the optimizer preferentially assigns high-priority services and leaves low-priority services unassigned. The lower the priority, the earlier these services are omitted from the solution. When all services can be served within the given constraints, priority has no effect - all services are assigned regardless of their priority values, and the optimizer focuses solely on the specified objective (e.g., minimizing distance or number of vehicles)."
},
"name": {
"type": "string",
"description": "A meaningful name for the service, e.g. `\"deliver pizza\"`."
},
"address": {
"type": "object",
"description": "The address value"
},
"duration": {
"type": "integer",
"format": "int64",
"description": "Specifies the duration of the service in seconds, i.e. how long it takes to perform the actual service. This time is charged for each activity—if multiple services occur at the same location, their durations are summed."
},
"preparation_time": {
"type": "integer",
"format": "int64",
"description": "Specifies the preparation time in seconds. This time is added after arrival and before the service can begin, modeling tasks like finding a parking spot. Preparation time is only charged once when the location differs from the previous stop—if multiple consecutive activities share the same location, it is applied only to the first."
},
"setup_time": {
"type": "integer",
"format": "int64",
"description": "Specifies the setup time in seconds. This is a fixed overhead charged when arriving at a new location (e.g., dock check-in, security clearance, equipment preparation). Unlike `duration`, setup time is only charged once per location—if multiple consecutive activities share the same location, it is applied only to the first. The activity timeline is: arrival → preparation_time → waiting (if early) → setup_time → duration."
},
"time_windows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"earliest": {
"type": "integer",
"description": "Specifies the opening time of the time window in seconds, i.e. the earliest time the service can start."
},
"latest": {
"type": "integer",
"description": "Specifies the closing time of the time window in seconds, i.e. the latest time the service can start. Omit this field to indicate no limit."
}
}
},
"description": "Specifies an array of time window objects (see TimeWindow object below). Specify the time either with the recommended Unix timestamp (the number of seconds since 1970-01-01) or you can count the seconds relative to Monday morning 00:00 and define the whole week in seconds. For example, Monday 9am is represented by 9 hours * 3600 sec/hour = 32400. Wednesday 1pm corresponds to 2 days * 24 hours/day * 3600 sec/hour + 13 hours * 3600 sec/hour = 219600. See our tutorial for more information."
},
"size": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Size can have multiple dimensions and should correspond to the capacity dimension array of the vehicle type. For example, if the item that needs to be delivered has two size dimensions, volume and weight, specify it as follows: [ 20, 5 ], assuming a volume of 20 and a weight of 5."
},
"required_skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of required skills, i.e. an array of strings (not case sensitive). For example, if this service needs to be performed by a technician with a `drilling_machine` and a `screw_driver`, specify the array as follows: `[\"drilling_machine\",\"screw_driver\"]`. This means that the service can only be done by a vehicle (technician) that has both `drilling_machine` AND `screw_driver` in its skill array. Otherwise, it remains unassigned."
},
"allowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of allowed vehicles, i.e. an array of vehicle IDs. For example, if this service can only be performed by EITHER `technician_peter` OR `technician_stefan`, specify this as follows: `[\"technician_peter\",\"technician_stefan\"]`."
},
"disallowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of disallowed vehicles, i.e. an array of vehicle IDs."
},
"preferred_vehicles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vehicle_id": {
"type": "string",
"description": "Id of the preferred vehicle."
},
"priority": {
"type": "integer",
"description": "Number between 1 and 10 which indicates the priority of the preferred vehicle. 1 indicates the highest priority, 10 the lowest."
}
}
},
"description": "Specifies an array of preferred vehicles."
},
"max_time_in_vehicle": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum time in seconds a delivery can stay in the vehicle. Currently, it only works with services of \"type\":\"delivery\". Omit this field to indicate no limit."
},
"group": {
"type": "string",
"description": "Group this service belongs to. Orders with the same group label are treated as a contiguous cluster — they stay together as a block, but the optimizer picks the internal sequence. Groups can also be referenced in group-level relations to enforce constraints like `in_sequence` across entire clusters."
}
},
"required": [
"id"
]
},
"description": "Specifies the orders of the type \"service\". These are, for example, pickups, deliveries, or other stops to be visited by the specified vehicles. Each of these orders contains only one location."
},
"shipments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specifies the ID of the shipment. IDs must be unique, so there must not be two services/shipments with the same ID."
},
"name": {
"type": "string",
"description": "A meaningful name for the shipment, e.g. \"pick up and deliver pizza to Peter\"."
},
"priority": {
"type": "integer",
"format": "int32",
"description": "Specifies the priority. Can be 1 = high priority to 10 = low priority. Priority only affects the solution when not all shipments can be assigned (e.g., due to insufficient vehicle capacity, conflicting time windows, or vehicle constraints). In these cases, the optimizer preferentially assigns high-priority shipments and leaves low-priority shipments unassigned. The lower the priority, the earlier these shipments are omitted from the solution. When all shipments can be served within the given constraints, priority has no effect - all shipments are assigned regardless of their priority values, and the optimizer focuses solely on the specified objective (e.g., minimizing distance or number of vehicles)."
},
"pickup": {
"type": "object",
"description": "The pickup value"
},
"delivery": {
"type": "object",
"description": "The delivery value"
},
"size": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Size can have multiple dimensions and should correspond to the capacity dimension array of the vehicle type. For example, if the item that needs to be delivered has two size dimensions, volume and weight, specify it as follows: [ 20, 5 ], assuming a volume of 20 and a weight of 5."
},
"required_skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of required skills, i.e. an array of strings (not case sensitive). For example, if this shipment needs to be handled by a technician with a `drilling_machine` and a `screw_driver`, specify the array as follows: `[\"drilling_machine\",\"screw_driver\"]`. This means that the shipment can only be done by a vehicle (technician) that has both `drilling_machine` AND `screw_driver` in its skill array. Otherwise, it remains unassigned."
},
"allowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of allowed vehicles, i.e. an array of vehicle IDs. For example, if this shipment can only be handled by EITHER \"technician_peter\" OR \"technician_stefan\", specify this as follows: [\"technician_peter\",\"technician_stefan\"]."
},
"disallowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of disallowed vehicles, i.e. an array of vehicle IDs."
},
"preferred_vehicles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vehicle_id": {
"type": "string",
"description": "Id of the preferred vehicle."
},
"priority": {
"type": "integer",
"description": "Number between 1 and 10 which indicates the priority of the preferred vehicle. 1 indicates the highest priority, 10 the lowest."
}
}
},
"description": "Specifies an array of preferred vehicles."
},
"max_time_in_vehicle": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum time in seconds a shipment can stay in the vehicle. Omit this field to indicate no limit."
}
},
"required": [
"id",
"pickup",
"delivery"
]
},
"description": "Specifies the available shipments. Each shipment consists of a pickup and a delivery. For a single shipment, the pickup must always occur before the delivery. However, pickups and deliveries from multiple shipments can be sequenced independently."
},
"vehicle_types": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type_id": {
"type": "string",
"description": "Specifies the id of the vehicle type. If a vehicle needs to be of this type, it should refer to this with its type_id attribute."
},
"profile": {
"type": "string",
"description": "The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about [routing profiles](#tag/Map-Data-and-Routing-Profiles) for more details and valid profile values."
},
"capacity": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Specifies an array of capacity dimension values which need to be int values. For example, if there are two dimensions such as volume and weight then it needs to be defined as [ 1000, 300 ] assuming a maximum volume of 1000 and a maximum weight of 300."
},
"speed_factor": {
"type": "number",
"format": "double",
"description": "Specifies a speed factor for this vehicle type. For example, if a vehicle using this type should travel at half the speed calculated by our routing engine, set the speed factor to 0.5."
},
"service_time_factor": {
"type": "number",
"format": "double",
"description": "Specifies a service time factor for this vehicle type. For example, if a vehicle/driver using this type can complete services twice as fast as specified in the service or shipment, set this to 0.5."
},
"cost_per_meter": {
"type": "number",
"format": "double",
"description": "**_BETA feature_**! Cost parameter per distance unit, here meter is used"
},
"cost_per_second": {
"type": "number",
"format": "double",
"description": "**_BETA feature_**! Cost parameter per time unit, here second is used"
},
"cost_per_activation": {
"type": "number",
"format": "double",
"description": "**_BETA feature_**! Cost parameter vehicle activation, i.e. fixed costs per vehicle"
},
"consider_traffic": {
"type": "boolean",
"description": "Specifies whether traffic should be considered. If \"tomtom\" is used and this is false, free-flow travel times from TomTom are calculated. If this is true, historical traffic information is used. Traffic data is not yet available for \"openstreetmap\", so setting this to true has no effect when using OpenStreetMap."
},
"network_data_provider": {
"type": "string",
"enum": [
"openstreetmap",
"tomtom"
],
"description": "Specifies the network data provider. Either use [`openstreetmap`](#tag/Map-Data-and-Routing-Profiles/OpenStreetMap) (default) or [`tomtom`](#tag/Map-Data-and-Routing-Profiles/TomTom) (add-on required)."
}
},
"required": [
"type_id"
]
},
"description": "Specifies the available vehicle types. These types can be assigned to vehicles."
},
"vehicles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vehicle_id": {
"type": "string",
"description": "Specifies the ID of the vehicle. Ids must be unique, i.e. if there are two vehicles with the same ID, an error is returned."
},
"type_id": {
"type": "string",
"description": "The type ID assigns a vehicle type to this vehicle. You can specify types in the array of vehicle types. If you omit the type ID, the default type is used. The default type is a `car` with a capacity of 0."
},
"shifts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shift_id": {
"type": "string",
"description": "A unique identifier for this vehicle's shift."
},
"start_address": {
"type": "object"
},
"end_address": {
"type": "object"
},
"earliest_start": {
"type": "integer",
"description": "Earliest start of vehicle in seconds. It is recommended to use the unix timestamp."
},
"latest_end": {
"type": "integer",
"description": "Latest end of vehicle in seconds, i.e. the time the vehicle needs to be at its end location at latest. Omit this field to indicate no limit."
},
"latest_start": {
"type": "integer",
"description": "Latest start of vehicle in seconds. If specified and greater than earliest_start, the optimizer determines the best departure time within the [earliest_start, latest_start] window to minimize waiting time. (beta)"
},
"departure_preference": {
"type": "string",
"description": "Controls departure preference when latest_start is set. \"late\" (default) departs as late as possible while meeting all time windows. \"early\" departs as early as possible, eliminating waiting time along the route. Ignored without latest_start. (beta)"
},
"return_to_depot": {
"type": "boolean",
"description": "If true, vehicle returns to its start location (or specified end location). If false, vehicle can end at any customer location that optimizes the objective function."
},
"break": {}
}
},
"description": "An array of shift configurations for this vehicle."
},
"start_address": {
"type": "object",
"description": "Start Address"
},
"end_address": {
"type": "object",
"description": "End Address"
},
"break": {
"description": "The break value"
},
"return_to_depot": {
"type": "boolean",
"description": "If it is false, the algorithm decides where to end the vehicle route. It ends in one of your customers' locations. The end is chosen such that it contributes to the overall objective function, e.g. min transport_time. If it is true, you can either specify a specific end location (which is then regarded as end depot) or you can leave it and the driver returns to its start location."
},
"earliest_start": {
"type": "integer",
"format": "int64",
"description": "Earliest start of vehicle in seconds. It is recommended to use the unix timestamp."
},
"latest_end": {
"type": "integer",
"format": "int64",
"description": "Latest end of vehicle in seconds, i.e. the time the vehicle needs to be at its end location at latest. Omit this field to indicate no limit."
},
"latest_start": {
"type": "integer",
"format": "int64",
"description": "Latest start of vehicle in seconds. If specified and greater than earliest_start, the optimizer determines the best departure time within the [earliest_start, latest_start] window to minimize waiting time. (beta)"
},
"departure_preference": {
"type": "string",
"enum": [
"early",
"late"
],
"description": "Controls departure preference when latest_start is set. \"late\" (default) departs as late as possible while meeting all time windows. \"early\" departs as early as possible, eliminating waiting time along the route. Ignored without latest_start. (beta)"
},
"skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of skills, i.e. an array of strings (not case sensitive)."
},
"max_distance": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum distance (in meters) a vehicle can go."
},
"max_driving_time": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum driving time (in seconds) a vehicle/driver is allowed, i.e. the maximum time spent on the road (service and waiting times are not included)."
},
"max_jobs": {
"type": "integer",
"format": "int32",
"description": "Specifies the maximum number of jobs a vehicle can load."
},
"min_jobs": {
"type": "integer",
"format": "int32",
"description": "Specifies the minimum number of jobs a vehicle should load. This is a soft constraint, i.e. if it is not possible to fulfill “min_jobs”, we will still try to get as close as possible to this constraint."
},
"max_activities": {
"type": "integer",
"format": "int32",
"description": "Specifies the maximum number of activities a vehicle can conduct."
},
"move_to_end_address": {
"type": "boolean",
"description": "Indicates whether a vehicle should be moved even though it has not been assigned any jobs."
}
},
"required": [
"vehicle_id"
]
},
"description": "Specifies the available vehicles."
}
},
"required": [
"PCID"
]
}
graphhopper_calculate_matrix
Submit a matrix computation job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
body | object | No | — | Request body |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"body": {
"description": "Request body"
}
},
"required": [
"PCID"
]
}
graphhopper_calculate_profile
Submit a profile creation job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
bounds | object | No | — | The bounds value |
custom_model | object | No | — | The custom_model modifies the routing behaviour of the given profile. See the detailed documentation. Here is a complete example that limits all speeds to 100km/h, avoids motorways and makes shorter routes a bit more likely than the default due to a higher distance_influence. json { "speed": [ { "if": "true", "limit_to": 100 } ], "priority": [ { "if": "road_class == MOTORWAY", "multiply_by": 0.1 } ], "distance_influence": 100 } |
profile | string | No | — | The built-in profile your new custom profile shall be based on. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"bounds": {
"type": "object",
"description": "The bounds value"
},
"custom_model": {
"type": "object",
"description": "The custom_model modifies the routing behaviour of the given `profile`. See the [detailed documentation](#tag/Custom-Model). Here is a complete example that limits all speeds to 100km/h, avoids motorways and makes shorter routes a bit more likely than the default due to a higher distance_influence. ```json { \"speed\": [ { \"if\": \"true\", \"limit_to\": 100 } ], \"priority\": [ { \"if\": \"road_class == MOTORWAY\", \"multiply_by\": 0.1 } ], \"distance_influence\": 100 } ```",
"properties": {
"speed": {
"type": "array",
"items": {
"type": "object"
},
"description": "See [speed customization](#tag/Custom-Model/Customizing-speed)"
},
"priority": {
"type": "array",
"items": {
"type": "object"
},
"description": "See [priority customization](#tag/Custom-Model/Customizing-priority)"
},
"distance_influence": {
"type": "number",
"description": "Use higher values to prefer shorter routes. See [here](#tag/Custom-Model/Customizing-distance_influence) for more details."
},
"areas": {
"type": "object",
"description": "Areas are given in a GeoJson format. Currently only one format is supported: one object with type Feature, a geometry with type Polygon and optional (but ignored) id and properties fields. See more details and an example [here](#tag/Custom-Model/Define-areas)."
}
}
},
"profile": {
"type": "string",
"description": "The built-in profile your new custom profile shall be based on.",
"enum": [
"foot",
"bike",
"ecargobike",
"car",
"small_truck",
"truck",
"scooter"
]
}
},
"required": [
"PCID"
]
}
graphhopper_delete_profile
Delete a custom routing profile Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
profileId | string | Yes | — | The profile to delete |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"profileId": {
"type": "string",
"description": "The profile to delete"
}
},
"required": [
"PCID",
"profileId"
]
}
graphhopper_get_cluster_solution
Retrieve solution of a clustering job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
jobId | string | Yes | — | Request solution with jobId |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"jobId": {
"type": "string",
"description": "Request solution with jobId"
}
},
"required": [
"PCID",
"jobId"
]
}
graphhopper_get_geocode
Geocoding Endpoint Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
q | string | No | — | A textual description of the address you are looking for. Required for forward geocoding. Note that the default geocoding provider does prefix searches preferable for “autocomplete” use cases, but may lead to sub-optimal results if used without user interaction. See e.g. provider=nominatim as an appropriate alternative for less interactive use cases. |
locale | string | No | — | Display the search results for the specified locale. For the default provider French (fr), English (en) and German (de) are supported. Otherwise leave the locale empty. |
limit | integer | No | — | Specify the maximum number of results to return |
reverse | boolean | No | — | It is required to be true if you want to do a reverse geocoding request. If it is true, point must be defined as well, and q must not be used. |
debug | boolean | No | — | If true, the output will be formatted. |
point | string | No | — | Forward geocoding: The location bias in the format ‘latitude,longitude’ e.g. point=45.93272,11.58803. Reverse geocoding: The location to find amenities, cities. |
provider | string | No | — | The provider parameter is currently under development and can fall back to default at any time. The intend is to provide alternatives to our default geocoder. Each provider has its own strenghts and might fit better for certain scenarios, so it’s worth to compare the different providers. To try it append the providerparameter to the URL like &provider=nominatim, the result structure should be identical in all cases - if not, please report this back to us. Keep in mind that some providers do not support certain parameters or don’t return some fields, for example osm_id and osm_type are not supported by every geocoding provider. If you would like to use additional parameters of one of the providers, but it’s not available for the GraphHopper Geocoding API, yet? Please contact us. The credit costs can be different for all providers - see here for more information about it. Currently, only the default provider and gisgraphy support autocompletion of partial search strings. All providers support normal “forward” geocoding and reverse geocoding via reverse=true. #### Default (provider=default) This provider returns results of our internal geocoding engine. It is best suited for use cases with user interaction as it does prefix searches required for an “autocomplete” use case (a user types an address into a search field). In addition to the above documented parameters the following parameters are possible: * osm_tag - you can filter key:value or exclude places with certain OpenStreetMap tags !key:value. E.g. osm_tag=tourism:museum or just the key osm_tag=tourism. To exclude multiple tags you add multiple osm_tag parameters. * location_bias_scale - describes how much the prominence of a result should still be taken into account. Sensible values go from 0.0 (ignore prominence almost completely) to 1.0 (prominence has approximately the same influence as the location). The default is 0.2. * zoom - describes the radius around the center to focus on. This is a number that should correspond roughly to the map zoom parameter of a corresponding map. The default is zoom=16. * bbox - the expected format is minLon,minLat,maxLon,maxLat. This requires reverse=false. * radius - the search radius in km for the reverse search. This requires reverse=true. #### Nominatim (provider=nominatim) The GraphHopper Directions API uses a commercially hosted Nominatim geocoder (hosted by OpenCageData). It is best suited for use cases without or less user interaction like batch processing or detailed location data retrieval. It is not suited for “autocomplete”. In addition to the above documented parameters we currently support the following parameters: * countrycode - The country code is a two letter code as defined by the ISO 3166-1 Alpha 2 standard. E.g. gb for the United Kingdom, fr for France, us for United States. * bounds - the expected format is minLon,minLat,maxLon,maxLat #### Gisgraphy (provider=gisgraphy) This provider returns results from the Gisgraphy geocoder which you can try here. Limitations: The locale parameter is not supported. Gisgraphy does not return OSM tags or an extent. Gisgraphy has a special autocomplete API, which you can use by adding autocomplete=true (does not work with reverse=true). The autocomplete API is optimized on predicting text input, but returns less information. In addition to the above documented parameters Gisgraphy allows to use the following parameters, which can be used as documented here: * radius - radius in meters * country - restrict search for the specified country. The value must be the ISO 3166 Alpha 2 code of the country. #### OpenCage Data (provider=opencagedata) This provider returns results from the OpenCageData geocoder which you can try here. The difference to the nominatim provider is that other geocoders might be used under the hood. In addition to the above documented parameters OpenCage Data allows to use the following parameters, which can be used as documented here: * countrycode - The country code is a two letter code as defined by the ISO 3166-1 Alpha 2 standard. E.g. gb for the United Kingdom, fr for France, us for United States. * bounds - the expected format is minLon,minLat,maxLon,maxLat |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"q": {
"type": "string",
"description": "A textual description of the address you are looking for. Required for forward geocoding. Note that the `default` geocoding provider does prefix searches preferable for \"autocomplete\" use cases, but may lead to sub-optimal results if used without user interaction. See e.g. `provider=nominatim` as an appropriate alternative for less interactive use cases."
},
"locale": {
"type": "string",
"description": "Display the search results for the specified locale. For the default provider French (fr), English (en) and German (de) are supported. Otherwise leave the locale empty."
},
"limit": {
"type": "integer",
"description": "Specify the maximum number of results to return"
},
"reverse": {
"type": "boolean",
"description": "It is `required` to be `true` if you want to do a reverse geocoding request. If it is `true`, `point` must be defined as well, and `q` must not be used."
},
"debug": {
"type": "boolean",
"description": "If `true`, the output will be formatted."
},
"point": {
"type": "string",
"description": "_Forward geocoding_: The location bias in the format 'latitude,longitude' e.g. point=45.93272,11.58803. _Reverse geocoding_: The location to find amenities, cities."
},
"provider": {
"type": "string",
"description": "The provider parameter is currently under development and can fall back to `default` at any time. The intend is to provide alternatives to our default geocoder. Each provider has its own strenghts and might fit better for certain scenarios, so it's worth to compare the different providers. To try it append the `provider`parameter to the URL like `&provider=nominatim`, the result structure should be identical in all cases - if not, please report this back to us. Keep in mind that some providers do not support certain parameters or don't return some fields, for example `osm_id` and `osm_type` are not supported by every geocoding provider. If you would like to use additional parameters of one of the providers, but it's not available for the GraphHopper Geocoding API, yet? Please contact us. The credit costs can be different for all providers - see [here](https://support.graphhopper.com/support/solutions/articles/44000718211-what-is-one-credit-) for more information about it. Currently, only the default provider and gisgraphy support autocompletion of partial search strings. All providers support normal \"forward\" geocoding and reverse geocoding via `reverse=true`. #### Default (`provider=default`) This provider returns results of our internal geocoding engine. It is best suited for use cases with user interaction as it does prefix searches required for an \"autocomplete\" use case (a user types an address into a search field). In addition to the above documented parameters the following parameters are possible: * `osm_tag` - you can filter `key:value` or exclude places with certain OpenStreetMap tags `!key:value`. E.g. `osm_tag=tourism:museum` or just the key `osm_tag=tourism`. To exclude multiple tags you add multiple `osm_tag` parameters. * `location_bias_scale` - describes how much the prominence of a result should still be taken into account. Sensible values go from 0.0 (ignore prominence almost completely) to 1.0 (prominence has approximately the same influence as the location). The default is 0.2. * `zoom` - describes the radius around the center to focus on. This is a number that should correspond roughly to the map zoom parameter of a corresponding map. The default is zoom=16. * `bbox` - the expected format is `minLon,minLat,maxLon,maxLat`. This requires reverse=false. * `radius` - the search radius in km for the reverse search. This requires reverse=true. #### Nominatim (`provider=nominatim`) The GraphHopper Directions API uses a commercially hosted Nominatim geocoder (hosted by [OpenCageData](https://opencagedata.com/)). It is best suited for use cases without or less user interaction like batch processing or detailed location data retrieval. It is not suited for \"autocomplete\". In addition to the above documented parameters we currently support the following parameters: * countrycode - The country code is a two letter code as defined by the ISO 3166-1 Alpha 2 standard. E.g. gb for the United Kingdom, fr for France, us for United States. * bounds - the expected format is `minLon,minLat,maxLon,maxLat` #### Gisgraphy (`provider=gisgraphy`) This provider returns results from the Gisgraphy geocoder which you can try [here](https://services.gisgraphy.com/static/leaflet/index.html). **Limitations:** The `locale` parameter is not supported. Gisgraphy does not return OSM tags or an extent. Gisgraphy has a special autocomplete API, which you can use by adding `autocomplete=true` (does not work with `reverse=true`). The autocomplete API is optimized on predicting text input, but returns less information. In addition to the above documented parameters Gisgraphy allows to use the following parameters, which can be used as documented [here](https://www.gisgraphy.com/documentation/user-guide.php#geocodingservice): * `radius` - radius in meters * `country` - restrict search for the specified country. The value must be the ISO 3166 Alpha 2 code of the country. #### OpenCage Data (`provider=opencagedata`) This provider returns results from the OpenCageData geocoder which you can try [here](https://geocoder.opencagedata.com/demo). The difference to the `nominatim` provider is that [other geocoders](https://opencagedata.com/credits) might be used under the hood. In addition to the above documented parameters OpenCage Data allows to use the following parameters, which can be used as documented [here](https://geocoder.opencagedata.com/api#forward-opt): * countrycode - The country code is a two letter code as defined by the ISO 3166-1 Alpha 2 standard. E.g. gb for the United Kingdom, fr for France, us for United States. * bounds - the expected format is `minLon,minLat,maxLon,maxLat`"
}
},
"required": [
"PCID"
]
}
graphhopper_get_isochrone
Compute an isochrone Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
point | string | Yes | — | Specify the start coordinate |
time_limit | integer | No | — | Specify which time the vehicle should travel. In seconds. |
distance_limit | integer | No | — | Specify which distance the vehicle should travel. In meters. |
profile | string | No | — | The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about routing profiles for more details and valid profile values. |
buckets | integer | No | — | Number by which to divide the given time_limit to create buckets nested isochrones of time intervals time_limit-n*time_limit/buckets. Applies analogously to distance_limit. |
reverse_flow | boolean | No | — | If false the flow goes from point to the polygon, if true the flow goes from the polygon “inside” to the point. Example use case for false: How many potential customer can be reached within 30min travel time from your store vs. true: How many customers can reach your store within 30min travel time. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"point": {
"type": "string",
"description": "Specify the start coordinate"
},
"time_limit": {
"type": "integer",
"description": "Specify which time the vehicle should travel. In seconds."
},
"distance_limit": {
"type": "integer",
"description": "Specify which distance the vehicle should travel. In meters."
},
"profile": {
"type": "string",
"description": "The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about [routing profiles](#tag/Map-Data-and-Routing-Profiles) for more details and valid profile values."
},
"buckets": {
"type": "integer",
"description": "Number by which to divide the given `time_limit` to create `buckets` nested isochrones of time intervals `time_limit-n*time_limit/buckets`. Applies analogously to `distance_limit`."
},
"reverse_flow": {
"type": "boolean",
"description": "If `false` the flow goes from point to the polygon, if `true` the flow goes from the polygon \"inside\" to the point. Example use case for `false`: *How many potential customer can be reached within 30min travel time from your store* vs. `true`: *How many customers can reach your store within 30min travel time.*"
}
},
"required": [
"PCID",
"point"
]
}
graphhopper_get_matrix
Compute a matrix Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
profile | string | No | — | The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about routing profiles for more details and valid profile values. |
point | string[] | No | — | Specify multiple points in latitude,longitude for which the weight-, route-, time- or distance-matrix should be calculated. In this case the starts are identical to the destinations. If there are N points, then NxN entries will be calculated. The order of the point parameter is important. Specify at least three points. Cannot be used together with from_point or to_point. |
from_point | string[] | No | — | The origin points for the routes in latitude,longitude. E.g. if you want to calculate the three routes A->1, A->2, A->3 then you have one from_point parameter and three to_point parameters. |
to_point | string[] | No | — | The destination points for the routes in latitude,longitude. |
point_hint | string[] | No | — | Optional parameter. Specifies a hint for each point parameter to prefer a certain street for the closest location lookup. E.g. if there is an address or house with two or more neighboring streets you can control for which street the closest location is looked up. |
from_point_hint | string[] | No | — | For the from_point parameter. See point_hint |
to_point_hint | string[] | No | — | For the to_point parameter. See point_hint |
snap_prevention | string[] | No | — | Optional parameter. ‘Snapping’ is the process of finding the closest road location for GPS coordinates provided in the point parameter. The snap_prevention parameter allows you to prevent snapping to specific types of roads. For example, if snap_prevention is set to bridge, the routing engine will avoid snapping to a bridge, even if it is the closest road for the given point. Current supported values: motorway, trunk, ferry, tunnel, bridge and ford. Multiple values are specified like snap_prevention=ferry&snap_prevention=motorway. Note that once snapped the routing algorithm can still route over bridges (or the other values). To avoid this you need to use the custom_model. |
curbside | string[] | No | — | Optional parameter. It specifies on which side a point should be relative to the driver when she leaves/arrives at a start/target/via point. You need to specify this parameter for either none or all points. Only supported for motor vehicles and OpenStreetMap. |
from_curbside | string[] | No | — | Curbside setting for the from_point parameter. See curbside. |
to_curbside | string[] | No | — | Curbside setting for the to_point parameter. See curbside. |
out_array | string[] | No | — | Specifies which arrays should be included in the response. Specify one or more of the following options ‘weights’, ‘times’, ‘distances’. To specify more than one array use e.g. out_array=times&out_array=distances. The units of the entries of distances are meters, of times are seconds and of weights is arbitrary and it can differ for different vehicles or versions of this API. |
fail_fast | boolean | No | — | Specifies whether or not the matrix calculation should return with an error as soon as possible in case some points cannot be found or some points are not connected. If set to false the time/weight/distance matrix will be calculated for all valid points and contain the null value for all entries that could not be calculated. The hint field of the response will also contain additional information about what went wrong (see its documentation). |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"profile": {
"type": "string",
"description": "The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about [routing profiles](#tag/Map-Data-and-Routing-Profiles) for more details and valid profile values."
},
"point": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specify multiple points in `latitude,longitude` for which the weight-, route-, time- or distance-matrix should be calculated. In this case the starts are identical to the destinations. If there are N points, then NxN entries will be calculated. The order of the point parameter is important. Specify at least three points. Cannot be used together with from_point or to_point."
},
"from_point": {
"type": "array",
"items": {
"type": "string"
},
"description": "The origin points for the routes in `latitude,longitude`. E.g. if you want to calculate the three routes A->1, A->2, A->3 then you have one from_point parameter and three to_point parameters."
},
"to_point": {
"type": "array",
"items": {
"type": "string"
},
"description": "The destination points for the routes in `latitude,longitude`."
},
"point_hint": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional parameter. Specifies a hint for each `point` parameter to prefer a certain street for the closest location lookup. E.g. if there is an address or house with two or more neighboring streets you can control for which street the closest location is looked up."
},
"from_point_hint": {
"type": "array",
"items": {
"type": "string"
},
"description": "For the from_point parameter. See point_hint"
},
"to_point_hint": {
"type": "array",
"items": {
"type": "string"
},
"description": "For the to_point parameter. See point_hint"
},
"snap_prevention": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional parameter. 'Snapping' is the process of finding the closest road location for GPS coordinates provided in the `point` parameter. The `snap_prevention` parameter allows you to prevent snapping to specific types of roads. For example, if `snap_prevention` is set to bridge, the routing engine will avoid snapping to a bridge, even if it is the closest road for the given `point`. Current supported values: `motorway`, `trunk`, `ferry`, `tunnel`, `bridge` and `ford`. Multiple values are specified like `snap_prevention=ferry&snap_prevention=motorway`. Note that once snapped the routing algorithm can still route over bridges (or the other values). To avoid this you need to use the `custom_model`."
},
"curbside": {
"type": "array",
"items": {
"type": "string",
"enum": [
"any",
"right",
"left"
]
},
"description": "Optional parameter. It specifies on which side a point should be relative to the driver when she leaves/arrives at a start/target/via point. You need to specify this parameter for either none or all points. Only supported for motor vehicles and OpenStreetMap."
},
"from_curbside": {
"type": "array",
"items": {
"type": "string",
"enum": [
"any",
"right",
"left"
]
},
"description": "Curbside setting for the from_point parameter. See curbside."
},
"to_curbside": {
"type": "array",
"items": {
"type": "string",
"enum": [
"any",
"right",
"left"
]
},
"description": "Curbside setting for the to_point parameter. See curbside."
},
"out_array": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies which arrays should be included in the response. Specify one or more of the following options 'weights', 'times', 'distances'. To specify more than one array use e.g. out_array=times&out_array=distances. The units of the entries of distances are meters, of times are seconds and of weights is arbitrary and it can differ for different vehicles or versions of this API."
},
"fail_fast": {
"type": "boolean",
"description": "Specifies whether or not the matrix calculation should return with an error as soon as possible in case some points cannot be found or some points are not connected. If set to `false` the time/weight/distance matrix will be calculated for all valid points and contain the `null` value for all entries that could not be calculated. The `hint` field of the response will also contain additional information about what went wrong (see its documentation)."
}
},
"required": [
"PCID"
]
}
graphhopper_get_matrix_solution
Retrieve result of a matrix computation job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
jobId | string | Yes | — | The jobId you received when you submitted the job. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"jobId": {
"type": "string",
"description": "The jobId you received when you submitted the job."
}
},
"required": [
"PCID",
"jobId"
]
}
graphhopper_get_profile
List your custom routing profilesShow inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
}
},
"required": [
"PCID"
]
}
graphhopper_get_profile_solution
Retrieve result of a profile creation job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
jobId | string | Yes | — | The jobId you received when you submitted the job. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"jobId": {
"type": "string",
"description": "The jobId you received when you submitted the job."
}
},
"required": [
"PCID",
"jobId"
]
}
graphhopper_get_route
Calculate a route Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
profile | string | No | — | The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about routing profiles for more details and valid profile values. |
point | string[] | Yes | — | The points for which the route should be calculated. Format: latitude,longitude. Specify at least an origin and a destination. Via points are possible. The maximum number depends on your plan. |
point_hint | string[] | No | — | The point_hint is typically a road name to which the associated point parameter should be snapped to. Specify no point_hint parameter or the same number as you have point parameters. |
snap_prevention | string[] | No | — | Optional parameter. ‘Snapping’ is the process of finding the closest road location for GPS coordinates provided in the point parameter. The snap_prevention parameter allows you to prevent snapping to specific types of roads. For example, if snap_prevention is set to bridge, the routing engine will avoid snapping to a bridge, even if it is the closest road for the given point. Current supported values: motorway, trunk, ferry, tunnel, bridge and ford. Multiple values are specified like snap_prevention=ferry&snap_prevention=motorway. Note that once snapped the routing algorithm can still route over bridges (or the other values). To avoid this you need to use the custom_model. |
curbside | string[] | No | — | Optional parameter. It specifies on which side a point should be relative to the driver when she leaves/arrives at a start/target/via point. You need to specify this parameter for either none or all points. Only supported for motor vehicles and OpenStreetMap. |
locale | string | No | — | The locale of the resulting turn instructions. E.g. pt_PT for Portuguese or de for German. |
elevation | boolean | No | — | If true, a third coordinate, the altitude, is included with all positions in the response. This changes the format of the points and snapped_waypoints fields of the response, in both their encodings. Unless you switch off the points_encoded parameter, you need special code on the client side that can handle three-dimensional coordinates. |
details | string[] | No | — | Optional parameter. The following path details are available: street_name, street_ref, street_destination, leg_time, leg_distance, roundabout, country, time, distance, max_speed, max_weight, max_width, toll, road_class, road_class_link, road_access, road_environment, hazmat, hazmat_tunnel, hazmat_water, lanes, surface, smoothness, hike_rating, mtb_rating, foot_network, bike_network. Read more about the usage of path details here. |
optimize | string | No | — | Normally, the calculated route will visit the points in the order you specified them. If you have more than two points, you can set this parameter to "true" and the points may be re-ordered to minimize the total travel time. Keep in mind that the limits on the number of locations of the Route Optimization API applies, and the request costs more credits. |
instructions | boolean | No | — | If instructions should be calculated and returned |
calc_points | boolean | No | — | If the points for the route should be calculated at all. |
debug | boolean | No | — | If true, the output will be formatted. |
points_encoded | boolean | No | — | Allows changing the encoding of location data in the response. The default is polyline encoding, which is compact but requires special client code to unpack. (We provide it in our JavaScript client library!) Set this parameter to false to switch the encoding to simple coordinate pairs like [lon,lat], or [lon,lat,elevation]. See the description of the response format for more information. |
ch.disable | boolean | No | — | Use true to enable the flexible mode to use the custom_model or any of the following options below. |
heading | integer[] | No | — | Favour a heading direction for a certain point. Specify either one heading for the start point or as many as there are points. In this case headings are associated by their order to the specific points. Headings are given as north based clockwise angle between 0 and 360 degree. This parameter also influences the tour generated with algorithm=round_trip and forces the initial direction. Requires ch.disable=true. |
heading_penalty | integer | No | — | Time penalty in seconds for not obeying a specified heading. Requires ch.disable=true. |
pass_through | boolean | No | — | If true, u-turns are avoided at via-points with regard to the heading_penalty. Requires ch.disable=true. |
algorithm | string | No | — | Rather than looking for the shortest or fastest path, this parameter lets you solve two different problems related to routing: With alternative_route, we give you not one but several routes that are close to optimal, but not too similar to each other. With round_trip, the route will get you back to where you started. This is meant for fun (think of a bike trip), so we will add some randomness. You can control both of these features with additional parameters, see below. |
round_trip.distance | integer | No | — | If algorithm=round_trip, this parameter configures approximative length of the resulting round trip. |
round_trip.seed | integer | No | — | If algorithm=round_trip, this sets the random seed. Change this to get a different tour for each value. |
alternative_route.max_paths | integer | No | — | If algorithm=alternative_route, this parameter sets the number of maximum paths which should be calculated. Increasing can lead to worse alternatives. |
alternative_route.max_weight_factor | number | No | — | If algorithm=alternative_route, this parameter sets the factor by which the alternatives routes can be longer than the optimal route. Increasing can lead to worse alternatives. |
alternative_route.max_share_factor | number | No | — | If algorithm=alternative_route, this parameter specifies how similar an alternative route can be to the optimal route. Increasing can lead to worse alternatives. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"profile": {
"type": "string",
"description": "The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about [routing profiles](#tag/Map-Data-and-Routing-Profiles) for more details and valid profile values."
},
"point": {
"type": "array",
"items": {
"type": "string"
},
"description": "The points for which the route should be calculated. Format: `latitude,longitude`. Specify at least an origin and a destination. Via points are possible. The maximum number depends on your plan."
},
"point_hint": {
"type": "array",
"items": {
"type": "string"
},
"description": "The `point_hint` is typically a road name to which the associated `point` parameter should be snapped to. Specify no `point_hint` parameter or the same number as you have `point` parameters."
},
"snap_prevention": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional parameter. 'Snapping' is the process of finding the closest road location for GPS coordinates provided in the `point` parameter. The `snap_prevention` parameter allows you to prevent snapping to specific types of roads. For example, if `snap_prevention` is set to bridge, the routing engine will avoid snapping to a bridge, even if it is the closest road for the given `point`. Current supported values: `motorway`, `trunk`, `ferry`, `tunnel`, `bridge` and `ford`. Multiple values are specified like `snap_prevention=ferry&snap_prevention=motorway`. Note that once snapped the routing algorithm can still route over bridges (or the other values). To avoid this you need to use the `custom_model`."
},
"curbside": {
"type": "array",
"items": {
"type": "string",
"enum": [
"any",
"right",
"left"
]
},
"description": "Optional parameter. It specifies on which side a point should be relative to the driver when she leaves/arrives at a start/target/via point. You need to specify this parameter for either none or all points. Only supported for motor vehicles and OpenStreetMap."
},
"locale": {
"type": "string",
"description": "The locale of the resulting turn instructions. E.g. `pt_PT` for Portuguese or `de` for German."
},
"elevation": {
"type": "boolean",
"description": "If `true`, a third coordinate, the altitude, is included with all positions in the response. This changes the format of the `points` and `snapped_waypoints` fields of the response, in both their encodings. Unless you switch off the `points_encoded` parameter, you need special code on the client side that can handle three-dimensional coordinates."
},
"details": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional parameter. The following path details are available: `street_name`, `street_ref`, `street_destination`, `leg_time`, `leg_distance`, `roundabout`, `country`, `time`, `distance`, `max_speed`, `max_weight`, `max_width`, `toll`, `road_class`, `road_class_link`, `road_access`, `road_environment`, `hazmat`, `hazmat_tunnel`, `hazmat_water`, `lanes`, `surface`, `smoothness`, `hike_rating`, `mtb_rating`, `foot_network`, `bike_network`. Read more about the usage of path details [here](https://discuss.graphhopper.com/t/2539)."
},
"optimize": {
"type": "string",
"description": "Normally, the calculated route will visit the points in the order you specified them. If you have more than two points, you can set this parameter to `\"true\"` and the points may be re-ordered to minimize the total travel time. Keep in mind that the limits on the number of locations of the Route Optimization API applies, and the request costs more credits."
},
"instructions": {
"type": "boolean",
"description": "If instructions should be calculated and returned"
},
"calc_points": {
"type": "boolean",
"description": "If the points for the route should be calculated at all."
},
"debug": {
"type": "boolean",
"description": "If `true`, the output will be formatted."
},
"points_encoded": {
"type": "boolean",
"description": "Allows changing the encoding of location data in the response. The default is polyline encoding, which is compact but requires special client code to unpack. (We provide it in our JavaScript client library!) Set this parameter to `false` to switch the encoding to simple coordinate pairs like `[lon,lat]`, or `[lon,lat,elevation]`. See the description of the response format for more information."
},
"ch.disable": {
"type": "boolean",
"description": "Use `true` to enable the flexible mode to use the `custom_model` or any of the following options below."
},
"heading": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"description": "Favour a heading direction for a certain point. Specify either one heading for the start point or as many as there are points. In this case headings are associated by their order to the specific points. Headings are given as north based clockwise angle between 0 and 360 degree. This parameter also influences the tour generated with `algorithm=round_trip` and forces the initial direction. Requires `ch.disable=true`."
},
"heading_penalty": {
"type": "integer",
"description": "Time penalty in seconds for not obeying a specified heading. Requires `ch.disable=true`."
},
"pass_through": {
"type": "boolean",
"description": "If `true`, u-turns are avoided at via-points with regard to the `heading_penalty`. Requires `ch.disable=true`."
},
"algorithm": {
"type": "string",
"description": "Rather than looking for the shortest or fastest path, this parameter lets you solve two different problems related to routing: With `alternative_route`, we give you not one but several routes that are close to optimal, but not too similar to each other. With `round_trip`, the route will get you back to where you started. This is meant for fun (think of a bike trip), so we will add some randomness. You can control both of these features with additional parameters, see below.",
"enum": [
"round_trip",
"alternative_route"
]
},
"round_trip.distance": {
"type": "integer",
"description": "If `algorithm=round_trip`, this parameter configures approximative length of the resulting round trip."
},
"round_trip.seed": {
"type": "integer",
"description": "If `algorithm=round_trip`, this sets the random seed. Change this to get a different tour for each value."
},
"alternative_route.max_paths": {
"type": "integer",
"description": "If `algorithm=alternative_route`, this parameter sets the number of maximum paths which should be calculated. Increasing can lead to worse alternatives."
},
"alternative_route.max_weight_factor": {
"type": "number",
"description": "If `algorithm=alternative_route`, this parameter sets the factor by which the alternatives routes can be longer than the optimal route. Increasing can lead to worse alternatives."
},
"alternative_route.max_share_factor": {
"type": "number",
"description": "If `algorithm=alternative_route`, this parameter specifies how similar an alternative route can be to the optimal route. Increasing can lead to worse alternatives."
}
},
"required": [
"PCID",
"point"
]
}
graphhopper_get_solution
Retrieve solution of a route optimization job Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
jobId | string | Yes | — | Request solution with jobId |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"jobId": {
"type": "string",
"description": "Request solution with jobId"
}
},
"required": [
"PCID",
"jobId"
]
}
graphhopper_post_gpx
Map-match a GPX file Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
gps_accuracy | integer | No | — | Specify the precision of a point, in meter |
profile | string | No | — | The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about routing profiles for more details and valid profile values. |
locale | string | No | — | The locale of the resulting turn instructions. E.g. pt_PT for Portuguese or de for German. |
elevation | boolean | No | — | If true, a third coordinate, the altitude, is included with all positions in the response. This changes the format of the points and snapped_waypoints fields of the response, in both their encodings. Unless you switch off the points_encoded parameter, you need special code on the client side that can handle three-dimensional coordinates. |
details | string[] | No | — | Optional parameter. The following path details are available: street_name, street_ref, street_destination, leg_time, leg_distance, roundabout, country, time, distance, max_speed, max_weight, max_width, toll, road_class, road_class_link, road_access, road_environment, hazmat, hazmat_tunnel, hazmat_water, lanes, surface, smoothness, hike_rating, mtb_rating, foot_network, bike_network. Read more about the usage of path details here. |
instructions | boolean | No | — | If instructions should be calculated and returned |
calc_points | boolean | No | — | If the points for the route should be calculated at all. |
points_encoded | boolean | No | — | Allows changing the encoding of location data in the response. The default is polyline encoding, which is compact but requires special client code to unpack. (We provide it in our JavaScript client library!) Set this parameter to false to switch the encoding to simple coordinate pairs like [lon,lat], or [lon,lat,elevation]. See the description of the response format for more information. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"gps_accuracy": {
"type": "integer",
"description": "Specify the precision of a point, in meter"
},
"profile": {
"type": "string",
"description": "The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about [routing profiles](#tag/Map-Data-and-Routing-Profiles) for more details and valid profile values."
},
"locale": {
"type": "string",
"description": "The locale of the resulting turn instructions. E.g. `pt_PT` for Portuguese or `de` for German."
},
"elevation": {
"type": "boolean",
"description": "If `true`, a third coordinate, the altitude, is included with all positions in the response. This changes the format of the `points` and `snapped_waypoints` fields of the response, in both their encodings. Unless you switch off the `points_encoded` parameter, you need special code on the client side that can handle three-dimensional coordinates."
},
"details": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional parameter. The following path details are available: `street_name`, `street_ref`, `street_destination`, `leg_time`, `leg_distance`, `roundabout`, `country`, `time`, `distance`, `max_speed`, `max_weight`, `max_width`, `toll`, `road_class`, `road_class_link`, `road_access`, `road_environment`, `hazmat`, `hazmat_tunnel`, `hazmat_water`, `lanes`, `surface`, `smoothness`, `hike_rating`, `mtb_rating`, `foot_network`, `bike_network`. Read more about the usage of path details [here](https://discuss.graphhopper.com/t/2539)."
},
"instructions": {
"type": "boolean",
"description": "If instructions should be calculated and returned"
},
"calc_points": {
"type": "boolean",
"description": "If the points for the route should be calculated at all."
},
"points_encoded": {
"type": "boolean",
"description": "Allows changing the encoding of location data in the response. The default is polyline encoding, which is compact but requires special client code to unpack. (We provide it in our JavaScript client library!) Set this parameter to `false` to switch the encoding to simple coordinate pairs like `[lon,lat]`, or `[lon,lat,elevation]`. See the description of the response format for more information."
}
},
"required": [
"PCID"
]
}
graphhopper_post_matrix
Compute a matrix Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
body | object | No | — | Request body |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"body": {
"description": "Request body"
}
},
"required": [
"PCID"
]
}
graphhopper_post_profile
Create a custom routing profile Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
bounds | object | No | — | The bounds value |
custom_model | object | No | — | The custom_model modifies the routing behaviour of the given profile. See the detailed documentation. Here is a complete example that limits all speeds to 100km/h, avoids motorways and makes shorter routes a bit more likely than the default due to a higher distance_influence. json { "speed": [ { "if": "true", "limit_to": 100 } ], "priority": [ { "if": "road_class == MOTORWAY", "multiply_by": 0.1 } ], "distance_influence": 100 } |
profile | string | No | — | The built-in profile your new custom profile shall be based on. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"bounds": {
"type": "object",
"description": "The bounds value"
},
"custom_model": {
"type": "object",
"description": "The custom_model modifies the routing behaviour of the given `profile`. See the [detailed documentation](#tag/Custom-Model). Here is a complete example that limits all speeds to 100km/h, avoids motorways and makes shorter routes a bit more likely than the default due to a higher distance_influence. ```json { \"speed\": [ { \"if\": \"true\", \"limit_to\": 100 } ], \"priority\": [ { \"if\": \"road_class == MOTORWAY\", \"multiply_by\": 0.1 } ], \"distance_influence\": 100 } ```",
"properties": {
"speed": {
"type": "array",
"items": {
"type": "object"
},
"description": "See [speed customization](#tag/Custom-Model/Customizing-speed)"
},
"priority": {
"type": "array",
"items": {
"type": "object"
},
"description": "See [priority customization](#tag/Custom-Model/Customizing-priority)"
},
"distance_influence": {
"type": "number",
"description": "Use higher values to prefer shorter routes. See [here](#tag/Custom-Model/Customizing-distance_influence) for more details."
},
"areas": {
"type": "object",
"description": "Areas are given in a GeoJson format. Currently only one format is supported: one object with type Feature, a geometry with type Polygon and optional (but ignored) id and properties fields. See more details and an example [here](#tag/Custom-Model/Define-areas)."
}
}
},
"profile": {
"type": "string",
"description": "The built-in profile your new custom profile shall be based on.",
"enum": [
"foot",
"bike",
"ecargobike",
"car",
"small_truck",
"truck",
"scooter"
]
}
},
"required": [
"PCID"
]
}
graphhopper_post_route
Calculate a route Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
algorithm | string | No | — | Rather than looking for the shortest or fastest path, this parameter lets you solve two different problems related to routing: With alternative_route, we give you not one but several routes that are close to optimal, but not too similar to each other. With round_trip, the route will get you back to where you started. This is meant for fun (think of a bike trip), so we will add some randomness. You can control both of these features with additional parameters, see below. |
alternative_route.max_paths | integer | No | — | If algorithm=alternative_route, this parameter sets the number of maximum paths which should be calculated. Increasing can lead to worse alternatives. |
alternative_route.max_share_factor | number | No | — | If algorithm=alternative_route, this parameter specifies how similar an alternative route can be to the optimal route. Increasing can lead to worse alternatives. |
alternative_route.max_weight_factor | number | No | — | If algorithm=alternative_route, this parameter sets the factor by which the alternatives routes can be longer than the optimal route. Increasing can lead to worse alternatives. |
calc_points | boolean | No | — | If the points for the route should be calculated at all. |
ch.disable | boolean | No | — | Use true to enable the flexible mode to use the custom_model or any of the following options below. |
curbsides | string[] | No | — | Optional parameter. It specifies on which side a point should be relative to the driver when she leaves/arrives at a start/target/via point. You need to specify this parameter for either none or all points. Only supported for motor vehicle profiles and OpenStreetMap. |
custom_model | object | No | — | The custom_model modifies the routing behaviour of the specified profile. See the detailed documentation. Below is a complete request example in Berlin that limits all speeds to 100km/h, excludes motorways and makes shorter routes a bit more likely than the default due to a higher distance_influence. Note that it also includes the "ch.disable": true parameter which is required to make use of custom_model. json { "points": [ [ 13.31543, 52.509535 ], [ 13.29779, 52.512434 ] ], "profile": "car", "ch.disable": true, "custom_model": { "speed": [ { "if": "true", "limit_to": "100" } ], "priority": [ { "if": "road_class == MOTORWAY", "multiply_by": "0" } ], "distance_influence": 100 } } |
debug | boolean | No | — | If true, the output will be formatted. |
details | string[] | No | — | Optional parameter. The following path details are available: street_name, street_ref, street_destination, leg_time, leg_distance, roundabout, country, time, distance, max_speed, max_weight, max_width, toll, road_class, road_class_link, road_access, road_environment, hazmat, hazmat_tunnel, hazmat_water, lanes, surface, smoothness, hike_rating, mtb_rating, foot_network, bike_network. Read more about the usage of path details here. |
elevation | boolean | No | — | If true, a third coordinate, the altitude, is included with all positions in the response. This changes the format of the points and snapped_waypoints fields of the response, in both their encodings. Unless you switch off the points_encoded parameter, you need special code on the client side that can handle three-dimensional coordinates. |
heading_penalty | integer | No | — | Time penalty in seconds for not obeying a specified heading. Requires ch.disable=true. |
headings | integer[] | No | — | Favour a heading direction for a certain point. Specify either one heading for the start point or as many as there are points. In this case headings are associated by their order to the specific points. Headings are given as north based clockwise angle between 0 and 360 degree. This headings parameter also influences the tour generated with algorithm=round_trip and forces the initial direction. Requires ch.disable=true. |
instructions | boolean | No | — | If instructions should be calculated and returned |
locale | string | No | — | The locale of the resulting turn instructions. E.g. pt_PT for Portuguese or de for German. |
optimize | string | No | — | Normally, the calculated route will visit the points in the order you specified them. If you have more than two points, you can set this parameter to "true" and the points may be re-ordered to minimize the total travel time. Keep in mind that the limits on the number of locations of the Route Optimization API applies, and the request costs more credits. |
pass_through | boolean | No | — | If true, u-turns are avoided at via-points with regard to the heading_penalty. Requires ch.disable=true. |
point_hints | string[] | No | — | Optional parameter. Specifies a hint for each point in the points array to prefer a certain street for the closest location lookup. E.g. if there is an address or house with two or more neighboring streets you can control for which street the closest location is looked up. Make sure you do not include the house number of city name and only the street name to improve the quality of the matching. |
points | any[][] | No | — | The query points used to calculate the route, requiring at least a start and a destination point, with optional via-points in between. |
points_encoded | boolean | No | — | Allows changing the encoding of location data in the response. The default is polyline encoding, which is compact but requires special client code to unpack. (We provide it in our JavaScript client library!) Set this parameter to false to switch the encoding to simple coordinate pairs like [lon,lat], or [lon,lat,elevation]. See the description of the response format for more information. |
profile | string | No | — | The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about routing profiles for more details and valid profile values. |
round_trip.distance | integer | No | — | If algorithm=round_trip, this parameter configures approximative length of the resulting round trip. |
round_trip.seed | integer | No | — | If algorithm=round_trip, this sets the random seed. Change this to get a different tour for each value. |
snap_preventions | string[] | No | — | Optional parameter. ‘Snapping’ is the process of finding the closest road location for GPS coordinates provided in the points array. The snap_preventions array allows you to prevent snapping to specific types of roads. For example, if the array includes bridge, then the routing engine will avoid snapping to a bridge, even if it is the closest road for the given point. Note that once snapped the routing algorithm can still route over bridges (or the other values). To avoid this you need to use the custom_model. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"algorithm": {
"type": "string",
"description": "Rather than looking for the shortest or fastest path, this parameter lets you solve two different problems related to routing: With `alternative_route`, we give you not one but several routes that are close to optimal, but not too similar to each other. With `round_trip`, the route will get you back to where you started. This is meant for fun (think of a bike trip), so we will add some randomness. You can control both of these features with additional parameters, see below.",
"enum": [
"round_trip",
"alternative_route"
]
},
"alternative_route.max_paths": {
"type": "integer",
"description": "If `algorithm=alternative_route`, this parameter sets the number of maximum paths which should be calculated. Increasing can lead to worse alternatives."
},
"alternative_route.max_share_factor": {
"type": "number",
"description": "If `algorithm=alternative_route`, this parameter specifies how similar an alternative route can be to the optimal route. Increasing can lead to worse alternatives."
},
"alternative_route.max_weight_factor": {
"type": "number",
"description": "If `algorithm=alternative_route`, this parameter sets the factor by which the alternatives routes can be longer than the optimal route. Increasing can lead to worse alternatives."
},
"calc_points": {
"type": "boolean",
"description": "If the points for the route should be calculated at all."
},
"ch.disable": {
"type": "boolean",
"description": "Use `true` to enable the flexible mode to use the `custom_model` or any of the following options below."
},
"curbsides": {
"type": "array",
"items": {
"type": "string",
"enum": [
"any",
"right",
"left"
]
},
"description": "Optional parameter. It specifies on which side a point should be relative to the driver when she leaves/arrives at a start/target/via point. You need to specify this parameter for either none or all points. Only supported for motor vehicle profiles and OpenStreetMap."
},
"custom_model": {
"type": "object",
"description": "The custom_model modifies the routing behaviour of the specified profile. See the [detailed documentation](#tag/Custom-Model). Below is a complete request example in Berlin that limits all speeds to 100km/h, excludes motorways and makes shorter routes a bit more likely than the default due to a higher distance_influence. Note that it also includes the `\"ch.disable\": true` parameter which is required to make use of `custom_model`. ```json { \"points\": [ [ 13.31543, 52.509535 ], [ 13.29779, 52.512434 ] ], \"profile\": \"car\", \"ch.disable\": true, \"custom_model\": { \"speed\": [ { \"if\": \"true\", \"limit_to\": \"100\" } ], \"priority\": [ { \"if\": \"road_class == MOTORWAY\", \"multiply_by\": \"0\" } ], \"distance_influence\": 100 } } ```",
"properties": {
"speed": {
"type": "array",
"items": {
"type": "object"
},
"description": "See [speed customization](#tag/Custom-Model/Customizing-speed)"
},
"priority": {
"type": "array",
"items": {
"type": "object"
},
"description": "See [priority customization](#tag/Custom-Model/Customizing-priority)"
},
"distance_influence": {
"type": "number",
"description": "Use higher values to prefer shorter routes. See [here](#tag/Custom-Model/Customizing-distance_influence) for more details."
},
"areas": {
"type": "object",
"description": "The areas value"
}
}
},
"debug": {
"type": "boolean",
"description": "If `true`, the output will be formatted."
},
"details": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional parameter. The following path details are available: `street_name`, `street_ref`, `street_destination`, `leg_time`, `leg_distance`, `roundabout`, `country`, `time`, `distance`, `max_speed`, `max_weight`, `max_width`, `toll`, `road_class`, `road_class_link`, `road_access`, `road_environment`, `hazmat`, `hazmat_tunnel`, `hazmat_water`, `lanes`, `surface`, `smoothness`, `hike_rating`, `mtb_rating`, `foot_network`, `bike_network`. Read more about the usage of path details [here](https://discuss.graphhopper.com/t/2539)."
},
"elevation": {
"type": "boolean",
"description": "If `true`, a third coordinate, the altitude, is included with all positions in the response. This changes the format of the `points` and `snapped_waypoints` fields of the response, in both their encodings. Unless you switch off the `points_encoded` parameter, you need special code on the client side that can handle three-dimensional coordinates."
},
"heading_penalty": {
"type": "integer",
"description": "Time penalty in seconds for not obeying a specified heading. Requires `ch.disable=true`."
},
"headings": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
},
"description": "Favour a heading direction for a certain point. Specify either one heading for the start point or as many as there are points. In this case headings are associated by their order to the specific points. Headings are given as north based clockwise angle between 0 and 360 degree. This headings parameter also influences the tour generated with `algorithm=round_trip` and forces the initial direction. Requires `ch.disable=true`."
},
"instructions": {
"type": "boolean",
"description": "If instructions should be calculated and returned"
},
"locale": {
"type": "string",
"description": "The locale of the resulting turn instructions. E.g. `pt_PT` for Portuguese or `de` for German."
},
"optimize": {
"type": "string",
"description": "Normally, the calculated route will visit the points in the order you specified them. If you have more than two points, you can set this parameter to `\"true\"` and the points may be re-ordered to minimize the total travel time. Keep in mind that the limits on the number of locations of the Route Optimization API applies, and the request costs more credits."
},
"pass_through": {
"type": "boolean",
"description": "If `true`, u-turns are avoided at via-points with regard to the `heading_penalty`. Requires `ch.disable=true`."
},
"point_hints": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional parameter. Specifies a hint for each point in the `points` array to prefer a certain street for the closest location lookup. E.g. if there is an address or house with two or more neighboring streets you can control for which street the closest location is looked up. Make sure you do not include the house number of city name and only the street name to improve the quality of the matching."
},
"points": {
"type": "array",
"items": {
"type": "array"
},
"description": "The query points used to calculate the route, requiring at least a start and a destination point, with optional via-points in between."
},
"points_encoded": {
"type": "boolean",
"description": "Allows changing the encoding of location data in the response. The default is polyline encoding, which is compact but requires special client code to unpack. (We provide it in our JavaScript client library!) Set this parameter to `false` to switch the encoding to simple coordinate pairs like `[lon,lat]`, or `[lon,lat,elevation]`. See the description of the response format for more information."
},
"profile": {
"type": "string",
"description": "The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about [routing profiles](#tag/Map-Data-and-Routing-Profiles) for more details and valid profile values."
},
"round_trip.distance": {
"type": "integer",
"description": "If `algorithm=round_trip`, this parameter configures approximative length of the resulting round trip."
},
"round_trip.seed": {
"type": "integer",
"description": "If `algorithm=round_trip`, this sets the random seed. Change this to get a different tour for each value."
},
"snap_preventions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"motorway",
"trunk",
"bridge",
"ford",
"tunnel",
"ferry"
]
},
"description": "Optional parameter. 'Snapping' is the process of finding the closest road location for GPS coordinates provided in the `points` array. The `snap_preventions` array allows you to prevent snapping to specific types of roads. For example, if the array includes `bridge`, then the routing engine will avoid snapping to a bridge, even if it is the closest road for the given point. Note that once snapped the routing algorithm can still route over bridges (or the other values). To avoid this you need to use the `custom_model`."
}
},
"required": [
"PCID"
]
}
graphhopper_solve_clustering_problem
Solve a clustering problem Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
clusters | object[] | No | — | The clusters value |
configuration | object | No | — | The configuration value |
customers | object[] | No | — | The customers value |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"clusters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "id of customer"
},
"center": {
"type": "object",
"description": "The center value"
},
"min_quantity": {
"type": "number",
"format": "int32",
"description": "Specifies min. quantity of this cluster"
},
"max_quantity": {
"type": "number",
"format": "int32",
"description": "Specifies max. quantity of this cluster"
}
}
},
"description": "The clusters value"
},
"configuration": {
"type": "object",
"description": "The configuration value",
"properties": {
"response_type": {
"type": "string",
"description": "Specifies the response format. You can either choose `geojson` or `json`."
},
"routing": {
"type": "object",
"description": "The routing value"
},
"clustering": {
"type": "object",
"description": "The clustering value"
}
}
},
"customers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "id of customer"
},
"address": {
"type": "object",
"description": "The address value"
},
"quantity": {
"type": "number",
"format": "int32",
"description": "demand of customer"
}
}
},
"description": "The customers value"
}
},
"required": [
"PCID"
]
}
graphhopper_solve_vrp
Solve a route optimization problem Parameters:| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
algorithm | object | No | — | Use objectives instead. |
configuration | object | No | — | Specifies general configurations that are taken into account when solving the vehicle routing problem. |
cost_matrices | object[] | No | — | Specifies your own transport time and distance matrices. |
objectives | object[] | No | — | Specifies an objective function. The vehicle routing problem is solved in such a way that this objective function is minimized. |
relations | any[] | No | — | Defines additional relationships between orders. |
services | object[] | No | — | Specifies the orders of the type “service”. These are, for example, pickups, deliveries, or other stops to be visited by the specified vehicles. Each of these orders contains only one location. |
shipments | object[] | No | — | Specifies the available shipments. Each shipment consists of a pickup and a delivery. For a single shipment, the pickup must always occur before the delivery. However, pickups and deliveries from multiple shipments can be sequenced independently. |
vehicle_types | object[] | No | — | Specifies the available vehicle types. These types can be assigned to vehicles. |
vehicles | object[] | No | — | Specifies the available vehicles. |
Show inputSchema
Show inputSchema
{
"type": "object",
"properties": {
"PCID": {
"type": "string",
"description": "Pink Connect ID for the authenticated connection"
},
"algorithm": {
"type": "object",
"description": "Use `objectives` instead.",
"properties": {
"problem_type": {
"type": "string",
"description": "Problem Type",
"enum": [
"min",
"min-max"
]
},
"objective": {
"type": "string",
"description": "The objective value",
"enum": [
"transport_time",
"completion_time"
]
}
}
},
"configuration": {
"type": "object",
"description": "Specifies general configurations that are taken into account when solving the vehicle routing problem.",
"properties": {
"routing": {
"type": "object",
"description": "This contains all routing specific configurations."
},
"optimization": {
"type": "object",
"description": "This contains all optimization specific configurations."
}
}
},
"cost_matrices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"default",
"google"
],
"description": "Type of cost matrix. Currently \"default\" and \"google\" are supported."
},
"location_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Location Ids"
},
"data": {
"type": "object",
"description": "JSON data of matrix response"
},
"profile": {
"type": "string",
"description": "Vehicle profile, or empty for a catch-all fallback."
}
}
},
"description": "Specifies your own transport time and distance matrices."
},
"objectives": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"min",
"min-max",
"balance"
],
"description": "Type of objective function, i.e. `min`, `min-max`, or `balance`. * `min`: Minimizes the objective value. * `min-max`: Minimizes the maximum objective value. * `balance`: **(Beta)** Optimizes for balanced workloads across drivers. Use with `value: completion_time` to balance working time, or `value: activities` to balance the number of stops per driver. For instance, `min` -> `vehicles` minimizes the number of employed vehicles. `min` -> `completion_time` minimizes the sum of your vehicle routes' completion time. If you use, for example, `min-max` -> `completion_time`, it minimizes the maximum of your vehicle routes' completion time, i.e. it minimizes the overall makespan. This only makes sense if you have more than one vehicle. In case of one vehicle, switching from `min` to `min-max` should not have any impact. If you have more than one vehicle, then the algorithm tries to constantly move stops from one vehicle to another such that the completion time of longest vehicle route can be further reduced. For example, if you have one vehicle that takes 8 hours to serve all customers, adding another vehicle (and using `min-max`) might halve the time to serve all customers to 4 hours. However, this usually comes with higher transport costs. If you want to minimize `vehicles` first and, second, `completion_time`, you can also combine different objectives like this: ```json \"objectives\" : [ { \"type\": \"min\", \"value\": \"vehicles\" }, { \"type\": \"min\", \"value\": \"completion_time\" } ] ``` If you want to balance activities or the number of stops among all employed drivers, you need to specify it as follows: ```json \"objectives\" : [ { \"type\": \"min-max\", \"value\": \"completion_time\" }, { \"type\": \"min-max\", \"value\": \"activities\" } ] ``` #### Balance Objective (Beta) The `balance` objective type provides a more sophisticated approach to workload balancing compared to `min-max`. While `min-max` only minimizes the maximum route value, `balance` optimizes for equal distribution of work across all drivers by minimizing the coefficient of variation (CV) of workloads. Use `balance` with: * `value: completion_time` - Balance working time (service time + travel time + waiting time) across drivers * `value: activities` - Balance the number of stops per driver The optional `level` parameter (1-3) controls how strongly to prioritize balance: * `level: 1` - Mild balance preference, allows some variation for better travel efficiency * `level: 2` - Moderate balance (default), good trade-off between balance and efficiency * `level: 3` - Strict balance, prioritizes equal workloads even at the cost of longer travel Example: ```json \"objectives\" : [ { \"type\": \"balance\", \"value\": \"completion_time\", \"level\": 2 } ] ``` **When to use `balance` vs `min-max`:** * Use `balance` when you want all drivers to have similar workloads (fairness) * Use `min-max` when you only care about minimizing the longest route (makespan) **Note:** The `balance` objective currently only supports services. Requests that combine `balance` objectives with shipments will return a `400` error."
},
"value": {
"type": "string",
"enum": [
"completion_time",
"completion_time_last_stop",
"route_duration",
"transport_time",
"vehicles",
"activities"
],
"description": "The value of the objective function. The objective value `transport_time` solely considers the time your drivers spend on the road, i.e. transport time. In contrary to `transport_time`, `completion_time` also takes waiting times at customer sites into account. The `completion_time` of a route is defined as the time from starting to ending the route, i.e. the route's transport time, the sum of waiting times plus the sum of activity durations. The `completion_time_last_stop`, on the other hand, refers to the completion time of the very last order in a tour or, in other words, the completion time without the last section from the last stop to the end of the tour. This is typically used if the orders are to be processed as quickly as possible. If you solely want to minimize route duration, you should use simply use `route_duration`. The objective value `vehicles` can only be used along with `min` and minimizes vehicles. For `balance` objective type, only `completion_time` and `activities` are supported."
},
"level": {
"type": "integer",
"format": "int32",
"description": "**(Beta)** Level for `balance` objectives (1-3). Controls how strongly to prioritize balanced workloads. * `1` - Accept some workload variation for better travel efficiency * `2` - Moderate balance (default) * `3` - Strictly equal workloads, even at cost of longer travel Only valid when `type` is `balance`. Ignored for other objective types."
}
},
"required": [
"type",
"value"
]
},
"description": "Specifies an objective function. The vehicle routing problem is solved in such a way that this objective function is minimized."
},
"relations": {
"type": "array",
"description": "Defines additional relationships between orders."
},
"services": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specifies the id of the service. Ids need to be unique so there must not be two services/shipments with the same id."
},
"type": {
"type": "string",
"enum": [
"service",
"pickup",
"delivery"
],
"description": "Specifies type of service. This makes a difference if items are loaded or unloaded, i.e. if one of the size dimensions > 0. If it is specified as `service` or `pickup`, items are loaded and will stay in the vehicle for the rest of the route (and thus consumes capacity for the rest of the route). If it is a `delivery`, items are implicitly loaded at the beginning of the route and will stay in the route until delivery (and thus releases capacity for the rest of the route)."
},
"priority": {
"type": "integer",
"format": "int32",
"description": "Specifies the priority. Can be 1 = high priority to 10 = low priority. Priority only affects the solution when not all services can be assigned (e.g., due to insufficient vehicle capacity, conflicting time windows, or vehicle constraints). In these cases, the optimizer preferentially assigns high-priority services and leaves low-priority services unassigned. The lower the priority, the earlier these services are omitted from the solution. When all services can be served within the given constraints, priority has no effect - all services are assigned regardless of their priority values, and the optimizer focuses solely on the specified objective (e.g., minimizing distance or number of vehicles)."
},
"name": {
"type": "string",
"description": "A meaningful name for the service, e.g. `\"deliver pizza\"`."
},
"address": {
"type": "object",
"description": "The address value"
},
"duration": {
"type": "integer",
"format": "int64",
"description": "Specifies the duration of the service in seconds, i.e. how long it takes to perform the actual service. This time is charged for each activity—if multiple services occur at the same location, their durations are summed."
},
"preparation_time": {
"type": "integer",
"format": "int64",
"description": "Specifies the preparation time in seconds. This time is added after arrival and before the service can begin, modeling tasks like finding a parking spot. Preparation time is only charged once when the location differs from the previous stop—if multiple consecutive activities share the same location, it is applied only to the first."
},
"setup_time": {
"type": "integer",
"format": "int64",
"description": "Specifies the setup time in seconds. This is a fixed overhead charged when arriving at a new location (e.g., dock check-in, security clearance, equipment preparation). Unlike `duration`, setup time is only charged once per location—if multiple consecutive activities share the same location, it is applied only to the first. The activity timeline is: arrival → preparation_time → waiting (if early) → setup_time → duration."
},
"time_windows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"earliest": {
"type": "integer",
"description": "Specifies the opening time of the time window in seconds, i.e. the earliest time the service can start."
},
"latest": {
"type": "integer",
"description": "Specifies the closing time of the time window in seconds, i.e. the latest time the service can start. Omit this field to indicate no limit."
}
}
},
"description": "Specifies an array of time window objects (see TimeWindow object below). Specify the time either with the recommended Unix timestamp (the number of seconds since 1970-01-01) or you can count the seconds relative to Monday morning 00:00 and define the whole week in seconds. For example, Monday 9am is represented by 9 hours * 3600 sec/hour = 32400. Wednesday 1pm corresponds to 2 days * 24 hours/day * 3600 sec/hour + 13 hours * 3600 sec/hour = 219600. See our tutorial for more information."
},
"size": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Size can have multiple dimensions and should correspond to the capacity dimension array of the vehicle type. For example, if the item that needs to be delivered has two size dimensions, volume and weight, specify it as follows: [ 20, 5 ], assuming a volume of 20 and a weight of 5."
},
"required_skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of required skills, i.e. an array of strings (not case sensitive). For example, if this service needs to be performed by a technician with a `drilling_machine` and a `screw_driver`, specify the array as follows: `[\"drilling_machine\",\"screw_driver\"]`. This means that the service can only be done by a vehicle (technician) that has both `drilling_machine` AND `screw_driver` in its skill array. Otherwise, it remains unassigned."
},
"allowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of allowed vehicles, i.e. an array of vehicle IDs. For example, if this service can only be performed by EITHER `technician_peter` OR `technician_stefan`, specify this as follows: `[\"technician_peter\",\"technician_stefan\"]`."
},
"disallowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of disallowed vehicles, i.e. an array of vehicle IDs."
},
"preferred_vehicles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vehicle_id": {
"type": "string",
"description": "Id of the preferred vehicle."
},
"priority": {
"type": "integer",
"description": "Number between 1 and 10 which indicates the priority of the preferred vehicle. 1 indicates the highest priority, 10 the lowest."
}
}
},
"description": "Specifies an array of preferred vehicles."
},
"max_time_in_vehicle": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum time in seconds a delivery can stay in the vehicle. Currently, it only works with services of \"type\":\"delivery\". Omit this field to indicate no limit."
},
"group": {
"type": "string",
"description": "Group this service belongs to. Orders with the same group label are treated as a contiguous cluster — they stay together as a block, but the optimizer picks the internal sequence. Groups can also be referenced in group-level relations to enforce constraints like `in_sequence` across entire clusters."
}
},
"required": [
"id"
]
},
"description": "Specifies the orders of the type \"service\". These are, for example, pickups, deliveries, or other stops to be visited by the specified vehicles. Each of these orders contains only one location."
},
"shipments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Specifies the ID of the shipment. IDs must be unique, so there must not be two services/shipments with the same ID."
},
"name": {
"type": "string",
"description": "A meaningful name for the shipment, e.g. \"pick up and deliver pizza to Peter\"."
},
"priority": {
"type": "integer",
"format": "int32",
"description": "Specifies the priority. Can be 1 = high priority to 10 = low priority. Priority only affects the solution when not all shipments can be assigned (e.g., due to insufficient vehicle capacity, conflicting time windows, or vehicle constraints). In these cases, the optimizer preferentially assigns high-priority shipments and leaves low-priority shipments unassigned. The lower the priority, the earlier these shipments are omitted from the solution. When all shipments can be served within the given constraints, priority has no effect - all shipments are assigned regardless of their priority values, and the optimizer focuses solely on the specified objective (e.g., minimizing distance or number of vehicles)."
},
"pickup": {
"type": "object",
"description": "The pickup value"
},
"delivery": {
"type": "object",
"description": "The delivery value"
},
"size": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Size can have multiple dimensions and should correspond to the capacity dimension array of the vehicle type. For example, if the item that needs to be delivered has two size dimensions, volume and weight, specify it as follows: [ 20, 5 ], assuming a volume of 20 and a weight of 5."
},
"required_skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of required skills, i.e. an array of strings (not case sensitive). For example, if this shipment needs to be handled by a technician with a `drilling_machine` and a `screw_driver`, specify the array as follows: `[\"drilling_machine\",\"screw_driver\"]`. This means that the shipment can only be done by a vehicle (technician) that has both `drilling_machine` AND `screw_driver` in its skill array. Otherwise, it remains unassigned."
},
"allowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of allowed vehicles, i.e. an array of vehicle IDs. For example, if this shipment can only be handled by EITHER \"technician_peter\" OR \"technician_stefan\", specify this as follows: [\"technician_peter\",\"technician_stefan\"]."
},
"disallowed_vehicles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Specifies an array of disallowed vehicles, i.e. an array of vehicle IDs."
},
"preferred_vehicles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vehicle_id": {
"type": "string",
"description": "Id of the preferred vehicle."
},
"priority": {
"type": "integer",
"description": "Number between 1 and 10 which indicates the priority of the preferred vehicle. 1 indicates the highest priority, 10 the lowest."
}
}
},
"description": "Specifies an array of preferred vehicles."
},
"max_time_in_vehicle": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum time in seconds a shipment can stay in the vehicle. Omit this field to indicate no limit."
}
},
"required": [
"id",
"pickup",
"delivery"
]
},
"description": "Specifies the available shipments. Each shipment consists of a pickup and a delivery. For a single shipment, the pickup must always occur before the delivery. However, pickups and deliveries from multiple shipments can be sequenced independently."
},
"vehicle_types": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type_id": {
"type": "string",
"description": "Specifies the id of the vehicle type. If a vehicle needs to be of this type, it should refer to this with its type_id attribute."
},
"profile": {
"type": "string",
"description": "The routing profile. It determines the network, speed and other physical attributes used when computing the route. See the section about [routing profiles](#tag/Map-Data-and-Routing-Profiles) for more details and valid profile values."
},
"capacity": {
"type": "array",
"items": {
"type": "integer"
},
"description": "Specifies an array of capacity dimension values which need to be int values. For example, if there are two dimensions such as volume and weight then it needs to be defined as [ 1000, 300 ] assuming a maximum volume of 1000 and a maximum weight of 300."
},
"speed_factor": {
"type": "number",
"format": "double",
"description": "Specifies a speed factor for this vehicle type. For example, if a vehicle using this type should travel at half the speed calculated by our routing engine, set the speed factor to 0.5."
},
"service_time_factor": {
"type": "number",
"format": "double",
"description": "Specifies a service time factor for this vehicle type. For example, if a vehicle/driver using this type can complete services twice as fast as specified in the service or shipment, set this to 0.5."
},
"cost_per_meter": {
"type": "number",
"format": "double",
"description": "**_BETA feature_**! Cost parameter per distance unit, here meter is used"
},
"cost_per_second": {
"type": "number",
"format": "double",
"description": "**_BETA feature_**! Cost parameter per time unit, here second is used"
},
"cost_per_activation": {
"type": "number",
"format": "double",
"description": "**_BETA feature_**! Cost parameter vehicle activation, i.e. fixed costs per vehicle"
},
"consider_traffic": {
"type": "boolean",
"description": "Specifies whether traffic should be considered. If \"tomtom\" is used and this is false, free-flow travel times from TomTom are calculated. If this is true, historical traffic information is used. Traffic data is not yet available for \"openstreetmap\", so setting this to true has no effect when using OpenStreetMap."
},
"network_data_provider": {
"type": "string",
"enum": [
"openstreetmap",
"tomtom"
],
"description": "Specifies the network data provider. Either use [`openstreetmap`](#tag/Map-Data-and-Routing-Profiles/OpenStreetMap) (default) or [`tomtom`](#tag/Map-Data-and-Routing-Profiles/TomTom) (add-on required)."
}
},
"required": [
"type_id"
]
},
"description": "Specifies the available vehicle types. These types can be assigned to vehicles."
},
"vehicles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vehicle_id": {
"type": "string",
"description": "Specifies the ID of the vehicle. Ids must be unique, i.e. if there are two vehicles with the same ID, an error is returned."
},
"type_id": {
"type": "string",
"description": "The type ID assigns a vehicle type to this vehicle. You can specify types in the array of vehicle types. If you omit the type ID, the default type is used. The default type is a `car` with a capacity of 0."
},
"shifts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shift_id": {
"type": "string",
"description": "A unique identifier for this vehicle's shift."
},
"start_address": {
"type": "object"
},
"end_address": {
"type": "object"
},
"earliest_start": {
"type": "integer",
"description": "Earliest start of vehicle in seconds. It is recommended to use the unix timestamp."
},
"latest_end": {
"type": "integer",
"description": "Latest end of vehicle in seconds, i.e. the time the vehicle needs to be at its end location at latest. Omit this field to indicate no limit."
},
"latest_start": {
"type": "integer",
"description": "Latest start of vehicle in seconds. If specified and greater than earliest_start, the optimizer determines the best departure time within the [earliest_start, latest_start] window to minimize waiting time. (beta)"
},
"departure_preference": {
"type": "string",
"description": "Controls departure preference when latest_start is set. \"late\" (default) departs as late as possible while meeting all time windows. \"early\" departs as early as possible, eliminating waiting time along the route. Ignored without latest_start. (beta)"
},
"return_to_depot": {
"type": "boolean",
"description": "If true, vehicle returns to its start location (or specified end location). If false, vehicle can end at any customer location that optimizes the objective function."
},
"break": {}
}
},
"description": "An array of shift configurations for this vehicle."
},
"start_address": {
"type": "object",
"description": "Start Address"
},
"end_address": {
"type": "object",
"description": "End Address"
},
"break": {
"description": "The break value"
},
"return_to_depot": {
"type": "boolean",
"description": "If it is false, the algorithm decides where to end the vehicle route. It ends in one of your customers' locations. The end is chosen such that it contributes to the overall objective function, e.g. min transport_time. If it is true, you can either specify a specific end location (which is then regarded as end depot) or you can leave it and the driver returns to its start location."
},
"earliest_start": {
"type": "integer",
"format": "int64",
"description": "Earliest start of vehicle in seconds. It is recommended to use the unix timestamp."
},
"latest_end": {
"type": "integer",
"format": "int64",
"description": "Latest end of vehicle in seconds, i.e. the time the vehicle needs to be at its end location at latest. Omit this field to indicate no limit."
},
"latest_start": {
"type": "integer",
"format": "int64",
"description": "Latest start of vehicle in seconds. If specified and greater than earliest_start, the optimizer determines the best departure time within the [earliest_start, latest_start] window to minimize waiting time. (beta)"
},
"departure_preference": {
"type": "string",
"enum": [
"early",
"late"
],
"description": "Controls departure preference when latest_start is set. \"late\" (default) departs as late as possible while meeting all time windows. \"early\" departs as early as possible, eliminating waiting time along the route. Ignored without latest_start. (beta)"
},
"skills": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of skills, i.e. an array of strings (not case sensitive)."
},
"max_distance": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum distance (in meters) a vehicle can go."
},
"max_driving_time": {
"type": "integer",
"format": "int64",
"description": "Specifies the maximum driving time (in seconds) a vehicle/driver is allowed, i.e. the maximum time spent on the road (service and waiting times are not included)."
},
"max_jobs": {
"type": "integer",
"format": "int32",
"description": "Specifies the maximum number of jobs a vehicle can load."
},
"min_jobs": {
"type": "integer",
"format": "int32",
"description": "Specifies the minimum number of jobs a vehicle should load. This is a soft constraint, i.e. if it is not possible to fulfill “min_jobs”, we will still try to get as close as possible to this constraint."
},
"max_activities": {
"type": "integer",
"format": "int32",
"description": "Specifies the maximum number of activities a vehicle can conduct."
},
"move_to_end_address": {
"type": "boolean",
"description": "Indicates whether a vehicle should be moved even though it has not been assigned any jobs."
}
},
"required": [
"vehicle_id"
]
},
"description": "Specifies the available vehicles."
}
},
"required": [
"PCID"
]
}

