{"openapi":"3.0.2","info":{"title":"Tour Planning API v3","description":"The HERE Tour Planning API enables you to dynamically optimize routes for multiple vehicles visiting a set of locations, considering real-life constraints such as limited vehicle capacity and delivery time windows. \nThis provides the following benefits: \n  * Improving fleet utilization by finding an economical stop sequence to service your locations. \n  * Solving complex vehicle routing problems between multiple locations for an entire fleet of vehicles. \n  * Considering multiple constraints that can be defined when specifying the problem.\n\nThe HERE Touring Planning API returns a cost-effective sequence to visit all stops in your daily plan, providing a practical solution for optimized route planning.\n","version":"3.51.2","termsOfService":"https://developer.here.com/terms-and-conditions","license":{"name":"HERE Documentation License","url":"https://legal.here.com/en-gb/terms/documentation-license"}},"externalDocs":{"description":"The Developer guide and Release notes are available here.","url":"https://www.here.com/docs/category/tour-planning-api"},"security":[{"Bearer":[]},{"ApiKey":[]}],"tags":[{"name":"System","description":"Endpoints to retrieve service information, including service version and health status."},{"name":"CORS","description":"Endpoints for Cross-Origin Resource Sharing (CORS)."},{"name":"Synchronous","description":"Endpoints that support synchronous request flows, allowing for \nimmediate processing and responses to API requests.\n"},{"name":"Asynchronous","description":"Endpoints that support asynchronous request flows, allowing for \ndelayed processing and responses to API requests.\n"}],"paths":{"/problems":{"options":{"summary":"CORS support","description":"Enable Cross-Origin Resource Sharing (CORS) by returning the appropriate headers.\n","tags":["CORS"],"responses":{"200":{"description":"Default response for CORS method","headers":{"Access-Control-Allow-Headers":{"schema":{"type":"string"}},"Access-Control-Allow-Methods":{"schema":{"type":"string"}},"Access-Control-Allow-Origin":{"schema":{"type":"string"}}}}}},"post":{"summary":"Submit a Vehicle Routing Problem to solve it synchronously","description":"Solve a [vehicle routing problem](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/problem.html) synchronously by optimizing vehicle routes and schedules for \njobs (deliveries or pickups) from a depot, including constraints like vehicle capacity, job demand, time windows, and required skills.\n","tags":["Synchronous"],"security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"name":"X-Request-Id","in":"header","description":"User-provided token that can be used to trace a request or a group of requests sent to the service.","required":false,"style":"simple","explode":false,"schema":{"type":"string"},"example":"8230d7ad-3f1c-4191-a8dd-f3c42026da89"}],"responses":{"200":{"description":"The solution to the vehicle routing problem (VRP) has been successfully calculated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Solution"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"400":{"description":"The input parameters or configuration settings for the vehicle routing problem are invalid or incomplete.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"401":{"$ref":"#/components/responses/UnauthenticatedErrorResponse"},"403":{"$ref":"#/components/responses/ForbiddenErrorResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/ServerErrorResponse"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"[Detailed information](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/problem.html) necessary to compute optimized routes, encompassing fleet configuration, including \nvehicle types, profiles, costs, shifts, and capacity, as well as a plan detailing the jobs to be completed.\n","required":true}}},"/problems/async":{"options":{"summary":"CORS support","description":"Enable CORS by returning correct headers.\n","tags":["CORS"],"responses":{"200":{"description":"Default response for the CORS method.","headers":{"Access-Control-Allow-Headers":{"schema":{"type":"string"}},"Access-Control-Allow-Methods":{"schema":{"type":"string"}},"Access-Control-Allow-Origin":{"schema":{"type":"string"}}}}}},"post":{"operationId":"submitProblemAsync","summary":"Submit a Vehicle Routing Problem to solve it asynchronously.","description":"Solve a [vehicle routing problem](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/problem.html) asynchronously by optimizing vehicle routes and schedules for jobs \n(deliveries or pickups) from a depot, including constraints like vehicle capacity, job demand, time windows, \nand required skills.\n","tags":["Asynchronous"],"security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"name":"X-Request-Id","in":"header","description":"User-provided token that can be used to trace a request or a group of requests sent to the service.","required":false,"style":"simple","explode":false,"schema":{"type":"string"},"example":"8230d7ad-3f1c-4191-a8dd-f3c42026da89"}],"requestBody":{"description":"Detailed information necessary to compute optimized routes, including fleet configuration details such as \nvehicle types, profiles, costs, shifts, and capacity, as well as a plan detailing the jobs to be completed. \nFor more information, see [Problem](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/problem.html).\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"required":true},"responses":{"202":{"description":"The problem has been successfully submitted and is being processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncActionSubmissionResult"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"400":{"description":"The input parameters or configuration settings for the vehicle routing problem are invalid or incomplete.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"401":{"$ref":"#/components/responses/UnauthenticatedErrorResponse"},"403":{"$ref":"#/components/responses/ForbiddenErrorResponse"},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/ServerErrorResponse"},"503":{"description":"The service is unavailable and the server is not ready to process the request. \nTry again later.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/ServiceErrorResponse"}}}}}}}},"/status/{statusId}":{"options":{"summary":"CORS support","description":"Enable CORS by returning correct headers.\n","tags":["CORS"],"parameters":[{"in":"path","name":"statusId","required":true,"schema":{"$ref":"#/components/schemas/ProblemId"}}],"responses":{"200":{"description":"Default response for the CORS method.","headers":{"Access-Control-Allow-Headers":{"schema":{"type":"string"}},"Access-Control-Allow-Methods":{"schema":{"type":"string"}},"Access-Control-Allow-Origin":{"schema":{"type":"string"}}}}}},"get":{"operationId":"getStatus","summary":"Get status update by Id","description":"Provides an interface to retrieve the status ID of an asynchronous request.","tags":["Asynchronous"],"security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"in":"path","name":"statusId","required":true,"schema":{"type":"string"}},{"name":"X-Request-Id","in":"header","description":"User-provided token that can be used to trace a request or a group of requests sent to the service.","required":false,"style":"simple","explode":false,"schema":{"type":"string"},"example":"8230d7ad-3f1c-4191-a8dd-f3c42026da89"}],"responses":{"200":{"description":"Displays the current status of the asynchronous operation. If successful, the response includes the \nsolution's resource URL. If the request fails, the response contains an error message.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncActionCompletionStatus"},"examples":{"Pending":{"summary":"A response example for an asynchronous operation in the `pending` state.","value":{"status":"pending"}},"InProgress":{"summary":"A response example for an asynchronous operation in the `in progress` state.","value":{"status":"inProgress"}},"Success":{"summary":"A response example for a successfully completed asynchronous operation.","value":{"status":"success","resource":{"resourceId":"87aec2ce-b697-11e8-96f8-529269fb1459","href":"https://<endpoint-url>/v3/problems/87aec2ce-b697-11e8-96f8-529269fb1459/solution"}}},"Failure":{"summary":"A response example for an asynchronous operation completed with an error.","value":{"status":"failure","error":{"message":"There was an error solving the problem"}}}}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"401":{"$ref":"#/components/responses/UnauthenticatedErrorResponse"},"403":{"$ref":"#/components/responses/ForbiddenErrorResponse"},"404":{"description":"The specified status ID of the asynchronous request was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/ResourceErrorResponse"}}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/ServerErrorResponse"}}}},"/problems/{problemId}/solution":{"options":{"summary":"CORS support","description":"Enable CORS by returning correct headers.\n","tags":["CORS"],"parameters":[{"in":"path","name":"problemId","required":true,"schema":{"$ref":"#/components/schemas/ProblemId"}}],"responses":{"200":{"description":"Default response for the CORS method.","headers":{"Access-Control-Allow-Headers":{"schema":{"type":"string"}},"Access-Control-Allow-Methods":{"schema":{"type":"string"}},"Access-Control-Allow-Origin":{"schema":{"type":"string"}}}}}},"get":{"operationId":"getSolution","summary":"Get solution by problem or status Id","description":"Retrieve a solution for a previously submitted vehicle routing problem.","tags":["Asynchronous"],"security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"in":"path","name":"problemId","description":"A unique identifier used to track the status of a solution calculation and for downloading the solution \nresult for a specific problem.\n","required":true,"schema":{"$ref":"#/components/schemas/ProblemId"}},{"name":"X-Request-Id","in":"header","description":"User-provided token that can be used to trace a request or a group of requests sent to the service.","required":false,"style":"simple","explode":false,"schema":{"type":"string"},"example":"8230d7ad-3f1c-4191-a8dd-f3c42026da89"}],"responses":{"200":{"description":"A [solution](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/solution.html) was found for the submitted problem. The response includes the details of the solution, such as \nthe optimized route and any relevant metrics.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Solution"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"401":{"$ref":"#/components/responses/UnauthenticatedErrorResponse"},"403":{"$ref":"#/components/responses/ForbiddenErrorResponse"},"404":{"description":"The specified problem ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/ResourceErrorResponse"}}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"422":{"description":"The solver was unable to find a solution for the submitted problem, for example, due to too restrictive \nor conflicting constraints, making it impossible to generate a viable route. \nReview the problem parameters and try again.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/SolverErrorResponse"}}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/ServerErrorResponse"}}}},"/problems/{problemId}/cancel":{"options":{"summary":"CORS support","description":"Enable CORS by returning correct headers.\n","tags":["CORS"],"parameters":[{"in":"path","name":"problemId","required":true,"schema":{"$ref":"#/components/schemas/ProblemId"}}],"responses":{"200":{"description":"Default response for the CORS method.","headers":{"Access-Control-Allow-Headers":{"schema":{"type":"string"}},"Access-Control-Allow-Methods":{"schema":{"type":"string"}},"Access-Control-Allow-Origin":{"schema":{"type":"string"}}}}}},"put":{"operationId":"cancelProblem","summary":"Cancel a problem by problem or status Id","description":"Cancel a previously submitted vehicle routing problem. This action stops the solver from processing \nthe problem and prevents any further updates or solutions from being generated.\n","tags":["Asynchronous"],"security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"in":"path","name":"problemId","description":"A unique identifier used to track the status of a solution calculation and for downloading the solution \nresult for a specific problem.\n","required":true,"schema":{"$ref":"#/components/schemas/ProblemId"}},{"name":"X-Request-Id","in":"header","description":"User-provided token that can be used to trace a request or a group of requests sent to the service.","required":false,"style":"simple","explode":false,"schema":{"type":"string"},"example":"8230d7ad-3f1c-4191-a8dd-f3c42026da89"}],"responses":{"200":{"description":"The asynchronous calculation for the problem has been canceled. This means the solver has stopped \nprocessing the calculation, and no further updates or solutions are allowed.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncProblemCancellationStatus"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"401":{"$ref":"#/components/responses/UnauthenticatedErrorResponse"},"403":{"$ref":"#/components/responses/ForbiddenErrorResponse"},"404":{"description":"The specified problem ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/ResourceErrorResponse"}}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"409":{"description":"The specified problem cannot be canceled. This may be due to the problem already being processed or \ncompleted, or because it does not exist.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorResponse"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"429":{"$ref":"#/components/responses/TooManyRequestsResponse"},"500":{"$ref":"#/components/responses/ServerErrorResponse"}}}},"/matrices":{"options":{"summary":"CORS support","description":"Enable CORS by returning correct headers.\n","tags":["CORS"],"responses":{"200":{"description":"Default response for the CORS method.","headers":{"Access-Control-Allow-Headers":{"schema":{"type":"string"}},"Access-Control-Allow-Methods":{"schema":{"type":"string"}},"Access-Control-Allow-Origin":{"schema":{"type":"string"}}}}}},"post":{"x-maturity":"alpha","summary":"**ALPHA** Upload a Routing Matrix","description":"**ALPHA** Upload a [routing matrix](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/custom-matrix.html) for use in subsequent asynchronous requests. \nTo gain access to this endpoint, contact your regional HERE representative.\n","tags":["Asynchronous"],"security":[{"ApiKey":[]},{"Bearer":[]}],"parameters":[{"name":"X-Request-Id","in":"header","description":"User-provided token that can be used to trace a request or a group of requests sent to the service.","required":false,"style":"simple","explode":false,"schema":{"type":"string"},"example":"8230d7ad-3f1c-4191-a8dd-f3c42026da89"}],"responses":{"201":{"description":"The routing matrix has been successfully uploaded. You can now use this matrix in subsequent requests \nto solve routing problems asynchronously.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatrixUploadResponse"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"400":{"description":"The matrix formulation is incorrect. This issue might be caused by incorrect input parameters or data misalignment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Correlation-Id":{"$ref":"#/components/headers/X-Correlation-Id"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}}},"401":{"$ref":"#/components/responses/UnauthenticatedErrorResponse"},"403":{"$ref":"#/components/responses/ForbiddenErrorResponse"},"500":{"$ref":"#/components/responses/ServerErrorResponse"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LargeMatrix"}}},"description":"A [routing matrix](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/custom-matrix.html) tailored for a specific vehicle profile. This matrix includes such data as travel times and \ndistances between various locations, optimized for the vehicle's characteristics. The matrix is used in \nsubsequent requests to solve routing problems asynchronously.\n","required":true}}},"/version":{"get":{"operationId":"getVersion","summary":"Full version of the API.","description":"Retrieve the current version of the service.","tags":["System"],"security":[],"responses":{"200":{"description":"The current version of the service.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}}}}},"/health":{"get":{"operationId":"getHealth","summary":"Health status of the service.","description":"Retrieve the current health status of the service.","tags":["System"],"security":[],"responses":{"200":{"description":"The current health status of the service.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}}},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","name":"apikey","in":"query","description":"The API authentication key. For more information on how to get an API key, \nsee [Identity and Access Management - Developer Guide](https://www.here.com/docs/bundle/identity-and-access-management-developer-guide/page/topics/plat-using-apikeys.html).\n"},"Bearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"This token is obtained from a separate endpoint using client credentials and an OAuth 1.0a HMAC-SHA256 signed request.\nFor more information on how to get a bearer token, see [OAuth 2.0 tokens](https://www.here.com/docs/bundle/identity-and-access-management-developer-guide/page/topics/plat-token.html).\n"}},"responses":{"UnauthenticatedErrorResponse":{"description":"The API key or authentication credentials are invalid or missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/UnauthenticatedErrorResponse"}}}}},"ForbiddenErrorResponse":{"description":"The API key or authentication credentials do not allow you to access the requested resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/ForbiddenErrorResponse"}}}}},"ServerErrorResponse":{"description":"An internal server error has occurred that prevents the API from processing the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerErrorResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/ServerErrorResponse"}}}}},"TooManyRequestsResponse":{"description":"The number of API requests has exceeded the allowed limit within a specified time frame.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TooManyRequestsResponse"},"examples":{"errorResponseExample":{"$ref":"#/components/examples/TooManyRequestsResponse"}}}},"headers":{"Retry-After":{"description":"The value (in seconds) that indicates how long you must wait before making additional requests.","schema":{"type":"integer","example":5}},"X-RateLimit-Limit":{"description":"Indicates the maximum number of requests you can make within the specified time window (in seconds), \nformatted as \"number, number; w=window\".\n","schema":{"type":"string","example":"50, 50;w=10"}},"X-RateLimit-Reset":{"description":"Indicates (in seconds) how long you must wait before sending more requests.","schema":{"type":"integer","example":5}}}}},"headers":{"X-Correlation-Id":{"description":"An auto-generated identifier that uniquely distinguishes each request.","style":"simple","explode":false,"schema":{"type":"string"},"example":"4199533b-6290-41db-8d79-edf4f4019a74"},"X-Request-Id":{"description":"User-provided token that can be used to trace a request or a group of requests sent to the service.","style":"simple","explode":false,"schema":{"type":"string"},"example":"8230d7ad-3f1c-4191-a8dd-f3c42026da89"}},"schemas":{"AuthErrorResponse":{"type":"object","required":["error","error_description"],"properties":{"error":{"description":"Error message corresponding to the status code.","type":"string","example":"Unauthorized"},"error_description":{"description":"Detailed information about authentication or authorization errors.","type":"string","example":"Invalid client credentials"}}},"TooManyRequestsResponse":{"type":"object","required":["error","error_description"],"properties":{"error":{"description":"Provides an error message based on the status code.","type":"string","example":"Too Many Requests"},"error_description":{"description":"Provides detailed information about an authentication or authorization error.","type":"string","example":"Rate limit for this service has been reached"}}},"ServerErrorResponse":{"type":"object","required":["title","status","code","cause","action","correlationId"],"properties":{"title":{"description":"Provides the error title.","type":"string"},"status":{"description":"Indicates the HTTP status code, which matches the HTTP response status code.","type":"integer"},"code":{"description":"Provides a machine-readable error code that identifies the specific service error \nfor debugging and logging purposes.\n","type":"string"},"cause":{"description":"Provides a human-readable description of the error and its cause to help you understand what went wrong \nand how to address the issue.\n","type":"string"},"action":{"description":"Provides actionable instructions on how to resolve this error.","type":"string"},"correlationId":{"description":"Provides the unique ID of the request that triggered this error. \nInclude this ID when contacting support for assistance.\n","type":"string"}},"example":{"title":"BAD_REQUEST","status":400,"code":"E613420","cause":"Vehicle's arrival time is earlier than its departure time","action":"Correct arrival time of 'vehicle' to be earlier than its departure","correlationId":"fee3c453-f537-49ca-a285-f5f076bce7d1"}},"ErrorResponse":{"type":"object","required":["title","status","code","cause","action","correlationId"],"properties":{"title":{"description":"Provides the title of the error with a brief summary of the issue encountered.","type":"string"},"status":{"description":"Indicates the HTTP status code, which matches the HTTP response status code.","type":"integer"},"code":{"description":"The error code consists of a fixed prefix (`E613`) followed by three digits that specify the error. \nWhen seeking assistance from the support team, provide the complete error code for effective troubleshooting. \nSee the [Developer Guide](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/errors.html) for more information and step-by-step guidance on resolving errors.\n\n| Code      | Reason                                                                       |\n| --------- | ---------------------------------------------------------------------------- |\n| `E613000` | General error                                                                |\n| `E613200` | Request schema validation error                                              |\n| `E613201` | Problem definition validation error                                          |\n| `E613202` | Too many job places                                                          |\n| `E613203` | Too many vehicle types                                                       |\n| `E613205` | Objectives and Advanced objectives are mutually exclusive                    |\n| `E613206` | Both order and position in the job task are present                          |\n| `E613207` | Both times and timeWindows in the job place are present                      |\n| `E613210` | Invalid truck height option                                                  |\n| `E613211` | Invalid truck width option                                                   |\n| `E613212` | Invalid truck length option                                                  |\n| `E613213` | Invalid max time option                                                      |\n| `E613214` | Invalid stagnation time option                                               |\n| `E613215` | Break start time should be less than or equal to its end time                |\n| `E613220` | Option conflicts with the used profile option                                |\n| `E613400` | Invalid region size                                                          |\n| `E613401` | Invalid coordinate specified in request                                      |\n| `E613410` | More than one job has the same id                                            |\n| `E613411` | Vehicle with given id does not exist                                         |\n| `E613412` | Job cannot be served within vehicle time window                              |\n| `E613413` | Job has skill which cannot be served by vehicle                              |\n| `E613414` | Different dimensions for pickups and deliveries demand                       |\n| `E613415` | Pickup and delivery demand are incorrect: must be equal in one dimension     |\n| `E613416` | Job specified in relation does not exist                                     |\n| `E613417` | Job task has incorrect time window                                           |\n| `E613418` | More than one vehicle type has the same id                                   |\n| `E613420` | Vehicle's arrival time is earlier than its departure time                    |\n| `E613421` | Job assigned to more than one vehicle                                        |\n| `E613422` | One of the vehicle's break times is outside of the vehicle's shift time      |\n| `E613423` | Vehicle break used in relation must have location                            |\n| `E613425` | Profile names must be unique                                                 |\n| `E613426` | Unknown vehicle profile names in vehicle type definitions                    |\n| `E613427` | Multi job cannot be used within relation                                     |\n| `E613428` | Ensure that all time windows have start and end date                         |\n| `E613429` | Region radius is too big to include traffic information                      |\n| `E613430` | Job task has overlapping time windows                                        |\n| `E613431` | Both pickups and deliveries have to be set for the job with multiple tasks   |\n| `E613432` | Truck gross weight is outside allowed range                                  |\n| `E613433` | Truck weight per axle is outside allowed range                               |\n| `E613434` | Locations' distribution radius is too big for fleet profile type 'scooter'   |\n| `E613435` | Locations' distribution radius is too big for profile option 'avoid'         |\n| `E613436` | Time and distance costs cannot be both zero. If only one is provided it cannot be zero |\n| `E613437` | Locations' distribution radius is too big for using 'options' in fleet profile type 'truck' |\n| `E613438` | Time, used within vehicle, pudo or job, cannot be before Unix epoch          |\n| `E613439` | Break should have non-empty time windows                                     |\n| `E613440` | Invalid country code in exclude[countries]                                   |\n| `E613441` | Region radius is too big for profile option 'exclude'                        |\n| `E613442` | More than one vehicle has the same id                                        |\n| `E613443` | Invalid combination of `vehicleIds` and `amount` properties in vehicle type  |\n| `E613444` | Jobs and pudos from one group cannot be mixed with another group in the relation |\n| `E613445` | Pudos and jobs in the relation should be added in correct order              |\n| `E613446` | Pudos in the relation are duplicated                                         |\n| `E613500` | Unsupported experimental feature flag                                        |\n| `E613501` | Experimental feature is used without specifying the experimental flag.       |\n| `E613600` | Vehicles' shifts overlap                                                     |\n| `E613601` | Relation has job with multiple places or time windows                        |\n| `E613604` | Redundant 'optimizeTaskOrder' objective                                      |\n| `E613606` | Duplicate territory specified for the same vehicle                           |\n| `E613609` | Invalid 'shiftIndex' in relation                                             |\n| `E613611` | Avoided polygon specified in vehicle profile has self intersection           |\n| `E613612` | Same location with different 'sideOfStreetHint' attribute present in the problem  |\n| `E613613` | Overlapping vehicle break time windows                                       |\n| `E613614` | Same location with different 'nameHint' attribute present in the problem     |\n| `E613615` | Missing 'minimizeUnassigned' objective                                       |\n| `E613616` | Missing 'minimizeCost' objective                                             |\n| `E613617` | Invalid combination of avoid feature `difficultTurns` or `uTurns` and transport mode. |\n| `E613618` | More breaks referenced in relations for a particular vehicle than defined in that vehicle's corresponding shift  |\n| `E613619` | Min stops limit greater than max stops limit                                 |\n| `E613620` | Locations' distribution radius is too big for fleet profile type 'bus'       |\n| `E613621` | Locations' distribution radius is too big for fleet profile type 'privateBus' |\n| `E613622` | Locations' distribution radius is too big for using 'options' in fleet profile type 'car' |\n| `E613623` | Both break and rest time features are being used                             |\n| `E613624` | Different types of stop config used                                          |\n| `E613625` | Only one vehicle profile can be used with custom matrix                      |\n| `E613626` | Custom matrix validation error                                               |\n| `E613627` | Custom matrix does not contain all of specified in problem locations         |\n| `E613628` | Invalid combination of `matrix` and other vehicle profile properties         |\n| `E613629` | Missing 'optimizeTaskPosition' objective                                     |\n| `E613630` | Location is incorrect                                                        |\n| `E613631` | Location types are mixed                                                     |\n| `E613632` | Custom matrix not provided with custom locations                             |\n| `E613633` | Same location 'id' with different coordinates present in the problem         |\n| `E613634` | Visually appealing tours feature cannot be used with custom locations        |\n| `E613635` | Minimize tour overlap feature cannot be used with custom locations           |\n| `E613636` | Profiles array with matrixId is outside allowed range                        |\n| `E613637` | Profile property `matrixId` cannot be provided for sync endpoint             |\n| `E613638` | Duplicate matrixId specified for other vehicle profile                       |\n| `E613639` | Incorrect matrixId used in the vehicle                                       |\n| `E613640` | Custom matrix cannot be provided for async endpoint                          |\n| `E613649` | `weightPerAxle` and `weightPerAxleGroup` are mutually exclusive              |\n| `E613650` | Locations' distribution radius is too big for profile type 'taxi'            |\n| `E613651` | `fuel` cannot be used with `pedestrian` or `bicycle` profile                 |\n| `E613652` | Invalid configuration for rest times property                                |\n| `E613653` | `traffic` route violation can be ignored only for car and truck profiles     |\n| `E613654` | Too many locations are placed on the same road section                       |\n| `E613655` | Unknown vehicle profile names in stopConfig definitions                      |\n| `E613656` | More than one parking has the same id                                        |\n| `E613657` | Vehicle type id is defined for multiple parking places                       |\n| `E613658` | Multiple parking places with default vehicle type ids                        |\n| `E613659` | `violationMapping` with `type`:`restriction` must have at least one of (`grossWeight`, `currentWeight`, `height`) with a value of `include` or `ignore` |\n| `E613660` | `avoidAreasAndSegments` route violation can be ignored only for car and truck profiles |\n| `E613661` | `restriction` route violation can be ignored only for truck profiles         |\n| `E613662` | `violationMapping` cannot be used together with `traffic` ignore violation   |\n| `E613663` | The `all` option in `ignoreRouteViolations` cannot be used together with other options |\n| `E613664` | Region radius is too big for profile option 'violationMapping'               |\n| `E613665` | Missing `maxDistance` in shift recharges while `evProfileId` is specified    |\n| `E613666` | Recharge stations are missing while using `maxDistance` in shift             |\n| `E613667` | Locations' distribution radius is too big for using 'options' in fleet profile type 'pedestrian' |\n","type":"string"},"cause":{"description":"Human-readable explanation of the error and its cause.","type":"string"},"action":{"description":"Provides actionable instructions on how to resolve this error.","type":"string"},"correlationId":{"description":"Provides the unique ID of the request that triggered this error. \nInclude this ID when contacting support for assistance.\n","type":"string"}},"example":{"title":"BAD_REQUEST","status":400,"code":"E613420","cause":"Vehicle's arrival time is earlier than its departure time","action":"Correct arrival time of 'vehicle' to be earlier than its departure","correlationId":"fee3c453-f537-49ca-a285-f5f076bce7d1"}},"AsyncActionSubmissionResult":{"type":"object","description":"The response body containing the request status UUID and the status update URL \nused to track the completion status of a valid asynchronous problem that you submitted for calculation.\n","properties":{"statusId":{"type":"string","example":"87aec2ce-b697-11e8-96f8-529269fb1459","description":"Request status UUID. \nThe UUID is included in the status update URL for \nquerying the calculation status of the corresponding problem.\n"},"href":{"description":"Status update URL. \nUse this URL when querying the calculation status of the corresponding problem. \nContains the request status UUID.\n","type":"string","example":"https://<endpoint-url>/v3/status/87aec2ce-b697-11e8-96f8-529269fb1459"}},"required":["statusId","href"]},"AsyncActionCompletionStatus":{"type":"object","description":"Represents the response body with the problem calculation status, returned after \nsubmitting a request for the status of an asynchronous problem calculation.\n","properties":{"status":{"type":"string","enum":["pending","inProgress","failure","success","canceled"],"example":"success"},"resource":{"type":"object","description":"If the asynchronous request completes successfully, the service provides a `resourceId` to identify the corresponding solution. Use the `resourceId` \nto [retrieve the calculated solution](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/get-started/quick-start.html#download-the-solution) for \nyour routing problem.\n","properties":{"resourceId":{"type":"string","example":"87aec2ce-b697-11e8-96f8-529269fb1459"},"href":{"description":"Use this URL to request the [solution](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/solution.html) \nof a vehicle routing problem.\n","type":"string","example":"https://<endpoint-url>/v3/problems/87aec2ce-b697-11e8-96f8-529269fb1459/solution"}}},"error":{"type":"object","description":"Provides detailed information about the error that occurred if the asynchronous operation was not successful.\n","properties":{"code":{"type":"string","example":"E613000"},"message":{"type":"string","example":"There was an error solving the problem"}}}},"required":["status"]},"AsyncProblemCancellationStatus":{"type":"object","description":"Represents the response body returned after submitting a problem cancellation request.\n","properties":{"id":{"$ref":"#/components/schemas/ProblemId"},"status":{"type":"string","enum":["canceled"],"example":"canceled"},"started":{"type":"string","format":"date-time","example":"2021-01-01T12:00:00Z"},"ended":{"type":"string","format":"date-time","example":"2021-01-01T12:01:00Z"}},"required":["id","status","started","ended"]},"ProblemId":{"type":"string","description":"A unique identifier for the problem.","format":"uuid","example":"87aec2ce-b697-11e8-96f8-529269fb1459"},"VersionResponse":{"type":"object","description":"Retrieves the current versions of all service components.","properties":{"apiVersion":{"type":"string","description":"The current version of the API.","example":"3.1.0"}},"required":["apiVersion"]},"HealthResponse":{"description":"Retrieves the current health status of the service.","properties":{"status":{"description":"Health status of the service:\n\n* `ok` - the service is operating normally\n","type":"string","enum":["ok"],"example":"ok"}}},"Problem":{"description":"A [problem](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/problem.html) JSON file that defines the fleet, jobs, and configuration for optimizing tours, which is \npassed synchronously or asynchronously to the HERE Tour Planning API to create an optimized tour plan.\n","type":"object","properties":{"configuration":{"$ref":"#/components/schemas/Configuration"},"fleet":{"$ref":"#/components/schemas/Fleet"},"plan":{"$ref":"#/components/schemas/Plan"},"objectives":{"description":"[Objectives](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/objectives.html#default-objectives) that guide tour optimization by setting goals like minimizing distance, duration, costs, or unassigned jobs, and \ncan be combined hierarchically to meet specific criteria.\n","type":"array","minItems":1,"maxItems":6,"items":{"$ref":"#/components/schemas/Objective"},"example":[{"type":"minimizeUnassigned"},{"type":"minimizeCost"}]},"advancedObjectives":{"x-maturity":"alpha","description":"**ALPHA** [Extended objectives](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/objectives.html#alpha-advanced-objectives) that allow for more complex and tailored optimization strategies \nbeyond basic goals like minimizing tour distance or cost.\n\n**Note**: This is an experimental feature under development. \nTo enable this feature, add the `advancedObjectives` flag to the `experimentalFeatures` configuration in the problem.\n","type":"array","minItems":1,"maxItems":8,"items":{"$ref":"#/components/schemas/MultiObjective"},"example":[[{"type":"minimizeUnassigned"}],[{"type":"minimizeCost"}]]}},"required":["plan","fleet"]},"MultiObjective":{"x-maturity":"alpha","description":"**ALPHA** Enables the definition of multiple objectives with equal priority, ensuring that each objective is considered equally \nduring the optimization process.\n","type":"array","minItems":1,"maxItems":2,"items":{"$ref":"#/components/schemas/AdvancedObjective"}},"Plan":{"description":"[Set of jobs](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/problem.html#plan) that need to be completed as part of a tour. This includes details such as job locations for \npickups and deliveries, time windows for when these tasks should be performed, and any specific requirements \nor constraints related to completing each job according to specific business requirements.\n","type":"object","properties":{"jobs":{"description":"A list of jobs to be completed during the tour. Jobs consist of pickup tasks, delivery tasks, or a combination of both, assigned to vehicles. \nEach job may include a location, service duration, and demand (for example, volume, mass). Optional attributes include houseKeyId for \nmulti-delivery or pickup, time windows, required skills, tags, territory IDs, group IDs, priority, and customer ID.\n\nThe job limit is calculated by summing all pickup and delivery task locations. \nThis total cannot exceed 500 tasks for the synchronous endpoint and 7000 tasks for the asynchronous endpoint.\n","type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Job"}},"relations":{"description":"Allows defining rules and order for completing jobs by specific vehicles during the [tour re-planning process](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/relations.html).\n\n**Note**: \n  * The optimization algorithm does not check jobs within a relation for constraint violations.\n  * Relations cannot be used with jobs having multiple pickups or deliveries.\n","type":"array","minItems":1,"maxItems":1000,"items":{"$ref":"#/components/schemas/Relation"}},"clustering":{"description":"This feature groups similar jobs into one or more clusters to ensure they are assigned to the same \nstop whenever possible, allowing them to be served together. Jobs are considered similar if they \nshare the same:\n\n  * Job type (only `pickup` or `delivery` are supported)\n  * Locations\n  * Time windows\n  * Skills\n  * Demand dimensions\n\n**Note**: If a cluster violates any constraints, it is divided into smaller clusters. \nJobs with priority are excluded from clustering.\n","type":"object","properties":{"serviceTimeStrategy":{"$ref":"#/components/schemas/ServiceTimeStrategy"}},"required":["serviceTimeStrategy"]},"groups":{"x-maturity":"beta","description":"**BETA** [Job groups](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/group-jobs.html) help organize jobs based on specific criteria, ensuring that jobs within the same group are completed sequentially by the same vehicle. \nGrouping jobs also allows for designating Pick-Up and Drop-Off (PUDO) points, which are locations for storing or collecting goods for a specific job group.\n","type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Group"}},"shared":{"x-maturity":"alpha","$ref":"#/components/schemas/Shared"}},"required":["jobs"]},"Fleet":{"description":"Represents the [collection of vehicles](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/problem.html#fleet) used for \ncompleting the planned tours. Each vehicle in the fleet can have specific attributes, such as:\n  * Vehicle type (for example, truck, van, scooter)\n  * Capacity (for example, volume, weight)\n  * Operational costs\n  * Time shifts (availability times)\n  * Start and end locations\n  * Special features (for example, refrigeration, hazmat compliance)\n  * Routing profiles (for example, car, truck, bicycle)\n","type":"object","properties":{"types":{"description":"Represents different categories of vehicles used to optimize routes and deliveries. \nThese types can vary based on factors like capacity (how much a vehicle can carry), dimensions (size of the vehicle), \nand specific features (for example, refrigeration for perishable goods).  \n\nThe synchronous endpoint supports up to 35 vehicle types, while the \nasynchronous endpoint supports up to 150 vehicle types.\n","type":"array","minItems":1,"items":{"$ref":"#/components/schemas/VehicleType"}},"profiles":{"type":"array","minItems":1,"maxItems":5,"items":{"$ref":"#/components/schemas/Profile"},"example":[{"type":"car","name":"normal_car"}]},"traffic":{"description":"Define how traffic is considered in route planning with the following [traffic modes](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/traffic-modes.html):\n  * **liveOrHistorical**: Uses live or historical traffic data based on the optional `departureTime` \n  property in a vehicle profile. For future times, it uses live data if within a 490 km radius; otherwise, \n  it uses historical data. For past times, it uses historical data. If you do not set the `departureTime` \n  value, the earliest shift start time is used instead.\n  * **historicalOnly**: Uses free-flow speeds based on historical traffic data. Applicable if you \n  want to avoid using live traffic data.\n  * **automatic**: Functions like `liveOrHistorical` if all coordinates are within a 490 km radius; \n  otherwise, it functions like `historicalOnly`. Applicable if you want to let the service \n  automatically decide the best option.\n\nYou can also set the traffic mode to `disabled` in the fleet's `profile.traffic` settings.\n","type":"string","enum":["liveOrHistorical","historicalOnly","automatic"],"default":"automatic","example":"liveOrHistorical"}},"required":["types","profiles"]},"Profile":{"oneOf":[{"$ref":"#/components/schemas/ScooterProfile"},{"$ref":"#/components/schemas/BicycleProfile"},{"$ref":"#/components/schemas/PedestrianProfile"},{"$ref":"#/components/schemas/CarProfile"},{"$ref":"#/components/schemas/TruckProfile"},{"$ref":"#/components/schemas/BusProfile"},{"$ref":"#/components/schemas/PrivateBusProfile"},{"$ref":"#/components/schemas/TaxiProfile"}],"discriminator":{"propertyName":"type","mapping":{"scooter":"#/components/schemas/ScooterProfile","bicycle":"#/components/schemas/BicycleProfile","pedestrian":"#/components/schemas/PedestrianProfile","car":"#/components/schemas/CarProfile","truck":"#/components/schemas/TruckProfile","bus":"#/components/schemas/BusProfile","privateBus":"#/components/schemas/PrivateBusProfile","taxi":"#/components/schemas/TaxiProfile"}}},"Relation":{"description":"Defines how specific jobs are related to each other and how they should be completed by a specific vehicle \n(defined by the `${vehicleType}_${sequenceIndex}` pattern). The primary application for job relation \nis [**tour replanning**](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/relations.html).\n","type":"object","properties":{"type":{"$ref":"#/components/schemas/RelationType"},"jobs":{"description":"Job IDs that represent the sequence or order in which the connected jobs are to be completed by a vehicle. \nIn addition to Job IDs, you can optionally provide the following activity names to enforce further constraints within a specific relation:\n  * `departure`: This activity marks the beginning of the sequence and prevents other jobs from \n  being scheduled before the departure activity. It must always be the first item in the `jobs` array, if included.\n  * `break`: If included, this activity enforces a scheduled pause for the vehicle during its route.\n  * `arrival`: This activity marks the end of the sequence and prevents other jobs from \n  being scheduled after the arrival activity. It must always be the last item in the `jobs` array if included.\n","type":"array","minItems":1,"maxItems":1000,"items":{"$ref":"#/components/schemas/Id"}},"vehicleId":{"$ref":"#/components/schemas/Id"},"shiftIndex":{"$ref":"#/components/schemas/ShiftIndex"}},"required":["type","jobs","vehicleId"],"example":{"type":"sequence","jobs":["departure","4bbc206d-1583-4266-bac9-d1580f412ac0","4bbc206d-1583-4266-bac9-d1580f412ac0","arrival"],"vehicleId":"vehicle1_1","shiftIndex":0}},"RelationType":{"description":"Defines how jobs are related to each other and how they should be completed by a specific vehicle. \nThe following relation types are supported:\n  * `sequence`: Jobs must be served by the vehicle in the specified order without changes or without \n  inserting other jobs between them.\n  * `flexible`: Jobs must be served in the provided order, but other jobs unspecified in the relation \n  can be inserted between them.\n  * `tour`: Jobs must be completed by the specified vehicle, but the order can be changed.\n","type":"string","enum":["sequence","tour","flexible"],"example":"sequence"},"Configuration":{"description":"Provides a way to define various additional settings and constraints for solving vehicle routing problems \nor permit the use of experimental features.\n\nFor more information, see [Configuration](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/configuration.html).\n","type":"object","properties":{"termination":{"$ref":"#/components/schemas/Termination"},"experimentalFeatures":{"$ref":"#/components/schemas/ExperimentalFeatures"},"routeDetails":{"$ref":"#/components/schemas/RouteDetailsConfiguration"}}},"Termination":{"description":"Defines the conditions under which the optimization algorithm stops running.","type":"object","required":["maxTime","stagnationTime"],"properties":{"maxTime":{"description":"Sets the maximum duration (in seconds) the algorithm runs to solve a problem. If the algorithm doesn't find \na solution within this time, it stops and returns the best solution found so far.\n  \n  \n| Endpoint Type     | Maximum Value (seconds)  | Default Value (seconds) |\n|-------------------|--------------------------|-------------------------|\n| Synchronous       | 300                      | 240                     |\n| Asynchronous      | 18000                    | 3600                    |\n","type":"integer","format":"int64","minimum":1,"example":30},"stagnationTime":{"description":"Specifies the duration (in seconds) the algorithm waits for an improved solution before stopping. \nIf no better solution is found within this time, the algorithm terminates, which prevents wasting resources on minimal improvements.\n  \n| Endpoint Type     | Maximum Value (seconds)  | Default Value (seconds) |\n|-------------------|--------------------------|-------------------------|\n| Synchronous       | 240                      | 10                      |\n| Asynchronous      | 18000                    | 600                     |\n","type":"integer","format":"int64","minimum":1,"example":5}}},"ServiceTimeStrategy":{"description":"Controls how the duration or service time of job clusters is determined. Selecting a service strategy \ntype is useful in scenarios where multiple jobs are served at the same location or are located nearby. It has the following types:\n  * `maxDurationStrategy`: The total duration of the job cluster equals the duration \n  of the job with the longest duration.\n  * `fixedDurationStrategy`: The total duration of the job cluster is fixed, as defined in the strategy object.\n  * `boundedSumStrategy`: The total duration of a job cluster equals the sum of the durations of the jobs, \n  bounded by a given maximum.\n","oneOf":[{"$ref":"#/components/schemas/FixedDurationStrategy"},{"$ref":"#/components/schemas/MaxDurationStrategy"},{"$ref":"#/components/schemas/BoundedSumStrategy"}],"discriminator":{"propertyName":"type","mapping":{"fixedDurationStrategy":"#/components/schemas/FixedDurationStrategy","maxDurationStrategy":"#/components/schemas/MaxDurationStrategy","boundedSumStrategy":"#/components/schemas/BoundedSumStrategy"}}},"FixedDurationStrategy":{"description":"Sets the cluster's total duration to a predefined value, regardless of individual job durations. \nThis strategy helps in planning and optimizing service time for similar jobs, ensuring they are completed within a predefined timeframe.\n","type":"object","properties":{"type":{"type":"string","enum":["fixedDurationStrategy"]},"duration":{"description":"The total duration of all jobs in a cluster, expressed in seconds.","type":"integer","format":"int64"}},"required":["type","duration"],"example":{"type":"fixedDurationStrategy","duration":3600}},"BoundedSumStrategy":{"description":"Ensures the total duration of a job cluster is the sum of individual job durations, capped at a maximum limit. \nThis strategy is useful for grouping similar jobs without exceeding a specified service time.\n","type":"object","properties":{"type":{"type":"string","enum":["boundedSumStrategy"]},"maximum":{"description":"The upper limit for the total duration all jobs in a cluster, expressed in seconds.","type":"integer","format":"int64"}},"required":["type","maximum"],"example":{"type":"boundedSumStrategy","maximum":3600}},"MaxDurationStrategy":{"description":"Sets the cluster's total duration to the longest job duration. \nThis strategy is useful when multiple tasks for the same customer don't significantly increase overall time.\n","type":"object","properties":{"type":{"type":"string","enum":["maxDurationStrategy"]}},"required":["type"],"example":{"type":"maxDurationStrategy"}},"ExperimentalFeatures":{"description":"Lists the enabled [experimental features](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/experimental-features.html) \nthat are still under development. These experimental features are provided for testing and feedback purposes, and their availability or functionality might change.\n","minItems":1,"items":{"type":"string"}},"Group":{"x-maturity":"beta","description":"**BETA** Represents a [collection of jobs](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/group-jobs.html) linked by criteria such as geographic proximity, delivery windows, or product types. Jobs in the same group are assigned to one vehicle and completed sequentially before moving \non to other jobs or groups.\n","type":"object","properties":{"id":{"description":"Represents the unique ID of a [job group](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/group-jobs.html). Assign this ID at the `job.places` level to include the job in the \ncorresponding group.\n","allOf":[{"$ref":"#/components/schemas/Id"}],"example":"group1"},"pudos":{"description":"The list of pick-up and drop-off points (PUDOs). \nThese locations are designated for the collection and delivery of passengers or goods.\n","minItems":1,"maxItems":2,"type":"array","items":{"$ref":"#/components/schemas/Pudo"}},"placement":{"x-maturity":"alpha","description":"**ALPHA** Group placement mode: \"strict\" (consecutive) or \"flexible\" (anywhere in tour).\n","type":"string","enum":["strict","flexible"],"example":"strict","default":"strict"}},"required":["id"]},"Pudo":{"x-maturity":"beta","description":"**BETA** Represents a specific location called [PUDO (or pick-up and drop-off point)](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/group-jobs.html#job-groups-with-pudos) where \ngoods or passengers are picked up or dropped off as part of a tour. PUDOs help in streamlining the loading and unloading process to minimize travel distances and reduce the overall travel time.\n","type":"object","properties":{"id":{"description":"The [PUDO](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/group-jobs.html#job-groups-with-pudos) ID. \nThis ID must be unique across the entire problem, including job IDs.\n","type":"string","example":"pudo1"},"assignAt":{"description":"Indicates whether the PUDO must be the first or last activity in the group. \nThis helps in organizing the sequence of tasks efficiently.\n","type":"string","enum":["first","last"],"example":"first"},"places":{"description":"List of locations that are available as pick-up and drop-off PUDOs. Assigning multiple locations as PUDOs \nallows for efficient task completion based on availability and convenience.\n","type":"array","minItems":1,"maxItems":3,"items":{"$ref":"#/components/schemas/PudoPlace"}}},"required":["id","assignAt","places"]},"PudoPlace":{"x-maturity":"beta","description":"**BETA** Specifies the location and time for serving the pick-up and drop-off (PUDO) activity. This ensures that each \nPUDO is served at the correct location and within the designated time frame.\n","type":"object","properties":{"location":{"$ref":"#/components/schemas/Location"},"duration":{"$ref":"#/components/schemas/Duration"},"times":{"$ref":"#/components/schemas/TimeWindows"},"timeWindows":{"type":"array","minItems":0,"maxItems":4,"items":{"$ref":"#/components/schemas/SoftTimeWindow"}},"tag":{"$ref":"#/components/schemas/PlaceTag"}},"example":{"location":{"lat":52.53088,"lng":13.38471},"duration":180,"times":[["2020-07-04T10:00:00Z","2020-07-04T12:00:00Z"]],"tag":"some_tag"},"required":["location","duration"]},"RouteDetailsConfiguration":{"description":"Include [route details](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/polylines.html) between each stop in the solution, in the [flexible polyline](https://github.com/heremaps/flexible-polyline/blob/master/README.md) format. \nFor each stop (X), the polyline represents the route between that stop and the previous one (X-1).\n","type":"array","minItems":1,"items":{"type":"string","x-extensible-enum":["polyline"]},"example":["polyline"]},"Shared":{"x-maturity":"alpha","description":"**ALPHA** Represents a set of shared resources, such as parking places, that can be utilized by multiple vehicles during their tours.\n","type":"object","properties":{"parking":{"description":"A list of parking places with id that vehicles can use during their tours.\n","type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Parking"}}}},"Parking":{"x-maturity":"alpha","description":"**ALPHA** Represents a parking space or car park with id that vehicles can use during their tours.\n","type":"object","properties":{"id":{"description":"Represents the unique ID of a car park or parking space.","allOf":[{"$ref":"#/components/schemas/Id"}],"example":"parking1"},"places":{"description":"List of places that are available as parking places.","type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/ParkingPlace"}}},"required":["id","places"]},"ParkingPlace":{"x-maturity":"alpha","description":"**ALPHA** Specifies parking place data.\n","type":"object","properties":{"duration":{"$ref":"#/components/schemas/Duration"},"vehicleTypeIds":{"type":"array","uniqueItems":true,"minItems":1,"items":{"$ref":"#/components/schemas/Id"},"example":["truck1"]}},"required":["duration"]},"Solution":{"description":"Contains detailed information about how to efficiently solve a vehicle routing problem by completing a set of jobs with a fleet of vehicles. The solution includes the following elements:\n  * **statistic**: Summary of total distance, duration, and cost.\n  * **costs**: Total cost, considering distance, time, and fixed costs.\n  * **tours**: Sequences of stops assigned to each vehicle.\n  * **job assignments**: Jobs assigned to each vehicle in order.\n  * **activities**: Actions at each stop, with start and end times.\n  * **unassigned jobs**: Jobs that couldn't be assigned and reasons why.\nFor more information, see [Solution](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/solution.html).\n","type":"object","properties":{"statistic":{"$ref":"#/components/schemas/Statistic"},"tours":{"description":"The [list of tours](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/solution.html#list-of-tours) in the response from the service after submitting a problem for solving. This list \nincludes detailed information about each tour, such as the route, stops, activities at each stop, and more.\n","type":"array","items":{"$ref":"#/components/schemas/Tour"}},"unassigned":{"description":"List of jobs that could not be allocated to any vehicle, for example, when no vehicle has the required skills, the vehicle's capacity is exceeded, or specific constraints (like time windows or territories) cannot be met. \nFor more information on the possible reasons for unassigned jobs, see [Unassigned Job Errors](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/errors.html#unassigned-jobs-errors).\n","type":"array","items":{"$ref":"#/components/schemas/UnassignedJob"}},"notices":{"description":"A list of notices that provide additional information about the request. For example, these notices \nmight include suggestions on how to improve the problem formulation.\n","type":"array","items":{"$ref":"#/components/schemas/Notice"}}},"required":["statistic"]},"UnassignedJob":{"description":"Specifies an unassigned job and outlines [possible causes of unassignment](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/errors.html#unassigned-jobs-errors).\n","type":"object","properties":{"jobId":{"$ref":"#/components/schemas/Id"},"reasons":{"description":"A list of possible explanations for why a specific job may not have been assigned.\n\n| Code                                 | Reason                                                            |\n| ------------------------------------ | ----------------------------------------------------------------- |\n| `NO_REASON_FOUND`                    | No reason found                                                   |\n| `SKILL_CONSTRAINT`                   | Cannot be assigned due to required skill                          |\n| `TIME_WINDOW_CONSTRAINT`             | Cannot be assigned due to violation of time window                |\n| `CAPACITY_CONSTRAINT`                | Cannot be assigned due to capacity of vehicle                     |\n| `REACHABLE_CONSTRAINT`               | Location unreachable                                              |\n| `MAX_DISTANCE_CONSTRAINT`            | Cannot be assigned due to max distance constraint of vehicle      |\n| `SHIFT_TIME_CONSTRAINT`              | Cannot be assigned due to shift time constraint of vehicle        |\n| `LOCKING_CONSTRAINT`                 | Cannot be assigned due to relation lock                           |\n| `TOUR_ORDER_CONSTRAINT`              | Cannot be assigned due to tour order constraint                   |\n| `MAX_STOPS_CONSTRAINT`               | Cannot be assigned due to exceeding the maximum number of stops   |\n| `MIN_STOPS_CONSTRAINT`               | Cannot be assigned due to not reaching the minimum number of stops|\n| `BREAK_CONSTRAINT`                   | Break cannot be assigned                                          |\n| `AREA_CONSTRAINT`                    | Cannot be assigned due to area constraint                         |\n| `TERRITORY_CONSTRAINT`               | Cannot be assigned due to territory constraint                    |\n| `UNREACHABLE_IN_RELATION_CONSTRAINT` | Cannot be assigned due to relation constraint                     |\n| `MIXING_RESTRICTION_CONSTRAINT`      | Cannot be assigned due to mixing restriction constraint           |\n| `GROUP_CONSTRAINT`                   | Cannot be assigned due to group constraint                        |\n| `MAX_DRIVING_TIME_CONSTRAINT`        | Cannot be assigned due to max driving time constraint             |\n| `MAX_TIME_ON_VEHICLE_CONSTRAINT`     | Cannot be assigned due to max time on vehicle constraint          |\n","type":"array","minItems":1,"items":{"$ref":"#/components/schemas/UnassignedJobReason"}}},"required":["jobId","reasons"]},"UnassignedJobReason":{"description":"Explains the circumstances under which a job was not assigned. \nFor example, no vehicles with the required skill were available to complete the job.\n","type":"object","properties":{"code":{"description":"Specifies the reason code for a job that remains unassigned.","type":"string","example":"SKILL_CONSTRAINT"},"description":{"description":"Provides supplementary information to aid in identifying and resolving the underlying issue that caused the job to remain unassigned.\n","type":"string","example":"cannot serve required skill"},"details":{"description":"Provides more details about unassignment.","type":"array","minItems":1,"items":{"$ref":"#/components/schemas/UnassignedJobDetail"}}},"required":["code","description"]},"UnassignedJobDetail":{"x-maturity":"alpha","description":"**ALPHA** Details about job unassignment such as vehicle id, shift index. This can help to analyze how to modify the problem definition to decrease amount of unassigned jobs.\n","properties":{"vehicleIds":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/Id"}},"shiftIndex":{"$ref":"#/components/schemas/ShiftIndex"}},"required":["vehicleId","shiftIndex"]},"Notice":{"description":"A notice provides additional information about the request, such as hints on how to improve the problem formulation. \nThis information can help you understand potential issues and make necessary adjustments to optimize your request.\n","properties":{"code":{"description":"A unique code for each type of notice to ensure clear identification and differentiation.\n\n| Code                                           | Reason                                                             |\n| ---------------------------------------------- | ------------------------------------------------------------------ |\n| `unusedVehicleProfile`                         | Vehicle profile is not used                                        |\n| `duplicatedVehicleProfile`                     | Vehicle profile is duplicated                                      |\n| `minimizeUnassignedNotAtHighestPriority`       | `minimizeUnassigned` objective is not at highest priority          |\n| `noVehicleWithSkillsForJob`                    | No vehicle type matching skills of job                             |\n| `unreachableLocation`                          | Location unreachable                                               |\n| `pudoTimeWindowOutsideOfShifts`                | Pudo time window is outside of vehicle's shift time range          |\n| `deprecatedField`                              | Specified field is deprecated                                      |\n| `allJobsHaveTheSamePriority`                   | All jobs have the same priority                                    |\n| `allJobsHaveTheSameCategory`                   | All jobs have the same category                                    |\n| `allJobsHaveTheSameCustomerId`                 | All jobs have the same customerId                                  |\n| `allJobPlacesHaveTheSameGroup`                 | All job places have the same group                                 |\n| `allJobPlacesHaveTheSameGroupWithManyVehicles` | All job places have the same group, only one vehicle will serve it |\n| `allJobTasksHaveTheSamePosition`               | All jobs tasks have the same position                              |\n| `allJobTasksHaveTheSameOrder`                  | All job tasks have the same order                                  |\n| `unusedVehicleSkills`                          | Vehicle profiles have skills not used by any job                   |\n| `allJobsAndVehiclesHaveTheSameSkills`          | All jobs and vehicle have the same skills                          |\n| `jobHasIncorrectTimeWindows`                   | Job has time window(s) not supported by any vehicle                |\n| `routeDetailsUnauthorized`                     | Unauthorized usage of route details                                |\n| `routeDetailsFailure`                          | Could not get route details                                        |\n","type":"string","example":"unusedVehicleProfile"},"title":{"description":"A human-readable description of the notice.","type":"string","example":"Vehicle profile 'truck_1' is not used by any vehicle type."},"action":{"description":"Provides specific actions to address the issue or improve the problem formulation.","type":"string","example":"Check whether the vehicle types use the correct profiles."},"link":{"description":"Provides a link to the page with additional details about the notice.","type":"string","example":"https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/README.html"}},"required":["code","title"]},"Job":{"description":"Represents a job with one or many tasks.","type":"object","properties":{"id":{"description":"A unique identifier for a job, provided when submitting a problem request. It allows tracking and retrieval of specific job-related information.\nDo not include any personal information within the `JobId`. For example, avoid using a license plate number that could be used to identify the driver.\n","allOf":[{"$ref":"#/components/schemas/Id"}],"example":"4bbc206d-1583-4266-bac9-d1580f412ac0"},"tasks":{"$ref":"#/components/schemas/JobTasks"},"skills":{"$ref":"#/components/schemas/Skills"},"priority":{"description":"Specifies the priority of the job with 1 for high priority jobs and 5 for normal jobs.\nJobs without any priority will be treated as jobs with priority 5. \n**BETA** Specifying more than 2 different levels of priority among all jobs is experimental\n","minimum":1,"maximum":5,"type":"integer","default":5,"example":1},"customerId":{"description":"Specifies a unique identifier for a customer. Jobs having the same customerId will be grouped in one or several clusters if possible, see clustering. Avoid referencing any sensitive or personal information, such as names, addresses,\ninformation about a delivery or service, as part of the `customerId`.\n","allOf":[{"$ref":"#/components/schemas/Id"}],"example":"4bbc206d-1583-4266-bac9-d1580f412ac0"},"maxTimeOnVehicle":{"$ref":"#/components/schemas/MaxTimeOnVehicle"},"category":{"$ref":"#/components/schemas/Category"}},"required":["id","tasks"]},"JobTasks":{"description":"Tasks are \"sub\" jobs to be performed. All pickups are done before any other delivery.\nOrder of execution inside each group is any. At least one task must be specified.\n","type":"object","properties":{"pickups":{"type":"array","minItems":1,"maxItems":3,"items":{"$ref":"#/components/schemas/JobTask"}},"deliveries":{"type":"array","minItems":1,"maxItems":3,"items":{"$ref":"#/components/schemas/JobTask"}}},"example":{"pickups":[{"places":[{"times":[["2020-07-04T10:00:00Z","2020-07-04T12:00:00Z"]],"location":{"lat":52.53088,"lng":13.38471},"duration":180}],"demand":[10]}],"deliveries":[{"places":[{"times":[["2020-07-04T14:00:00Z","2020-07-04T16:00:00Z"]],"location":{"lat":52.54016,"lng":13.40241},"duration":300}],"demand":[10]}]}},"JobTask":{"description":"A task specifies where and how a part or a whole job should be done.","type":"object","properties":{"places":{"type":"array","minItems":1,"maxItems":3,"items":{"$ref":"#/components/schemas/JobPlace"}},"demand":{"$ref":"#/components/schemas/Unit"},"order":{"description":"Deprecated, use `position` instead. \nAn order of activity: bigger value means later assignment in the tour.\n","deprecated":true,"minimum":1,"type":"integer","example":1},"position":{"$ref":"#/components/schemas/JobPositionInTour"}},"required":["places","demand"]},"JobPlace":{"description":"A place specifies temporal and spatial characteristics of a job.","type":"object","properties":{"location":{"$ref":"#/components/schemas/RoutingLocation"},"duration":{"$ref":"#/components/schemas/Duration"},"times":{"$ref":"#/components/schemas/TimeWindows"},"timeWindows":{"type":"array","minItems":0,"maxItems":4,"items":{"$ref":"#/components/schemas/SoftTimeWindow"}},"parkingIds":{"x-maturity":"alpha","description":"**ALPHA** Specifies ids of the parking where the vehicle can be parked while performing the job at this place.\nDisclaimer: This is an experimental feature under development\nTo enable it, add `parkingIds` flag to `experimentalFeatures` configuration in the problem.\n","type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#/components/schemas/Id"},"example":["parking1"]},"tag":{"$ref":"#/components/schemas/PlaceTag"},"territoryIds":{"description":"Represents the territory identifiers (referencing territories of vehicles) to which the job belongs.","type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#/components/schemas/Id"}},"groupId":{"description":"Specifies id of the jobs group.","allOf":[{"$ref":"#/components/schemas/Id"}],"example":"group1"},"houseKeyId":{"x-maturity":"alpha","description":"**ALPHA** Specifies id of the house key.\nDisclaimer: This is an experimental feature under development\nTo enable it, add `houseKeys` flag to `experimentalFeatures` configuration in the problem.\n","allOf":[{"$ref":"#/components/schemas/Id"}],"example":"house_key_1"}},"required":["location","duration"]},"PlaceTag":{"description":"An optional free-text field submitted as part of the problem request, providing additional information related to the task's place for easier identification or categorization.\nDo not include any personal information within the `PlaceTag`. For example, avoid using specific names of individuals associated with the place.\n","type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$","example":"some_tag"},"MaxTimeOnVehicle":{"description":"The maximum amount of time in seconds the job is allowed to stay on the vehicle.\nThe duration of the first loading and the last unloading activity is excluded from that time.\n","type":"integer","format":"int64","minimum":0,"maximum":604800,"example":180},"JobPositionInTour":{"description":"Specifies position of the job task in the tour","oneOf":[{"$ref":"#/components/schemas/JobPositionFirst"},{"$ref":"#/components/schemas/JobPositionLast"},{"$ref":"#/components/schemas/JobPositionAny"},{"$ref":"#/components/schemas/JobPositionOrdered"}],"discriminator":{"propertyName":"type","mapping":{"first":"#/components/schemas/JobPositionFirst","last":"#/components/schemas/JobPositionLast","any":"#/components/schemas/JobPositionAny","ordered":"#/components/schemas/JobPositionOrdered"}}},"JobPositionLast":{"description":"Puts the job task at the end of the tour","properties":{"type":{"type":"string","enum":["last"],"example":"last"}},"required":["type"]},"JobPositionFirst":{"description":"Puts the job task at the beginning of the tour","properties":{"type":{"type":"string","enum":["first"],"example":"first"}},"required":["type"]},"JobPositionAny":{"description":"Puts the job task at any place in the tour (also between ordered jobs) but not before PositionFirst and not after PositionLast.","properties":{"type":{"type":"string","enum":["any"],"example":"any"}},"required":["type"]},"JobPositionOrdered":{"description":"Puts the job task in the order, bigger value means later assignment in the tour.","properties":{"type":{"type":"string","enum":["ordered"],"example":"ordered"},"value":{"type":"integer","minimum":1,"example":1}},"required":["type","value"]},"VehicleType":{"description":"Represents a vehicle type.","type":"object","properties":{"id":{"description":"Specifies id of the vehicle type. Avoid assigning real-life identifiers, such as vehicle license plate as\nthe `id` of a vehicle.\n","allOf":[{"$ref":"#/components/schemas/Id"}],"example":"vehicle1"},"profile":{"$ref":"#/components/schemas/ProfileName"},"costs":{"$ref":"#/components/schemas/VehicleCosts"},"shifts":{"type":"array","minItems":1,"maxItems":7,"items":{"$ref":"#/components/schemas/VehicleShift"}},"capacity":{"$ref":"#/components/schemas/Unit"},"skills":{"$ref":"#/components/schemas/Skills"},"limits":{"$ref":"#/components/schemas/VehicleLimits"},"amount":{"description":"Amount of vehicles available. Should be specified if `vehicleIds` array is not set.","type":"integer","minimum":1,"maximum":350,"example":1},"territories":{"description":"Represents the vehicle's territories with their priorities. In case a job contains more than one task, then for a vehicle to be able to serve that job, its territories should be a superset of the territories of all tasks in that job","type":"object","properties":{"strict":{"description":"Determines whether a vehicle can serve jobs outside its territories (when false) or not","type":"boolean","default":true,"example":true},"items":{"type":"array","items":{"$ref":"#/components/schemas/Territory"}}},"required":["items"]},"vehicleIds":{"$ref":"#/components/schemas/VehicleIds"},"speedFactor":{"description":"This factor enables the adjustment of the vehicle speed relative to the standard speed, \nthereby altering the driving duration. For instance, when utilizing a speedFactor of 0.1, \nthe speed is reduced to 10% of the normal, resulting in the vehicle taking 10 times longer to travel \nthe same distance. Consider using realistic values for the speedFactor. \nThis multiplier does not take into account actual speed limits imposed by the roads or any legal regulations.\n","type":"number","minimum":0.1,"maximum":10,"example":1},"fuel":{"$ref":"#/components/schemas/VehicleFuel"}},"required":["id","profile","costs","shifts","capacity"]},"VehicleIds":{"description":"List of available vehicles. Can be used to assign individual vehicle to the tour.\nIn other case `amount` property should be used. Each identifier must be unique across all vehicle types.\nAvoid assigning real-life identifiers, such as vehicle license plate as the `id` of a vehicle.\nShould not be the same as an autogenerated id of another type. E.g. if 'vehicle' is used for one type then \nthe name 'vehicle_1' cannot be used for another type, otherwise the relations could not be satisfied.\n","type":"array","uniqueItems":true,"minItems":1,"maxItems":350,"items":{"$ref":"#/components/schemas/Id"},"example":["vehicle1_1"]},"VehicleCosts":{"description":"Defines different vehicle costs per unit.","type":"object","properties":{"fixed":{"description":"A fixed cost to start using vehicle of this type. It is optional with a default value of zero","minimum":0,"maximum":100000,"type":"number","format":"double","example":22},"distance":{"description":"A cost per meter. It is optional with a default value of zero.","minimum":0,"maximum":100000,"type":"number","format":"double","example":0.0001},"time":{"description":"A cost per second. It is optional with a default value of zero. Both time and distance costs cannot be specified as 0. If time and distance costs are not specified at all, then a small time cost 0.00000000001 will be used instead.","minimum":0,"maximum":100000,"type":"number","format":"double","example":0.0048},"perWaitingTime":{"x-maturity":"alpha","description":"**ALPHA** A cost per second for waiting times. If not set, a regular time cost is used.","minimum":0,"maximum":100000,"type":"number","format":"double","example":0.01},"excessCosts":{"x-maturity":"alpha","$ref":"#/components/schemas/ExcessCosts"}}},"ExcessCosts":{"x-maturity":"alpha","description":"**ALPHA** Specifies limits on distance, stops count etc.\nPenalties have to be paid in case those limits are violated.\nTo enable the feature, add the `excessCosts` flag to the `experimentalFeatures` configuration in the problem.\n","type":"object","properties":{"distance":{"$ref":"#/components/schemas/ExcessCostsField"},"duration":{"$ref":"#/components/schemas/ExcessCostsField"},"stops":{"$ref":"#/components/schemas/ExcessCostsField"},"waitingTime":{"$ref":"#/components/schemas/ExcessCostsField"}}},"ExcessCostsField":{"x-maturity":"alpha","description":"Specifies limits on a solution metric and penalties to be paid in case those limits are violated.","type":"object","properties":{"limit":{"description":"A limit that the solution should not exceed. If it is exceeded, a penalty is added to the solution cost.","minimum":0,"type":"number","format":"double","example":200},"fixedCost":{"description":"A fixed cost to be paid if the limit is exceeded.","minimum":0,"type":"number","format":"double","example":2030},"stepSize":{"description":"Excess is measured in steps. E.g., if the step size is 12 and the excess is 14, we would incur ceil(14/2) = 2 units of penalty.","minimum":0,"type":"number","format":"double","example":20},"stepCost":{"description":"The cost per step of excess.","minimum":0,"type":"number","format":"double","example":5}},"required":["limit","fixedCost","stepSize","stepCost"]},"VehicleShift":{"description":"Specifies how vehicle should operate in one work shift.","type":"object","properties":{"start":{"$ref":"#/components/schemas/VehiclePlace"},"end":{"$ref":"#/components/schemas/VehiclePlace"},"breaks":{"type":"array","minItems":1,"maxItems":5,"items":{"$ref":"#/components/schemas/VehicleBreak"}},"restTimes":{"$ref":"#/components/schemas/VehicleRestTime"},"reloads":{"type":"array","minItems":1,"maxItems":5,"items":{"$ref":"#/components/schemas/VehicleReload"}},"recharges":{"$ref":"#/components/schemas/VehicleRecharges"},"stopBaseDuration":{"description":"A constant duration of time, in seconds, added at stops. This can be used to model, for example, vehicle parking time, vehicle preparation for loading/unloading or some facility entrance procedures.","type":"object","properties":{"type":{"type":"string","enum":["oncePerStop"],"example":"oncePerStop"},"value":{"description":"The duration, in seconds, added per stop","type":"number","minimum":0,"maximum":36000,"default":0,"example":10}},"required":["type","value"]},"mixingRestrictions":{"$ref":"#/components/schemas/VehicleShiftMixingRestrictions"},"stopConfig":{"$ref":"#/components/schemas/StopConfig"}},"required":["start"],"example":{"start":{"time":"2020-07-04T09:00:00Z","location":{"lat":52.5256,"lng":13.4542}},"end":{"time":"2020-07-04T18:00:00Z","location":{"lat":52.5256,"lng":13.4542}},"breaks":[{"duration":1800,"times":[["2020-07-04T11:00:00Z","2020-07-04T13:00:00Z"]]},{"duration":900,"times":[["2020-07-04T15:00:00Z","2020-07-04T16:00:00Z"]]}],"recharges":{"maxDistance":10000,"stations":[{"duration":1800,"location":{"lat":52.5256,"lng":13.4542}}]}}},"MixingRestrictionSet":{"description":"A set of restrictions on mixing jobs based on their categories","type":"object","properties":{"conflictingCategories":{"description":"Represents a set of conflicting job categories.","type":"array","minItems":2,"maxItems":100,"uniqueItems":true,"items":{"$ref":"#/components/schemas/Category"},"example":["food","non-food"]}}},"VehicleShiftMixingRestrictions":{"description":"Enables the prevention of mixing conflicting jobs within a single vehicle.","type":"object","properties":{"level":{"type":"string","enum":["tour","subTour"],"example":"tour"},"restrictions":{"description":"Represents a set of conflicting job categories.","type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#/components/schemas/MixingRestrictionSet"}}},"required":["level","restrictions"]},"StopConfig":{"x-maturity":"alpha","description":"**ALPHA** Configures how stops are created. \nSpecifies how multiple jobs located close to each other can be grouped into a single stop.\nPlease consult the developer guide for more information before using this feature. \nTo enable it, add `clusterNearby` flag to `experimentalFeatures` configuration in the problem.\n","oneOf":[{"$ref":"#/components/schemas/DbscanStopConfig"}],"discriminator":{"propertyName":"type","mapping":{"dbscan":"#/components/schemas/DbscanStopConfig"}}},"DbscanStopConfig":{"x-maturity":"alpha","type":"object","properties":{"type":{"description":"Defines cluster membership via the DBSCAN clustering algorithm.","type":"string","enum":["dbscan"],"example":"dbscan"},"maxDistanceToNeighbor":{"description":"Defines the maximum distance in meters between an activity and its closest neighbor in the cluster.","type":"number","format":"double","example":50,"minimum":0,"maximum":500},"minNeighborCount":{"description":"The number of close neighbors an activity must have to be considered as dense by DBSCAN.","type":"integer","example":3,"default":3,"minimum":2,"maximum":15},"maxDiameter":{"description":"The maximum allowed distance between two activities in the stop.","type":"number","format":"double","example":120,"minimum":0,"maximum":1000},"profile":{"description":"The vehicle profile to be used for calculating distances between activities.","$ref":"#/components/schemas/ProfileName"}},"required":["type","maxDistanceToNeighbor"]},"VehiclePlace":{"description":"Represents a depot: a place where a vehicle starts or ends.","type":"object","properties":{"timeOffset":{"description":"The property `timeOffset` specifies an offset in seconds from given `time` property.\nFor start place, it defines a maximum time offset for departure time optimization (but it is not more than\nmaximum shift duration). So far, it has no effect for vehicle's end place (reserved for a future usage).\n","minimum":0,"maximum":86400,"type":"integer","format":"int64","example":1800},"time":{"$ref":"#/components/schemas/DateAndTime"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"tag":{"$ref":"#/components/schemas/PlaceTag"}},"required":["time"]},"VehicleLimits":{"description":"Contains constraints applied to a vehicle type.","type":"object","properties":{"maxDistance":{"description":"Max distance in meters per shift.","minimum":1,"maximum":3000000,"type":"number","format":"double","example":20000},"maxIntraStopDistance":{"x-maturity":"alpha","description":"**ALPHA** Max intra-stop distance in meters per shift, accumulated over all stops.","minimum":1,"maximum":3000000,"type":"number","format":"double","example":20000},"shiftTime":{"description":"The property shiftTime defines the maximum allowed working time of a vehicle type. In case a break is defined\nfor this particular vehicle type, the duration of the break should be added to the shiftTime. For instance,\nif a vehicle type has a shift of 8 hours and a 30 minutes break, the total shiftTime should be defined as 8\nhours 30 minutes. The properties `start.time` and `end.time` on the VehicleShift define the lower and upper\nbounds of the time interval in which the vehicle's shift must lie. Under no circumstances may a vehicle start\nworking before `start.time` or finish working after `end.time`. The `start.time` and `end.time` can be imagined\nas the opening and closing times of a depot where the vehicle starts and ends its tour. `start.time` and\n`end.time` can override the defined `shiftTime`. That means, in case the time defined by the `shiftTime`\nproperty is longer than the time interval between `start.time` and `end.time` the maximum working time of\nthe vehicle will be reduced and will not exceed that time interval.\n","minimum":1,"maximum":604800,"type":"number","format":"double","example":21600},"maxDrivingTime":{"description":"Max driving time in seconds per shift.","minimum":1,"maximum":604800,"type":"integer","format":"int64","example":21600},"stops":{"$ref":"#/components/schemas/VehicleStopsLimit"}}},"VehicleStopsLimit":{"description":"Limits on the amount of stops a vehicle of that type can perform in a shift. A stop is only counted\nif at least one pickup or delivery is performed as part of that stop. \nAn initial/final stop at the depot is never counted to the number of stops.\n","type":"object","properties":{"minCount":{"$ref":"#/components/schemas/VehicleMinStopsCountLimit"},"maxCount":{"$ref":"#/components/schemas/VehicleMaxStopsCountLimit"}},"example":{"minCount":{"value":5},"maxCount":{"value":13}}},"VehicleMaxStopsCountLimit":{"description":"Hard limit on the maximum number of stops in a shift.\n","type":"object","properties":{"value":{"description":"The maximum number of stops allowed in a vehicle shift.\n","type":"integer","minimum":1,"example":1}},"required":["value"]},"VehicleMinStopsCountLimit":{"x-maturity":"alpha","description":"**ALPHA** Hard limit on the minimum number of stops in a shift.\nPlease consult the developer guide for more information before using this feature. \nTo enable it, add `minStops` flag to `experimentalFeatures` configuration in the problem.\n","type":"object","properties":{"value":{"description":"The minimum number of stops allowed in a vehicle shift.\n","type":"integer","minimum":0,"example":1}},"required":["value"]},"VehicleBreakPolicy":{"description":"Specifies the policy for vehicle break.\n  * `allowAtTheEnd`: The vehicle break will be scheduled even if the vehicle arrives at the depot before the break's time window ends. \n  The break will be inserted prior to the arrival activity. By default, if a vehicle completes a tour before the end of the break, it is not added to the tour.\n","type":"string","enum":["allowAtTheEnd"]},"VehicleBreak":{"description":"A vehicle break time. It starts in the declared time window and can end after the time window (based on the duration). \nEither a rest time or a break can be specified.\n","type":"object","properties":{"times":{"$ref":"#/components/schemas/TimeWindows"},"duration":{"$ref":"#/components/schemas/Duration"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"policy":{"$ref":"#/components/schemas/VehicleBreakPolicy"}},"required":["times","duration"]},"VehicleReload":{"description":"Specifies a place where vehicle can load or unload cargo.","type":"object","properties":{"times":{"$ref":"#/components/schemas/TimeWindows"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"duration":{"$ref":"#/components/schemas/Duration"},"tag":{"$ref":"#/components/schemas/PlaceTag"}},"required":["location","duration"]},"ProfileName":{"description":"Specifies the name of the profile. Avoid assigning real-life identifiers, such as a\nvehicle license plate Id or personal name as the `profileName` of the routing profile.\n","type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$","example":"normal_car"},"ScooterProfile":{"description":"Routing calculations for scooters. The `departureTime` property allows to specify a custom date-time for which\n`traffic optimization` in routing calculations shall be performed. See `fleet.traffic`\nfor details.\n","type":"object","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"options":{"$ref":"#/components/schemas/ScooterOptions"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"type":{"type":"string","enum":["scooter"],"example":"scooter"}},"required":["name","type"]},"ScooterOptions":{"type":"object","description":"Specifies scooter profile options.","properties":{"allowHighway":{"description":"Specifies whether routing calculation should take highways into account. When this\nparameter isn't provided, then by default highways would be avoided. If the avoid\nfeature `motorway` is provided, then highways would be avoided,\neven if `allowHighway` is set to `true`.\n","type":"boolean","default":false,"example":false},"speedCap":{"$ref":"#/components/schemas/SpeedCap"}}},"BicycleProfile":{"description":"Routing calculations for bicycles. The `departureTime` property allows to specify a custom date-time for which\n`traffic optimization` in routing calculations shall be performed. See `fleet.traffic`\nfor details.\n","type":"object","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"type":{"type":"string","enum":["bicycle"],"example":"bicycle"}},"required":["name","type"]},"PedestrianProfile":{"description":"Routing calculations for pedestrians. The `departureTime` property allows to specify a custom date-time for which\n`traffic optimization` in routing calculations shall be performed. See `fleet.traffic`\nfor details.\n","type":"object","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"options":{"$ref":"#/components/schemas/PedestrianOptions"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"type":{"type":"string","enum":["pedestrian"],"example":"pedestrian"}},"required":["name","type"]},"PedestrianOptions":{"type":"object","description":"Specifies pedestrian profile options.","properties":{"speed":{"description":"Specifies the walking speed in meters per second (m/s). Influences the duration of\nwalking segments along the route.\n","type":"number","minimum":0.5,"maximum":2,"default":1,"example":1}}},"CarProfile":{"description":"Routing calculations for cars. The `departureTime` property allows to specify a custom date-time for which\n`traffic optimization` in routing calculations shall be performed. See `fleet.traffic`\nfor details.\n","type":"object","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"options":{"$ref":"#/components/schemas/CarOptions"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"mode":{"description":"Specifies `route calculation` mode:\n- `fast`: Route calculation from start to destination optimized by travel time. In many cases, the route\n  returned by the fast mode may not be the route with the fastest possible travel time. For example, the\n  routing service may favor a route that remains on a highway, even if a faster travel time can be achieved\n  by taking a detour or shortcut through an inconvenient side road.\n- `short`: Route calculation from start to destination disregarding any speed information. In this mode,\n  the distance of the route is minimized, while keeping the route sensible. This includes, for example,\n  penalizing turns. Due to that, the resulting route will not necessarily be the one with minimal distance.\n","type":"string","enum":["fast","short"],"default":"fast","example":"fast"},"type":{"type":"string","enum":["car"],"example":"car"}},"required":["name","type"]},"TaxiProfile":{"description":"Route calculation for taxis. This profile takes into account taxi restricted streets as well as streets\nreserved for exclusive taxi access. It does not, however, consider exclusive lanes in otherwise shared streets.\nAlso, the taxi exclusive streets are used only if either the origin or destination are on them.\n\nThe `departureTime` property allows to specify a custom date-time for which\n`traffic optimization` in routing calculations shall be performed. See `fleet.traffic` for details.\n","type":"object","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"options":{"$ref":"#/components/schemas/TaxiOptions"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"type":{"type":"string","enum":["taxi"],"example":"taxi"}},"required":["name","type"]},"TruckProfile":{"description":"Route calculation for trucks. This mode considers truck limitations on links\nand uses different speed assumptions when calculating the route. The `departureTime`\nproperty allows to specify a custom date-time for which `traffic optimization` in routing\ncalculations shall be performed. See `fleet.traffic` for details.\n","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"options":{"$ref":"#/components/schemas/TruckOptions"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"type":{"type":"string","enum":["truck"]}},"required":["name","type"],"example":{"name":"normal_truck","type":"truck"}},"CarOptions":{"type":"object","description":"Specifies car profile options.","properties":{"speedCap":{"$ref":"#/components/schemas/SpeedCap"},"trailerCount":{"description":"The number of trailers attached to the vehicle.\n\n**Limitations:** Considered for route calculation for restrictions, but not for speed limits.\n","type":"integer","format":"int32","minimum":0,"maximum":1,"example":0},"axleCount":{"type":"integer","format":"int32","description":"Specifies the total number of axles the vehicle has, i.e., axles on the base vehicle and any attached trailers.\n","minimum":2,"maximum":255,"example":2}}},"TaxiOptions":{"type":"object","description":"Specifies taxi profile options.","properties":{"speedCap":{"$ref":"#/components/schemas/SpeedCap"},"allowDriveThroughTaxiRoads":{"description":"Specifies if a vehicle is allowed to drive through the taxi-only roads and lanes. It's\nstill allowed on taxi roads after the route start and before the destination even if not\nallowed to drive through the taxi-only roads.\n","type":"boolean","default":true,"example":true},"trailerCount":{"description":"The number of trailers attached to the vehicle.\n\n**Limitations:** Considered for route calculation for restrictions, but not for speed limits.\n","type":"integer","format":"int32","minimum":0,"maximum":1,"example":0},"axleCount":{"type":"integer","format":"int32","description":"Specifies the total number of axles the vehicle has, i.e., axles on the base vehicle and any attached trailers.\n","minimum":2,"maximum":255,"example":2}},"required":["allowDriveThroughTaxiRoads"]},"TruckOptions":{"description":"Specifies truck profile options. Supported only if the locations' distribution radius is less than 490 km. If not added, only generic truck restrictions are applied and the fastest speed category is considered.","allOf":[{"$ref":"#/components/schemas/VehicleOptions"}]},"VehicleOptions":{"type":"object","properties":{"shippedHazardousGoods":{"type":"array","items":{"$ref":"#/components/schemas/ShippedHazardousGoods"}},"grossWeight":{"description":"Total vehicle weight, including trailers and shipped goods, in kilograms.","type":"integer","minimum":0,"example":1000},"weightPerAxle":{"description":"Vehicle weight per axle, in kilograms.\n\n**Note:** `weightPerAxle` and `weightPerAxleGroup` are incompatible.\n","type":"integer","minimum":0,"example":500},"weightPerAxleGroup":{"$ref":"#/components/schemas/WeightPerAxleGroup"},"height":{"description":"Vehicle height, in centimeters.","type":"integer","minimum":0,"maximum":5000,"example":3000},"width":{"description":"Vehicle width, in centimeters.","type":"integer","minimum":0,"maximum":5000,"example":2000},"length":{"description":"Vehicle length, in centimeters.","type":"integer","minimum":0,"maximum":30000,"example":6000},"tunnelCategory":{"$ref":"#/components/schemas/TunnelCategory"},"category":{"$ref":"#/components/schemas/VehicleCategory"},"speedCap":{"$ref":"#/components/schemas/SpeedCap"},"trailerCount":{"description":"The number of trailers attached to the vehicle.","type":"integer","format":"int32","minimum":0,"maximum":255,"example":0},"axleCount":{"type":"integer","format":"int32","description":"Specifies the total number of axles the vehicle has, i.e., axles on the base vehicle and any attached trailers.\n","minimum":2,"maximum":255,"example":3}}},"TunnelCategory":{"description":"Specifies the tunnel category to restrict certain route streets.\nThe route will pass only through tunnels of a less strict category.\n","type":"string","enum":["B","C","D","E"]},"VehicleCategory":{"description":"Specifies the category of vehicle. If not specified, `undefined` value is used.\n  * `undefined`: The vehicle category is undefined and no special considerations are taken into account. Routing will proceed as normal.\n  * `lightTruck`: The vehicle is a truck light enough to be classified more as a car than as a truck, i.e., this exempts it from many legal restrictions for normal trucks. \n    Restrictions related to the physical dimensions of the truck, or its cargo, however, still apply.\n","type":"string","enum":["undefined","lightTruck"]},"WeightPerAxleGroup":{"description":"Specifies the weights of different axle groups, like single and tandem axles.\n\nThis allows specification of axle weights in a more fine-grained way than `weightPerAxle`. This\nis relevant in countries with signs and regulations that specify different limits for different\naxle groups, like the USA and Sweden.\n\nWeights are specified in kilograms (kg) and are the total weight of the axle group.\n\n**Note:** `weightPerAxleGroup` and `weightPerAxle` are incompatible.\n","type":"object","properties":{"single":{"description":"single axle group","type":"integer","format":"int32","minimum":0},"tandem":{"description":"tandem axle group","type":"integer","format":"int32","minimum":0},"triple":{"description":"triple axle group","type":"integer","format":"int32","minimum":0},"quad":{"description":"quad axle group","type":"integer","format":"int32","minimum":0},"quint":{"description":"quint axle group","type":"integer","format":"int32","minimum":0}},"example":{"single":11000,"tandem":18000}},"BusProfile":{"description":"Route calculation for buses that are allowed to drive through the bus-only roads.","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"options":{"$ref":"#/components/schemas/BusOptions"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"type":{"type":"string","enum":["bus"],"example":"bus"}},"required":["name","type"]},"PrivateBusProfile":{"description":"Route calculation for buses that are not allowed to drive through the bus-only roads.","properties":{"name":{"$ref":"#/components/schemas/ProfileName"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"options":{"$ref":"#/components/schemas/BusOptions"},"exclude":{"$ref":"#/components/schemas/Exclude"},"traffic":{"$ref":"#/components/schemas/Traffic"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"type":{"type":"string","enum":["privateBus"],"example":"privateBus"}},"required":["name","type"]},"BusOptions":{"description":"Specifies bus profile options. Supported only if the locations' distribution radius is less than 490 km. If not added, only generic bus restrictions are applied and the fastest speed category is considered.","type":"object","properties":{"shippedHazardousGoods":{"type":"array","items":{"$ref":"#/components/schemas/ShippedHazardousGoods"}},"grossWeight":{"description":"Total vehicle weight, including trailers and shipped goods, in kilograms.","type":"integer","minimum":0,"example":1000},"weightPerAxle":{"description":"Vehicle weight per axle, in kilograms.\n\n**Note:** `weightPerAxle` and `weightPerAxleGroup` are incompatible.\n","type":"integer","minimum":0,"example":500},"weightPerAxleGroup":{"$ref":"#/components/schemas/WeightPerAxleGroup"},"height":{"description":"Vehicle height, in centimeters.","type":"integer","minimum":0,"maximum":5000,"example":3000},"width":{"description":"Vehicle width, in centimeters.","type":"integer","minimum":0,"maximum":5000,"example":2000},"length":{"description":"Vehicle length, in centimeters.","type":"integer","minimum":0,"maximum":30000,"example":6000},"tunnelCategory":{"$ref":"#/components/schemas/TunnelCategory"},"speedCap":{"$ref":"#/components/schemas/SpeedCap"},"trailerCount":{"description":"The number of trailers attached to the vehicle.","type":"integer","format":"int32","minimum":0,"maximum":255,"example":0},"axleCount":{"type":"integer","format":"int32","description":"Specifies the total number of axles the vehicle has, i.e., axles on the base vehicle and any attached trailers.\n","minimum":2,"maximum":255,"example":3}}},"AvoidRoutes":{"description":"Avoid routes that violate these properties.","type":"object","properties":{"features":{"type":"array","uniqueItems":true,"items":{"$ref":"#/components/schemas/AvoidFeatures"}},"areas":{"type":"array","minItems":1,"maxItems":250,"items":{"$ref":"#/components/schemas/AvoidArea"}},"segments":{"type":"array","uniqueItems":true,"minItems":1,"maxItems":250,"items":{"$ref":"#/components/schemas/AvoidSegment"}},"zoneIdentifiers":{"type":"array","uniqueItems":true,"minItems":1,"items":{"$ref":"#/components/schemas/AvoidZone"}},"truckRoadTypes":{"type":"array","uniqueItems":true,"minItems":1,"items":{"$ref":"#/components/schemas/AvoidTruckRoadType"}},"zoneCategories":{"type":"object","properties":{"categories":{"type":"array","uniqueItems":true,"minItems":1,"items":{"$ref":"#/components/schemas/AvoidZoneCategory"}},"exceptZoneIds":{"type":"array","uniqueItems":true,"minItems":1,"items":{"$ref":"#/components/schemas/AvoidZone"}}},"required":["categories"]}}},"AvoidFeatures":{"description":"A routing feature to avoid during route calculation. Available avoid feature options:\n  * `tollRoad`\n  * `motorway`\n  * `ferry`\n  * `tunnel`\n  * `dirtRoad`\n  * `controlledAccessHighway`\n  * `carShuttleTrain`\n  * `seasonalClosure`\n  * `difficultTurns`: This option avoids difficult turns, sharp turns and U-turns on highways and motorways. It is only supported for the `truck` transport mode.\n  * `uTurns`: This option avoids U-turns on highways and motorways. It is not supported for pedestrian, bicycle and scooter transport modes.\n","type":"string","enum":["tollRoad","motorway","ferry","tunnel","dirtRoad","controlledAccessHighway","carShuttleTrain","seasonalClosure","difficultTurns","uTurns"],"example":"tollRoad"},"AvoidArea":{"description":"Defines an explicit area to avoid/exclude when calculating the routes.\nAreas to be avoided/excluded can be specified by boundingBoxes or polygons (as encoded polyline or as list of geopts ).\n\nNotes:\n * Maximum count of polygons is 20. The combined total of boundingBoxes and polygons has a maximum limit of 250.\n * Minimum count of coordinates in any single polygon is 3. If less the corresponding error will be returned.\n * Maximum count of coordinates in any single polygon is 16. If more the corresponding error will be returned.\n * Self-intersecting polygons are not supported. If they are present in the request, the corresponding error will be returned.\n","oneOf":[{"$ref":"#/components/schemas/BoundingBoxArea"},{"$ref":"#/components/schemas/PolygonArea"},{"$ref":"#/components/schemas/EncodedPolygonArea"}],"discriminator":{"propertyName":"type","mapping":{"boundingBox":"#/components/schemas/BoundingBoxArea","polygon":"#/components/schemas/PolygonArea","encodedPolygon":"#/components/schemas/EncodedPolygonArea"}}},"BoundingBoxArea":{"description":"A bounding box defined by two longitudes and two latitudes.","required":["type","north","south","west","east"],"properties":{"type":{"type":"string","enum":["boundingBox"],"example":"boundingBox"},"north":{"description":"Latitude in WGS-84 degrees of the northern boundary of the box.","type":"number","minimum":-90,"maximum":90,"example":30},"south":{"description":"Latitude in WGS-84 degrees of the southern boundary of the box.","type":"number","minimum":-90,"maximum":90,"example":30},"east":{"description":"Longitude in WGS-84 degrees of the eastern boundary of the box","type":"number","minimum":-180,"maximum":180,"example":30},"west":{"description":"Longitude in WGS-84 degrees of the western boundary of the box.","type":"number","minimum":-180,"maximum":180,"example":30}}},"PolygonArea":{"description":"A polygon defined as a list of coordinates.\n\nThe polygon is automatically closed, so repeating the first vertex is not required.\n","required":["type","outer"],"properties":{"type":{"type":"string","enum":["polygon"],"example":"polygon"},"outer":{"type":"array","description":"List of coordinates defining the outline of the polygon.","items":{"$ref":"#/components/schemas/Coordinate"},"minItems":3,"maxItems":100}}},"EncodedPolygonArea":{"description":"A polygon defined as a [Flexible Polyline](https://github.com/heremaps/flexible-polyline) encoded string.\n\nThe polygon is automatically closed, so repeating the first vertex is not required.\n","required":["type","outer"],"properties":{"type":{"type":"string","enum":["encodedPolygon"],"example":"encodedPolygon"},"outer":{"type":"string","description":"[Flexible Polyline](https://github.com/heremaps/flexible-polyline) that defines the outline of the polygon.\nNotes:\n* Support only 2D polyline (without `elevation` specified).\n* Minimum count of vertices in polygon is 3.\n* Maximum count of vertices in polygon is 100.\n","example":"B F oz5xJ 67i1B 1B 7P zI ha xL 7Y"}}},"AvoidSegment":{"description":"A segment identifier that routes will avoid going through. Each entry has the following structure: {segmentId}(#{direction})?\n\nThe individual parts are:\n* segmentId: The identifier of the referenced topology segment, example: here:cm:segment:207551710\n* direction (optional): Either '`*`' for bidirectional (default), '+' for positive direction, or '-' for negative direction. \nExample of a parameter value excluding two segments: [\\\"here:cm:segment:207551710#+\\\", \\\"here:cm:segment:76771992#*\\\"]\n\n**Note**: Maximum amount of penalized segments in one request should not be greater than 250. A \\\"penalized segment\\\" refers to a\nsegment that have a restrictions on maximum baseSpeed with maxSpeedOnSegment or avoided with avoid[segments]\n","type":"string","pattern":"^[A-Za-z0-9-]+:[A-Za-z0-9-]+:segment:[0-9]+(#\\+|#\\*|#\\-)?$","example":"here:cm:segment:207551710"},"AvoidZone":{"description":"A routing zone identifier that routes will avoid going through. For example the identifier here:cm:envzone:2 references the Berlin Umweltzone environmental zone. For more information about the environmental zones, please have a look at [Here Content Map](https://developer.here.com/documentation/here-map-content/dev_guide/topics-attributes/environmental-zones.html)","type":"string","pattern":"^[A-Za-z0-9-]+:[A-Za-z0-9-]+:envzone:[0-9]+$","example":"here:cm:envzone:2"},"AvoidTruckRoadType":{"description":"A truck road type identifier that routes will avoid going through. A truck road type identifier is associated with roads that have additional regulations applied by local administration for traversal by heavy vehicles like trucks. For example, the BK Bearing Class regulations in Sweden, and ET categories in Mexico. Identifiers for supported truck road types are specified at HERE Map Content [TruckRoadType](https://developer.here.com/documentation/here-map-content/dev_guide/topics_schema/truckroadtypeattribute.truckroadtype.html)","type":"string","enum":["TRUCK_ROAD_TYPE_UNKNOWN","ET4","ET2","A4","A2","B4","B2","C","D","BK1","BK2","BK3","BK4"],"example":"A4"},"AvoidZoneCategory":{"description":"Specify avoidance of entire category of routing zones, with the provision to add individual exceptions.","type":"string","enum":["vignette","congestionPricing","environmental"],"example":"vignette"},"ShippedHazardousGoods":{"description":"List of hazardous materials in the vehicle.\n * explosive: Explosive material\n * gas: Gas\n * flammable: Flammable material\n * combustible: Combustible material\n * organic: Organic material\n * poison: Poison\n * radioactive: Radioactive material\n * corrosive: Corrosive material\n * poisonousInhalation: Materials that are poisonous upon inhalation\n * harmfulToWater: Materials that are harmful to water\n * other: Other types of hazardous materials\n","type":"string","enum":["explosive","gas","flammable","combustible","organic","poison","radioactive","corrosive","poisonousInhalation","harmfulToWater","other"]},"Exclude":{"description":"Defines properties which will be strictly excluded from route calculation.","type":"object","properties":{"countries":{"type":"array","uniqueItems":true,"description":"A list of country codes in ISO 3166-1 alpha-3 format to exclude from tour planning. The routes can be found only if any valid route exists within 200km of the center of the locations' distribution circle.","items":{"$ref":"#/components/schemas/CountryCode"}},"areas":{"type":"array","minItems":1,"maxItems":250,"items":{"$ref":"#/components/schemas/AvoidArea"}}}},"CountryCode":{"description":"ISO-3166-1 alpha-3 country code.","type":"string","minLength":3,"maxLength":3,"example":"DEU"},"Territory":{"description":"Conceptually represents a geographical region that can be used to restrict the geographical area in which vehicles operate. If defined, vehicles will only/primarily serve jobs which have a matching territory id defined, see JobPlace.territoryIds.","type":"object","properties":{"id":{"description":"A territory identifier. It can be used to express in which territory a job is located, see JobPlace.territoryIds","$ref":"#/components/schemas/Id"},"priority":{"description":"Can be used to prioritize between different territories of the same vehicle type. Lower value means higher priority. Jobs belonging to high priority territories will be prioritized over jobs belonging to territories with lower priority. Can also be used to prioritize between the same territories of different vehicle types, i.e. different vehicle types can serve jobs belonging to the same territory, but with different priority.","type":"integer","minimum":1,"maximum":5,"default":1,"example":1}},"required":["id"]},"Traffic":{"description":"Traffic specific parameters.","properties":{"mode":{"description":"Defines what traffic data should be used for route shape and travel duration calculation. - `default`: Traffic data is considered. - `disabled`: All traffic data, including long term closures, is ignored.\n","type":"string","enum":["default","disabled"],"example":"disabled"}},"required":["mode"]},"SpeedCap":{"description":"Specifies the maximum speed, in m/s, which the vehicle should not exceed. This parameter affects route duration. Notes:\n  * Car and Truck profile updates route ETA.\n  * Scooter profile updates route optimization and ETA.\n","type":"number","minimum":1,"maximum":70,"example":20},"IgnoreRouteViolations":{"description":"Defines vehicle routing violations (like closed road, no-through zone) that should be ignored.","type":"array","uniqueItems":true,"minItems":1,"maxItems":2,"items":{"$ref":"#/components/schemas/RouteViolation"}},"RouteViolation":{"description":"Defines route violation. Violation happens only if no feasible route without violations between i and j was found\n- `all`: Includes all violations, such as traffic violations, car restrictions, etc.\n- `traffic`: **ALPHA** Deprecated, please use violationMapping instead. Includes only traffic violations, such as closed roads, bridges, etc. This option is only available for the `car` or `truck` profile.\n- `category1`: **ALPHA** Includes only category 1 violations, see `violationMapping` property for details.\n- `category2`: **ALPHA** Includes only category 2 violations, see `violationMapping` property for details.\n","type":"string","enum":["all","traffic","category1","category2"],"example":"all"},"ViolationMapping":{"minItems":1,"maxItems":10,"uniqueItems":true,"type":"array","description":"List of items for mapping certain violated restrictions to specific error codes in the matrix.\nThis mapping can classify restrictions or blockages while still providing\nthe resulting times and distances in the calculated matrix.\nItems are grouped into categories and evaluated collectively. Error codes are associated\nwith the `category`, rather than being tied to individual restrictions or blockages.\n \nThere are three distinct types of mappings:\n* violated restrictions\n* traffic-related blockages\n* violations when avoiding areas or individual segments\n\nThese mappings must be maintained as separate violation mapping items, although they can belong to\nthe same category.\n\nA violation mapping type can support additional parameters defining how a particular violation should be\nmanaged. There are three settings for these parameters:\n\n`include`: the violated restriction is added to a mapped\ncategory instead of causing a hard error code 3.\n\n`exclude`: the violated restriction is not added to a mapped\ncategory and still causes an error code 3. This is the default for\nheight and grossWeight.\n\n`ignore`: the algorithm is not taking the restriction or\nproperty / attribute of the road into consideration.\nThis is the default attribute for restrictions on bridge or time-dependent\nrestrictions.\n\nThe parameters for each mapping type are listed in the respective schema.\n \n Examples for mappings of different types as `category` 1:\n\n   -  map violations with violated height and violated grossWeight:<br/>\n       `{ \"category\": \"category1\", \"type\": \"restriction\", \"grossWeight\": \"include\", \"height\": \"include\" }`\n   - map violations with violated height and NOT violated grossWeight:<br/>\n       `{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"grossWeight\": \"exclude\" }`\n   - map violations with violated height, violation or non-violation of grossWeight doesn't\n       matter:<br/>\n       `{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"grossWeight\": \"ignore\" }`\n   - map violations with violated height and violated currentWeight:<br/>\n       `{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"currentWeight\": \"include\" }`\n   - map violations with violated height and NOT violated currentWeight:<br/>\n       `{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"currentWeight\": \"exclude\" }`\n   - map violations with violated height, violation or non-violation of currentWeight doesn't\n       matter:<br/>\n       `{ \"category\": \"category1\", \"type\": \"restriction\",\"height\": \"include\", \"currentWeight\": \"ignore\" }`\n   - map violations of avoiding an area or a segment:<br/>\n       `{ \"category\": \"category1\", \"type\": \"avoidAreasAndSegments\" }`\n   - map violations of traffic-related blockages outside of bridges:<br/>\n       `{ \"category\": \"category1\", \"type\": \"traffic\", \"bridge\": \"exclude\" }`\n\nUnless include or exclude is stated, grossWeight or height can be\nmapped regardless, if it is timeDependent or on a bridge.\nPlease see `matrix` description in the response section for more\ninformation about error codes.\n\nIf additional types of restrictions are supported for mapping in the\nfuture, they will default to \"ignore\" to ensure consistent results.\n\nA violation mapping item belongs to either of two categories.\n\nMappings of type `traffic` or `avoidAreasAndSegments` are only supported for\ntransport modes `car` and `truck`.\n","items":{"$ref":"#/components/schemas/ViolationMappingItem"}},"ViolationMappingItem":{"description":"Generic base type for violation mappings. Violation mappings belong to either of two categories. \nMappings belonging to the same category are evaluated together and if they apply, it is reflected \nin the errorCodes of the resulting matrix.\nTwo types of mappings are supported: violated restrictions or traffic blockages. These cannot \nbe combined into a single violation mapping item; each item must belong to one specific type.\n","discriminator":{"propertyName":"type","mapping":{"restriction":"#/components/schemas/ViolationMappingItemRestriction","traffic":"#/components/schemas/ViolationMappingItemTraffic","avoidAreasAndSegments":"#/components/schemas/ViolationMappingItemAvoidAreasAndSegments"}},"oneOf":[{"$ref":"#/components/schemas/ViolationMappingItemRestriction"},{"$ref":"#/components/schemas/ViolationMappingItemTraffic"},{"$ref":"#/components/schemas/ViolationMappingItemAvoidAreasAndSegments"}]},"ViolationMappingCategory":{"type":"string","description":"The category number assigned to this violation mapping item. Two categories are supported, with values 1 and 2 \navailable to categorize the mapping items.\n","enum":["category1","category2"],"example":"category1"},"ViolationMappingItemAvoidAreasAndSegments":{"type":"object","properties":{"type":{"type":"string","description":"Allows the mapping of user specified avoidance of areas or individual segments. \nThis type of mapping is supported for transport modes `car` and `truck`.\n","enum":["avoidAreasAndSegments"],"example":"avoidAreasAndSegments"},"category":{"$ref":"#/components/schemas/ViolationMappingCategory"}},"required":["type","category"]},"ViolationMappingItemTraffic":{"type":"object","properties":{"type":{"type":"string","description":"Allows the mapping of traffic related blockages. \nMapping of traffic blockages is supported for transport modes `car` and `truck`.\n","enum":["traffic"],"example":"traffic"},"category":{"$ref":"#/components/schemas/ViolationMappingCategory"},"bridge":{"description":"Specifies whether the violation is considered only if it occurs on a\nbridge, only if it does not occur on a bridge, or in both cases.\n","allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"ignore"}},"required":["type","category"]},"ViolationMappingItemRestriction":{"type":"object","properties":{"type":{"type":"string","description":"Allows the mapping of violations of selected restrictions.\nMapping of violated restrictions is supported for transport mode `truck`.\n\nFor the type of `restriction`, at least one of the concrete restrictions, e.g., `grossWeight`,\n`currentWeight` or `height`, must be specified with value `include` or `ignore`. For example:\n-  `{ \"category\": \"category1\", \"type\": \"restriction\", \"grossWeight\": \"include\" }`\n-  `{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"ignore\" }`\n","enum":["restriction"],"example":"restriction"},"category":{"$ref":"#/components/schemas/ViolationMappingCategory"},"bridge":{"description":"Specifies whether the violation is considered only if it occurs on a\nbridge, only if it does not occur on a bridge, or in both cases.\n","allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"ignore"},"grossWeight":{"description":"Indicates whether gross weight violation is included or excluded\nfor this category.\n\n**NOTE:** A weight restriction can be of type `unknown`, meaning it\nmay apply to either gross or current weight. If both the vehicle’s\ncurrent_weight and gross_weight violate an `unknown` weight restriction,\nand the user requests a violation mapping for only one of them\n(e.g., using gross_weight:include or current_weight:include), the\nservice will assign the `unknown` weight restriction to the included\nweight type.\nSimilarly, if either the vehicle’s current_weight or gross_weight\nviolates an `unknown` weight restriction, the service will assign\nthe `unknown` weight restriction to the specific weight type that\nexceeds the allowed limit.For example:\n* gross_weight=15000, current_weight=10000\n* weight_restriction_type=Unknown with value 12000\n* Since gross_weight (15,000) exceeds the restriction (12,000),\nthe `unknown` weight restriction will be mapped to gross_weight\nrather than current_weight.\n\nUser in this case will get an error code 3.\n\n* Please note that a restriction of type `unknown` may change To\n`gross` or `current` when data becomes available in future. Similarly\na restriction of type `gross` or `current` may also change to a\ndifferent type if actual regulation changes.\n","allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"exclude"},"currentWeight":{"description":"Indicates whether current weight violation is included or excluded\nfor this category.\n\n**NOTE:** A weight restriction can be of type `unknown`, meaning it\nmay apply to either gross or current weight. If both the vehicle’s\ncurrent_weight and gross_weight violate an `unknown` weight restriction,\nand the user requests a violation mapping for only one of them\n(e.g., using gross_weight:include or current_weight:include), the\nservice will assign the `unknown` weight restriction to the included\nweight type.\nSimilarly, if either the vehicle’s current_weight or gross_weight\nviolates an `unknown` weight restriction, the service will assign\nthe `unknown` weight restriction to the specific weight type that\nexceeds the allowed limit.For example:\n* gross_weight=15000, current_weight=10000\n* weight_restriction_type=Unknown with value 12000\n* Since gross_weight (15,000) exceeds the restriction (12,000),\nthe `unknown` weight restriction will be mapped to gross_weight\nrather than current_weight.\n\nUser in this case will get an error code 3.\n\n* Please note that a restriction of type `unknown` may change To\n`gross` or `current` when data becomes available in future. Similarly\na restriction of type `gross` or `current` may also change to a\ndifferent type if actual regulation changes.\n","allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"exclude"},"height":{"description":"Indicates whether height violation is included or excluded from this\ncategory.\n","allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"exclude"},"timeDependent":{"description":"Specifies whether the time dependent violation of restrictions is included, \nexcluded or ignored for this category.\n","allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"ignore"}},"required":["type","category"]},"ViolationMappingOptionalField":{"type":"string","description":"Defines how a specific violation attribute should be handled within a\nviolation mapping. Use:\n  `include`: the violated restriction is added to a mapped\n  category instead of causing a hard error code 3.\n           \n  `exclude`: the violated restriction is not added to a mapped\n  category and still causes an error code 3. This is the default for\n  height and grossWeight.\n           \n  `ignore`: the algorithm is not taking the restriction or\n  property / attribute of the road into consideration.\n  This is the default attribute for restrictions on bridge or time-dependent\n","enum":["include","exclude","ignore"]},"VehicleRestTime":{"x-maturity":"beta","description":"**BETA** Defines rest times for a vehicle shift for driving, working and duty.\nEither a rest time or a break can be specified.\n","type":"object","properties":{"driving":{"$ref":"#/components/schemas/VehicleDrivingRestTime"},"working":{"$ref":"#/components/schemas/VehicleWorkingRestTime"},"dutyRule":{"$ref":"#/components/schemas/VehicleDutyRestTime"}}},"VehicleDrivingRestTime":{"x-maturity":"beta","description":"**BETA** Defines driving rest time","oneOf":[{"$ref":"#/components/schemas/VehicleFixedDurationRestTime"}],"discriminator":{"propertyName":"type","mapping":{"fixedDuration":"#/components/schemas/VehicleFixedDurationRestTime"}}},"VehicleWorkingRestTime":{"x-maturity":"beta","description":"**BETA** Defines working rest time","oneOf":[{"$ref":"#/components/schemas/VehicleFixedDurationRestTime"}],"discriminator":{"propertyName":"type","mapping":{"fixedDuration":"#/components/schemas/VehicleFixedDurationRestTime"}}},"VehicleFixedDurationRestTime":{"x-maturity":"beta","description":"**BETA** Defines type of rest time configuration with fixed duration","type":"object","properties":{"type":{"description":"Type of rest time configuration","type":"string","enum":["fixedDuration"],"example":"fixedDuration"},"interval":{"description":"Determines after how long (in seconds) the break should occur","type":"integer","format":"int64","minimum":0,"maximum":604800,"example":16200},"breakDuration":{"allOf":[{"$ref":"#/components/schemas/Duration"}],"minimum":60,"maximum":172800}},"required":["type","interval","breakDuration"]},"VehicleFixedDutyRestTime":{"x-maturity":"alpha","description":"**ALPHA** Defines type of duty rest time configuration with fixed duration\n\nDisclaimer: This is an experimental feature under development\nTo enable it, add `restTimes` flag to `experimentalFeatures` configuration in the problem.\n","type":"object","properties":{"type":{"description":"Type of duty rest time configuration","type":"string","enum":["fixedDuration"],"example":"fixedDuration"},"minOffTime":{"description":"A minimum time between consecutive working days/duties in seconds","allOf":[{"$ref":"#/components/schemas/Duration"}],"minimum":3600,"maximum":172800},"maxDrivingTime":{"description":"A max driving duration per duty/day in seconds","type":"integer","format":"int64","minimum":14400,"maximum":604800,"example":16200},"maxWorkingTime":{"description":"A max working duration per duty/day in seconds","type":"integer","format":"int64","minimum":14400,"maximum":604800,"example":16200}},"required":["type","minOffTime"]},"VehicleDutyRestTime":{"x-maturity":"alpha","description":"**ALPHA** Defines duty rest time","oneOf":[{"$ref":"#/components/schemas/VehicleFixedDutyRestTime"}],"discriminator":{"propertyName":"type","mapping":{"fixedDuration":"#/components/schemas/VehicleFixedDutyRestTime"}}},"Matrix":{"x-maturity":"alpha","description":"**ALPHA** Routing matrix for vehicle profile.\n\nThe matrix has to contain 2 flat arrays, `travelTimes` and `distances`. \nEach array represents a 2D matrix where rows correspond to `origins` and columns to `destinations`.\n\nThe `k`-th position in the array corresponds to the `(i, j)` position in the matrix defined by the following relationship:\n```\nk = num_destinations * i + j,\n```\nwhere `i` is origin and `j` is destination.\n\nImportant: The order of elements in both arrays is crucial. \nData should be arranged  in the same order as in `origins` array.\n\nIf there is no route between `i` and `j` or a route violates some options, \nanother `errorCodes` array should be included with a detailed error code for each pair of positions.\n","type":"object","properties":{"origins":{"description":"An ordered list of origins used in the routing matrix","type":"array","minItems":2,"maxItems":1000,"items":{"$ref":"#/components/schemas/MatrixOrigin"}},"travelTimes":{"type":"array","description":"Corresponds to 2D matrix of travelTimes (in seconds).","minItems":4,"maxItems":1000000,"items":{"type":"integer","format":"int32"}},"distances":{"type":"array","description":"Corresponds to 2D matrix of distances (in meters).","minItems":4,"maxItems":1000000,"items":{"type":"integer","format":"int32"}},"errorCodes":{"type":"array","description":"Contains error codes for entries in the matrix if there is no route between `i` and `j`.\nOptional, no need to be added if all routes exist.\n\n| Value |  Reason                                                                                        |\n|-------|------------------------------------------------------------------------------------------------|\n| 0     | No error, a route is available                                                                 |\n| 1     | No route between the origin and destination exists                                             |\n| 2     | No valid starting or ending point for the route between the origin and destination locations   |\n| 3     | The route between the origin and destination exists but includes violations that could make it potentially unusable |\n| 4     | The origin and destination locations are either just inside the acceptable range or completely outside the allowed area. Because of this, there are no valid route start or end points for origin and destination locations |\n| 99    | Unknown error (for debugging and handling unexpected situations)                               |\n","minItems":4,"maxItems":1000000,"items":{"type":"integer","format":"int32","example":1}}},"required":["origins","travelTimes","distances"]},"LargeMatrix":{"x-maturity":"alpha","description":"**ALPHA** Routing matrix for vehicle profile.\n\nThe matrix has to contain 2 flat arrays, `travelTimes` and `distances`. \nEach array represents a 2D matrix where rows correspond to `origins` and columns to `destinations`.\n\nThe `k`-th position in the array corresponds to the `(i, j)` position in the matrix defined by the following relationship:\n```\nk = num_destinations * i + j,\n```\nwhere `i` is origin and `j` is destination.\n\nImportant: The order of elements in both arrays is crucial. \nData should be arranged  in the same order as in `origins` array.\n\nIf there is no route between `i` and `j` or a route violates some options, \nanother `errorCodes` array should be included with a detailed error code for each pair of positions.\n","type":"object","properties":{"origins":{"description":"An ordered list of origins used in the routing matrix","type":"array","minItems":2,"maxItems":10000,"items":{"$ref":"#/components/schemas/MatrixOrigin"}},"travelTimes":{"type":"array","description":"Corresponds to 2D matrix of travelTimes (in seconds).","minItems":4,"maxItems":100000000,"items":{"type":"integer","format":"int32"}},"distances":{"type":"array","description":"Corresponds to 2D matrix of distances (in meters).","minItems":4,"maxItems":100000000,"items":{"type":"integer","format":"int32"}},"errorCodes":{"type":"array","description":"Contains error codes for entries in the matrix if there is no route between `i` and `j`.\nOptional, no need to be added if all routes exist.\n\n| Value |  Reason                                                                                        |\n|-------|------------------------------------------------------------------------------------------------|\n| 0     | No error, a route is available                                                                 |\n| 1     | No route between the origin and destination exists                                             |\n| 2     | No valid starting or ending point for the route between the origin and destination locations   |\n| 3     | The route between the origin and destination exists but includes violations that could make it potentially unusable |\n| 4     | The origin and destination locations are either just inside the acceptable range or completely outside the allowed area. Because of this, there are no valid route start or end points for origin and destination locations |\n| 99    | Unknown error (for debugging and handling unexpected situations)                               |\n","minItems":4,"maxItems":100000000,"items":{"type":"integer","format":"int32","example":1}}},"required":["origins","travelTimes","distances"]},"MatrixOrigin":{"description":"An ordered list of origins used in the routing matrix","oneOf":[{"$ref":"#/components/schemas/MatrixOriginId"}],"discriminator":{"propertyName":"type","mapping":{"id":"#/components/schemas/MatrixOriginId"}}},"MatrixOriginId":{"type":"object","description":"Specifies the origin location used in custom matrix.","properties":{"type":{"type":"string","enum":["id"],"example":"id"},"id":{"description":"Specifies id of the origin. Avoid referencing any sensitive or personal information, such as names, addresses,\ninformation about a delivery or service.\n","allOf":[{"$ref":"#/components/schemas/Id"}]}},"required":["type","id"]},"VehicleFuel":{"description":"**ALPHA** Fuel parameters to be used for calculating consumption and related CO2 emission.\nThese are not taken into account for optimization.\n**Note**: `speedFactor` parameter does not influence the fuel consumption and CO2 emission.\n","type":"object","properties":{"type":{"description":"Vehicle fuel type (diesel, petrol, lpg, etc.) required for calculation of consumption and CO2 emission.\n","type":"string","x-extensible-enum":["diesel","petrol","lpg","cng","lng","ethanol","propane","hydrogen"],"example":"petrol"},"freeFlowSpeedTable":{"description":"Function curve specifying consumption rate at a given speed.\n\nThe format of the string is a comma-separated list of numbers, as follows:\n\n```\n<SPEED_0>,<CONSUMPTION_0>,<SPEED_1>,<CONSUMPTION_1>,...,<SPEED_N>,<CONSUMPTION_N>\n```\n\nwhere speed values are strictly increasing, non-negative integers in units of (m/s), and\nconsumption values are non-negative floating point values.\n\n| Vehicle Type         | Unit                             |\n| -------------------- | -------------------------------- |\n| Diesel, Petrol & LPG | l/m i.e., liters per meter       |\n| CNG                  | kg/m i.e., kilograms per meter   |\n\nThe function is linearly interpolated between data points. For speeds less than `SPEED_0`\nthe value of the function is `CONSUMPTION_0`, and for speeds greater than `SPEED_N` the\nvalue of the function is `CONSUMPTION_N`.\n","type":"string","example":"0,0.00024,4,0.00024,10,0.00026,15,0.0002,19,0.00021,23,0.00024,26,0.00026,29,0.00026,32,0.0003,35,0.00034,38,0.00035"},"trafficSpeedTable":{"description":"Function curve specifying consumption rate at a given traffic-reduced speed on a flat stretch of road.\n\nThe format of the string is a comma-separated list of numbers, as follows:\n\n```\n<SPEED_0>,<CONSUMPTION_0>,<SPEED_1>,<CONSUMPTION_1>,...,<SPEED_N>,<CONSUMPTION_N>\n```\n\nwhere speed values are strictly increasing, non-negative integers in units of (m/s), and\nconsumption values are non-negative floating point values.\n\n| Vehicle Type         | Unit                             |\n| -------------------- | -------------------------------- |\n| Diesel, Petrol & LPG | l/m i.e., liters per meter       |\n| CNG                  | kg/m i.e., kilograms per meter   |\n\nThe function is linearly interpolated between data points. For speeds less than `SPEED_0`\nthe value of the function is `CONSUMPTION_0`, and for speeds greater than `SPEED_N` the\nvalue of the function is `CONSUMPTION_N`.\n","type":"string","example":"0,0.00024,4,0.00024,10,0.00026,15,0.0002,19,0.00021,23,0.00024,26,0.00026,29,0.00026,32,0.0003,35,0.00034,38,0.00035"},"additionalConsumption":{"description":"Rate of fuel (in l/s for diesel, petrol & LPG, kg/s for CNG) consumed by the vehicle for any other reason\nadditional to fuel consumption for speed.\n","type":"number","minimum":0,"example":1.8},"ascent":{"description":"Rate of fuel consumed per meter rise in elevation (in l/m for diesel, petrol & LPG, kg/m for CNG).","type":"number","minimum":0,"example":0.1}},"required":["type","freeFlowSpeedTable"]},"MatrixId":{"type":"string","x-maturity":"alpha","description":"**ALPHA** Unique identifier (UUID) of the uploaded matrix","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","minLength":36,"maxLength":36,"example":"87aec2ce-b697-11e8-96f8-529269fb1459"},"MatrixUploadResponse":{"x-maturity":"alpha","description":"Response of the uploaded matrix","type":"object","properties":{"matrixId":{"$ref":"#/components/schemas/MatrixId"}},"required":["matrixId"]},"VehicleRecharges":{"x-maturity":"alpha","description":"**ALPHA** Specifies vehicle recharge stations data.","properties":{"maxDistance":{"description":"Maximum traveled distance before recharge station has to be visited (in meters).","type":"integer","format":"int32","minimum":1,"maximum":10000000,"example":10000},"stations":{"description":"Specifies list of recharge station.","type":"array","items":{"$ref":"#/components/schemas/VehicleRechargeStation"},"minItems":1,"maxItems":20}},"required":["maxDistance"]},"VehicleRechargeStation":{"x-maturity":"alpha","description":"**ALPHA** Specifies a place where vehicle can recharge.","type":"object","properties":{"times":{"$ref":"#/components/schemas/TimeWindows"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"duration":{"$ref":"#/components/schemas/Duration"},"tag":{"$ref":"#/components/schemas/PlaceTag"}},"required":["location","duration"]},"Tour":{"description":"Represents a [pre-optimized route](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/solution.html#list-of-tours) \nthat has been completed by a single vehicle, encompassing all assigned activities, such as pickups, deliveries, breaks, and so on.\n","type":"object","properties":{"vehicleId":{"$ref":"#/components/schemas/Id"},"typeId":{"$ref":"#/components/schemas/Id"},"stops":{"description":"The list of specific locations where a vehicle is scheduled to halt for various activities, \nsuch as pickups, deliveries, or breaks.\n","type":"array","items":{"$ref":"#/components/schemas/Stop"}},"statistic":{"$ref":"#/components/schemas/Statistic"},"shiftIndex":{"$ref":"#/components/schemas/ShiftIndex"}},"required":["vehicleId","typeId","stops","statistic","shiftIndex"]},"Stop":{"description":"Represents a [specific geographical location](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/solution.html#stop) where a vehicle is scheduled to perform one or more \nactivities related to jobs, such as `pickups`, `deliveries`, or `breaks`.\n","type":"object","properties":{"location":{"$ref":"#/components/schemas/Location"},"time":{"$ref":"#/components/schemas/Schedule"},"load":{"$ref":"#/components/schemas/Unit"},"distance":{"description":"The total distance (in meters) that a vehicle travelled from the depot (the start location of the tour) up \nto the stop location.\n","type":"integer","format":"int64","minimum":0,"example":1024},"intraStopDistance":{"description":"The total distance (in meters) between activities in this Stop plus the way back to the stop location\nIf the stop location is equal to all activity locations in the stop it is 0.\n","type":"integer","format":"int64","minimum":0,"example":1024},"activities":{"description":"Provides a list of activities like `pickup`, `delivery`, `arrival`, `break`, and so on, scheduled \nto occur at the stop during the tour.\n","type":"array","items":{"$ref":"#/components/schemas/Activity"}},"routeDetails":{"$ref":"#/components/schemas/RouteDetails"}},"required":["time","load","activities"]},"Activity":{"description":"An activity is defined as a planned task to be performed at a specific location and time within a stop on a tour. Each activity has properties like `jobId`, `type`, `location`, `time`, and `jobTag`. The `type` property specifies the activity type, for example, `pickup` or `delivery`.\n\n**Note**: If you omit location or time from the activity definition, then the service uses the values defined for the parent stop instead.\n","type":"object","properties":{"jobId":{"description":"A unique identifier for a job, provided when submitting a problem request. It allows tracking \nand retrieval of specific job-related information.\n\n**Note**: Do not include any personal information within the `JobId`. For example, avoid using a license plate number that could \nbe used to identify the driver.\n","allOf":[{"$ref":"#/components/schemas/Id"}]},"jobTag":{"description":"Optionally, allows adding extra information related to a specific job for easier identification or categorization. \nFor example, you could tag jobs based on the time of day they need to be delivered, such \nas `\"morning-delivery\"`.\n\n**Note**: Do not include any personal information within the `JobTag`. For example, avoid using a \nlicense plate number that could be used to identify the driver.\n","allOf":[{"$ref":"#/components/schemas/PlaceTag"}]},"type":{"$ref":"#/components/schemas/ActivityType"},"location":{"$ref":"#/components/schemas/Location"},"time":{"$ref":"#/components/schemas/Interval"},"notices":{"description":"A list of notices that provide additional information about the request. For example, these notices might \ninclude suggestions on how to improve the problem formulation.\n","type":"array","items":{"$ref":"#/components/schemas/Notice"}}},"required":["jobId","type"]},"ActivityType":{"description":"The available types of planned tasks to be performed at a specific location and time as part of a stop.\n","type":"string","enum":["departure","arrival","pickup","delivery","break","drivingRestTime","workingRestTime","reload","pudo","dutyDrivingRestTime","dutyWorkingRestTime","recharge"],"example":"delivery"},"Schedule":{"description":"Specifies the expected `arrival` and `departure` times at a particular stop.\n","type":"object","properties":{"arrival":{"$ref":"#/components/schemas/DateAndTime"},"departure":{"$ref":"#/components/schemas/DateAndTime"}},"required":["arrival","departure"]},"Interval":{"description":"Represents an activity interval.","type":"object","properties":{"arrival":{"$ref":"#/components/schemas/DateAndTime"},"start":{"$ref":"#/components/schemas/DateAndTime"},"end":{"$ref":"#/components/schemas/DateAndTime"}},"required":["start","end"]},"Statistic":{"description":"Provides [metrics](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/concepts/solution.html#statistic) about \nthe performance and efficiency of vehicles across all tours. These metrics include a range of data, offering \ninsights into the costs, distances, and durations that are associated with the optimized route.\n","type":"object","properties":{"cost":{"description":"Represents the total cost of all tours within a solution, calculated in abstract units.","type":"number","format":"double","minimum":0,"example":1024},"distance":{"description":"Indicates the cumulative distance, measured in meters, that all vehicles have traveled across all tours.\n","type":"integer","format":"int64","minimum":0,"example":32000},"intraStopDistance":{"description":"The total distance (in meters) between activities inside all the Stops plus the way back to the \nstop locations.\n","type":"integer","format":"int64","minimum":0,"example":1024},"duration":{"$ref":"#/components/schemas/Duration"},"times":{"$ref":"#/components/schemas/Timing"},"violations":{"$ref":"#/components/schemas/Violations"},"consumption":{"description":"**ALPHA** The estimated [net fuel consumption](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/co-emissions.html) that is measured in distinct units for different types of fuel. \nFor diesel, petrol, and Liquefied Petroleum Gas (LPG) vehicles, fuel consumption is expressed in liters. \nIn contrast, Compressed Natural Gas (CNG) vehicles use kilograms to measure their fuel consumption.\n","type":"number","format":"double","example":2.1821},"co2Emission":{"description":"**ALPHA** The estimated CO2 emissions for this section of the route that are calculated based on the fuel type and consumption. \nThe unit of measurement is kilograms.\n","type":"number","format":"double","example":5.761}},"required":["cost","distance","duration","times"]},"Violations":{"x-maturity":"alpha","description":"**ALPHA** Contains information about tour violations.\n","type":"object","properties":{"timeWindows":{"$ref":"#/components/schemas/TimeWindowsViolations"}}},"TimeWindowsViolations":{"x-maturity":"alpha","description":"**ALPHA** Indicates the total number and the sum of seconds by which all [soft time windows](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/soft-time-windows.html) were violated.\nViolations are instances where the planned arrival times at specific locations do not comply with the predefined hard constraints allocated for those stops.\n","type":"object","properties":{"count":{"description":"The total number of times soft time windows were violated.","type":"number","example":1},"total":{"description":"The total sum of seconds by which soft time windows were violated.","type":"number","example":10}},"required":["count","total"]},"RouteDetails":{"description":"**ALPHA** Represents the specific information about the path a vehicle takes between the current stop and the previous one, \nin the form of a [polyline representation of the route](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/polylines.html).\n","type":"object","properties":{"polyline":{"description":"A line string in the [flexible polyline](https://github.com/heremaps/flexible-polyline) format, which includes coordinates in the WGS84 coordinate system. \nIf elevation data are present, it will be included. These route details can be used to visualize the route on a map.\n","type":"string","example":"BGot1nvC729hQoWnKgFvCsEjDwCjDoBrEAzF7BjInLnuB_JrnBnL3rB7BvH3Nz8B7GzZvHjczFnVrE3X8BTwgBnG8LjDjDrOrEjSnGnaxBpF"}}},"Id":{"description":"A unique identifier of an entity. Avoid referencing any confidential or personal information\nas part of the `Id`.\n","type":"string","pattern":"^[a-zA-Z0-9_-]+$","minLength":1,"maxLength":128,"example":"7f3423c2-784a-4983-b472-e14107d5a54a"},"Duration":{"description":"Represents a time duration in seconds. Used to specify service times at job locations, waiting times, driving times, breaks, and other time-based constraints in tour planning.\n","type":"integer","format":"int64","minimum":0,"maximum":604800,"example":180},"DateAndTime":{"description":"Represents a date-time value formatted according to RFC3339. Used to specify precise timestamps for job time windows, vehicle shift start and end times, break times, and other time-based constraints. Times in the solution are always returned in UTC.\n","type":"string","format":"date-time","minLength":1,"maxLength":32,"example":"2020-07-04T00:00:00Z"},"Unit":{"description":"Represents multidimensional units of measure for vehicle capacity and job demand. Can specify volume, mass, weight, number of items, or other accumulative measures. Values at corresponding array positions are compared element-by-element during capacity validation. For example, `[100, 50]` could represent 100 kg weight and 50 cubic units of volume.\n\nFor more information, see [Solve the capacitated vehicle routing problem](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/capacitated-vrp.html).\n","type":"array","minItems":1,"maxItems":10,"items":{"type":"integer","minimum":0,"maximum":2147483647},"example":[100,5]},"TimeWindows":{"description":"Represents multiple hard constraint time windows. Each time window specifies a time period during which an activity (such as a delivery or pickup) must start. No violations are allowed - if a job cannot be served within any of the specified time windows, it might remain unassigned.\n\nFor more information, see [Limit the start time of activities through time windows](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/time-windows.html).\n","type":"array","minItems":0,"maxItems":4,"items":{"$ref":"#/components/schemas/TimeWindow"},"example":[["2020-07-04T08:00:00Z","2020-07-04T10:00:00Z"],["2020-07-04T16:00:00Z","2020-07-04T18:00:00Z"]]},"TimeWindow":{"description":"Represents a single hard constraint time window. The first element is the lower bound (earliest start time) and the second element is the upper bound (latest start time) in RFC3339 format. The job task must begin within this time window or the job may remain unassigned.\n","type":"array","minItems":2,"maxItems":2,"items":{"$ref":"#/components/schemas/DateAndTime"},"example":["2020-07-04T08:00:00Z","2020-07-04T10:00:00Z"]},"SoftTimeWindow":{"x-maturity":"alpha","description":"**ALPHA** Represents a single soft constraint time window that allows flexibility when minor delays are acceptable. Consists of a hard constraint boundary (absolute time limits that cannot be exceeded) and a preferred time window (soft constraint), placed within the hard constrain boundary, for example:\n \nExample:\n\n```\nAbsolute:   09:00 |---------------------------| 13:00 \nPreferred:          10:00 |-----------| 12:00\n```\n\nViolations of the preferred time window are penalized but allowed, while violations of the hard boundary result in unassigned jobs. To enable this experimental feature, add the `softTimeWindows` flag to `experimentalFeatures` configuration in the problem.\n\nFor more information, see [Set soft time windows](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/soft-time-windows.html).\n","type":"object","properties":{"from":{"$ref":"#/components/schemas/SoftTime"},"to":{"$ref":"#/components/schemas/SoftTime"}},"required":["from","to"]},"SoftTime":{"x-maturity":"alpha","description":"**ALPHA** Represents a single soft time window instance where time unit is defined in the RFC3339 format.\n","type":"object","properties":{"time":{"description":"The hard constraint time boundary that cannot be exceeded. This represents the absolute time limit for the activity - exceeding this time results in the job being unassigned.","allOf":[{"$ref":"#/components/schemas/DateAndTime"}]},"preferred":{"description":"The preferred (soft constraint) time boundary that can be exceeded. Violations of this preferred time are allowed but result in penalties applied during optimization to minimize deviations.\n","allOf":[{"$ref":"#/components/schemas/DateAndTime"}]},"penalty":{"$ref":"#/components/schemas/Penalty"}},"required":["time"]},"Penalty":{"x-maturity":"alpha","description":"**ALPHA** Specifies the penalty function applied when the preferred (soft) time window is violated. The penalty score is an abstract numeric value used by the optimization algorithm to evaluate solutions - it does not directly affect cost or duration parameters. The system minimizes penalty scores by scheduling activities as close to preferred time boundaries as possible. Linear penalty is applied by default.\n","oneOf":[{"$ref":"#/components/schemas/LinearPenalty"},{"$ref":"#/components/schemas/QuadraticPenalty"}],"discriminator":{"propertyName":"type","mapping":{"linear":"#/components/schemas/LinearPenalty","quadratic":"#/components/schemas/QuadraticPenalty"}}},"LinearPenalty":{"x-maturity":"alpha","description":"**ALPHA** Linear penalty function that increases at a constant rate for each unit of time deviation from the preferred time window. This penalty type imposes costs immediately and consistently for any deviation, maintaining strict adherence to the schedule. Suitable for scenarios where minor delays are acceptable but should be minimized, such as grocery delivery or passenger pickup.\n","properties":{"type":{"type":"string","enum":["linear"],"example":"linear"}},"required":["type"]},"QuadraticPenalty":{"x-maturity":"alpha","description":"**ALPHA** Quadratic penalty function that increases exponentially with larger deviations from the preferred time window. Provides flexibility for small delays but strongly discourages large deviations. Suitable for time-sensitive scenarios where lateness has serious consequences, such as medical deliveries, perishable goods transport, or executive transport.\n","properties":{"type":{"type":"string","enum":["quadratic"],"example":"quadratic"}},"required":["type"]},"Location":{"description":"Represents a geospatial location defined by latitude and longitude coordinates in WGS-84 format. Used to specify vehicle start and end positions, job locations, and other geographic points in tour planning.\n","type":"object","properties":{"lat":{"description":"Specifies the latitude coordinate in WGS-84 degrees.","type":"number","format":"double","minimum":-90,"maximum":90,"example":52.53088},"lng":{"description":"Specifies the longitude coordinate in WGS-84 degrees.","type":"number","format":"double","minimum":-180,"maximum":180,"example":13.38471},"id":{"description":"Specifies the location ID. Avoid referencing any sensitive or personal information, such as names, addresses, or information about a delivery or service. If specified and custom matrix provided, there is no need to pass latitude and longitude.\n","allOf":[{"$ref":"#/components/schemas/Id"}]}}},"RoutingLocation":{"description":"Represents a geographic location with coordinates and optional routing hints. Used to specify vehicle depot locations, job sites, break locations, recharge stations, and other geographic points in tour planning. Includes latitude, longitude, optional location ID, optional side of street hint for preferred stopping side, and optional name hint to improve routing accuracy.\n","type":"object","properties":{"lat":{"description":"Specifies the latitude coordinate in WGS-84 degrees.","type":"number","format":"double","minimum":-90,"maximum":90,"example":52.53088},"lng":{"description":"Specifies the longitude coordinate in WGS-84 degrees.","type":"number","format":"double","minimum":-180,"maximum":180,"example":13.38471},"sideOfStreetHint":{"$ref":"#/components/schemas/SideOfStreetHint"},"nameHint":{"description":"Directs the route calculation to search for a location with a matching or similar name, improving routing accuracy when location names are known.","type":"string","example":"Friedrich-List-Straße"},"id":{"description":"Specifies the location ID. Avoid referencing any sensitive or personal information, such as names, addresses, or information about a delivery or service. If specified and custom matrix provided, there is no need to pass latitude and longitude.\n","allOf":[{"$ref":"#/components/schemas/Id"}]}}},"Skills":{"description":"A list of skills required by a job or provided by a vehicle type. Only vehicles with all the skills required by a job can serve that job. Use skills to match specific vehicle capabilities to job requirements, such as `fridge` for refrigerated transport, `plumber` for service jobs, or `heavy_duty` for large loads. If no vehicle with matching skills has sufficient capacity or time, jobs requiring those skills will remain unassigned.\n\nFor more information, see [Assign jobs based on skills](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/skills.html).\n","type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9_-]+$"},"example":["fridge"]},"Timing":{"description":"Contains detailed time consumption information for various activity types during a tour. All durations are in seconds and represent the total time spent on different activities. Includes driving time between locations, serving time for job activities, waiting time to meet time window constraints, stopping time, break time, and intra-stop time.\n","type":"object","properties":{"driving":{"$ref":"#/components/schemas/Duration"},"serving":{"$ref":"#/components/schemas/Duration"},"waiting":{"$ref":"#/components/schemas/Duration"},"stopping":{"$ref":"#/components/schemas/Duration"},"break":{"$ref":"#/components/schemas/Duration"},"intraStop":{"$ref":"#/components/schemas/Duration"}},"required":["driving","serving","waiting","break","stopping"],"example":{"driving":3600,"serving":600,"waiting":180,"stopping":100,"break":1200}},"ShiftIndex":{"description":"Index of a vehicle shift used to distinguish between different shifts for the same vehicle. Since a vehicle can have at most 7 shifts, the value must be between 0 and 6. The shift index identifies which shift in the vehicle type's shifts array a tour corresponds to, allowing the same vehicle to operate across multiple time periods.\n\nFor more information, see [Include multiple shifts](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/multiple-shifts.html).\n","type":"integer","minimum":0,"maximum":6,"default":0,"example":0},"Coordinate":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number","format":"double","description":"Latitude in WGS-84 degrees."},"lng":{"type":"number","format":"double","description":"Longitude in WGS-84 degrees."}},"example":{"lat":52.53787,"lng":13.40896}},"SideOfStreetHint":{"description":"Provides a hint indicating the preferred side of the street for a job location. This ensures vehicles stop on the most convenient or safest side of the road to perform the delivery or pickup. The hint is a geographic point next to the street where the vehicle should stop.\n\nAll locations with the same coordinates must have the same side of street attribute.\n\nFor more information, see [Optimize routes with side-of-street preferences](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/side-of-street.html).\n","type":"object","properties":{"lat":{"description":"Specifies the latitude coordinate in WGS-84 degrees of the preferred stopping point.","type":"number","format":"double","minimum":-90,"maximum":90,"example":52.53088},"lng":{"description":"Specifies the longitude coordinate in WGS-84 degrees of the preferred stopping point.","type":"number","format":"double","minimum":-180,"maximum":180,"example":13.38471},"matchSideOfStreet":{"description":"Determines how strictly the side of street hint should be applied during route calculation.\n\n* `always`: Always use the side of street hint for this location\n* `onlyIfDivided`: Only use the side of street hint when the road is divided (default)\n\nFor more information, see [Optimize routes with side-of-street preferences](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/side-of-street.html).\n","type":"string","enum":["always","onlyIfDivided"],"default":"onlyIfDivided","example":"onlyIfDivided"}},"required":["lat","lng"]},"Category":{"description":"Specifies a job category used in conjunction with vehicle mixing restrictions to prevent incompatible goods from being transported together. Categories are user-defined and can represent goods types such as `perishable`, `electronics`, `food`, `flammable`, etc. When mixing restrictions are configured on a vehicle shift, jobs with conflicting categories cannot be assigned to the same tour or sub-tour, depending on the restriction level.\n\nFor more information, see [Define mixed load restrictions](https://www.here.com/docs/bundle/tour-planning-api-developer-guide/page/topics/use-cases/mixing-restrictions.html).\n","type":"string","minLength":1,"maxLength":64,"pattern":"^[a-zA-Z0-9_-]+$","example":"food"},"Objective":{"oneOf":[{"$ref":"#/components/schemas/MinimizeUnassigned"},{"$ref":"#/components/schemas/MinimizeCost"},{"$ref":"#/components/schemas/OptimizeTourCount"},{"$ref":"#/components/schemas/OptimizeTaskOrder"},{"$ref":"#/components/schemas/MinimizeDistance"},{"$ref":"#/components/schemas/MinimizeDuration"},{"$ref":"#/components/schemas/OptimizeTaskPosition"}],"discriminator":{"propertyName":"type","mapping":{"minimizeUnassigned":"#/components/schemas/MinimizeUnassigned","minimizeCost":"#/components/schemas/MinimizeCost","optimizeTourCount":"#/components/schemas/OptimizeTourCount","optimizeTaskOrder":"#/components/schemas/OptimizeTaskOrder","minimizeDistance":"#/components/schemas/MinimizeDistance","minimizeDuration":"#/components/schemas/MinimizeDuration","optimizeTaskPosition":"#/components/schemas/OptimizeTaskPosition"}}},"AsTieBreakObjective":{"x-maturity":"alpha","oneOf":[{"$ref":"#/components/schemas/MinimizeCost"},{"$ref":"#/components/schemas/MinimizeDistance"},{"$ref":"#/components/schemas/MinimizeDuration"},{"$ref":"#/components/schemas/MinimizeTourOverlap"},{"$ref":"#/components/schemas/BalanceMaxLoad"},{"$ref":"#/components/schemas/BalanceActivities"},{"$ref":"#/components/schemas/BalanceDistance"},{"$ref":"#/components/schemas/BalanceDuration"},{"$ref":"#/components/schemas/ServeInClusters"},{"$ref":"#/components/schemas/MaximizePriorityJobs"},{"$ref":"#/components/schemas/OptimizeTaskPosition"},{"$ref":"#/components/schemas/MinimizeSoftTimeWindowViolations"},{"$ref":"#/components/schemas/MaximizeTerritoryJobs"}],"discriminator":{"propertyName":"type","mapping":{"minimizeCost":"#/components/schemas/MinimizeCost","minimizeDistance":"#/components/schemas/MinimizeDistance","minimizeDuration":"#/components/schemas/MinimizeDuration","minimizeTourOverlap":"#/components/schemas/MinimizeTourOverlap","balanceMaxLoad":"#/components/schemas/BalanceMaxLoad","balanceActivities":"#/components/schemas/BalanceActivities","balanceDistance":"#/components/schemas/BalanceDistance","balanceDuration":"#/components/schemas/BalanceDuration","serveInClusters":"#/components/schemas/ServeInClusters","maximizePriorityJobs":"#/components/schemas/MaximizePriorityJobs","optimizeTaskPosition":"#/components/schemas/OptimizeTaskPosition","minimizeSoftTimeWindowViolations":"#/components/schemas/MinimizeSoftTimeWindowViolations","maximizeTerritoryJobs":"#/components/schemas/MaximizeTerritoryJobs"}}},"AdvancedObjective":{"x-maturity":"alpha","oneOf":[{"$ref":"#/components/schemas/MinimizeUnassigned"},{"$ref":"#/components/schemas/MinimizeCost"},{"$ref":"#/components/schemas/MinimizeTours"},{"$ref":"#/components/schemas/MaximizeTours"},{"$ref":"#/components/schemas/MinimizeDistance"},{"$ref":"#/components/schemas/MinimizeDuration"},{"$ref":"#/components/schemas/BalanceMaxLoad"},{"$ref":"#/components/schemas/BalanceActivities"},{"$ref":"#/components/schemas/BalanceDistance"},{"$ref":"#/components/schemas/BalanceDuration"},{"$ref":"#/components/schemas/MaximizePriorityJobs"},{"$ref":"#/components/schemas/TourOrder"},{"$ref":"#/components/schemas/MaximizeTerritoryJobs"},{"$ref":"#/components/schemas/VisuallyAppealingTours"},{"$ref":"#/components/schemas/OptimizeTaskPosition"},{"$ref":"#/components/schemas/MinimizeTourOverlap"},{"$ref":"#/components/schemas/ServeInClusters"},{"$ref":"#/components/schemas/TieBreak"},{"$ref":"#/components/schemas/MinimizeSoftTimeWindowViolations"}],"discriminator":{"propertyName":"type","mapping":{"minimizeUnassigned":"#/components/schemas/MinimizeUnassigned","minimizeCost":"#/components/schemas/MinimizeCost","minimizeTours":"#/components/schemas/MinimizeTours","maximizeTours":"#/components/schemas/MaximizeTours","optimizeTaskOrder":"#/components/schemas/OptimizeTaskOrder","minimizeDistance":"#/components/schemas/MinimizeDistance","minimizeDuration":"#/components/schemas/MinimizeDuration","balanceMaxLoad":"#/components/schemas/BalanceMaxLoad","balanceActivities":"#/components/schemas/BalanceActivities","balanceDistance":"#/components/schemas/BalanceDistance","balanceDuration":"#/components/schemas/BalanceDuration","maximizePriorityJobs":"#/components/schemas/MaximizePriorityJobs","tourOrder":"#/components/schemas/TourOrder","maximizeTerritoryJobs":"#/components/schemas/MaximizeTerritoryJobs","visuallyAppealingTours":"#/components/schemas/VisuallyAppealingTours","optimizeTaskPosition":"#/components/schemas/OptimizeTaskPosition","minimizeTourOverlap":"#/components/schemas/MinimizeTourOverlap","serveInClusters":"#/components/schemas/ServeInClusters","tieBreak":"#/components/schemas/TieBreak","minimizeSoftTimeWindowViolations":"#/components/schemas/MinimizeSoftTimeWindowViolations"}}},"MinimizeUnassigned":{"description":"Minimizes the number of unassigned jobs","properties":{"type":{"type":"string","enum":["minimizeUnassigned"],"example":"minimizeUnassigned"}},"required":["type"]},"MinimizeCost":{"description":"Minimizes the total solution cost","properties":{"eagerDelivery":{"$ref":"#/components/schemas/EagerDeliveryOptions"},"type":{"type":"string","enum":["minimizeCost"],"example":"minimizeCost"}},"required":["type"]},"OptimizeTourCount":{"description":"Optimizes the number of vehicles used in the solution. The action parameter determines whether to maximize or minimize the vehicle count","properties":{"type":{"type":"string","enum":["optimizeTourCount"],"example":"optimizeTourCount"},"action":{"type":"string","enum":["maximize","minimize"],"example":"minimize"}},"required":["type","action"]},"MinimizeDistance":{"description":"An objective to minimize total distance.","properties":{"type":{"type":"string","enum":["minimizeDistance"],"example":"minimizeDistance"}},"required":["type"]},"MinimizeDuration":{"description":"An objective to minimize total duration calculated as the sum of all tour durations.","properties":{"type":{"type":"string","enum":["minimizeDuration"],"example":"minimizeDuration"}},"required":["type"]},"OptimizeTaskOrder":{"deprecated":true,"description":"Deprecated, please use OptimizeTaskPosition objective instead.\nAn objective to control order of job task activities in the tour. When specified, the task order is considered as a soft constraint and the solver tries to minimize amount of its violations.\n","properties":{"type":{"type":"string","enum":["optimizeTaskOrder"],"example":"optimizeTaskOrder"}},"required":["type"]},"OptimizeTaskPosition":{"description":"An objective to control position of job task activities in the tour. When specified, the task position is considered as a soft constraint and the solver tries to minimize amount of its violations.","properties":{"type":{"type":"string","enum":["optimizeTaskPosition"],"example":"optimizeTaskPosition"},"isConstrained":{"description":"If the property is set to true, then order is enforced as hard constraint.","type":"boolean","example":false,"default":false}},"required":["type"]},"BalanceMaxLoad":{"x-maturity":"alpha","description":"**ALPHA** An objective to balance max load across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"type":"string","enum":["balanceMaxLoad"],"example":"balanceMaxLoad"}},"required":["options","type"]},"BalanceActivities":{"x-maturity":"alpha","description":"**ALPHA** An objective to balance activities across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"type":"string","enum":["balanceActivities"],"example":"balanceActivities"}},"required":["options","type"]},"BalanceDistance":{"x-maturity":"alpha","description":"**ALPHA** An objective to balance distance across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"type":"string","enum":["balanceDistance"],"example":"balanceDistance"}},"required":["options","type"]},"BalanceDuration":{"x-maturity":"alpha","description":"**ALPHA** An objective to balance duration across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"type":"string","enum":["balanceDuration"],"example":"balanceDuration"}},"required":["options","type"]},"BalanceOptions":{"x-maturity":"alpha","description":"**ALPHA** Specifies balance objective options. At the moment, it uses coefficient of variation as balancing measure.","properties":{"threshold":{"description":"A balancing threshold specifies desired balancing level. Lower values can be ignored in favor of another objective.","minimum":0,"maximum":1,"type":"number","format":"double","example":0.5}},"required":["threshold"]},"EagerDeliveryOptions":{"x-maturity":"alpha","description":"**ALPHA** Specifies if the eager delivery feature is active. Here 'eager' means that the delivery driver will try to perform jobs 'on the way there' and not 'on the way back'. As an example, consider the street network\nD | A----B----C\nand the driver starting at A. If the eager delivery feature is enabled, the driver will prefer to serve the jobs in the order ABCD even if ACBD might have slightly better cost.","properties":{"enabled":{"description":"Whether the eager delivery feature is enabled.","type":"boolean","example":true},"tieThreshold":{"description":"How much we are willing to give w.r.t. cost to get more 'eager' tours.","type":"number","format":"double","example":0.1},"improvementThreshold":{"description":"How big the improvement must be w.r.t. 'eagerness' for us to consider allowing a degradation of the cost.","type":"number","format":"double","example":0.1},"additionalWeightAtFirstEdge":{"description":"Scaling factor that decreases monotonically as the tour goes on.","type":"number","format":"double","example":0.5}},"required":["enabled"]},"MaximizePriorityJobs":{"x-maturity":"alpha","description":"**ALPHA** An objective to maximize assignment of prioritized jobs.","properties":{"type":{"type":"string","enum":["maximizePriorityJobs"],"example":"maximizePriorityJobs"}},"required":["type"]},"TourOrder":{"x-maturity":"alpha","deprecated":true,"description":"**ALPHA** Deprecated, use OptimizeTaskPosition instead.\nAn objective to control order of job activities in the tour.\n","properties":{"isConstrained":{"description":"If the property is set to true, then order is enforced as hard constraint.","type":"boolean","example":false},"type":{"type":"string","enum":["tourOrder"],"example":"tourOrder"}},"required":["isConstrained","type"]},"MaximizeTerritoryJobs":{"x-maturity":"alpha","description":"**ALPHA** An objective to achieve desired jobs distribution between vehicles considering the territories in which these vehicles operate.","properties":{"type":{"type":"string","enum":["maximizeTerritoryJobs"],"example":"maximizeTerritoryJobs"}},"required":["type"]},"MaximizeTours":{"x-maturity":"alpha","description":"**ALPHA** Maximizes the number of used vehicles.","properties":{"type":{"type":"string","enum":["maximizeTours"],"example":"maximizeTours"}},"required":["type"]},"MinimizeTours":{"x-maturity":"alpha","description":"**ALPHA** Minimizes the number of used vehicles","properties":{"type":{"type":"string","enum":["minimizeTours"],"example":"minimizeTours"}},"required":["type"]},"VisuallyAppealingTours":{"x-maturity":"alpha","description":"**ALPHA** An objective to produce a more visually appealing tours in contrast to cost/balancing considerations","properties":{"type":{"type":"string","enum":["visuallyAppealingTours"],"example":"visuallyAppealingTours"},"tolerance":{"description":"A tolerance specifies how much objective values should differ in order to be considered as not-equal","minimum":0,"maximum":1,"type":"number","format":"double","example":0.1},"weight":{"description":"A weight parameter specifies trade off between visual appealing aspect and routing considerations. The value should be in the range [0; 1] and defines how much visual aspect dominates over routing.","minimum":0,"maximum":1,"type":"number","format":"double","example":0.5},"maxClusterRadius":{"description":"Specifies a radius in meters in which job locations are clustered. Jobs in the same cluster are  served consecutively before moving on the next cluster.\nSuitable values for the parameter depend on the job distribution and need to be tuned until satisfactory results are achieved. \n     This parameter will be ignored if the following features are present in the problem:\n     * time windows\n     * breaks\n     * skills\n     * reloads\n     * tour order\n     * mixing restrictions\n     * max time on vehicle\n     * relations\n     * group jobs\n     * territory constraint\n     * more than one vehicle\n     The parameter is not related to the _clustering feature_.\n","minimum":10,"maximum":100000,"type":"integer","format":"int64","example":300}},"required":["type"]},"MinimizeTourOverlap":{"x-maturity":"alpha","description":"**ALPHA** An objective to produce less overlapping tours, that are more geographically separated and more compact","properties":{"type":{"type":"string","enum":["minimizeTourOverlap"],"example":"minimizeTourOverlap"},"tolerance":{"description":"A tolerance specifies how much objective values should differ in order to be considered as not-equal","minimum":0,"maximum":1,"type":"number","format":"double","example":0.1}},"required":["type"]},"ServeInClusters":{"x-maturity":"alpha","description":"**ALPHA** An objective to serve jobs in clusters","properties":{"type":{"type":"string","enum":["serveInClusters"],"example":"serveInClusters"},"maxClusterRadius":{"description":"Specifies a radius in meters in which job locations are clustered. Jobs in the same cluster are  served consecutively before moving on the next cluster.\nSuitable values for the parameter depend on the job distribution and need to be tuned until satisfactory results are achieved.\n","minimum":10,"maximum":100000,"type":"integer","format":"int64","default":800,"example":300}},"required":["type"]},"TieBreak":{"x-maturity":"alpha","description":"**ALPHA** A hierarchical objective that allows ties in a higher-level objective to be broken by a lower-level objective","properties":{"type":{"type":"string","enum":["tieBreak"],"example":"tieBreak"},"objectives":{"type":"array","minItems":2,"items":{"$ref":"#/components/schemas/TieBreakObj"}}},"required":["type","objectives"]},"TieBreakObj":{"x-maturity":"alpha","description":"**ALPHA** A single objective as a part of the TieBreak objective. Note that the objective must not be a composite objective itself. It is, e.g., not possible to put another TieBreak objective here.","properties":{"objective":{"$ref":"#/components/schemas/AsTieBreakObjective"},"tieThreshold":{"description":"If two solutions are within the given threshold for this objective, the decision will be delegated to the next objective in the list.","type":"number","format":"double","minimum":0,"maximum":1,"example":0.05},"improvementThreshold":{"description":"If the decision was delegated to this objective by a higher-level objective, two solutions must differ by at least this threshold in order to select one over the other.","type":"number","format":"double","minimum":0,"maximum":1,"example":0.1}},"required":["objective"]},"MinimizeSoftTimeWindowViolations":{"x-maturity":"alpha","description":"**ALPHA** An objective to minimize soft time window violations.","properties":{"type":{"type":"string","enum":["minimizeSoftTimeWindowViolations"],"example":"minimizeSoftTimeWindowViolations"}},"required":["type"]}},"examples":{"UnauthenticatedErrorResponse":{"value":{"error":"Unauthorized","error_description":"No credentials found"}},"ForbiddenErrorResponse":{"value":{"error":"Forbidden","error_description":"These credentials do not authorize access."}},"TooManyRequestsResponse":{"value":{"error":"Too Many Requests","error_description":"Rate limit for this service has been reached"}},"ResourceErrorResponse":{"value":{"title":"Resource not found","status":404,"code":"E613000","cause":"The problem not found.","action":"","correlationId":"1f19d292-fb74-42f3-83a4-3730e535b88e"}},"SolverErrorResponse":{"value":{"title":"Unprocessable entity","status":422,"code":"E613000","cause":"solution failed to deliver.","action":"","correlationId":"35dcbbaf-c151-43e6-9190-928ba5c3fcc5"}},"ServerErrorResponse":{"value":{"title":"Server error","status":500,"code":"E613000","cause":"Internal server error.","action":"","correlationId":"ff93d908-aecf-4df8-b9f6-3d33f85d638a"}},"ServiceErrorResponse":{"value":{"title":"Request Timeout","status":503,"code":"E613503","cause":"Service was not ready to process the request. Please retry later.","action":"","correlationId":"ff93d908-aecf-4df8-b9f6-3d33f85d638a"}}}},"servers":[{"url":"https://tourplanning.hereapi.com/v3","description":"Production environment base url."}]}