Skedulo Run API
The Run API from Skedulo — 7 operation(s) for run.
The Run API from Skedulo — 7 operation(s) for run.
openapi: 3.0.0
info:
title: Authentication Admin Run API
description: Skedulo Authentication API
version: 1.0.0
servers:
- url: https://api.skedulo.com/auth
- url: https://api.uk.skedulo.com/auth
- url: https://api.ca.skedulo.com/auth
- url: https://api.au.skedulo.com/auth
tags:
- name: Run
paths:
/run:
get:
summary: Get a list of runs
description: Returns a paginated list of feature model optimization runs for the authenticated tenant. Results can be filtered by run ID, schedule ID, user, and run type, and support limit/offset pagination.
operationId: Get Runs
parameters:
- name: id
in: query
description: Run id
required: false
schema:
type: string
- name: ids
in: query
description: Coma separated run ids
required: true
schema:
type: string
- name: schedule_id
in: query
description: Schedule id
required: false
schema:
type: string
- name: schedule_ids
in: query
description: Coma separated run schedule ids
required: false
schema:
type: string
- name: user
in: query
description: User id
required: false
schema:
type: string
- name: user_ids
in: query
description: Coma separated user ids
required: false
schema:
type: string
- name: type
in: query
description: Run type
required: false
schema:
type: string
- name: types
in: query
description: Coma separated types
required: false
schema:
type: string
- name: limit
in: query
description: Maximum number of results to return
required: false
schema:
type: integer
format: int32
- name: offset
in: query
description: Number of results to skip
required: false
schema:
type: integer
format: int32
- name: after
in: query
description: Return results after this cursor value
required: false
schema:
type: integer
format: int32
responses:
'200':
description: ''
content:
application/json:
schema:
required:
- result
- paging
type: object
properties:
result:
type: array
items:
$ref: '#/components/schemas/APIFeatureRunDetailsShape'
paging:
$ref: '#/components/schemas/Paging'
example:
paging:
limit: 10
total: 2
result:
- start: '2022-08-18T19:00:00Z'
operation: optimize
optimizationType: pvrp
status: complete
scheduleId: a15c285f-2c69-4a3c-9b9b-c9a8c5252db6
createdByUserId: user-1
label: label-1
completedAt: '2022-02-15T19:02:00Z'
summary:
totalPlannedJobs: 3
totalScheduledJobs: 3
requestedJobs: 2
requestedJobsScheduled: 2
window:
start: '2022-07-05T09:00:00Z'
end: '2022-08-05T23:59:59Z'
id: 20ecb249-8331-491f-9049-565a2252df76
- errors:
- message: error-1
start: '2022-08-18T19:00:00Z'
operation: optimize
optimizationType: pvrp
status: failed
scheduleId: a15c285f-2c69-4a3c-9b9b-c9a8c5252db6
createdByUserId: user-1
label: label-1
completedAt: '2022-02-15T19:02:00Z'
summary:
totalPlannedJobs: 3
totalScheduledJobs: 3
requestedJobs: 2
requestedJobsScheduled: 2
window:
start: '2022-07-05T09:00:00Z'
end: '2022-08-05T23:59:59Z'
id: 20ecb249-8331-491f-9049-565a2252df76
'400':
description: 'Invalid value for: query parameter id, Invalid value for: query parameter ids, Invalid value for: query parameter schedule_id, Invalid value for: query parameter schedule_ids, Invalid value for: query parameter user, Invalid value for: query parameter user_ids, Invalid value for: query parameter type, Invalid value for: query parameter types, Invalid value for: query parameter limit, Invalid value for: query parameter offset, Invalid value for: query parameter after'
content:
text/plain:
schema:
type: string
security:
- httpAuth: []
tags:
- Run
/run/{runId}:
get:
summary: Get a run by id
description: Returns the details of a single feature model optimization run identified by its run ID, including its status, type, schedule association, and timing information.
operationId: Get Run By Id
parameters:
- name: runId
in: path
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/APIFeatureRunDetailsShape'
examples:
Example0:
value:
result:
start: '2022-08-18T19:00:00Z'
operation: optimize
optimizationType: pvrp
status: complete
scheduleId: a15c285f-2c69-4a3c-9b9b-c9a8c5252db6
createdByUserId: user-1
label: label-1
completedAt: '2022-02-15T19:02:00Z'
summary:
totalPlannedJobs: 3
totalScheduledJobs: 3
requestedJobs: 2
requestedJobsScheduled: 2
window:
start: '2022-07-05T09:00:00Z'
end: '2022-08-05T23:59:59Z'
id: 20ecb249-8331-491f-9049-565a2252df76
Example1:
value:
result:
errors:
- message: error-1
start: '2022-08-18T19:00:00Z'
operation: optimize
optimizationType: pvrp
status: failed
scheduleId: a15c285f-2c69-4a3c-9b9b-c9a8c5252db6
createdByUserId: user-1
label: label-1
completedAt: '2022-02-15T19:02:00Z'
summary:
totalPlannedJobs: 3
totalScheduledJobs: 3
requestedJobs: 2
requestedJobsScheduled: 2
window:
start: '2022-07-05T09:00:00Z'
end: '2022-08-05T23:59:59Z'
id: 20ecb249-8331-491f-9049-565a2252df76
security:
- httpAuth: []
tags:
- Run
/run/{runId}/diff:
get:
summary: Get the diff of the run
description: Returns the allocation diff produced by an optimization run, showing for each allocation which resource was deallocated and which resource was allocated, along with any change in scheduled time.
operationId: Get Run Diff
parameters:
- name: runId
in: path
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/DiffShape'
examples:
PVRP:
value:
result:
meta:
key: value
solver: pvrp
allocations:
alloc-1:
deallocation: res-1
allocation: res-2
initialScheduleTime: '2022-10-31T07:00:00Z'
scheduleTime: '2022-10-31T11:00:00Z'
ARC:
value:
result:
meta:
key: value
solver: arc
allocations:
alloc-1:
deallocation: res-1
allocation: res-2
security:
- httpAuth: []
tags:
- Run
/run/{runId}/results:
get:
summary: Get results of an optimization run
description: Returns the feature-model-level optimization results for a completed run. For ARCShift (shift scheduling) runs this shows which allocations were assigned to resources and which were left unscheduled. For CorePVRP (route optimization) runs this additionally includes the scheduled start times and per-allocation infeasibility reasons explaining why each resource could not be used for each unscheduled allocation.
operationId: Get Run Results
parameters:
- name: runId
in: path
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/FeatureModelResultsShape'
security:
- httpAuth: []
tags:
- Run
/run/{runId}/model:
get:
summary: Get the model for the run
description: Get the feature model used for the run. This is a fully anonymized version of the problem that is solved in the optimization run
operationId: Get Run Model
parameters:
- name: runId
in: path
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/FeatureModelShape'
examples:
PVRP:
value:
result:
allocations:
- id: alloc-1
groupId: alloc-group-1
groupIds:
- alloc-group-1
start: '2022-01-26T09:00:00Z'
duration: 30
resourceId: res-1
locationId: loc-1
priority: 10
locked: true
attributeRequirements:
- id: attr-1
- id: attr-2
weighting: 10
resourceConstraints:
type: blocked
resources:
- res-2
scheduleConstraints:
- windowStart: '2022-01-26T10:00:00Z'
windowEnd: '2022-01-26T11:00:00Z'
resourceRatings:
- resourceId: res-1
rating: 75
urgency: 20
groups:
- id: gr-1
synchronizationMode: start_time
locked: true
enablePartialAllocation: false
resources:
- id: res-1
attributes:
- id: attr-1
locationId: loc-1
availability:
- from: '2022-01-26T09:00:00Z'
to: '2022-01-30T23:00:00Z'
attributes: []
maxDailyTravelTimeInMinutes: 180
maxTravelTimeBetweenLocations: 60
periodConstraints:
- start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
maxServiceTimeInMinutes: 100
minServiceTimeInMinutes: 50
groupConstraints:
- groupId: group-1
maxAllocations: 5
breaks:
- breakTimeInMinutes: 30
minStartTime: '2022-01-26T12:00:00Z'
maxStartTime: '2022-01-26T13:00:00Z'
- startTime: '2022-01-26T15:00:00Z'
endTime: '2022-01-26T15:30:00Z'
locationId: loc-1
rating: 80
compatibleResources:
- res-2
allocationDependencies: []
resourceDependencies: []
locations:
- id: loc-1
latitude: 51.5072
longitude: 0.1276
schedulingPeriod:
start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
timezone: UTC
meta:
key: value
options:
full: false
ignoreTravelTime: false
ignoreTravelTimeFirstJob: false
ignoreTravelTimeLastJob: false
minimizeResources: false
respectAllocationTimes: false
respectAllocationTimesOverTimeConstraints: false
balanceAbsoluteWorkload: false
enablePartiallyAllocatedGroups: true
enablePartiallyAllocatedAllocationDependencies: true
removeLockedJobsFromShifts: true
sharedGroupConstraints:
- groupId: group-1
resourceIds:
- res-1
- res-2
maxAllocations: 10
start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
solver: pvrp
ARC:
value:
result:
options:
locations: true
exceptionFilter:
blacklist: true
resourceAvailability: true
solviceWeights:
maxHours: 10hard
minHours: 10medium
minHoursUnassigned: 10medium
availability: 10hard
locked: 10hard
minRest: 10hard
requirements: 10hard
skills: 10hard
distance: 10hard
distanceAL: 10hard
priority: 10hard
pref: 10hard
unassigned: 10hard
softSkills: 10hard
criticalSkills: 10hard
blacklist: 10hard
efficiency: 10hard
softSkillsLevel: 10hard
maxWorkingDays: 10hard
shiftStart: 10hard
latestShiftStart: 10hard
shiftEnd: 10hard
minShift: 10hard
maxShift: 10hard
dayOfWeek: 10hard
sameDay: 10hard
sameDayMinRest: 10hard
maxConsecutive: 10hard
concurrent: 10hard
costs: 10hard
wages: 10hard
working: 10hard
minWorkingDaysUnassigned: 10medium
fairness: 10soft
allocations:
- locked: false
attributeRequirements:
- id: attr-1
- id: attr-2
weighting: 10
resourceConstraints:
type: blocked
resources:
- res-2
preferredResourceIds:
- res-1
- res-3
id: alloc-1
start: '2022-01-26T23:00:00Z'
duration: 30
resourceId: res-1
locationId: loc-1
priority: 10
resources:
- id: res-1
statuteId: st-1
attributes:
- id: attr-1
validFor:
- from: '2022-01-26'
to: '2022-01-02'
weighting: 10
locationId: loc-1
availability:
- from: '2022-01-26T09:00:00Z'
to: '2022-01-30T23:00:00Z'
fromLocation: loc-1
efficiency: 10
periodConstraints: []
statutes:
- id: st-1
minimumRestPeriodBetweenAllocations: 0
minimumRestPeriodBetweenAllocationsInHours: 0
minimumHoursForPlanningPeriod: 1
maximumHoursForPlanningPeriod: 1
maximumTravelTimeToAllocationsInMinutes: 30
locations:
- id: loc-1
latitude: 51.5072
longitude: 0.1276
sharedAttributes:
- id: sh-attr-1
allocations:
- alloc-1
attributeId: attr-1
minimumQuantity: 3
schedulingPeriod:
start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
fairnessBuckets: []
timezone: UTC
meta:
key: value
solver: arc
security:
- httpAuth: []
tags:
- Run
/run/{runId}/remodel:
get:
summary: Get the remodel of the run
description: Get the final model of the run. This is similar to the result of the GET /run/{runId}/model endpoint, but with the model populated with the scheduled allocations from the optimization run.
operationId: Get Run Remodel
parameters:
- name: runId
in: path
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/FeatureModelShape'
examples:
Example0:
value:
result:
allocations:
- id: alloc-1
groupId: alloc-group-1
groupIds:
- alloc-group-1
start: '2022-01-26T09:00:00Z'
duration: 30
resourceId: res-1
locationId: loc-1
priority: 10
locked: true
attributeRequirements:
- id: attr-1
- id: attr-2
weighting: 10
resourceConstraints:
type: blocked
resources:
- res-2
scheduleConstraints:
- windowStart: '2022-01-26T10:00:00Z'
windowEnd: '2022-01-26T11:00:00Z'
resourceRatings:
- resourceId: res-1
rating: 75
urgency: 20
groups:
- id: gr-1
synchronizationMode: start_time
locked: true
enablePartialAllocation: false
resources:
- id: res-1
attributes:
- id: attr-1
locationId: loc-1
availability:
- from: '2022-01-26T09:00:00Z'
to: '2022-01-30T23:00:00Z'
attributes: []
maxDailyTravelTimeInMinutes: 180
maxTravelTimeBetweenLocations: 60
periodConstraints:
- start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
maxServiceTimeInMinutes: 100
minServiceTimeInMinutes: 50
groupConstraints:
- groupId: group-1
maxAllocations: 5
breaks:
- breakTimeInMinutes: 30
minStartTime: '2022-01-26T12:00:00Z'
maxStartTime: '2022-01-26T13:00:00Z'
- startTime: '2022-01-26T15:00:00Z'
endTime: '2022-01-26T15:30:00Z'
locationId: loc-1
rating: 80
compatibleResources:
- res-2
allocationDependencies: []
resourceDependencies: []
locations:
- id: loc-1
latitude: 51.5072
longitude: 0.1276
schedulingPeriod:
start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
timezone: UTC
meta:
key: value
options:
full: false
ignoreTravelTime: false
ignoreTravelTimeFirstJob: false
ignoreTravelTimeLastJob: false
minimizeResources: false
respectAllocationTimes: false
respectAllocationTimesOverTimeConstraints: false
balanceAbsoluteWorkload: false
enablePartiallyAllocatedGroups: true
enablePartiallyAllocatedAllocationDependencies: true
removeLockedJobsFromShifts: true
sharedGroupConstraints:
- groupId: group-1
resourceIds:
- res-1
- res-2
maxAllocations: 10
start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
solver: pvrp
Example1:
value:
result:
options:
locations: true
exceptionFilter:
blacklist: true
resourceAvailability: true
solviceWeights:
maxHours: 10hard
minHours: 10medium
minHoursUnassigned: 10medium
availability: 10hard
locked: 10hard
minRest: 10hard
requirements: 10hard
skills: 10hard
distance: 10hard
distanceAL: 10hard
priority: 10hard
pref: 10hard
unassigned: 10hard
softSkills: 10hard
criticalSkills: 10hard
blacklist: 10hard
efficiency: 10hard
softSkillsLevel: 10hard
maxWorkingDays: 10hard
shiftStart: 10hard
latestShiftStart: 10hard
shiftEnd: 10hard
minShift: 10hard
maxShift: 10hard
dayOfWeek: 10hard
sameDay: 10hard
sameDayMinRest: 10hard
maxConsecutive: 10hard
concurrent: 10hard
costs: 10hard
wages: 10hard
working: 10hard
minWorkingDaysUnassigned: 10medium
fairness: 10soft
allocations:
- locked: false
attributeRequirements:
- id: attr-1
- id: attr-2
weighting: 10
resourceConstraints:
type: blocked
resources:
- res-2
preferredResourceIds:
- res-1
- res-3
id: alloc-1
start: '2022-01-26T23:00:00Z'
duration: 30
resourceId: res-1
locationId: loc-1
priority: 10
resources:
- id: res-1
statuteId: st-1
attributes:
- id: attr-1
validFor:
- from: '2022-01-26'
to: '2022-01-02'
weighting: 10
locationId: loc-1
availability:
- from: '2022-01-26T09:00:00Z'
to: '2022-01-30T23:00:00Z'
fromLocation: loc-1
efficiency: 10
periodConstraints: []
statutes:
- id: st-1
minimumRestPeriodBetweenAllocations: 0
minimumRestPeriodBetweenAllocationsInHours: 0
minimumHoursForPlanningPeriod: 1
maximumHoursForPlanningPeriod: 1
maximumTravelTimeToAllocationsInMinutes: 30
locations:
- id: loc-1
latitude: 51.5072
longitude: 0.1276
sharedAttributes:
- id: sh-attr-1
allocations:
- alloc-1
attributeId: attr-1
minimumQuantity: 3
schedulingPeriod:
start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
fairnessBuckets: []
timezone: UTC
meta:
key: value
solver: arc
security:
- httpAuth: []
tags:
- Run
/run/{runId}/meta:
get:
summary: Get the metadata for a run
description: Returns arbitrary key-value metadata associated with an optimization run. Returns null if no metadata has been recorded for the run.
operationId: Get Run Meta
parameters:
- name: runId
in: path
required: true
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
result:
type: object
description: Arbitrary JSON object (key/value pairs)
additionalProperties:
description: Any JSON value (string, number, boolean, null, object, or array)
example:
result:
key: value
security:
- httpAuth: []
tags:
- Run
components:
schemas:
ResourceConstraintsShape:
required:
- type
- resources
type: object
properties:
type:
type: string
description: The constraint type; currently only 'blocked' (exclude list) is supported
enum:
- blocked
resources:
type: array
items:
type: string
description: The resources to which this constraint applies
description: Restricts which resources may be assigned to this allocation
LocationShape2:
required:
- id
- latitude
- longitude
type: object
properties:
id:
type: string
description: Unique identifier for this location
latitude:
type: number
description: Geographic latitude coordinate
format: double
longitude:
type: number
description: Geographic longitude coordinate
format: double
FeasibleGapShape:
required:
- start
- end
type: object
properties:
start:
type: string
description: Start of the feasible gap interval
format: date-time
end:
type: string
description: End of the feasible gap interval
format: date-time
previousLocation:
$ref: '#/components/schemas/LocationShape'
nextLocation:
$ref: '#/components/schemas/LocationShape'
SharedGroupConstraintShape:
required:
- groupId
- resourceIds
- maxAllocations
- start
- end
type: object
properties:
groupId:
type: string
description: The allocation group identifier the pooled limit applies to
resourceIds:
type: array
items:
type: string
description: The resources that share the pooled limit
maxAllocations:
type: integer
description: Maximum number of allocations from this group across all listed resources combined within the period
format: int32
start:
type: string
description: Start of the period the pooled limit applies to
format: date-time
end:
type: string
description: End of the period the pooled limit applies to
format: date-time
DiffAllocationShape:
type: object
properties:
deallocation:
# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/skedulo/refs/heads/main/openapi/skedulo-run-api-openapi.yml