{"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.61.1","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://docs.here.com/tour-planning/docs/introduction-tour-planning"},"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://docs.here.com/tour-planning/docs/problem) 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://docs.here.com/tour-planning/docs/problem) 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://docs.here.com/tour-planning/docs/problem) 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://docs.here.com/tour-planning/docs/problem).\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:///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://docs.here.com/tour-planning/docs/solution) 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://docs.here.com/tour-planning/docs/custom-matrix) 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://docs.here.com/tour-planning/docs/custom-matrix) 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://docs.here.com/identity-and-access-management/docs/plat-using-apikeys).\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://docs.here.com/identity-and-access-management/docs/how-to-authorize-with-oauth-20).\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":{"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.\nEach activity has properties like `jobId`, `type`, `location`, `time`, and `jobTag`. The `type` property\nspecifies 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\ndefined for the parent stop instead.","properties":{"compartment":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"**ALPHA** Compartment where the activity load is allocated, empty if compartments are not used","x-maturity":"alpha"},"jobId":{"allOf":[{"$ref":"#/components/schemas/Id"}],"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."},"jobTag":{"allOf":[{"$ref":"#/components/schemas/PlaceTag"}],"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."},"location":{"$ref":"#/components/schemas/Location"},"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.","items":{"$ref":"#/components/schemas/Notice"},"type":"array"},"time":{"$ref":"#/components/schemas/Interval"},"type":{"$ref":"#/components/schemas/ActivityType"}},"required":["jobId","type"],"type":"object"},"ActivityType":{"description":"The available types of planned tasks to be performed at a specific location and time as part of a stop.","enum":["departure","arrival","pickup","delivery","break","drivingRestTime","workingRestTime","reload","pudo","dutyDrivingRestTime","dutyWorkingRestTime","recharge","backToVehicle"],"example":"delivery","type":"string"},"AdvancedObjective":{"discriminator":{"mapping":{"balanceActivities":"#/components/schemas/BalanceActivities","balanceDistance":"#/components/schemas/BalanceDistance","balanceDuration":"#/components/schemas/BalanceDuration","balanceMaxLoad":"#/components/schemas/BalanceMaxLoad","maximizePriorityJobs":"#/components/schemas/MaximizePriorityJobs","maximizeTerritoryJobs":"#/components/schemas/MaximizeTerritoryJobs","maximizeTours":"#/components/schemas/MaximizeTours","minimizeCost":"#/components/schemas/MinimizeCost","minimizeDistance":"#/components/schemas/MinimizeDistance","minimizeDuration":"#/components/schemas/MinimizeDuration","minimizeSoftTimeWindowViolations":"#/components/schemas/MinimizeSoftTimeWindowViolations","minimizeTourOverlap":"#/components/schemas/MinimizeTourOverlap","minimizeTours":"#/components/schemas/MinimizeTours","minimizeUnassigned":"#/components/schemas/MinimizeUnassigned","optimizeTaskOrder":"#/components/schemas/OptimizeTaskOrder","optimizeTaskPosition":"#/components/schemas/OptimizeTaskPosition","serveInClusters":"#/components/schemas/ServeInClusters","tieBreak":"#/components/schemas/TieBreak","tourOrder":"#/components/schemas/TourOrder","visuallyAppealingTours":"#/components/schemas/VisuallyAppealingTours"},"propertyName":"type"},"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"},{"$ref":"#/components/schemas/OptimizeTaskOrder"}],"x-maturity":"alpha"},"AsTieBreakObjective":{"discriminator":{"mapping":{"balanceActivities":"#/components/schemas/BalanceActivities","balanceDistance":"#/components/schemas/BalanceDistance","balanceDuration":"#/components/schemas/BalanceDuration","balanceMaxLoad":"#/components/schemas/BalanceMaxLoad","maximizePriorityJobs":"#/components/schemas/MaximizePriorityJobs","maximizeTerritoryJobs":"#/components/schemas/MaximizeTerritoryJobs","minimizeCost":"#/components/schemas/MinimizeCost","minimizeDistance":"#/components/schemas/MinimizeDistance","minimizeDuration":"#/components/schemas/MinimizeDuration","minimizeSoftTimeWindowViolations":"#/components/schemas/MinimizeSoftTimeWindowViolations","minimizeTourOverlap":"#/components/schemas/MinimizeTourOverlap","optimizeTaskPosition":"#/components/schemas/OptimizeTaskPosition","serveInClusters":"#/components/schemas/ServeInClusters"},"propertyName":"type"},"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"}],"x-maturity":"alpha"},"AsyncActionCompletionStatus":{"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":{"error":{"description":"Provides detailed information about the error that occurred if the asynchronous operation was not successful.\n","properties":{"code":{"example":"E613000","type":"string"},"message":{"example":"There was an error solving the problem","type":"string"}},"type":"object"},"resource":{"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://docs.here.com/tour-planning/docs/quick-start#download-the-solution) for \nyour routing problem.\n","properties":{"href":{"description":"Use this URL to request the [solution](https://docs.here.com/tour-planning/docs/solution) \nof a vehicle routing problem.\n","example":"https:///v3/problems/87aec2ce-b697-11e8-96f8-529269fb1459/solution","type":"string"},"resourceId":{"example":"87aec2ce-b697-11e8-96f8-529269fb1459","type":"string"}},"type":"object"},"status":{"enum":["pending","inProgress","failure","success","canceled"],"example":"success","type":"string"}},"required":["status"],"type":"object"},"AsyncActionSubmissionResult":{"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":{"href":{"description":"Status update URL. \nUse this URL when querying the calculation status of the corresponding problem. \nContains the request status UUID.\n","example":"https:///v3/status/87aec2ce-b697-11e8-96f8-529269fb1459","type":"string"},"statusId":{"description":"Request status UUID. \nThe UUID is included in the status update URL for \nquerying the calculation status of the corresponding problem.\n","example":"87aec2ce-b697-11e8-96f8-529269fb1459","type":"string"}},"required":["statusId","href"],"type":"object"},"AsyncProblemCancellationStatus":{"description":"Represents the response body returned after submitting a problem cancellation request.\n","properties":{"ended":{"example":"2021-01-01T12:01:00Z","format":"date-time","type":"string"},"id":{"$ref":"#/components/schemas/ProblemId"},"started":{"example":"2021-01-01T12:00:00Z","format":"date-time","type":"string"},"status":{"enum":["canceled"],"example":"canceled","type":"string"}},"required":["id","status","started","ended"],"type":"object"},"AuthErrorResponse":{"properties":{"error":{"description":"Error message corresponding to the status code.","example":"Unauthorized","type":"string"},"error_description":{"description":"Detailed information about authentication or authorization errors.","example":"Invalid client credentials","type":"string"}},"required":["error","error_description"],"type":"object"},"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.","discriminator":{"mapping":{"boundingBox":"#/components/schemas/BoundingBoxArea","encodedPolygon":"#/components/schemas/EncodedPolygonArea","polygon":"#/components/schemas/PolygonArea"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/BoundingBoxArea"},{"$ref":"#/components/schemas/PolygonArea"},{"$ref":"#/components/schemas/EncodedPolygonArea"}]},"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.","enum":["tollRoad","motorway","ferry","tunnel","dirtRoad","controlledAccessHighway","carShuttleTrain","seasonalClosure","difficultTurns","uTurns"],"example":"tollRoad","type":"string"},"AvoidRoutes":{"description":"Avoid routes that violate these properties.","properties":{"areas":{"items":{"$ref":"#/components/schemas/AvoidArea"},"maxItems":250,"minItems":1,"type":"array"},"features":{"items":{"$ref":"#/components/schemas/AvoidFeatures"},"type":"array","uniqueItems":true},"segments":{"items":{"$ref":"#/components/schemas/AvoidSegment"},"maxItems":250,"minItems":1,"type":"array","uniqueItems":true},"truckRoadTypes":{"items":{"$ref":"#/components/schemas/AvoidTruckRoadType"},"minItems":1,"type":"array","uniqueItems":true},"zoneCategories":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/AvoidZoneCategory"},"minItems":1,"type":"array","uniqueItems":true},"exceptZoneIds":{"items":{"$ref":"#/components/schemas/AvoidZone"},"minItems":1,"type":"array","uniqueItems":true}},"required":["categories"],"type":"object"},"zoneIdentifiers":{"items":{"$ref":"#/components/schemas/AvoidZone"},"minItems":1,"type":"array","uniqueItems":true}},"type":"object"},"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.\n\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]","example":"here:cm:segment:207551710","pattern":"^[A-Za-z0-9-]+:[A-Za-z0-9-]+:segment:[0-9]+(#\\+|#\\*|#\\-)?$","type":"string"},"AvoidTruckRoadType":{"description":"A truck road type identifier that routes will avoid going through. A truck road type identifier is associated with roads\nthat have additional regulations applied by local administration for traversal by heavy vehicles like trucks. For example, the BK Bearing Class\nregulations 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)","enum":["TRUCK_ROAD_TYPE_UNKNOWN","ET4","ET2","A4","A2","B4","B2","C","D","BK1","BK2","BK3","BK4"],"example":"A4","type":"string"},"AvoidZone":{"description":"A routing zone identifier that routes will avoid going through.\nFor 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)","example":"here:cm:envzone:2","pattern":"^[A-Za-z0-9-]+:[A-Za-z0-9-]+:envzone:[0-9]+$","type":"string"},"AvoidZoneCategory":{"description":"Specify avoidance of entire category of routing zones, with the provision to add individual exceptions.","enum":["vignette","congestionPricing","environmental"],"example":"vignette","type":"string"},"BalanceActivities":{"description":"**ALPHA** An objective to balance activities across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"enum":["balanceActivities"],"example":"balanceActivities","type":"string"}},"required":["options","type"],"type":"object","x-maturity":"alpha"},"BalanceDistance":{"description":"**ALPHA** An objective to balance distance across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"enum":["balanceDistance"],"example":"balanceDistance","type":"string"}},"required":["options","type"],"type":"object","x-maturity":"alpha"},"BalanceDuration":{"description":"**ALPHA** An objective to balance duration across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"enum":["balanceDuration"],"example":"balanceDuration","type":"string"}},"required":["options","type"],"type":"object","x-maturity":"alpha"},"BalanceMaxLoad":{"description":"**ALPHA** An objective to balance max load across all tours.","properties":{"options":{"$ref":"#/components/schemas/BalanceOptions"},"type":{"enum":["balanceMaxLoad"],"example":"balanceMaxLoad","type":"string"}},"required":["options","type"],"type":"object","x-maturity":"alpha"},"BalanceOptions":{"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.","example":0.5,"format":"double","maximum":1,"minimum":0,"type":"number"}},"required":["threshold"],"type":"object","x-maturity":"alpha"},"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.","properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"name":{"$ref":"#/components/schemas/ProfileName"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["bicycle"],"example":"bicycle","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"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.","example":{"maximum":3600,"type":"boundedSumStrategy"},"properties":{"maximum":{"description":"The upper limit for the total duration all jobs in a cluster, expressed in seconds.","format":"int64","type":"integer"},"type":{"enum":["boundedSumStrategy"],"example":"boundedSumStrategy","type":"string"}},"required":["maximum","type"],"type":"object"},"BoundingBoxArea":{"description":"A bounding box defined by two longitudes and two latitudes.","properties":{"east":{"description":"Longitude in WGS-84 degrees of the eastern boundary of the box","example":30,"format":"double","maximum":180,"minimum":-180,"type":"number"},"north":{"description":"Latitude in WGS-84 degrees of the northern boundary of the box.","example":30,"format":"double","maximum":90,"minimum":-90,"type":"number"},"south":{"description":"Latitude in WGS-84 degrees of the southern boundary of the box.","example":30,"format":"double","maximum":90,"minimum":-90,"type":"number"},"type":{"enum":["boundingBox"],"example":"boundingBox","type":"string"},"west":{"description":"Longitude in WGS-84 degrees of the western boundary of the box.","example":30,"format":"double","maximum":180,"minimum":-180,"type":"number"}},"required":["north","south","west","east","type"],"type":"object"},"BusOptions":{"description":"Specifies bus profile options. Supported only if the locations' distribution radius is less than 490 km.\nIf not added, only generic bus restrictions are applied and the fastest speed category is considered.","properties":{"axleCount":{"description":"Specifies the total number of axles the vehicle has, i.e., axles on the base\nvehicle and any attached trailers.","example":3,"format":"int32","maximum":255,"minimum":2,"type":"integer"},"grossWeight":{"description":"Total vehicle weight, including trailers and shipped goods, in kilograms.","example":1000,"minimum":0,"type":"integer"},"height":{"description":"Vehicle height, in centimeters.","example":3000,"maximum":5000,"minimum":0,"type":"integer"},"length":{"description":"Vehicle length, in centimeters.","example":6000,"maximum":30000,"minimum":0,"type":"integer"},"shippedHazardousGoods":{"items":{"$ref":"#/components/schemas/ShippedHazardousGoods"},"type":"array"},"speedCap":{"$ref":"#/components/schemas/SpeedCap"},"trailerCount":{"description":"The number of trailers attached to the vehicle.","example":0,"format":"int32","maximum":255,"minimum":0,"type":"integer"},"tunnelCategory":{"$ref":"#/components/schemas/TunnelCategory"},"weightPerAxle":{"description":"Vehicle weight per axle, in kilograms.\n\n**Note:** `weightPerAxle` and `weightPerAxleGroup` are incompatible.","example":500,"minimum":0,"type":"integer"},"weightPerAxleGroup":{"$ref":"#/components/schemas/WeightPerAxleGroup"},"width":{"description":"Vehicle width, in centimeters.","example":2000,"maximum":5000,"minimum":0,"type":"integer"}},"type":"object"},"BusProfile":{"description":"Route calculation for buses that are allowed to drive through the bus-only roads.","properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"name":{"$ref":"#/components/schemas/ProfileName"},"options":{"$ref":"#/components/schemas/BusOptions"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["bus"],"example":"bus","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"CarOptions":{"description":"Specifies car profile options.","properties":{"axleCount":{"description":"Specifies the total number of axles the vehicle has, i.e., axles on the base vehicle and any attached trailers.","example":2,"format":"int32","maximum":255,"minimum":2,"type":"integer"},"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.","example":0,"format":"int32","maximum":1,"minimum":0,"type":"integer"}},"type":"object"},"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.","properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"mode":{"default":"fast","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.","enum":["fast","short"],"example":"fast","type":"string"},"name":{"$ref":"#/components/schemas/ProfileName"},"options":{"$ref":"#/components/schemas/CarOptions"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["car"],"example":"car","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"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://docs.here.com/tour-planning/docs/mixing-restrictions).","example":"food","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","type":"string"},"ChargingStation":{"description":"**ALPHA** Specifies a shared place where vehicle can recharge.","example":{"id":"recharge1","location":{"lat":52.5256,"lng":13.4542},"vehicleTypeToDuration":{"vehicle1":300}},"properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Represents the unique ID of a charging station.","example":"recharge1"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"tag":{"$ref":"#/components/schemas/PlaceTag"},"times":{"$ref":"#/components/schemas/TimeWindows"},"vehicleTypeToDuration":{"additionalProperties":{"$ref":"#/components/schemas/Duration"},"description":"A mapping from vehicle type ID to the charging duration (in seconds) at this station.\nFor distance-based charging, this duration should represent the time needed to fully charge the vehicle.\nFor consumption-based charging, it should represent the time needed to charge the vehicle from minCharge to maxCharge.","example":{"vehicle1":300},"minProperties":1,"type":"object"}},"required":["id","location","vehicleTypeToDuration"],"type":"object","x-maturity":"alpha"},"Compartment":{"description":"**ALPHA** a definition of a compartment representing part of the vehicle load","properties":{"capacity":{"$ref":"#/components/schemas/Unit","description":"Capacity of the compartment"},"name":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Name of the compartment, used for referencing the compartment,\neach compartment in the vehicle must be unique","example":"compartmentA"}},"required":["name","capacity"],"type":"object","x-maturity":"alpha"},"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://docs.here.com/tour-planning/docs/configuration).","properties":{"experimentalFeatures":{"$ref":"#/components/schemas/ExperimentalFeatures"},"routeDetails":{"$ref":"#/components/schemas/RouteDetailsConfiguration"},"termination":{"$ref":"#/components/schemas/Termination"}},"type":"object"},"Coordinate":{"example":{"lat":52.53787,"lng":13.40896},"properties":{"lat":{"description":"Latitude in WGS-84 degrees.","format":"double","type":"number"},"lng":{"description":"Longitude in WGS-84 degrees.","format":"double","type":"number"}},"required":["lat","lng"],"type":"object"},"CostStatistics":{"description":"Breakdown of cost into individual components. Fields are only present when the corresponding\ncost source is configured on the vehicle and the value is non-zero.","properties":{"distance":{"description":"Cost from distance traveled.","example":19886.32,"format":"double","minimum":0,"type":"number"},"excess":{"$ref":"#/components/schemas/ExcessCostStatistics","description":"Excess costs from exceeding limits. Present only when excessCosts is configured on the vehicle."},"fixed":{"description":"Fixed cost for using the vehicle.","example":100,"format":"double","minimum":0,"type":"number"},"perJob":{"description":"Cost from per-job cost function. Present only when perJob is configured on the vehicle.","example":2500,"format":"double","minimum":0,"type":"number"},"perWaitingTime":{"description":"Cost from waiting time. Present only when perWaitingTime is configured on the vehicle.","example":120,"format":"double","minimum":0,"type":"number"},"time":{"description":"Cost from time (duration minus waiting, or full duration if perWaitingTime is not configured).","example":7204.53,"format":"double","minimum":0,"type":"number"}},"type":"object","x-maturity":"alpha"},"CountryCode":{"description":"ISO-3166-1 alpha-3 country code.","example":"DEU","maxLength":3,"minLength":3,"type":"string"},"DateAndTime":{"description":"Represents a date-time value formatted according to RFC3339.\nUsed to specify precise timestamps for job time windows, vehicle shift start and end times,\nbreak times, and other time-based constraints. Times in the solution are always returned in UTC.","example":"2020-07-04T00:00:00Z","format":"date-time","maxLength":32,"minLength":1,"type":"string"},"DbscanStopConfig":{"properties":{"maxDiameter":{"description":"The maximum allowed distance between two activities in the stop.","example":120,"format":"double","maximum":1000,"minimum":0,"type":"number"},"maxDistanceToNeighbor":{"description":"Defines the maximum distance in meters between an activity and its closest neighbor in the cluster.","example":50,"format":"double","maximum":500,"minimum":0,"type":"number"},"minNeighborCount":{"default":3,"description":"The number of close neighbors an activity must have to be considered as dense by DBSCAN.","example":3,"maximum":15,"minimum":2,"type":"integer"},"profile":{"allOf":[{"$ref":"#/components/schemas/ProfileName"}],"description":"Deprecated, please use stopProfile instead\nThe vehicle profile to be used for calculating distances between activities."},"type":{"enum":["dbscan"],"example":"dbscan","type":"string"}},"required":["maxDistanceToNeighbor","type"],"type":"object","x-maturity":"alpha"},"Duration":{"description":"Represents a time duration in seconds. Used to specify service times at job locations,\nwaiting times, driving times, breaks, and other time-based constraints in tour planning.","example":180,"format":"int64","maximum":604800,"minimum":0,"type":"integer"},"EagerDeliveryOptions":{"description":"**ALPHA** Specifies if the eager delivery feature is active. Here 'eager' means that the delivery driver will\ntry to perform jobs 'on the way there' and not 'on the way back'. As an example, consider the street network\n\n```markdown\n D\n |\n A----B----C\n```\nand the driver starting at A. If the eager delivery feature is enabled, the driver will prefer to serve the jobs\nin the order ABCD even if ACBD might have slightly better cost.","properties":{"additionalWeightAtFirstEdge":{"description":"Scaling factor that decreases monotonically as the tour goes on.","example":0.5,"format":"double","type":"number"},"enabled":{"description":"Whether the eager delivery feature is enabled.","example":true,"type":"boolean"},"improvementThreshold":{"description":"How big the improvement must be w.r.t. 'eagerness' for us to consider allowing a degradation of the cost.","example":0.1,"format":"double","type":"number"},"tieThreshold":{"description":"How much we are willing to give w.r.t. cost to get more 'eager' tours.","example":0.1,"format":"double","type":"number"}},"required":["enabled"],"type":"object","x-maturity":"alpha"},"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.","properties":{"outer":{"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.","example":"B F oz5xJ 67i1B 1B 7P zI ha xL 7Y","type":"string"},"type":{"enum":["encodedPolygon"],"example":"encodedPolygon","type":"string"}},"required":["outer","type"],"type":"object"},"ErrorResponse":{"example":{"action":"Correct arrival time of 'vehicle' to be earlier than its departure","cause":"Vehicle's arrival time is earlier than its departure time","code":"E613420","correlationId":"fee3c453-f537-49ca-a285-f5f076bce7d1","status":400,"title":"BAD_REQUEST"},"properties":{"action":{"description":"Provides actionable instructions on how to resolve this error.","type":"string"},"cause":{"description":"Human-readable explanation of the error and its cause.","type":"string"},"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://docs.here.com/tour-planning/docs/api-errors) 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 at the same location |\n| `E613658` | Multiple parking places with default vehicle type ids at the same location |\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` | `evProfileId` without `maxDistance` cannot be used with time-dependent VRP |\n| `E613666` | Charging stations are missing while using `maxDistance` in charging |\n| `E613667` | Locations' distribution radius is too big for using 'options' in fleet profile type 'pedestrian' |\n| `E613668` | Unknown stop profile names in VehicleShift definitions |\n| `E613669` | Invalid violation mapping configuration |\n| `E613670` | `evProfileId`, `minCharge` and `maxCharge` are required for consumption-based recharging |\n| `E613671` | Unknown profile in StopConfiguration definitions |\n| `E613673` | Parking with explicit location requires stop configuration on affected vehicle shifts |\n| `E613674` | `vehicleId` in `initialCharges` does not match any vehicle in the vehicle type |\n| `E613675` | Locations' distribution radius is too big for EV vehicles |\n| `E613676` | Initial charge in `initialCharges` must be greater than `minCharge` |\n| `E613677` | Duplicate `vehicleId` values are used in `initialCharges` |\n| `E613678` | EV vehicle types cannot mix `maxDistance` and energy consumption strategies |\n| `E613679` | More than one charging station has the same id |\n| `E613680` | Vehicle type id in `vehicleTypeToDuration` does not match any vehicle type |\n| `E613681` | The same evProfileId must not be used across different routing profiles |\n| `E613682` | Too many unique evProfileIds across the fleet |\n| `E613683` | Too many routing profiles used with EV charging |\n| `E613684` | `evProfileId` cannot be used with `pedestrian` or `bicycle` profile |\n| `E613685` | `evProfileId` cannot be used with a profile that has a custom inline matrix |\n| `E613686` | Time window start must be less than or equal to its end |\n| `E613687` | Vehicle must have either `capacity` or `compartments` set |\n| `E613688` | Mixing restrictions reference unknown compartments |\n| `E613689` | Compartments in mixing restrictions are supported only on tour level |\n| `E613690` | Duplicated compartment names in the vehicle |\n","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"},"status":{"description":"Indicates the HTTP status code, which matches the HTTP response status code.","type":"integer"},"title":{"description":"Provides the title of the error with a brief summary of the issue encountered.","type":"string"}},"required":["title","status","code","cause","action","correlationId"],"type":"object"},"ExcessCostStatistics":{"description":"Excess costs broken down by metric. Fields are only present when the corresponding\nlimit is configured and the excess cost is non-zero.","properties":{"distance":{"description":"Cost incurred for distance exceeding the configured limit.","example":50,"format":"double","minimum":0,"type":"number"},"duration":{"description":"Cost incurred for duration exceeding the configured limit.","example":30,"format":"double","minimum":0,"type":"number"},"stops":{"description":"Cost incurred for stop count exceeding the configured limit.","example":25,"format":"double","minimum":0,"type":"number"},"waitingTime":{"description":"Cost incurred for waiting time exceeding the configured limit.","example":15,"format":"double","minimum":0,"type":"number"}},"type":"object","x-maturity":"alpha"},"ExcessCosts":{"description":"**BETA** Specifies limits on distance, stops count etc.\nPenalties have to be paid in case those limits are violated.","properties":{"distance":{"$ref":"#/components/schemas/ExcessCostsField"},"duration":{"$ref":"#/components/schemas/ExcessCostsField"},"stops":{"$ref":"#/components/schemas/ExcessCostsField"},"waitingTime":{"$ref":"#/components/schemas/ExcessCostsField"}},"type":"object","x-maturity":"beta"},"ExcessCostsField":{"description":"Specifies limits on a solution metric and penalties to be paid in case those limits are violated.","properties":{"fixedCost":{"description":"A fixed cost to be paid if the limit is exceeded.","example":2030,"format":"double","minimum":0,"type":"number"},"limit":{"description":"A limit that the solution should not exceed. If it is exceeded, a penalty is added to the solution cost.","example":200,"format":"double","minimum":0,"type":"number"},"stepCost":{"description":"The cost per step of excess.","example":5,"format":"double","minimum":0,"type":"number"},"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.","example":20,"format":"double","minimum":0,"type":"number"}},"required":["limit","fixedCost","stepSize","stepCost"],"type":"object","x-maturity":"beta"},"Exclude":{"description":"Defines properties which will be strictly excluded from route calculation.","properties":{"areas":{"items":{"$ref":"#/components/schemas/AvoidArea"},"maxItems":250,"minItems":1,"type":"array"},"countries":{"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"},"type":"array","uniqueItems":true}},"type":"object"},"ExperimentalFeatures":{"description":"Lists the enabled [experimental features](https://docs.here.com/tour-planning/docs/experimental-features)\nthat are still under development. These experimental features are provided for testing and feedback purposes, and their availability or functionality might change.","items":{"type":"string"},"minItems":1,"type":"array"},"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.","example":{"duration":3600,"type":"fixedDurationStrategy"},"properties":{"duration":{"description":"The total duration of all jobs in a cluster, expressed in seconds.","format":"int64","type":"integer"},"type":{"enum":["fixedDurationStrategy"],"example":"fixedDurationStrategy","type":"string"}},"required":["duration","type"],"type":"object"},"Fleet":{"description":"Represents the [collection of vehicles](https://docs.here.com/tour-planning/docs/problem#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)","properties":{"profiles":{"example":[{"name":"normal_car","type":"car"}],"items":{"$ref":"#/components/schemas/Profile"},"maxItems":5,"minItems":1,"type":"array"},"traffic":{"default":"automatic","description":"Define how traffic is considered in route planning with the following [traffic modes](https://docs.here.com/tour-planning/docs/traffic-modes):\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.","enum":["liveOrHistorical","historicalOnly","automatic"],"example":"liveOrHistorical","type":"string"},"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.","items":{"$ref":"#/components/schemas/VehicleType"},"minItems":1,"type":"array"}},"required":["types","profiles"],"type":"object"},"Group":{"description":"**BETA** Represents a [collection of jobs](https://docs.here.com/tour-planning/docs/group-jobs) 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.","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Represents the unique ID of a [job group](https://docs.here.com/tour-planning/docs/group-jobs). Assign this ID at the `job.places` level to include the job in the\ncorresponding group.","example":"group1"},"placement":{"default":"strict","description":"Group placement mode: \"strict\" (consecutive) or \"flexible\" (anywhere in tour).","enum":["strict","flexible"],"example":"strict","type":"string"},"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.","items":{"$ref":"#/components/schemas/Pudo"},"maxItems":2,"minItems":1,"type":"array"}},"required":["id"],"type":"object","x-maturity":"beta"},"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","enum":["ok"],"example":"ok","type":"string"}}},"HouseKeysBoundedSumStrategy":{"description":"Takes a bounded sum (sum with upper limit) for all activities with the same house key.","example":{"maximum":600,"type":"boundedSum"},"properties":{"maximum":{"$ref":"#/components/schemas/Duration","description":"The upper limit for the total duration in seconds."},"type":{"enum":["boundedSum"],"example":"boundedSum","type":"string"}},"required":["maximum","type"],"type":"object","x-maturity":"alpha"},"HouseKeysConfig":{"description":"**ALPHA** Configures the house keys feature which controls how service time is calculated\nwhen multiple jobs with the same `houseKeyId` are served at the same stop.","properties":{"defaultStrategy":{"$ref":"#/components/schemas/HouseKeysStrategy","description":"The default strategy applied to all house key groups."}},"required":["defaultStrategy"],"type":"object","x-maturity":"alpha"},"HouseKeysFixedDurationStrategy":{"description":"Sets the total duration to a fixed value, regardless of individual job durations.","example":{"duration":300,"type":"fixedDuration"},"properties":{"duration":{"$ref":"#/components/schemas/Duration","description":"The total duration in seconds."},"type":{"enum":["fixedDuration"],"example":"fixedDuration","type":"string"}},"required":["duration","type"],"type":"object","x-maturity":"alpha"},"HouseKeysMaxDurationStrategy":{"description":"Takes max time duration from all activities and applies it once.","example":{"type":"maxDuration"},"properties":{"type":{"enum":["maxDuration"],"example":"maxDuration","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"HouseKeysStrategy":{"description":"Specifies the duration strategy for house keys.","discriminator":{"mapping":{"boundedSum":"#/components/schemas/HouseKeysBoundedSumStrategy","fixedDuration":"#/components/schemas/HouseKeysFixedDurationStrategy","maxDuration":"#/components/schemas/HouseKeysMaxDurationStrategy"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/HouseKeysMaxDurationStrategy"},{"$ref":"#/components/schemas/HouseKeysFixedDurationStrategy"},{"$ref":"#/components/schemas/HouseKeysBoundedSumStrategy"}],"x-maturity":"alpha"},"Id":{"description":"A unique identifier of an entity. Avoid referencing any confidential or personal information\nas part of the `Id`.","example":"7f3423c2-784a-4983-b472-e14107d5a54a","maxLength":128,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","type":"string"},"IgnoreRouteViolations":{"description":"Defines vehicle routing violations (like closed road, no-through zone) that should be ignored.","items":{"$ref":"#/components/schemas/RouteViolation"},"maxItems":2,"minItems":1,"type":"array","uniqueItems":true},"Interval":{"description":"Represents an activity interval.","properties":{"arrival":{"$ref":"#/components/schemas/DateAndTime"},"end":{"$ref":"#/components/schemas/DateAndTime"},"start":{"$ref":"#/components/schemas/DateAndTime"}},"required":["start","end"],"type":"object"},"Job":{"description":"Represents a job to be served by any vehicle, taking into account specific properties such as\nlocation, duration, demand, time windows, skills, and so on. A job can be one of the following\ntypes: `pickup` (picking something along the route and bringing it to the route's end location,\nsuch as a depot), `delivery` (delivering something loaded at the beginning of the route),\nor mixed (picking and delivering along the route).\n\nFor more information, see [Job](https://docs.here.com/tour-planning/docs/problem#job).","properties":{"category":{"$ref":"#/components/schemas/Category"},"costFactor":{"default":1,"description":"**ALPHA** Cost factor for per-job cost calculation. Defaults to 1.0.\nRepresents the \"quantity\" for cost calculation (boxes, parcels, items - opaque to solver).","example":1,"format":"double","minimum":0,"type":"number","x-maturity":"alpha"},"customerId":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"An optional property used with the service duration clustering feature (`plan.clustering`).\nWhen service duration clustering is enabled and this property is present, jobs with the same\n`customerId` value are grouped together and assigned to the same stop if feasible, where they\nare served simultaneously as separate activities. Jobs with different `customerId` values\nare treated as separate clusters and are not grouped together, even if their other attributes match.\n\n**Note**: This property applies only to service duration clustering, not to geographic clustering\n(`stopConfig` with the `clusterNearby` experimental feature).\n\nAvoid referencing any sensitive or personal information, such as names, addresses, or\ndelivery details, as part of the `customerId`.\n\nFor more information, see [Clustering](https://docs.here.com/tour-planning/docs/problem#clustering).","example":"4bbc206d-1583-4266-bac9-d1580f412ac0"},"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"A unique identifier for a job, provided when submitting a problem request.\nIt allows tracking and retrieval of specific job-related information.\n\nDo not include any personal information within the `JobId`. For example, avoid using a\nlicense plate number that could be used to identify the driver.","example":"4bbc206d-1583-4266-bac9-d1580f412ac0"},"maxTimeOnVehicle":{"$ref":"#/components/schemas/MaxTimeOnVehicle"},"priority":{"default":5,"description":"Specifies the priority of the job with `1` for highest priority jobs, `2`-`4` for high to\nmedium priority, and `5` for normal jobs. Jobs without any priority are treated as jobs with\npriority `5`.\n\nThe priority setting optimizes route planning by ensuring that more critical jobs are included\nin the tour planning ahead of less urgent ones, even when not all jobs can be completed due\nto constraints like vehicle capacity.\n\n**BETA** Specifying more than 2 different levels of priority among all jobs is experimental.\n\nFor more information, see [Prioritize jobs](https://docs.here.com/tour-planning/docs/priority).","example":1,"maximum":5,"minimum":1,"type":"integer"},"skills":{"$ref":"#/components/schemas/Skills"},"tasks":{"$ref":"#/components/schemas/JobTasks"}},"required":["id","tasks"],"type":"object"},"JobCostOverride":{"description":"**ALPHA** Per-job cost override for a specific job ID. When matched, the override cost is used directly.","properties":{"cost":{"description":"The flat cost to charge for this job (not multiplied by costFactor).","example":5,"format":"double","maximum":100000,"minimum":0,"type":"number"},"jobId":{"$ref":"#/components/schemas/Id","description":"The job ID to match."}},"required":["jobId","cost"],"type":"object","x-maturity":"alpha"},"JobCostRate":{"description":"**ALPHA** A per-job cost rate. Used as the base rate in per-job cost calculation\nand as the override rate for specific job-vehicle pairs.","example":4,"format":"double","maximum":100000,"minimum":0,"type":"number","x-maturity":"alpha"},"JobPlace":{"description":"Refers to a specific location where one or more pickup or delivery activities occur.\nA place is defined by geographical coordinates (latitude and longitude) and might include additional\ndetails like duration (service time), job time window, group information for the activity, skills,\nterritories, and more. Each job task can have up to three places, and at least one place must be\nspecified for each task.","properties":{"duration":{"$ref":"#/components/schemas/Duration"},"groupId":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"An optional parameter specifying the ID of the group to which the job belongs. Jobs with\nthe same `groupId` are served by a single vehicle only (one group cannot be shared between\nmultiple vehicles, but a single vehicle can serve multiple groups).\n\nDepending on your business objctives, you can determine whether the vehicle must serve all\njobs belonging to a particular group before moving to the next one or whether it can\ninterleave jobs from different groups if it makes the tour more efficient.\n\nJobs which do not belong to any group, reloads, and breaks with a location cannot interrupt\na group, but they can be served between individual groups. Breaks without locations can interrupt a group.\n\nFor more information, see [Assign jobs to groups](https://docs.here.com/tour-planning/docs/group-jobs).","example":"group1"},"houseKeyId":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"**ALPHA** Specifies id of the house key, used for multi-delivery and multi-pickup scenarios\nat the same location. A `houseKeyId` allows controlling the total job duration of multiple\njobs served at the same customer location. For example, in case multiple jobs with the same\n`houseKeyId` are served together, the maximum duration of the individual jobs is applied as\nthe total duration for this set of jobs.\n\n**Note**: This is an experimental feature under development.\nTo enable it, add `houseKeys` flag to `experimentalFeatures` configuration in the problem.\n\nFor more information, see [Allow customer-based service durations](https://docs.here.com/tour-planning/docs/house-key).","example":"house_key_1","x-maturity":"alpha"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"parkingIds":{"description":"**ALPHA** Specifies IDs of the parking where the vehicle can be parked while performing the\njob at this place. References parking options defined in the `shared.parking` array to specify\nthe parking with specific duration available for that particular job.\n\nParking duration represents only the time required for parking-related activities (such as\nfinding a spot, maneuvering, and securing the vehicle). It does not represent the total time\nthe vehicle remains at the location.\n\n**Note**: This is an experimental feature under development.\nTo enable it, add `parkingIds` flag to `experimentalFeatures` configuration in the problem.\n\nFor more information, see [Configure location-specific parking durations](https://docs.here.com/tour-planning/docs/location-specific-parking).","example":["parking1"],"items":{"$ref":"#/components/schemas/Id"},"maxItems":1,"minItems":1,"type":"array","x-maturity":"alpha"},"tag":{"$ref":"#/components/schemas/PlaceTag"},"territoryIds":{"description":"Specifies the territory assigned to this job place, defining spatial restrictions on the jobs\na vehicle is allowed or preferred to take.\n\nFor more information, see [Optimize tours by territories](https://docs.here.com/tour-planning/docs/territory).","items":{"$ref":"#/components/schemas/Id"},"maxItems":1,"minItems":1,"type":"array"},"timeWindows":{"items":{"$ref":"#/components/schemas/SoftTimeWindow"},"maxItems":4,"minItems":0,"type":"array"},"times":{"$ref":"#/components/schemas/TimeWindows"}},"required":["location","duration"],"type":"object"},"JobPositionAny":{"description":"Puts the job task at any place in the tour (also between ordered jobs) but not before the `first`\nposition and not after the `last` position. This designation permits the API to position assignments\nwithin the tour anywhere between first and last assignments, optimizing the route for cost and time efficiency.","properties":{"type":{"enum":["any"],"example":"any","type":"string"}},"required":["type"],"type":"object"},"JobPositionFirst":{"description":"Puts the job task at the beginning of the tour, executed immediately after departure.","properties":{"type":{"enum":["first"],"example":"first","type":"string"}},"required":["type"],"type":"object"},"JobPositionInTour":{"description":"Specifies the position of the job task in the tour. Use the `position` property to control the\nserving order of tasks within a tour. Job tasks with a `position` property are scheduled earlier\nin the route than job tasks without one, except for tasks with `position` set to `last`,\nwhich are always assigned last.\n\nThe following position types are supported:\n\n- `first`: Schedules the task immediately after departure, before all other tasks.\n- `last`: Schedules the task at the end of the tour, after all other tasks.\n- `any`: Schedules the task anywhere in the tour between `first` and `last` tasks.\n- `ordered`: Schedules the task after `first` and before `last` tasks, according to a numeric `value`, where lower values are served earlier.\n\n**Note**: The `position` property does not affect whether a job is assigned. To influence assignment priority, use the `priority` property.\n\nFor more information, see [Control job task position](https://docs.here.com/tour-planning/docs/job-task-order).","discriminator":{"mapping":{"any":"#/components/schemas/JobPositionAny","first":"#/components/schemas/JobPositionFirst","last":"#/components/schemas/JobPositionLast","ordered":"#/components/schemas/JobPositionOrdered"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/JobPositionFirst"},{"$ref":"#/components/schemas/JobPositionLast"},{"$ref":"#/components/schemas/JobPositionAny"},{"$ref":"#/components/schemas/JobPositionOrdered"}]},"JobPositionLast":{"description":"Puts the job task at the end of the tour. If an assignment is labeled with the `last` position,\nthe API prioritizes it as the final task to be handled after all other assignments, regardless\nof their position values.","properties":{"type":{"enum":["last"],"example":"last","type":"string"}},"required":["type"],"type":"object"},"JobPositionOrdered":{"description":"In order of priority, puts the job task lower than `first` but higher than unordered and `last` tasks.\n\nAssignments labeled as `ordered` must also include an associated `position` value, represented\nby an integer equal to or greater than `1`. When multiple ordered assignments share the same\n`position` value, the API optimizes the route among them before proceeding.","properties":{"type":{"enum":["ordered"],"example":"ordered","type":"string"},"value":{"example":1,"minimum":1,"type":"integer"}},"required":["value","type"],"type":"object"},"JobTask":{"description":"Refers to a specific action within a job, such as picking up or delivering items at designated\nlocations. Each job can include up to three pickup tasks and up to three delivery tasks,\nwith each task having specific requirements and properties, such as demand (capacity requirements)\nand places (locations where the task is performed).","properties":{"demand":{"$ref":"#/components/schemas/Unit"},"order":{"deprecated":true,"description":"Deprecated, use `position` instead.\n\nJob tasks with lower values of `order` are scheduled earlier in the route than job tasks\nwith higher values of `order`.","example":1,"minimum":1,"type":"integer"},"places":{"items":{"$ref":"#/components/schemas/JobPlace"},"maxItems":3,"minItems":1,"type":"array"},"position":{"$ref":"#/components/schemas/JobPositionInTour"}},"required":["places","demand"],"type":"object"},"JobTasks":{"description":"Tasks refer to specific actions that need to be performed as part of a job, such as pickups or\ndeliveries at designated locations. Each job can consist of up to three pickup tasks and three\ndelivery tasks. The order of execution inside each group can be any. At least one task must be\nspecified as part of a job.\n\n**Note**: All pickups are done before any other delivery.","example":{"deliveries":[{"demand":[10],"places":[{"duration":300,"location":{"lat":52.54016,"lng":13.40241},"times":[["2020-07-04T14:00:00Z","2020-07-04T16:00:00Z"]]}]}],"pickups":[{"demand":[10],"places":[{"duration":180,"location":{"lat":52.53088,"lng":13.38471},"times":[["2020-07-04T10:00:00Z","2020-07-04T12:00:00Z"]]}]}]},"properties":{"deliveries":{"items":{"$ref":"#/components/schemas/JobTask"},"maxItems":3,"minItems":1,"type":"array"},"pickups":{"items":{"$ref":"#/components/schemas/JobTask"},"maxItems":3,"minItems":1,"type":"array"}},"type":"object"},"LargeMatrix":{"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```nocompile\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.","properties":{"distances":{"description":"Corresponds to 2D matrix of distances (in meters).","items":{"format":"int32","type":"integer"},"maxItems":100000000,"minItems":4,"type":"array"},"errorCodes":{"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) |","example":[0,1,2,3],"items":{"format":"int32","type":"integer"},"maxItems":100000000,"minItems":4,"type":"array"},"origins":{"description":"An ordered list of origins used in the routing matrix","items":{"$ref":"#/components/schemas/MatrixOrigin"},"maxItems":10000,"minItems":2,"type":"array"},"travelTimes":{"description":"Corresponds to 2D matrix of travelTimes (in seconds).","items":{"format":"int32","type":"integer"},"maxItems":100000000,"minItems":4,"type":"array"}},"required":["origins","travelTimes","distances"],"type":"object","x-maturity":"alpha"},"LinearPenalty":{"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.","properties":{"type":{"enum":["linear"],"example":"linear","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"Location":{"description":"Represents a geospatial location defined by latitude and longitude coordinates in WGS-84 format.\nUsed to specify vehicle start and end positions, job locations, and other geographic points\nin tour planning.","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Specifies the location ID. Avoid referencing any sensitive or personal information, such\nas names, addresses, or information about a delivery or service. If specified and custom\nmatrix provided, there is no need to pass latitude and longitude."},"lat":{"description":"Specifies the latitude coordinate in WGS-84 degrees.","example":52.53088,"format":"double","maximum":90,"minimum":-90,"type":"number"},"lng":{"description":"Specifies the longitude coordinate in WGS-84 degrees.","example":13.38471,"format":"double","maximum":180,"minimum":-180,"type":"number"}},"type":"object"},"Matrix":{"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```nocompile\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.","properties":{"distances":{"description":"Corresponds to 2D matrix of distances (in meters).","items":{"format":"int32","type":"integer"},"maxItems":1000000,"minItems":4,"type":"array"},"errorCodes":{"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) |","example":[0,1,2,3],"items":{"format":"int32","type":"integer"},"maxItems":1000000,"minItems":4,"type":"array"},"origins":{"description":"An ordered list of origins used in the routing matrix","items":{"$ref":"#/components/schemas/MatrixOrigin"},"maxItems":1000,"minItems":2,"type":"array"},"travelTimes":{"description":"Corresponds to 2D matrix of travelTimes (in seconds).","items":{"format":"int32","type":"integer"},"maxItems":1000000,"minItems":4,"type":"array"}},"required":["origins","travelTimes","distances"],"type":"object","x-maturity":"alpha"},"MatrixId":{"description":"**ALPHA** Unique identifier (UUID) of the uploaded matrix","example":"87aec2ce-b697-11e8-96f8-529269fb1459","maxLength":36,"minLength":36,"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}$","type":"string","x-maturity":"alpha"},"MatrixOrigin":{"description":"An ordered list of origins used in the routing matrix","discriminator":{"mapping":{"id":"#/components/schemas/MatrixOriginId"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/MatrixOriginId"}]},"MatrixOriginId":{"description":"Specifies the origin location used in custom matrix.","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Specifies id of the origin. Avoid referencing any sensitive or personal information, such as names, addresses,\ninformation about a delivery or service."},"type":{"enum":["id"],"example":"id","type":"string"}},"required":["id","type"],"type":"object"},"MatrixUploadResponse":{"description":"Response of the uploaded matrix","properties":{"matrixId":{"$ref":"#/components/schemas/MatrixId"}},"required":["matrixId"],"type":"object","x-maturity":"alpha"},"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.","example":{"type":"maxDurationStrategy"},"properties":{"type":{"enum":["maxDurationStrategy"],"example":"maxDurationStrategy","type":"string"}},"required":["type"],"type":"object"},"MaxTimeOnVehicle":{"description":"The maximum amount of time in seconds the job is allowed to stay on the vehicle. Constrains\nthe maximum time the job can be on the vehicle in the solution. This constraint is calculated as follows:\n\n* For jobs with pickups and deliveries, this is the duration from the first pickup activity to the arrival at the last delivery activity.\n* For jobs with only one delivery, the duration is counted from either the departure activity location or the previous reload activity.\n* For jobs with only pickups, the duration is counted until the arrival activity or the next reload.\n* If the shift does not have an end, the duration is counted until the end of the last activity in the tour.\n* The duration of the first loading and the last unloading activity is excluded from that time.\n\nFor a practical application of this constraint, see [Plan employee transportation](https://docs.here.com/tour-planning/docs/employee-pickup-dropoff).","example":180,"format":"int64","maximum":604800,"minimum":0,"type":"integer"},"MaximizePriorityJobs":{"description":"**ALPHA** An objective to maximize assignment of prioritized jobs.","properties":{"type":{"enum":["maximizePriorityJobs"],"example":"maximizePriorityJobs","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"MaximizeTerritoryJobs":{"description":"**ALPHA** An objective to achieve desired jobs distribution between vehicles considering the territories in which these vehicles operate.","properties":{"type":{"enum":["maximizeTerritoryJobs"],"example":"maximizeTerritoryJobs","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"MaximizeTours":{"description":"**ALPHA** Maximizes the number of used vehicles.","properties":{"type":{"enum":["maximizeTours"],"example":"maximizeTours","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"MinimizeCost":{"description":"Minimizes the total solution cost","properties":{"eagerDelivery":{"$ref":"#/components/schemas/EagerDeliveryOptions"},"type":{"enum":["minimizeCost"],"example":"minimizeCost","type":"string"}},"required":["type"],"type":"object"},"MinimizeDistance":{"description":"An objective to minimize total distance.","properties":{"type":{"enum":["minimizeDistance"],"example":"minimizeDistance","type":"string"}},"required":["type"],"type":"object"},"MinimizeDuration":{"description":"An objective to minimize total duration calculated as the sum of all tour durations.","properties":{"type":{"enum":["minimizeDuration"],"example":"minimizeDuration","type":"string"}},"required":["type"],"type":"object"},"MinimizeSoftTimeWindowViolations":{"description":"**ALPHA** An objective to minimize soft time window violations.","properties":{"type":{"enum":["minimizeSoftTimeWindowViolations"],"example":"minimizeSoftTimeWindowViolations","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"MinimizeTourOverlap":{"description":"**ALPHA** An objective to produce less overlapping tours, that are more geographically separated and more compact","properties":{"alpha":{"description":"A coefficient that controls the sensitivity of the termination criteria towards changes in\nthis objective. Smaller values make the solver more sensitive to improvements and may result\nin longer run times. Default value is 0.014 when useRealDistance is set and 1.0 otherwise","example":0.01,"format":"double","maximum":1,"minimum":0.00001,"type":"number"},"tolerance":{"description":"A tolerance specifies how much objective values should differ in order to be considered as not-equal","example":0.1,"format":"double","maximum":1,"minimum":0,"type":"number"},"type":{"enum":["minimizeTourOverlap"],"example":"minimizeTourOverlap","type":"string"},"useRealDistance":{"default":false,"description":"Uses real street network distances instead of aerial distances, producing tours that conform\nto road topology and avoid splitting across obstacles like rivers or highways","example":false,"type":"boolean"}},"required":["type"],"type":"object","x-maturity":"alpha"},"MinimizeTours":{"description":"**ALPHA** Minimizes the number of used vehicles","properties":{"type":{"enum":["minimizeTours"],"example":"minimizeTours","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"MinimizeUnassigned":{"description":"Minimizes the number of unassigned jobs","properties":{"type":{"enum":["minimizeUnassigned"],"example":"minimizeUnassigned","type":"string"}},"required":["type"],"type":"object"},"MixingRestrictionSet":{"description":"A set of restrictions on mixing jobs based on their categories","properties":{"compartments":{"description":"**ALPHA** An optional list of compartments,\n* if set, restrictions apply to listed compartments, separately for each one,\n* if not set, restrictions apply to the whole vehicle\n\nThis currently works only for Tour level restrictions","items":{"$ref":"#/components/schemas/Id"},"maxItems":10,"minItems":1,"type":"array","x-maturity":"alpha"},"conflictingCategories":{"description":"Represents a set of conflicting job categories.","example":["food","non-food"],"items":{"$ref":"#/components/schemas/Category"},"maxItems":100,"minItems":2,"type":"array","uniqueItems":true}},"type":"object"},"MultiObjective":{"description":"**ALPHA** Enables the definition of multiple objectives with equal priority, ensuring that each objective is considered equally\nduring the optimization process.","items":{"$ref":"#/components/schemas/AdvancedObjective"},"maxItems":2,"minItems":1,"type":"array","x-maturity":"alpha"},"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.","properties":{"action":{"description":"Provides specific actions to address the issue or improve the problem formulation.","example":"Check whether the vehicle types use the correct profiles.","type":"string"},"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! `allPudoTimeWindowsOutsideOfShifts` | All pudo time windows are outside of vehicle's shift time range |\n! `unusedStopConfigurationProfile` | stopConfiguration is defined but its not used |\n! `deprecatedStopConfig` | stopConfig is used but it is deprecated |\n! `unknownParkingId` | parking referenced by the job is not defined in the problem |\n! `costFactorWithoutPerJob` | costFactor is set while cost per job is not configured |","example":"unusedVehicleProfile","type":"string"},"link":{"description":"Provides a link to the page with additional details about the notice.","example":"https://docs.here.com/tour-planning/docs/","type":"string"},"title":{"description":"A human-readable description of the notice.","example":"Vehicle profile 'truck_1' is not used by any vehicle type.","type":"string"}},"required":["code","title"],"type":"object"},"Objective":{"discriminator":{"mapping":{"minimizeCost":"#/components/schemas/MinimizeCost","minimizeDistance":"#/components/schemas/MinimizeDistance","minimizeDuration":"#/components/schemas/MinimizeDuration","minimizeUnassigned":"#/components/schemas/MinimizeUnassigned","optimizeTaskOrder":"#/components/schemas/OptimizeTaskOrder","optimizeTaskPosition":"#/components/schemas/OptimizeTaskPosition","optimizeTourCount":"#/components/schemas/OptimizeTourCount"},"propertyName":"type"},"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"}]},"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.","properties":{"type":{"enum":["optimizeTaskOrder"],"example":"optimizeTaskOrder","type":"string"}},"required":["type"],"type":"object"},"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":{"isConstrained":{"default":false,"description":"If the property is set to true, then order is enforced as hard constraint.","example":false,"type":"boolean"},"type":{"enum":["optimizeTaskPosition"],"example":"optimizeTaskPosition","type":"string"}},"required":["type"],"type":"object"},"OptimizeTourCount":{"description":"Optimizes the number of vehicles used in the solution. The action parameter determines whether to maximize or minimize the vehicle count","properties":{"action":{"enum":["maximize","minimize"],"example":"minimize","type":"string"},"type":{"enum":["optimizeTourCount"],"example":"optimizeTourCount","type":"string"}},"required":["action","type"],"type":"object"},"Parking":{"description":"**ALPHA** Represents a parking space or car park with id that vehicles can use during their tours.","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Represents the unique ID of a car park or parking space.","example":"parking1"},"places":{"description":"List of places that are available as parking places.","items":{"$ref":"#/components/schemas/ParkingPlace"},"maxItems":10,"minItems":1,"type":"array"}},"required":["id","places"],"type":"object","x-maturity":"alpha"},"ParkingPlace":{"description":"**ALPHA** Specifies parking place data.","example":{"duration":120,"location":{"lat":52.53088,"lng":13.38471},"vehicleTypeIds":["truck1"]},"properties":{"duration":{"$ref":"#/components/schemas/Duration"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"vehicleTypeIds":{"items":{"$ref":"#/components/schemas/Id"},"minItems":1,"type":"array","uniqueItems":true}},"required":["duration"],"type":"object","x-maturity":"alpha"},"PedestrianOptions":{"description":"Specifies pedestrian profile options.","properties":{"speed":{"default":1,"description":"Specifies the walking speed in meters per second (m/s). Influences the duration of\nwalking segments along the route.","example":1,"format":"double","maximum":2,"minimum":0.5,"type":"number"}},"type":"object"},"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.","properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"name":{"$ref":"#/components/schemas/ProfileName"},"options":{"$ref":"#/components/schemas/PedestrianOptions"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["pedestrian"],"example":"pedestrian","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"Penalty":{"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.","discriminator":{"mapping":{"linear":"#/components/schemas/LinearPenalty","quadratic":"#/components/schemas/QuadraticPenalty"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/LinearPenalty"},{"$ref":"#/components/schemas/QuadraticPenalty"}],"x-maturity":"alpha"},"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. A user-defined tag associated with a given place that is propagated back within the solution. Use it to distinguish between different job places.\n\nDo not include any personal information within the `PlaceTag`. For example, avoid using specific names of individuals associated with the place.","example":"some_tag","maxLength":128,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","type":"string"},"Plan":{"description":"[Set of jobs](https://docs.here.com/tour-planning/docs/problem#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.","properties":{"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.","properties":{"serviceTimeStrategy":{"$ref":"#/components/schemas/ServiceTimeStrategy"}},"required":["serviceTimeStrategy"],"type":"object"},"groups":{"description":"**BETA** [Job groups](https://docs.here.com/tour-planning/docs/group-jobs) 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.","items":{"$ref":"#/components/schemas/Group"},"minItems":1,"type":"array","x-maturity":"beta"},"houseKeys":{"allOf":[{"$ref":"#/components/schemas/HouseKeysConfig"}],"description":"**ALPHA** Configures the house keys feature which controls how service time is calculated\nwhen multiple jobs with the same `houseKeyId` are served at the same stop.","x-maturity":"alpha"},"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.","items":{"$ref":"#/components/schemas/Job"},"minItems":1,"type":"array"},"relations":{"description":"Allows defining rules and order for completing jobs by specific vehicles during the [tour re-planning process](https://docs.here.com/tour-planning/docs/relations).\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.","items":{"$ref":"#/components/schemas/Relation"},"maxItems":1000,"minItems":1,"type":"array"},"shared":{"allOf":[{"$ref":"#/components/schemas/Shared"}],"x-maturity":"alpha"}},"required":["jobs"],"type":"object"},"PolygonArea":{"description":"A polygon defined as a list of coordinates.\n\nThe polygon is automatically closed, so repeating the first vertex is not required.","properties":{"outer":{"description":"List of coordinates defining the outline of the polygon.","items":{"$ref":"#/components/schemas/Coordinate"},"maxItems":100,"minItems":3,"type":"array"},"type":{"enum":["polygon"],"example":"polygon","type":"string"}},"required":["outer","type"],"type":"object"},"PrivateBusProfile":{"description":"Route calculation for buses that are not allowed to drive through the bus-only roads.","properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"name":{"$ref":"#/components/schemas/ProfileName"},"options":{"$ref":"#/components/schemas/BusOptions"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["privateBus"],"example":"privateBus","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"Problem":{"description":"A [problem](https://docs.here.com/tour-planning/docs/problem) 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.","properties":{"advancedObjectives":{"description":"**ALPHA** [Extended objectives](https://docs.here.com/tour-planning/docs/objectives#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.","example":[[{"type":"minimizeUnassigned"}],[{"type":"minimizeCost"}]],"items":{"$ref":"#/components/schemas/MultiObjective"},"maxItems":8,"minItems":1,"type":"array","x-maturity":"alpha"},"configuration":{"$ref":"#/components/schemas/Configuration"},"fleet":{"$ref":"#/components/schemas/Fleet"},"objectives":{"description":"[Objectives](https://docs.here.com/tour-planning/docs/objectives#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.","example":[{"type":"minimizeUnassigned"},{"type":"minimizeCost"}],"items":{"$ref":"#/components/schemas/Objective"},"maxItems":6,"minItems":1,"type":"array"},"plan":{"$ref":"#/components/schemas/Plan"}},"required":["plan","fleet"],"type":"object"},"ProblemId":{"description":"A unique identifier for the problem.","example":"87aec2ce-b697-11e8-96f8-529269fb1459","format":"uuid","type":"string"},"Profile":{"discriminator":{"mapping":{"bicycle":"#/components/schemas/BicycleProfile","bus":"#/components/schemas/BusProfile","car":"#/components/schemas/CarProfile","pedestrian":"#/components/schemas/PedestrianProfile","privateBus":"#/components/schemas/PrivateBusProfile","scooter":"#/components/schemas/ScooterProfile","taxi":"#/components/schemas/TaxiProfile","truck":"#/components/schemas/TruckProfile"},"propertyName":"type"},"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"}]},"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.","example":"normal_car","maxLength":128,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","type":"string"},"Pudo":{"description":"**BETA** Represents a specific location called [PUDO (or pick-up and drop-off point)](https://docs.here.com/tour-planning/docs/group-jobs#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.","properties":{"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.","enum":["first","last"],"example":"first","type":"string"},"id":{"description":"The [PUDO](https://docs.here.com/tour-planning/docs/group-jobs#job-groups-with-pudos) ID.\nThis ID must be unique across the entire problem, including job IDs.","example":"pudo1","type":"string"},"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.","items":{"$ref":"#/components/schemas/PudoPlace"},"maxItems":3,"minItems":1,"type":"array"}},"required":["id","assignAt","places"],"type":"object","x-maturity":"beta"},"PudoPlace":{"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.","example":{"duration":180,"location":{"lat":52.53088,"lng":13.38471},"tag":"some_tag","times":[["2020-07-04T10:00:00Z","2020-07-04T12:00:00Z"]]},"properties":{"duration":{"$ref":"#/components/schemas/Duration"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"tag":{"$ref":"#/components/schemas/PlaceTag"},"timeWindows":{"items":{"$ref":"#/components/schemas/SoftTimeWindow"},"maxItems":4,"minItems":0,"type":"array"},"times":{"$ref":"#/components/schemas/TimeWindows"}},"required":["location","duration"],"type":"object","x-maturity":"beta"},"QuadraticPenalty":{"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.","properties":{"type":{"enum":["quadratic"],"example":"quadratic","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"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://docs.here.com/tour-planning/docs/relations).","example":{"jobs":["departure","4bbc206d-1583-4266-bac9-d1580f412ac0","4bbc206d-1583-4266-bac9-d1580f412ac0","arrival"],"shiftIndex":0,"type":"sequence","vehicleId":"vehicle1_1"},"properties":{"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.","items":{"$ref":"#/components/schemas/Id"},"maxItems":1000,"minItems":1,"type":"array"},"shiftIndex":{"$ref":"#/components/schemas/ShiftIndex"},"type":{"$ref":"#/components/schemas/RelationType"},"vehicleId":{"$ref":"#/components/schemas/Id"}},"required":["type","jobs","vehicleId"],"type":"object"},"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.","enum":["sequence","tour","flexible"],"example":"sequence","type":"string"},"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://docs.here.com/tour-planning/docs/polylines).","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.","example":"BGot1nvC729hQoWnKgFvCsEjDwCjDoBrEAzF7BjInLnuB_JrnBnL3rB7BvH3Nz8B7GzZvHjczFnVrE3X8BTwgBnG8LjDjDrOrEjSnGnaxBpF","type":"string"}},"type":"object"},"RouteDetailsConfiguration":{"description":"Include [route details](https://docs.here.com/tour-planning/docs/polylines) 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).","example":["polyline"],"items":{"type":"string","x-extensible-enum":["polyline"]},"minItems":1,"type":"array"},"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`: Includes only category 1 violations, see `violationMapping` property for details.\n- `category2`: Includes only category 2 violations, see `violationMapping` property for details.\n- `allExceptCategory1`: Ignores all violations except category 1 violations.\n- `allExceptCategory2`: Ignores all violations except category 2 violations.\n- `allExceptCategory1AndCategory2`: Ignores all violations except category 1 and category 2 violations.","enum":["all","traffic","category1","category2","allExceptCategory1","allExceptCategory2","allExceptCategory1AndCategory2"],"example":"all","type":"string"},"RoutingLocation":{"description":"Represents a geographic location with coordinates and optional routing hints. Used to specify\nvehicle depot locations, job sites, break locations, charging stations, and other geographic\npoints in tour planning. Includes latitude, longitude, optional location ID, optional side of\nstreet hint for preferred stopping side, and optional name hint to improve routing accuracy.","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Specifies the location ID. Avoid referencing any sensitive or personal information, such\nas names, addresses, or information about a delivery or service. If specified and custom\nmatrix provided, there is no need to pass latitude and longitude."},"lat":{"description":"Specifies the latitude coordinate in WGS-84 degrees.","example":52.53088,"format":"double","maximum":90,"minimum":-90,"type":"number"},"lng":{"description":"Specifies the longitude coordinate in WGS-84 degrees.","example":13.38471,"format":"double","maximum":180,"minimum":-180,"type":"number"},"nameHint":{"description":"Directs the route calculation to search for a location with a matching or similar name,\nimproving routing accuracy when location names are known.","example":"Friedrich-List-Straße","type":"string"},"sideOfStreetHint":{"$ref":"#/components/schemas/SideOfStreetHint"}},"type":"object"},"Schedule":{"description":"Specifies the expected `arrival` and `departure` times at a particular stop.","properties":{"arrival":{"$ref":"#/components/schemas/DateAndTime"},"departure":{"$ref":"#/components/schemas/DateAndTime"}},"required":["arrival","departure"],"type":"object"},"ScooterOptions":{"description":"Specifies scooter profile options.","properties":{"allowHighway":{"default":false,"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`.","example":false,"type":"boolean"},"speedCap":{"$ref":"#/components/schemas/SpeedCap"}},"type":"object"},"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.","properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"name":{"$ref":"#/components/schemas/ProfileName"},"options":{"$ref":"#/components/schemas/ScooterOptions"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["scooter"],"example":"scooter","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"ServeInClusters":{"description":"**ALPHA** An objective to serve jobs in clusters","properties":{"maxClusterRadius":{"default":800,"description":"Specifies a radius in meters in which job locations are clustered. Jobs in the same cluster\nare served consecutively before moving on the next cluster. Suitable values for the parameter\ndepend on the job distribution and need to be tuned until satisfactory results are achieved.","example":300,"format":"int64","maximum":100000,"minimum":10,"type":"integer"},"type":{"enum":["serveInClusters"],"example":"serveInClusters","type":"string"}},"required":["type"],"type":"object","x-maturity":"alpha"},"ServerErrorResponse":{"example":{"action":"Correct arrival time of 'vehicle' to be earlier than its departure","cause":"Vehicle's arrival time is earlier than its departure time","code":"E613420","correlationId":"fee3c453-f537-49ca-a285-f5f076bce7d1","status":400,"title":"BAD_REQUEST"},"properties":{"action":{"description":"Provides actionable instructions on how to resolve this error.","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"},"code":{"description":"Provides a machine-readable error code that identifies the specific service error \nfor debugging and logging purposes.\n","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"},"status":{"description":"Indicates the HTTP status code, which matches the HTTP response status code.","type":"integer"},"title":{"description":"Provides the error title.","type":"string"}},"required":["title","status","code","cause","action","correlationId"],"type":"object"},"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\nof 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,\nbounded by a given maximum.","discriminator":{"mapping":{"boundedSumStrategy":"#/components/schemas/BoundedSumStrategy","fixedDurationStrategy":"#/components/schemas/FixedDurationStrategy","maxDurationStrategy":"#/components/schemas/MaxDurationStrategy"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/FixedDurationStrategy"},{"$ref":"#/components/schemas/MaxDurationStrategy"},{"$ref":"#/components/schemas/BoundedSumStrategy"}]},"Shared":{"description":"**ALPHA** Represents a set of shared resources, such as parking places and charging stations, that can be utilized by multiple vehicles during their tours.","properties":{"chargingStations":{"description":"A list of charging stations with id that vehicles can use during their tours.\nIf no stations are provided Tour Planning pulls in compatible stations defined in HERE content.","items":{"$ref":"#/components/schemas/ChargingStation"},"maxItems":20,"minItems":1,"type":"array"},"parking":{"description":"A list of parking places with id that vehicles can use during their tours.","items":{"$ref":"#/components/schemas/Parking"},"minItems":1,"type":"array"}},"type":"object","x-maturity":"alpha"},"ShiftIndex":{"default":0,"description":"Index of a vehicle shift used to distinguish between different shifts for the same vehicle.\nSince a vehicle can have at most 7 shifts, the value must be between 0 and 6.\nThe shift index identifies which shift in the vehicle type's shifts array a tour corresponds to,\nallowing the same vehicle to operate across multiple time periods.\n\nFor more information, see [Include multiple shifts](https://docs.here.com/tour-planning/docs/multiple-shifts).","example":0,"maximum":6,"minimum":0,"type":"integer"},"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","enum":["explosive","gas","flammable","combustible","organic","poison","radioactive","corrosive","poisonousInhalation","harmfulToWater","other"],"type":"string"},"SideOfStreetHint":{"description":"Provides a hint indicating the preferred side of the street for a job location. This ensures\nvehicles stop on the most convenient or safest side of the road to perform the delivery or pickup.\nThe 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://docs.here.com/tour-planning/docs/side-of-street).","properties":{"lat":{"description":"Specifies the latitude coordinate in WGS-84 degrees of the preferred stopping point.","example":52.53088,"format":"double","maximum":90,"minimum":-90,"type":"number"},"lng":{"description":"Specifies the longitude coordinate in WGS-84 degrees of the preferred stopping point.","example":13.38471,"format":"double","maximum":180,"minimum":-180,"type":"number"},"matchSideOfStreet":{"default":"onlyIfDivided","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://docs.here.com/tour-planning/docs/side-of-street).","enum":["always","onlyIfDivided"],"example":"onlyIfDivided","type":"string"}},"required":["lat","lng"],"type":"object"},"Skills":{"description":"A list of skills required by a job or provided by a vehicle type. Only vehicles with all the\nskills required by a job can serve that job. Use skills to match specific vehicle capabilities\nto job requirements, such as `fridge` for refrigerated transport, `plumber` for service jobs,\nor `heavy_duty` for large loads. If no vehicle with matching skills has sufficient capacity or\ntime, jobs requiring those skills will remain unassigned.\n\nFor more information, see [Assign jobs based on skills](https://docs.here.com/tour-planning/docs/skills).","example":["fridge"],"items":{"maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"SoftTime":{"description":"**ALPHA** Represents a single soft time window instance where time unit is defined in the RFC3339 format.","properties":{"penalty":{"$ref":"#/components/schemas/Penalty"},"preferred":{"allOf":[{"$ref":"#/components/schemas/DateAndTime"}],"description":"The preferred (soft constraint) time boundary that can be exceeded. Violations of this\npreferred time are allowed but result in penalties applied during optimization to minimize deviations."},"time":{"allOf":[{"$ref":"#/components/schemas/DateAndTime"}],"description":"The hard constraint time boundary that cannot be exceeded. This represents the absolute\ntime limit for the activity - exceeding this time results in the job being unassigned."}},"required":["time"],"type":"object","x-maturity":"alpha"},"SoftTimeWindow":{"description":"**ALPHA** Represents a single soft constraint time window that allows flexibility when minor delays are acceptable.\nConsists of a hard constraint boundary (absolute time limits that cannot be exceeded) and a preferred\ntime window (soft constraint), placed within the hard constrain boundary, for example:\n\nExample:\n\n```markdown\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\nboundary result in unassigned jobs. To enable this experimental feature, add the `softTimeWindows`\nflag to `experimentalFeatures` configuration in the problem.\n\nFor more information, see [Set soft time windows](https://docs.here.com/tour-planning/docs/soft-time-windows).","properties":{"from":{"$ref":"#/components/schemas/SoftTime"},"to":{"$ref":"#/components/schemas/SoftTime"}},"required":["from","to"],"type":"object","x-maturity":"alpha"},"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.\n\nFor more information, see [Solution](https://docs.here.com/tour-planning/docs/solution).","properties":{"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.","items":{"$ref":"#/components/schemas/Notice"},"type":"array"},"statistic":{"$ref":"#/components/schemas/Statistic"},"tours":{"description":"The [list of tours](https://docs.here.com/tour-planning/docs/solution#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.","items":{"$ref":"#/components/schemas/Tour"},"type":"array"},"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 [Troubleshoot unassigned jobs](https://docs.here.com/tour-planning/docs/troubleshoot-unassigned-jobs).","items":{"$ref":"#/components/schemas/UnassignedJob"},"type":"array"}},"required":["statistic"],"type":"object"},"SpeedCap":{"description":"Specifies the maximum speed, in m/s, which the vehicle should not exceed. This parameter affects route duration.\nNotes:\n* Car and Truck profile updates route ETA.\n* Scooter profile updates route optimization and ETA.","example":20,"format":"double","maximum":70,"minimum":1,"type":"number"},"Statistic":{"description":"Provides [metrics](https://docs.here.com/tour-planning/docs/solution#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.","properties":{"co2Emission":{"description":"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.","example":5.761,"format":"double","type":"number"},"consumption":{"description":"The estimated [net fuel consumption](https://docs.here.com/tour-planning/docs/co-emissions) 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.","example":2.1821,"format":"double","type":"number"},"cost":{"description":"Represents the total cost of all tours within a solution, calculated in abstract units.","example":1024,"format":"double","minimum":0,"type":"number"},"costs":{"allOf":[{"$ref":"#/components/schemas/CostStatistics"}],"description":"Breakdown of cost into individual components. Only present fields contribute to the total cost.","x-maturity":"alpha"},"distance":{"description":"Indicates the cumulative distance, measured in meters, that all vehicles have traveled across all tours.","example":32000,"format":"int64","minimum":0,"type":"integer"},"duration":{"$ref":"#/components/schemas/Duration"},"intraStopDistance":{"description":"The total distance (in meters) between activities inside all the Stops plus the way back to the\nstop locations.","example":1024,"format":"int64","minimum":0,"type":"integer"},"times":{"$ref":"#/components/schemas/Timing"},"violations":{"$ref":"#/components/schemas/Violations"}},"required":["cost","distance","duration","times"],"type":"object"},"Stop":{"description":"Represents a [specific geographical location](https://docs.here.com/tour-planning/docs/solution#stop) where a vehicle is scheduled to perform one or more\nactivities related to jobs, such as `pickups`, `deliveries`, or `breaks`.","properties":{"activities":{"description":"Provides a list of activities like `pickup`, `delivery`, `arrival`, `break`, and so on, scheduled\nto occur at the stop during the tour.","items":{"$ref":"#/components/schemas/Activity"},"type":"array"},"consumption":{"description":"**ALPHA** Energy consumption since departure from start (in kWh or similar unit).\nOnly present when consumption-based recharging is enabled.","example":2.1821,"format":"double","type":"number","x-maturity":"alpha"},"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.","example":1024,"format":"int64","minimum":0,"type":"integer"},"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.","example":1024,"format":"int64","minimum":0,"type":"integer"},"load":{"$ref":"#/components/schemas/Unit"},"loadPerCompartment":{"items":{"properties":{"load":{"$ref":"#/components/schemas/Unit"},"name":{"$ref":"#/components/schemas/Id","description":"Id of the compartment"}},"required":["name","load"],"type":"object"},"type":"array","x-maturity":"alpha"},"location":{"$ref":"#/components/schemas/Location"},"routeDetails":{"$ref":"#/components/schemas/RouteDetails"},"time":{"$ref":"#/components/schemas/Schedule"}},"required":["time","load","activities"],"type":"object"},"StopConfig":{"deprecated":true,"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.","discriminator":{"mapping":{"dbscan":"#/components/schemas/DbscanStopConfig"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/DbscanStopConfig"}],"x-maturity":"alpha"},"StopConfiguration":{"description":"**ALPHA** Configures how stops are created.\nSpecifies how multiple jobs located close to each other can be grouped into a single stop.","properties":{"limits":{"$ref":"#/components/schemas/StopConfigurationLimits"},"profile":{"allOf":[{"$ref":"#/components/schemas/ProfileName"}],"description":"**ALPHA** The vehicle profile to be used for calculating intra stop distances and durations.\nIf its not set then the main vehicle profile is used for calculating intra stop metrics."}},"required":["profile"],"type":"object","x-maturity":"alpha"},"StopConfigurationLimits":{"description":"**ALPHA** Configures limits for a single stop.\nTo enable it, add `clusterNearby` flag to `experimentalFeatures` configuration in the problem.","properties":{"maxIntraStopDistance":{"description":"**ALPHA** The maximum intra stop distance inside a single stop with more than one job related activity.\nIf its not set, then only same location jobs can be clustered, with an exception for parking locations\nfeature, where if you set the location for the parking than all job activities using this parking can\nbe stacked regardless of intraStopDistance","example":200,"format":"double","maximum":30000,"minimum":1,"type":"number"}},"type":"object","x-maturity":"alpha"},"TaxiOptions":{"description":"Specifies taxi profile options.","properties":{"allowDriveThroughTaxiRoads":{"default":true,"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.","example":true,"type":"boolean"},"axleCount":{"description":"Specifies the total number of axles the vehicle has, i.e., axles on the base vehicle and any attached trailers.","example":2,"format":"int32","maximum":255,"minimum":2,"type":"integer"},"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.","example":0,"format":"int32","maximum":1,"minimum":0,"type":"integer"}},"required":["allowDriveThroughTaxiRoads"],"type":"object"},"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.","properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"name":{"$ref":"#/components/schemas/ProfileName"},"options":{"$ref":"#/components/schemas/TaxiOptions"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["taxi"],"example":"taxi","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"Termination":{"description":"Defines the conditions under which the optimization algorithm stops running.","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 |","example":30,"format":"int64","minimum":1,"type":"integer"},"searchEffort":{"default":"balanced","description":"**ALPHA** Controls how aggressively the solver terminates when progress slows down.\nDefaults to \"balanced\" if omitted.","enum":["quick","balanced","thorough"],"example":"balanced","type":"string","x-maturity":"alpha"},"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 |","example":5,"format":"int64","minimum":1,"type":"integer"}},"required":["maxTime","stagnationTime"],"type":"object"},"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.","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"A territory identifier. It can be used to express in which territory a job is located, see JobPlace.territoryIds","example":"territory1"},"priority":{"default":1,"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.","example":1,"maximum":5,"minimum":1,"type":"integer"}},"required":["id"],"type":"object"},"TieBreak":{"description":"**ALPHA** A hierarchical objective that allows ties in a higher-level objective to be broken by a lower-level objective","properties":{"objectives":{"items":{"$ref":"#/components/schemas/TieBreakObj"},"minItems":2,"type":"array"},"type":{"enum":["tieBreak"],"example":"tieBreak","type":"string"}},"required":["objectives","type"],"type":"object","x-maturity":"alpha"},"TieBreakObj":{"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":{"improvementThreshold":{"description":"If the decision was delegated to this objective by a higher-level objective, two solutions\nmust differ by at least this threshold in order to select one over the other.","example":0.1,"format":"double","maximum":1,"minimum":0,"type":"number"},"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.","example":0.05,"format":"double","maximum":1,"minimum":0,"type":"number"}},"required":["objective"],"type":"object","x-maturity":"alpha"},"TimeWindow":{"description":"Represents a single hard constraint time window. The first element is the lower bound\n(earliest start time) and the second element is the upper bound (latest start time) in RFC3339 format.\nThe job task must begin within this time window or the job may remain unassigned.","example":["2020-07-04T08:00:00Z","2020-07-04T10:00:00Z"],"items":{"$ref":"#/components/schemas/DateAndTime"},"maxItems":2,"minItems":2,"type":"array"},"TimeWindows":{"description":"Represents multiple hard constraint time windows. Each time window specifies a time period during which\nan activity (such as a delivery or pickup) must start. No violations are allowed - if a job cannot be\nserved 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://docs.here.com/tour-planning/docs/time-windows).","example":[["2020-07-04T08:00:00Z","2020-07-04T10:00:00Z"],["2020-07-04T16:00:00Z","2020-07-04T18:00:00Z"]],"items":{"$ref":"#/components/schemas/TimeWindow"},"maxItems":4,"minItems":0,"type":"array"},"TimeWindowsViolations":{"description":"**ALPHA** Indicates the total number and the sum of seconds by which all\n[soft time windows](https://docs.here.com/tour-planning/docs/soft-time-windows) were violated.\nViolations are instances where the planned arrival times at specific locations do not comply\nwith the predefined hard constraints allocated for those stops.","properties":{"count":{"description":"The total number of times soft time windows were violated.","example":1,"format":"double","type":"number"},"total":{"description":"The total sum of seconds by which soft time windows were violated.","example":10,"format":"double","type":"number"}},"required":["count","total"],"type":"object","x-maturity":"alpha"},"Timing":{"description":"Contains detailed time consumption information for various activity types during a tour.\nAll durations are in seconds and represent the total time spent on different activities.\nIncludes driving time between locations, serving time for job activities, waiting time to meet\ntime window constraints, stopping time, break time, and intra-stop time.","example":{"break":1200,"driving":3600,"serving":600,"stopping":100,"waiting":180},"properties":{"break":{"$ref":"#/components/schemas/Duration"},"charging":{"$ref":"#/components/schemas/Duration"},"driving":{"$ref":"#/components/schemas/Duration"},"intraStop":{"$ref":"#/components/schemas/Duration"},"serving":{"$ref":"#/components/schemas/Duration"},"stopping":{"$ref":"#/components/schemas/Duration"},"waiting":{"$ref":"#/components/schemas/Duration"}},"required":["driving","serving","waiting","break","stopping"],"type":"object"},"TooManyRequestsResponse":{"properties":{"error":{"description":"Provides an error message based on the status code.","example":"Too Many Requests","type":"string"},"error_description":{"description":"Provides detailed information about an authentication or authorization error.","example":"Rate limit for this service has been reached","type":"string"}},"required":["error","error_description"],"type":"object"},"Tour":{"description":"Represents a [pre-optimized route](https://docs.here.com/tour-planning/docs/solution#list-of-tours)\nthat has been completed by a single vehicle, encompassing all assigned activities, such as pickups,\ndeliveries, breaks, and so on.","properties":{"shiftIndex":{"$ref":"#/components/schemas/ShiftIndex"},"statistic":{"$ref":"#/components/schemas/Statistic"},"stops":{"description":"The list of specific locations where a vehicle is scheduled to halt for various activities,\nsuch as pickups, deliveries, or breaks.","items":{"$ref":"#/components/schemas/Stop"},"type":"array"},"typeId":{"$ref":"#/components/schemas/Id"},"vehicleId":{"$ref":"#/components/schemas/Id"}},"required":["vehicleId","typeId","stops","statistic","shiftIndex"],"type":"object"},"TourOrder":{"deprecated":true,"description":"**ALPHA** Deprecated, use OptimizeTaskPosition instead.\nAn objective to control order of job activities in the tour.","properties":{"isConstrained":{"description":"If the property is set to true, then order is enforced as hard constraint.","example":false,"type":"boolean"},"type":{"enum":["tourOrder"],"example":"tourOrder","type":"string"}},"required":["isConstrained","type"],"type":"object","x-maturity":"alpha"},"Traffic":{"description":"Traffic specific parameters.","properties":{"mode":{"description":"Defines what traffic data should be used for route shape and travel duration calculation.\n- `default`: Traffic data is considered.\n- `disabled`: All traffic data, including long term closures, is ignored.","enum":["default","disabled"],"example":"disabled","type":"string"}},"required":["mode"],"type":"object"},"TruckOptions":{"allOf":[{"$ref":"#/components/schemas/VehicleOptions"}],"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."},"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.","example":{"name":"normal_truck","type":"truck"},"properties":{"avoid":{"$ref":"#/components/schemas/AvoidRoutes"},"departureTime":{"$ref":"#/components/schemas/DateAndTime"},"exclude":{"$ref":"#/components/schemas/Exclude"},"ignoreRouteViolations":{"$ref":"#/components/schemas/IgnoreRouteViolations"},"matrix":{"$ref":"#/components/schemas/Matrix"},"matrixId":{"$ref":"#/components/schemas/MatrixId"},"name":{"$ref":"#/components/schemas/ProfileName"},"options":{"$ref":"#/components/schemas/TruckOptions"},"traffic":{"$ref":"#/components/schemas/Traffic"},"type":{"enum":["truck"],"example":"truck","type":"string"},"violationMapping":{"$ref":"#/components/schemas/ViolationMapping"}},"required":["name","type"],"type":"object"},"TunnelCategory":{"description":"Specifies the tunnel category to restrict certain route streets.\nThe route will pass only through tunnels of a less strict category.","enum":["B","C","D","E"],"type":"string"},"UnassignedJob":{"description":"Specifies an unassigned job and outlines [possible causes of unassignment](https://docs.here.com/tour-planning/docs/troubleshoot-unassigned-jobs).","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 |","items":{"$ref":"#/components/schemas/UnassignedJobReason"},"minItems":1,"type":"array"}},"required":["jobId","reasons"],"type":"object"},"UnassignedJobDetail":{"description":"**ALPHA** Details about job unassignment such as vehicle id, shift index. This can help to analyze how to modify\nthe problem definition to decrease amount of unassigned jobs.","properties":{"shiftIndex":{"$ref":"#/components/schemas/ShiftIndex"},"vehicleIds":{"items":{"$ref":"#/components/schemas/Id"},"minItems":1,"type":"array"}},"required":["vehicleIds","shiftIndex"],"type":"object","x-maturity":"alpha"},"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.","properties":{"code":{"description":"Specifies the reason code for a job that remains unassigned.","example":"SKILL_CONSTRAINT","type":"string"},"description":{"description":"Provides supplementary information to aid in identifying and resolving the underlying issue that caused the job to remain unassigned.","example":"cannot serve required skill","type":"string"},"details":{"description":"Provides more details about unassignment.","items":{"$ref":"#/components/schemas/UnassignedJobDetail"},"minItems":1,"type":"array"}},"required":["code","description"],"type":"object"},"Unit":{"description":"Represents multidimensional units of measure for vehicle capacity and job demand. Can specify volume,\nmass, weight, number of items, or other accumulative measures. Values at corresponding array positions\nare compared element-by-element during capacity validation. For example, `[100, 50]` could represent\n100 kg weight and 50 cubic units of volume.\n\nFor more information, see [Solve the capacitated vehicle routing problem](https://docs.here.com/tour-planning/docs/capacitated-vrp).","example":[100,5],"items":{"maximum":2147483647,"minimum":0,"type":"integer"},"maxItems":10,"minItems":1,"type":"array"},"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.","properties":{"duration":{"$ref":"#/components/schemas/Duration"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"policy":{"$ref":"#/components/schemas/VehicleBreakPolicy"},"times":{"$ref":"#/components/schemas/TimeWindows"}},"required":["times","duration"],"type":"object"},"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\nThe 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.","enum":["allowAtTheEnd"],"type":"string"},"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.","enum":["undefined","lightTruck"],"type":"string"},"VehicleCharging":{"description":"**ALPHA** Specifies vehicle charging properties.","example":{"evProfileId":"10","maxCharge":80,"minCharge":20,"setupDuration":300},"properties":{"evProfileId":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Identifier of the electric vehicle profile from HERE EV Profiles Service that contains information about the vehicle's battery capacity, consumption rates, and charging capabilities."},"initialCharges":{"items":{"$ref":"#/components/schemas/VehicleInitialCharge"},"minItems":1,"type":"array","uniqueItems":true},"maxCharge":{"description":"Target battery charge level (in percentage) at which charging should stop.","example":80,"format":"int32","maximum":100,"minimum":0,"type":"integer"},"maxDistance":{"description":"Maximum traveled distance before charging station has to be visited (in meters).","example":10000,"format":"int32","maximum":10000000,"minimum":1,"type":"integer"},"minCharge":{"description":"Minimum battery charge level (in percentage) below which the vehicle must visit a charging station.","example":20,"format":"int32","maximum":100,"minimum":0,"type":"integer"},"setupDuration":{"$ref":"#/components/schemas/Duration"},"usePublicStations":{"default":true,"description":"Whether to use public charging stations for this vehicle type. Default is true.","type":"boolean"}},"type":"object","x-maturity":"alpha"},"VehicleCosts":{"description":"Defines different vehicle costs per unit.","properties":{"distance":{"description":"A cost per meter. It is optional with a default value of zero.","example":0.0001,"format":"double","maximum":100000,"minimum":0,"type":"number"},"excessCosts":{"allOf":[{"$ref":"#/components/schemas/ExcessCosts"}],"x-maturity":"beta"},"fixed":{"description":"A fixed cost to start using vehicle of this type. It is optional with a default value of zero","example":22,"format":"double","maximum":100000,"minimum":0,"type":"number"},"perJob":{"$ref":"#/components/schemas/VehicleJobCost"},"perWaitingTime":{"description":"A cost per second for waiting times. If not set, a regular time cost is used.","example":0.01,"format":"double","maximum":100000,"minimum":0,"type":"number"},"time":{"description":"A cost per second. It is optional with a default value of zero. Both time and distance costs\ncannot be specified as 0. If time and distance costs are not specified at all, then a small\ntime cost 0.00000000001 will be used instead.","example":0.0048,"format":"double","maximum":100000,"minimum":0,"type":"number"}},"type":"object"},"VehicleDrivingRestTime":{"description":"**BETA** Defines driving rest time","discriminator":{"mapping":{"fixedDuration":"#/components/schemas/VehicleFixedDurationRestTime"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/VehicleFixedDurationRestTime"}],"x-maturity":"beta"},"VehicleDutyRestTime":{"description":"**ALPHA** Defines duty rest time","discriminator":{"mapping":{"fixedDuration":"#/components/schemas/VehicleFixedDutyRestTime"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/VehicleFixedDutyRestTime"}],"x-maturity":"alpha"},"VehicleFixedDurationRestTime":{"description":"**BETA** Defines type of rest time configuration with fixed duration","properties":{"breakDuration":{"allOf":[{"$ref":"#/components/schemas/Duration"}],"maximum":172800,"minimum":60},"interval":{"description":"Determines after how long (in seconds) the break should occur","example":16200,"format":"int64","maximum":604800,"minimum":1800,"type":"integer"},"type":{"enum":["fixedDuration"],"example":"fixedDuration","type":"string"}},"required":["interval","breakDuration","type"],"type":"object","x-maturity":"beta"},"VehicleFixedDutyRestTime":{"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.","properties":{"canStartEarly":{"default":false,"description":"Determines whether the break can start earlier than required.\nThis allows for more optimal breaks allocation in order to minimize wait time.","example":true,"type":"boolean"},"maxDrivingTime":{"description":"A max driving duration per duty/day in seconds","example":16200,"format":"int64","maximum":604800,"minimum":14400,"type":"integer"},"maxWorkingTime":{"description":"A max working duration per duty/day in seconds","example":16200,"format":"int64","maximum":604800,"minimum":14400,"type":"integer"},"minOffTime":{"allOf":[{"$ref":"#/components/schemas/Duration"}],"description":"A minimum time between consecutive working days/duties in seconds","maximum":172800,"minimum":3600},"type":{"enum":["fixedDuration"],"example":"fixedDuration","type":"string"}},"required":["minOffTime","type"],"type":"object","x-maturity":"alpha"},"VehicleFuel":{"description":"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.","properties":{"additionalConsumption":{"description":"Rate of fuel (in l/s for diesel, petrol & LPG, kg/s for CNG) consumed by the vehicle for any other reason additional to fuel consumption for speed.","example":1.8,"format":"double","minimum":0,"type":"number"},"ascent":{"description":"Rate of fuel consumed per meter rise in elevation (in l/m for diesel, petrol & LPG, kg/m for CNG).","example":0.1,"format":"double","minimum":0,"type":"number"},"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```nocompile\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`.","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","type":"string"},"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```nocompile\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`.","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","type":"string"},"type":{"description":"Vehicle fuel type (diesel, petrol, lpg, etc.) required for calculation of consumption and CO2 emission.\n","example":"petrol","type":"string","x-extensible-enum":["diesel","petrol","lpg","cng","lng","ethanol","propane","hydrogen"]}},"required":["type","freeFlowSpeedTable"],"type":"object"},"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.","example":["vehicle1_1"],"items":{"$ref":"#/components/schemas/Id"},"maxItems":350,"minItems":1,"type":"array","uniqueItems":true},"VehicleInitialCharge":{"description":"**ALPHA** Specifies vehicle charging properties.","example":{"charge":50,"vehicleId":"vehicle1_1"},"properties":{"charge":{"description":"Current battery level (in percentage) for specific vehicle.","format":"int32","maximum":100,"minimum":0,"type":"integer"},"vehicleId":{"$ref":"#/components/schemas/Id"}},"required":["vehicleId","charge"],"type":"object","x-maturity":"alpha"},"VehicleJobCost":{"description":"**ALPHA** Per-job cost function on vehicle costs.","properties":{"overrides":{"description":"Optional overrides for specific jobs. If a job ID matches, the override cost is used directly.","items":{"$ref":"#/components/schemas/JobCostOverride"},"minItems":1,"type":"array"},"rate":{"$ref":"#/components/schemas/JobCostRate","description":"Rate multiplied by job's costFactor. Cost per job = costFactor × rate."}},"required":["rate"],"type":"object","x-maturity":"alpha"},"VehicleLimits":{"description":"Contains constraints applied to a vehicle type.","properties":{"maxDistance":{"description":"Max distance in meters per shift.","example":20000,"format":"double","maximum":3000000,"minimum":1,"type":"number"},"maxDrivingTime":{"description":"Max driving time in seconds per shift.","example":21600,"format":"int64","maximum":604800,"minimum":1,"type":"integer"},"maxIntraStopDistance":{"description":"**ALPHA** Max intra-stop distance in meters per shift, accumulated over all stops.","example":20000,"format":"double","maximum":3000000,"minimum":1,"type":"number","x-maturity":"alpha"},"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.","example":21600,"format":"double","maximum":604800,"minimum":1,"type":"number"},"stops":{"$ref":"#/components/schemas/VehicleStopsLimit"}},"type":"object"},"VehicleMaxStopsCountLimit":{"description":"Hard limit on the maximum number of stops in a shift.","properties":{"value":{"description":"The maximum number of stops allowed in a vehicle shift.","example":1,"minimum":1,"type":"integer"}},"required":["value"],"type":"object"},"VehicleMinStopsCountLimit":{"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.","properties":{"value":{"description":"The minimum number of stops allowed in a vehicle shift.","example":1,"minimum":0,"type":"integer"}},"required":["value"],"type":"object","x-maturity":"alpha"},"VehicleOptions":{"properties":{"axleCount":{"description":"Specifies the total number of axles the vehicle has, i.e., axles on the base\nvehicle and any attached trailers.","example":3,"format":"int32","maximum":255,"minimum":2,"type":"integer"},"category":{"$ref":"#/components/schemas/VehicleCategory"},"grossWeight":{"description":"Total vehicle weight, including trailers and shipped goods, in kilograms.","example":1000,"minimum":0,"type":"integer"},"height":{"description":"Vehicle height, in centimeters.","example":3000,"maximum":5000,"minimum":0,"type":"integer"},"length":{"description":"Vehicle length, in centimeters.","example":6000,"maximum":30000,"minimum":0,"type":"integer"},"shippedHazardousGoods":{"items":{"$ref":"#/components/schemas/ShippedHazardousGoods"},"type":"array"},"speedCap":{"$ref":"#/components/schemas/SpeedCap"},"trailerCount":{"description":"The number of trailers attached to the vehicle.","example":0,"format":"int32","maximum":255,"minimum":0,"type":"integer"},"tunnelCategory":{"$ref":"#/components/schemas/TunnelCategory"},"weightPerAxle":{"description":"Vehicle weight per axle, in kilograms.\n\n**Note:** `weightPerAxle` and `weightPerAxleGroup` are incompatible.","example":500,"minimum":0,"type":"integer"},"weightPerAxleGroup":{"$ref":"#/components/schemas/WeightPerAxleGroup"},"width":{"description":"Vehicle width, in centimeters.","example":2000,"maximum":5000,"minimum":0,"type":"integer"}},"type":"object"},"VehiclePlace":{"description":"Represents a depot: a place where a vehicle starts or ends.","properties":{"location":{"$ref":"#/components/schemas/RoutingLocation"},"tag":{"$ref":"#/components/schemas/PlaceTag"},"time":{"$ref":"#/components/schemas/DateAndTime"},"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).","example":1800,"format":"int64","maximum":86400,"minimum":0,"type":"integer"}},"required":["time"],"type":"object"},"VehicleReload":{"description":"Specifies a place where vehicle can load or unload cargo.","properties":{"duration":{"$ref":"#/components/schemas/Duration"},"location":{"$ref":"#/components/schemas/RoutingLocation"},"tag":{"$ref":"#/components/schemas/PlaceTag"},"times":{"$ref":"#/components/schemas/TimeWindows"}},"required":["location","duration"],"type":"object"},"VehicleRestTime":{"description":"**BETA** Defines rest times for a vehicle shift for driving, working and duty.\nEither a rest time or a break can be specified.","properties":{"driving":{"$ref":"#/components/schemas/VehicleDrivingRestTime"},"dutyRule":{"$ref":"#/components/schemas/VehicleDutyRestTime"},"working":{"$ref":"#/components/schemas/VehicleWorkingRestTime"}},"type":"object","x-maturity":"beta"},"VehicleShift":{"description":"Specifies how vehicle should operate in one work shift.","example":{"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"]]}],"end":{"location":{"lat":52.5256,"lng":13.4542},"time":"2020-07-04T18:00:00Z"},"start":{"location":{"lat":52.5256,"lng":13.4542},"time":"2020-07-04T09:00:00Z"}},"properties":{"breaks":{"items":{"$ref":"#/components/schemas/VehicleBreak"},"maxItems":5,"minItems":1,"type":"array"},"end":{"$ref":"#/components/schemas/VehiclePlace"},"mixingRestrictions":{"$ref":"#/components/schemas/VehicleShiftMixingRestrictions"},"reloads":{"items":{"$ref":"#/components/schemas/VehicleReload"},"maxItems":5,"minItems":1,"type":"array"},"restTimes":{"$ref":"#/components/schemas/VehicleRestTime"},"start":{"$ref":"#/components/schemas/VehiclePlace"},"stopBaseDuration":{"description":"A constant duration of time, in seconds, added at stops. This can be used to model, for example,\nvehicle parking time, vehicle preparation for loading/unloading or some facility entrance procedures.","properties":{"type":{"enum":["oncePerStop"],"example":"oncePerStop","type":"string"},"value":{"default":0,"description":"The duration, in seconds, added per stop","example":10,"format":"double","maximum":36000,"minimum":0,"type":"number"}},"required":["type","value"],"type":"object"},"stopConfig":{"$ref":"#/components/schemas/StopConfig"},"stopConfiguration":{"$ref":"#/components/schemas/StopConfiguration"}},"required":["start"],"type":"object"},"VehicleShiftMixingRestrictions":{"description":"Enables the prevention of mixing conflicting jobs within a single vehicle.","properties":{"level":{"enum":["tour","subTour"],"example":"tour","type":"string"},"restrictions":{"description":"Represents a set of conflicting job categories.","items":{"$ref":"#/components/schemas/MixingRestrictionSet"},"maxItems":100,"minItems":1,"type":"array"}},"required":["level","restrictions"],"type":"object"},"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.","example":{"maxCount":{"value":13},"minCount":{"value":5}},"properties":{"maxCount":{"$ref":"#/components/schemas/VehicleMaxStopsCountLimit"},"minCount":{"$ref":"#/components/schemas/VehicleMinStopsCountLimit"}},"type":"object"},"VehicleType":{"description":"Represents a vehicle type.","properties":{"amount":{"deprecated":true,"description":"Deprecated, use `vehicleIds` instead.\nAmount of vehicles available. Should be specified if `vehicleIds` array is not set.","example":1,"maximum":350,"minimum":1,"type":"integer"},"capacity":{"allOf":[{"$ref":"#/components/schemas/Unit"}],"description":"Specifies the capacity of the vehicle, either `capacity` of `compartments` must be set","example":[100,5]},"charging":{"$ref":"#/components/schemas/VehicleCharging"},"compartments":{"description":"**ALPHA** List of compartments for this vehicle\nIf this is set, `capacity` will be ignored\nNote that either capacity of compartments must be set and if both are set, then capacity\nwill be ignored and total capacity will be calculated as sum of compartments\nRequires `compartments` feature flag to be set","example":[{"capacity":[5,200],"name":"compartmentA"}],"items":{"$ref":"#/components/schemas/Compartment"},"maxItems":10,"minItems":1,"type":"array","x-maturity":"alpha"},"costs":{"$ref":"#/components/schemas/VehicleCosts"},"fuel":{"$ref":"#/components/schemas/VehicleFuel"},"id":{"allOf":[{"$ref":"#/components/schemas/Id"}],"description":"Specifies id of the vehicle type. Avoid assigning real-life identifiers, such as vehicle license plate as\nthe `id` of a vehicle.","example":"vehicle1"},"limits":{"$ref":"#/components/schemas/VehicleLimits"},"profile":{"$ref":"#/components/schemas/ProfileName"},"shifts":{"items":{"$ref":"#/components/schemas/VehicleShift"},"maxItems":7,"minItems":1,"type":"array"},"skills":{"$ref":"#/components/schemas/Skills"},"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.","example":1,"format":"double","maximum":10,"minimum":0.1,"type":"number"},"territories":{"description":"Represents the vehicle's territories with their priorities. In case a job contains more than one\ntask, then for a vehicle to be able to serve that job, its territories should be a superset of\nthe territories of all tasks in that job","properties":{"items":{"items":{"$ref":"#/components/schemas/Territory"},"type":"array"},"strict":{"default":true,"description":"Determines whether a vehicle can serve jobs outside its territories (when false) or not","example":true,"type":"boolean"}},"required":["items"],"type":"object"},"vehicleIds":{"$ref":"#/components/schemas/VehicleIds"}},"required":["id","profile","costs","shifts"],"type":"object"},"VehicleWorkingRestTime":{"description":"**BETA** Defines working rest time","discriminator":{"mapping":{"fixedDuration":"#/components/schemas/VehicleFixedDurationRestTime"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/VehicleFixedDurationRestTime"}],"x-maturity":"beta"},"VersionResponse":{"description":"Retrieves the current versions of all service components.","properties":{"apiVersion":{"description":"The current version of the API.","example":"3.1.0","type":"string"}},"required":["apiVersion"],"type":"object"},"ViolationMapping":{"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\nExamples for mappings of different types as `category` 1:\n\n- map violations with violated height and violated grossWeight:
\n`{ \"category\": \"category1\", \"type\": \"restriction\", \"grossWeight\": \"include\", \"height\": \"include\" }`\n- map violations with violated height and NOT violated grossWeight:
\n`{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"grossWeight\": \"exclude\" }`\n- map violations with violated height, violation or non-violation of grossWeight doesn't\nmatter:
\n`{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"grossWeight\": \"ignore\" }`\n- map violations with violated height and violated currentWeight:
\n`{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"currentWeight\": \"include\" }`\n- map violations with violated height and NOT violated currentWeight:
\n`{ \"category\": \"category1\", \"type\": \"restriction\", \"height\": \"include\", \"currentWeight\": \"exclude\" }`\n- map violations with violated height, violation or non-violation of currentWeight doesn't\nmatter:
\n`{ \"category\": \"category1\", \"type\": \"restriction\",\"height\": \"include\", \"currentWeight\": \"ignore\" }`\n- map violations of avoiding an area or a segment:
\n`{ \"category\": \"category1\", \"type\": \"avoidAreasAndSegments\" }`\n- map violations of traffic-related blockages outside of bridges:
\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`.","items":{"$ref":"#/components/schemas/ViolationMappingItem"},"maxItems":10,"minItems":1,"type":"array","uniqueItems":true},"ViolationMappingCategory":{"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.","enum":["category1","category2"],"example":"category1","type":"string"},"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.","discriminator":{"mapping":{"avoidAreasAndSegments":"#/components/schemas/ViolationMappingItemAvoidAreasAndSegments","restriction":"#/components/schemas/ViolationMappingItemRestriction","traffic":"#/components/schemas/ViolationMappingItemTraffic"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/ViolationMappingItemRestriction"},{"$ref":"#/components/schemas/ViolationMappingItemTraffic"},{"$ref":"#/components/schemas/ViolationMappingItemAvoidAreasAndSegments"}]},"ViolationMappingItemAvoidAreasAndSegments":{"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`.","properties":{"category":{"$ref":"#/components/schemas/ViolationMappingCategory"},"type":{"enum":["avoidAreasAndSegments"],"example":"avoidAreasAndSegments","type":"string"}},"required":["category","type"],"type":"object"},"ViolationMappingItemRestriction":{"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\" }`","properties":{"bridge":{"allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"ignore","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."},"category":{"$ref":"#/components/schemas/ViolationMappingCategory"},"currentWeight":{"allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"exclude","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."},"grossWeight":{"allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"exclude","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."},"height":{"allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"exclude","description":"Indicates whether height violation is included or excluded from this\ncategory."},"timeDependent":{"allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"ignore","description":"Specifies whether the time dependent violation of restrictions is included,\nexcluded or ignored for this category."},"type":{"enum":["restriction"],"example":"restriction","type":"string"}},"required":["category","type"],"type":"object"},"ViolationMappingItemTraffic":{"description":"Allows the mapping of traffic related blockages.\nMapping of traffic blockages is supported for transport modes `car` and `truck`.","properties":{"bridge":{"allOf":[{"$ref":"#/components/schemas/ViolationMappingOptionalField"}],"default":"ignore","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."},"category":{"$ref":"#/components/schemas/ViolationMappingCategory"},"type":{"enum":["traffic"],"example":"traffic","type":"string"}},"required":["category","type"],"type":"object"},"ViolationMappingOptionalField":{"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","enum":["include","exclude","ignore"],"type":"string"},"Violations":{"description":"**ALPHA** Contains information about tour violations.","properties":{"timeWindows":{"$ref":"#/components/schemas/TimeWindowsViolations"}},"type":"object","x-maturity":"alpha"},"VisuallyAppealingTours":{"description":"**ALPHA** An objective to produce a more visually appealing tours in contrast to cost/balancing considerations","properties":{"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_.","example":300,"format":"int64","maximum":100000,"minimum":10,"type":"integer"},"tolerance":{"description":"A tolerance specifies how much objective values should differ in order to be considered as not-equal","example":0.1,"format":"double","maximum":1,"minimum":0,"type":"number"},"type":{"enum":["visuallyAppealingTours"],"example":"visuallyAppealingTours","type":"string"},"weight":{"description":"A weight parameter specifies trade off between visual appealing aspect and routing considerations.\nThe value should be in the range [0; 1] and defines how much visual aspect dominates over routing.","example":0.5,"format":"double","maximum":1,"minimum":0,"type":"number"}},"required":["type"],"type":"object","x-maturity":"alpha"},"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.","example":{"single":11000,"tandem":18000},"properties":{"quad":{"description":"quad axle group","format":"int32","minimum":0,"type":"integer"},"quint":{"description":"quint axle group","format":"int32","minimum":0,"type":"integer"},"single":{"description":"single axle group","format":"int32","minimum":0,"type":"integer"},"tandem":{"description":"tandem axle group","format":"int32","minimum":0,"type":"integer"},"triple":{"description":"triple axle group","format":"int32","minimum":0,"type":"integer"}},"type":"object"}},"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."}]}