Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Kardinal ARO Resource API
version: 2.55.0
description: This document specifies the REST API of Kardinal ARO v2.
contact:
url: https://kardinal.ai/
email: contact@kardinal.ai
servers:
- url: /api/v2
security:
- access_token: []
tags:
- name: Resource
description: How to create, retrieve, update and delete resources in a plan.
paths:
/agencies/{agencyId}/plans/{planId}/resources/{resourceId}:
parameters:
- $ref: '#/components/parameters/agencyId'
- $ref: '#/components/parameters/planId'
- $ref: '#/components/parameters/resourceId'
get:
summary: Retrieve a plan's resource
operationId: getPlanResource
tags:
- Resource
responses:
'200':
description: Resource response.
content:
application/json:
schema:
$ref: '#/components/schemas/EnvelopedResource'
'401':
$ref: '#/components/responses/NotAuthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
put:
summary: Create or update a plan's resource
operationId: putPlanResource
tags:
- Resource
parameters:
- $ref: '#/components/parameters/force'
requestBody:
description: The Resource to update.
content:
application/json:
schema:
$ref: '#/components/schemas/Resource'
responses:
'200':
description: Resource response updated.
content:
application/json:
schema:
$ref: '#/components/schemas/EnvelopedResource'
'201':
description: Resource response created.
content:
application/json:
schema:
$ref: '#/components/schemas/EnvelopedResource'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/NotAuthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
summary: Delete a plan's resource
operationId: deletePlanResource
tags:
- Resource
parameters:
- $ref: '#/components/parameters/force'
responses:
'204':
description: Resource is deleted and No content is returned.
'401':
$ref: '#/components/responses/NotAuthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/agencies/{agencyId}/plans/{planId}/resources/{resourceId}/state:
parameters:
- $ref: '#/components/parameters/agencyId'
- $ref: '#/components/parameters/planId'
- $ref: '#/components/parameters/resourceId'
get:
summary: Retrieve a plan's resource state
operationId: getPlanResourceState
tags:
- Resource
responses:
'200':
description: State response.
content:
application/json:
schema:
$ref: '#/components/schemas/EnvelopedState'
'401':
$ref: '#/components/responses/NotAuthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
put:
summary: Update a plan's resource state
operationId: putPlanResourceState
tags:
- Resource
parameters:
- $ref: '#/components/parameters/force'
requestBody:
description: The State to update.
content:
application/json:
schema:
$ref: '#/components/schemas/State'
responses:
'200':
description: State response updated.
content:
application/json:
schema:
$ref: '#/components/schemas/EnvelopedState'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/NotAuthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
/agencies/{agencyId}/plans/{planId}/resources/{resourceId}/forbid/{stopId}:
parameters:
- $ref: '#/components/parameters/agencyId'
- $ref: '#/components/parameters/planId'
- $ref: '#/components/parameters/resourceId'
- $ref: '#/components/parameters/stopId'
put:
summary: Forbid a resource from doing a stop, and return the updated plan
description: 'Forbidding a resource from doing a stop is performed internally by adding a forbidden assignment in the
list of additional constraints of the plan. The forbidden assignment relies on:
- a generated resource tag, based on the id of the resource (example: `generatedTag:$resource-2$:forbid`),
- a generated stop tag, based on the id of the parent order of the stop (example: `generatedTag:$order-1$:forbid`).
Important: all the sibling stops receive this same stop tag, which means that **all the stops of
the order become forbidden for the resource**.
'
operationId: putForbidResourceStop
tags:
- Resource
parameters:
- $ref: '#/components/parameters/force'
responses:
'200':
description: Updated plan response.
content:
application/json:
schema:
$ref: '#/components/schemas/EnvelopedPlan'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/NotAuthenticated'
'403':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
CountryCodes:
type: array
items:
$ref: '#/components/schemas/CountryCode'
example:
- Switzerland
- BE
- ITA
Duration:
type: string
description: A period of time, expressed in the ISO8601 **duration** format.
pattern: ^P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$
example: PT4M
EnvelopedErrors:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/Error'
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
AdditionalConstraintCapacities:
type: object
description: This constraint is valid if all the capacities are satisfied.
properties:
type:
type: string
enum:
- capacities
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
name:
type: string
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
capacities:
$ref: '#/components/schemas/Capacities'
resourceTag:
type: string
allOf:
- $ref: '#/components/schemas/RegexIdValidation'
required:
- type
- capacities
- resourceTag
AdditionalConstraintMaxStopTagGroups:
type: object
description: If the tour has stops whose stopTags constitute too many groups, then the tour is invalid.
properties:
type:
type: string
enum:
- maxStopTagGroups
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
name:
type: string
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
resourceTags:
type: array
items:
type: string
allOf:
- $ref: '#/components/schemas/RegexIdValidation'
example:
- subcontractorA
- subcontractorB
maxGroupsByStopTag:
$ref: '#/components/schemas/MaxGroupsByStopTag'
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
required:
- type
- maxGroupsByStopTag
RegexIdValidation:
type: string
description: 'At least one character among those allowed: unaccented alpha-numeric characters, "-", ".", "_", "~", ":", "@", "!", "$", ",".'
pattern: ^[a-zA-Z0-9-._~:@!$,]+$
Properties:
type: object
additionalProperties:
type: string
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
PlanObjectives:
type: array
items:
oneOf:
- $ref: '#/components/schemas/ObjectivesEnum'
- $ref: '#/components/schemas/MaximizePrecedencesObjective'
- $ref: '#/components/schemas/CustomObjective'
default:
- maximizeMandatoryStops
- minimizeDelay
- minimizeCosts
- minimizeResources
- minimizeOverOverlappingCapacitiesOnStops
- maximizeOptionalStops
- maximizePreferredStops
- minimizeWorkingDuration
- minimizeDistance
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
AdditionalConstraintAtLeastOneConstraint:
type: object
description: If one of the constraint is valid, then the tour is valid.
properties:
type:
type: string
enum:
- atLeastOneConstraint
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
name:
type: string
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
constraints:
type: array
items:
oneOf:
- $ref: '#/components/schemas/AdditionalConstraintAtLeastOneValidCapacity'
- $ref: '#/components/schemas/AdditionalConstraintForbiddenAssignment'
- $ref: '#/components/schemas/AdditionalConstraintIncompatibleStopTags'
- $ref: '#/components/schemas/AdditionalConstraintAtLeastOneConstraint'
- $ref: '#/components/schemas/AdditionalConstraintCapacities'
- $ref: '#/components/schemas/AdditionalConstraintMaxStopTagGroups'
- $ref: '#/components/schemas/AdditionalConstraintRemovalStrategy'
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
required:
- type
- constraints
TimeWindow:
type: object
properties:
begin:
$ref: '#/components/schemas/DateTime'
end:
$ref: '#/components/schemas/DateTime'
required:
- begin
- end
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
AlternativesStop:
type: object
description: A stop composed of different alternative single stops.
properties:
id:
allOf:
- $ref: '#/components/schemas/RegexIdValidation'
type:
type: string
enum:
- alternatives
description: Discriminator identifying this as an alternatives stop, as opposed to a single stop.
alternatives:
type: array
items:
allOf:
- $ref: '#/components/schemas/SingleStop'
description: The list of single stops among which the algorithm must choose the best one to visit (for example choosing among multiple charging points or waste disposal sites). Using alternatives can increase optimization time.
required:
- type
- alternatives
IncompatibleStopTags:
type: array
description: Incompatibilities between stop tags (all elements must be different regardless of order).
uniqueItems: true
deprecated: true
items:
$ref: '#/components/schemas/StopTagPair'
example:
- - goat
- cabbage
- - wolf
- goat
PlanStatus:
type: object
readOnly: true
properties:
planVersionInSolution:
description: The plan version taken into account in the current solution.
allOf:
- $ref: '#/components/schemas/PlanVersion'
waitingRoom:
description: If the maximum number of simultaneous running plans has already been reached, the plan waits in the waiting room for one of the running plans to finish.
allOf:
- $ref: '#/components/schemas/PlanStatusVersion'
waitingTraffic:
description: The plan is waiting for its traffic coefficients to be computed.
allOf:
- $ref: '#/components/schemas/PlanStatusVersion'
creation:
description: The plan is being created in order to be optimized.
allOf:
- $ref: '#/components/schemas/PlanStatusVersion'
optimization:
description: The plan is being optimized.
allOf:
- $ref: '#/components/schemas/PlanStatusVersion'
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
Plan:
type: object
description: A plan for a date and agency, with resource and orders associated.
properties:
id:
$ref: '#/components/schemas/PlanId'
agencyId:
$ref: '#/components/schemas/AgencyId'
version:
$ref: '#/components/schemas/PlanVersion'
running:
type: boolean
description: To know if the plan is running.
readOnly: true
status:
allOf:
- $ref: '#/components/schemas/PlanStatus'
description: The plan's processing status across the optimization pipeline (waiting room, creation, optimization, and traffic-waiting stages), each tracking which plan version is currently waiting and currently running. Poll this field to know when a new solution is ready instead of relying on a push/webhook mechanism. See PlanStatus for the full breakdown of each stage.
state:
allOf:
- $ref: '#/components/schemas/PlanState'
properties:
allOf:
- $ref: '#/components/schemas/Properties'
description: Free-form key-value pairs (strings only) with no impact on optimization. Used to carry integration-specific information (for example an internal reference) that is returned unchanged in the plan and its solution. Can also be set on resources, orders, and stops.
resources:
type: array
items:
$ref: '#/components/schemas/Resource'
description: The list of resources (vehicle/driver pairs) available to fulfill the plan's orders.
nbResources:
type: number
format: integer
minimum: 0
readOnly: true
description: The number of resources in the plan.
orders:
type: array
items:
$ref: '#/components/schemas/Order'
description: The list of orders (sequences of stops) to be planned across the available resources.
nbOrders:
type: number
format: integer
minimum: 0
readOnly: true
description: The number of orders in the plan.
additionalOperationDurations:
type: array
description: Additional operation time for a resource and a stop, according to tags (pairs of tags must be unique).
uniqueItems: true
items:
$ref: '#/components/schemas/AdditionalOperationDuration'
operationDurationPoliciesByResourceTag:
type: object
description: Policies to remove the operation durations, by resource tag.
additionalProperties:
type: array
items:
$ref: '#/components/schemas/OperationDurationPolicy'
forbiddenAssignments:
type: array
uniqueItems: true
deprecated: true
items:
$ref: '#/components/schemas/ForbiddenAssignment'
incompatibleStopTags:
allOf:
- $ref: '#/components/schemas/IncompatibleStopTags'
additionalConstraints:
type: array
items:
oneOf:
- $ref: '#/components/schemas/AdditionalConstraintAtLeastOneValidCapacity'
- $ref: '#/components/schemas/AdditionalConstraintForbiddenAssignment'
- $ref: '#/components/schemas/AdditionalConstraintIncompatibleStopTags'
- $ref: '#/components/schemas/AdditionalConstraintAtLeastOneConstraint'
- $ref: '#/components/schemas/AdditionalConstraintCapacities'
- $ref: '#/components/schemas/AdditionalConstraintMaxStopTagGroups'
- $ref: '#/components/schemas/AdditionalConstraintRemovalStrategy'
description: A list of advanced constraints that go beyond what the standard modeling objects (resources, orders, stops) can express, each identified by a type (for example atLeastOneValidCapacity, forbiddenAssignment, incompatibleStopTags, atLeastOneConstraint, capacities, maxStopTagGroups, or removalStrategy). See the constraints catalog for the full list and their parameters.
globalConstraints:
type: array
description: List of global constraints to be satisfied by the returned solution.
items:
oneOf:
- $ref: '#/components/schemas/GlobalConstraintMaxCumulatedCost'
accessDurationsByStopTag:
type: object
description: Access durations is an additional duration before the beginning of a group of stops with the same stop tag.
additionalProperties:
allOf:
- $ref: '#/components/schemas/Duration'
example:
access:parking33: PT5M
overlappingCapacitiesByStopTag:
type: object
description: This field allows users to define a limit in the number of resources that are simultaneously present at stops sharing the same stop tag.
additionalProperties:
type: integer
example:
capa:bat22: 3
setupDurations:
type: array
items:
$ref: '#/components/schemas/SetupDuration'
description: Defines an additional duration incurred when a resource transitions from a stop tagged fromStopTag to a stop tagged toStopTag (for example customs crossings between countries, or cleaning required between incompatible cargo types), identified by the "setup:" tag convention.
objectives:
allOf:
- $ref: '#/components/schemas/PlanObjectives'
description: 'The ordered list of optimization objectives, processed lexicographically: the algorithm prioritizes improving higher-ranked objectives before lower-ranked ones, so the order should reflect business priorities. Defaults to a sequence that works well for most cases. See ObjectivesEnum for the available objectives.'
maxOptimizationDuration:
allOf:
- $ref: '#/components/schemas/Duration'
tz:
$ref: '#/components/schemas/TimeZone'
createdAt:
description: The plan's creation datetime.
readOnly: true
allOf:
- $ref: '#/components/schemas/DateTime'
createdBy:
type: string
description: The username of the user who created this plan
readOnly: true
updatedAt:
description: The plan's last update datetime.
readOnly: true
allOf:
- $ref: '#/components/schemas/DateTime'
updatedBy:
type:
- string
- 'null'
description: The username of the user who last updated this plan
readOnly: true
archivedAt:
description: 'The plan''s archiving datetime: if not null, the plan is archived.'
readOnly: true
example: null
allOf:
- $ref: '#/components/schemas/DateTime'
lateDeparture:
description: True if lateDeparture is requested for Resources, false otherwise.
type: boolean
default: false
sharedCapacities:
description: True if sharedCapacities is requested for Resources, false otherwise. It enables resources to share capacities between stops of different orders.
type: boolean
default: false
emptyThresholdByCapacityByResourceTag:
description: 'Thresholds for capacities below which a resource is considered "empty" for empty distance calculation, grouped by resource tag.
A resource is "empty" (kilometers traveled count as empty distance) when all capacities are at or below their threshold.
The wildcard tag "*" matches all resources.
'
type: object
additionalProperties:
allOf:
- $ref: '#/components/schemas/Capacities'
example:
heavy:
weight: 150.0
volume: 75.0
'*':
weight: 50.0
avoidEarlyLoadingsByResourceTag:
type: object
description: 'Early loading declarations grouped by resource tag. The wildcard tag "*" matches all resources.
Each entry identifies a stop tag and optional capacities used to compute the minimizeEarlyLoadings objective.
'
additionalProperties:
type: array
items:
$ref: '#/components/schemas/AvoidEarlyLoading'
example:
'*':
- stopTag: depot1
capacities:
- weight
- volume
heavy:
- stopTag: warehouse
CO2EmissionCalculationByResourceTag:
type: object
description: 'Optional CO2 emission calculation parameters grouped by resource tag. Each value is a `Cost`-shaped object.
Applies to every resource carrying the corresponding tag.
When set, the resulting emissions are reported on tours as `CO2Emission` and aggregated on the solution as `CO2Emission`.
If a resource matches multiple tags, only its first declared matching tag is used.
Overridden by the resource-level declaration.
'
additionalProperties:
$ref: '#/components/schemas/Cost'
example:
resTag2:
km:
costCoeff: 0.55
costPerCapacityPerTravelledKm:
weight:
costCoeff: 0.2
required:
- id
- agencyId
- resources
MaximizePrecedencesObjective:
type: object
properties:
type:
type: string
enum:
- maximizePrecedences
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
precedences:
type: array
items:
allOf:
- $ref: '#/components/schemas/StopTagPrecedencePair'
disableGroupProximity:
type: boolean
description: If true, the group proximity objective will be disabled.
required:
- type
- precedences
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
StopTagPrecedencePair:
type: object
description: A pair of precedence stop tags.
properties:
previous:
type: string
example: sector1
allOf:
- $ref: '#/components/schemas/RegexIdValidation'
next:
type: string
example: sector2
allOf:
- $ref: '#/components/schemas/RegexIdValidation'
required:
- previous
- next
CostsByResourceTag:
type: object
additionalProperties:
$ref: '#/components/schemas/Cost'
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
SetupDuration:
type: object
properties:
fromStopTag:
type: string
example: setup:france
allOf:
- $ref: '#/components/schemas/RegexIdValidation'
toStopTag:
type: string
example: setup:belgium
allOf:
- $ref: '#/components/schemas/RegexIdValidation'
setupDuration:
allOf:
- $ref: '#/components/schemas/Duration'
required:
- fromStopTag
- toStopTag
- setupDuration
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
StopKind:
type: string
enum:
- pickup
- delivery
- acknowledgement
default: delivery
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
MaxInterStopDurationBounds:
type: object
description: 'Per-segment maximum duration between two consecutive stops on a tour.
Each key is independent; an absent key means no constraint on that segment.
'
properties:
firstTravel:
description: Maximum duration between the resource's departure and the first stop.
allOf:
- $ref: '#/components/schemas/Duration'
interStop:
description: Maximum duration between two consecutive intermediate stops (excluding the first and last travels).
allOf:
- $ref: '#/components/schemas/Duration'
lastTravel:
description: Maximum duration between the last stop and the resource's arrival.
allOf:
- $ref: '#/components/schemas/Duration'
example:
firstTravel: PT15M
interStop: PT30M
lastTravel: PT20M
PlanState:
type: string
readOnly: true
description: "The corresponding plan's state.\n - waiting: The plan was received and is awaiting processing.\n - processing: The plan is being processed.\n - preOptimizing: The plan is being optimized while awaiting traffic or other information.\n - preOptimized: While still awaiting traffic or other information, one of the following events has occurred:\n no better solution can be produced, or the optimization period has reached its limit.\n Note that 'preOptimized' should be followed by 'optimizing' and 'optimized'.\n - optimizing: The plan is being optimized with all required information.\n - optimized: This state can be triggered by one of the following events:\n no better solution can be produced, or the optimization period has reached its limit.\n - stopped: The plan's awaiting optimizations were canceled.\n - deleted: The plan was deleted and awaiting optimizations were canceled.\n - interrupted: The plan was either updated, stopped or deleted during its optimization.\n"
enum:
- waiting
- processing
- preOptimizing
- preOptimized
- optimizing
- optimized
- stopped
- deleted
- interrupted
Position:
type: object
properties:
lon:
type: number
minimum: -180
maximum: 180
description: Longitude coordinate.
lat:
type: number
minimum: -90
maximum: 90
description: Latitude coordinate.
required:
- lon
- lat
example:
lon: 2.3269331
lat: 48.8812658
description: '[TO_VALIDATE] Description pending review by a Kardinal engineer.'
CountryCode:
type: string
description: A country standard name or Alpha-2 code or Alpha-3 code.
VehicleProfileBicycle:
type: object
properties:
type:
type: string
enum:
- bicycle
description: 'Discriminator value: "bicycle".'
avoidFerry:
type: boolean
description: When true, avoids ferry crossings when calculating routes.
avoidSeasonalClosure:
type: boolean
description: When true, avoids roads that are seasonally closed.
avoidTunnel:
type: boolean
description: When true, avoids tunnels.
avoidDirtRoad:
type: boolean
description: When true, avoids unpaved or dirt roads.
excludedCountries:
$ref: '#/components/schemas/CountryCodes'
description: The list of countries to exclude from calculated routes.
required:
- type
description: A cyclist profile. Unaffected by traffic variations.
CostFloorsAndCoeffs:
type: object
description: Cost floors and coefficients. A cost cannot be empty. An overcost cannot be set if there is no cost, and the overcostFloor must be greater than costFloor.
properties:
constantCost:
type: number
description: A one-off cost added once whenever this cost component applies, independent of any measured quantity (distance, duration, or capacity) — use it for a flat charge that doesn't scale with usage.
costFloor:
type: number
description: The quantity (distance, duration, or capacity — whatever this object is scoped to) below which no cost accrues from this component. `costCoeff` applies only to the portion of the quantity above this floor.
costCoeff:
type: number
description: The rate charged per unit of quantity above `costFloor` (for example cost per km, per hour, or per capacity unit) — the linear component of this cost.
overcostFloor:
type: number
description: A second, higher quantity threshold at which the `overcostCoeff` rate starts applying instead of `costCoeff`, for the portion of the quantity above this threshold (for example an overtime-style tariff beyond a normal-usage allowance). Must be strictly greater than `costFloor`, and can only be set alongside `overcostCoeff`.
overcostCoeff:
type: number
description: The rate charged per unit of quantity above `overcostFloor` — the higher, second-tier rate for usage beyond the range already covered by `costFloor`/`costCoeff`. Requires `overcostFloor` to also be set.
VehicleProfileMotorbike:
type: object
properties:
type:
type: string
enum:
- motorbike
description: 'Discriminator value: "motorbike".'
avoidFerry:
type: boolean
description: When true, avoids ferry crossings when calculating routes.
avoidSeasonalClosure:
type: boolean
description: When true, avoids roads that are seasonally closed.
avoidControlledAccessHighway:
type: boolean
description: When true, avoids controlled-access highways (e.g. motorways).
avoidCarShuttleTrain:
type: boolean
description: When true, avoids routes requiring a car shuttle train.
avoidTunnel:
type: boolean
description: When true, avoids tunnels.
avoidDirtRoad:
type: boolean
description: When true, avoids unpaved or dirt roads.
excludedCountries:
$ref: '#/components/schemas/CountryCodes'
description: The list of countries to exclude from calculated routes.
speedCap:
type: number
description: Caps the vehicle's maximum speed used in travel time calculations, in km/h.
required:
- type
description: A motorized profile for vehicles over 125cc, unrestricted in terms of roads. Unaffected by traffic variations.
MaxInterStopDistanceInKmBounds:
type: object
description: 'Per-segment maximum distance, in km, between two consecutive stops on a tour.
Each key is independent; an absent key means no constraint on that segment.
'
properties:
firstTravel:
description: Maximum distance, in km, between the resource's departure and the first stop.
type: number
interStop:
description: Maximum distance, in km, between two consecutive intermediate stops (excluding the first and last travels).
type: number
lastTravel:
description: Maximum distance, in km, between the last stop and the resource's arrival.
type: number
example:
firstTravel: 10
interStop: 25
lastTravel: 15
TimeWindowBreak:
type: object
de
# --- truncated at 32 KB (81 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kardinal/refs/heads/main/openapi/kardinal-resource-api-openapi.yml