Skedulo Solve API
The Solve API from Skedulo — 3 operation(s) for solve.
The Solve API from Skedulo — 3 operation(s) for solve.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/skedulo-solve-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Authentication Admin Solve 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: Solve
paths:
/solve:
post:
summary: Start an optimization run for a model
description: This starts a one-off optimization run to solve the model given as an input.
operationId: Solve
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FeatureModelShape'
examples:
PVRP:
value:
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:
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
required: true
responses:
'201':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/SolveResult'
'400':
description: 'Invalid value for: body'
content:
text/plain:
schema:
type: string
security:
- httpAuth: []
tags:
- Solve
/solve/evaluate:
post:
summary: Start an optimization run to evaluate the given model
description: Evaluation will not change the data that is being optimized. Instead it will evaluate the current allocation in comparison to the results the optimizer would produce.
operationId: Evaluate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FeatureModelShape'
examples:
PVRP:
value:
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:
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
required: true
responses:
'201':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/SolveResult'
'400':
description: 'Invalid value for: body'
content:
text/plain:
schema:
type: string
security:
- httpAuth: []
tags:
- Solve
/solve/planned:
post:
summary: Start an optimization run for the provided plan
description: This endpoint will start a one-off optimization run based on the provided plan. The plan can be generated using the GET /schedule/plan endpoint.
operationId: Solve planned
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SchedulePlanShape'
example:
productData:
jobs:
- UID: job-1
Start: '2022-01-26T09:00:00Z'
Duration: 60
JobStatus: Ready
LocationId: loc-1
GeoLatitude: 53.4834
GeoLongitude: -2.2425
Quantity: 1
JobAllocations: []
JobTags: []
ResourceRequirements: []
JobTimeConstraints: []
JobDependenciesFrom: []
JobDependenciesTo: []
Locked: false
RegionId: region-1
Urgency: Normal
activities:
- UID: activity-1
Start: '2022-01-26T09:00:00Z'
End: '2022-01-26T10:00:00Z'
LocationId: loc-1
GeoLatitude: 53.4834
GeoLongitude: -2.2425
ResourceId: resource1
ActivityResources: []
resources:
- UID: resource1
GeoLatitude: 1
GeoLongitude: 1
ResourceTags: []
HomeAddress: test home address
WorkingHoursTimePeriod: Week
WorkingHoursStart: '2022-01-26'
WorkingHoursMin: 20
WorkingHoursMax: 40
ResourceOverrides: []
PrimaryRegion:
Timezone: UTC
locationResourceScores:
- LocationId: loc-1
ResourceId: resource1
Blacklisted: false
accountResourceScores:
- AccountId: account-1
ResourceId: resource1
Blacklisted: false
availability:
2bd0af54-377e-4960-8d4b-ba5272070830:
available:
- start: '2022-01-26T23:00:00Z'
end: '2022-01-29T23:00:00Z'
regions:
- start: '2022-01-26T23:00:00Z'
end: '2022-01-29T23:00:00Z'
regionIds:
- region-1
start: '2022-01-26T09:00:00Z'
end: '2022-01-30T23:00:00Z'
timeZone: UTC
region:
UID: region-1
Timezone: UTC
GeoLatitude: 53.4834
GeoLongitude: -2.2425
featureModel:
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
options:
respectSchedule: false
recipeId: 9dc75e35-f1cd-4303-97f3-3f7a6047d698
ids:
resourceIds:
- res-1
jobIds:
- job-1
required: true
responses:
'201':
description: ''
content:
application/json:
schema:
required:
- result
type: object
properties:
result:
$ref: '#/components/schemas/SolveResult'
'400':
description: 'Invalid value for: body'
content:
text/plain:
schema:
type: string
security:
- httpAuth: []
tags:
- Solve
components:
schemas:
ResourceAvailabilityShape1:
required:
- from
- to
type: object
properties:
from:
type: string
description: Start of the availability window
format: date-time
to:
type: string
description: End of the availability window
format: date-time
startLocationId:
type: string
description: Location from which the resource departs at the start of this availability window; overrides the resource's home location
endLocationId:
type: string
description: Location at which the resource must finish at the end of this availability window; overrides the resource's home location
attributes:
type: array
items:
$ref: '#/components/schemas/ResourceAvailabilityAttributeShape'
description: Attributes that are active for this resource during this availability window; overrides the resource-level attributes for allocations scheduled within this window
phaseTags:
type: array
items:
type: string
description: Phase tags that restrict this availability window to specific phases. If absent or empty, the availability window is included in all phases.
overtimeEnd:
type: string
description: Latest end the shift may extend to when working overtime; must be after the end of the availability window
format: date-time
GraphQLAccountResourceScore:
required:
- AccountId
- ResourceId
- Blacklisted
type: object
properties:
AccountId:
type: string
ResourceId:
type: string
Blacklisted:
type: boolean
ResourceAvailability:
required:
- available
- regions
type: object
properties:
available:
type: array
items:
$ref: '#/components/schemas/Availability'
regions:
type: array
items:
$ref: '#/components/schemas/RegionAvailability'
GraphQLJobTimeConstraint:
required:
- Required
type: object
properties:
StartAfter:
type: string
format: date-time
StartBefore:
type: string
format: date-time
EndBefore:
type: string
format: date-time
Required:
type: boolean
APIIdInput:
required:
- resourceIds
- jobIds
type: object
properties:
resourceIds:
type: array
items:
type: string
jobIds:
type: array
items:
type: string
regionId:
type: string
regionIds:
type: array
items:
type: string
description: The ids of entities requested in the optimization run
CorePVRPFeatureModelShape:
required:
- allocations
- groups
- resources
- allocationDependencies
- resourceDependencies
- locations
- schedulingPeriod
- rollingSchedulingPeriods
- timezone
- options
- solver
- sharedGroupConstraints
type: object
properties:
allocations:
type: array
items:
$ref: '#/components/schemas/AllocationShape1'
description: Allocations to be optimized, each to one resource
groups:
type: array
items:
$ref: '#/components/schemas/AllocationGroupShape'
description: Groups of allocations that should be synchronized by time
resources:
type: array
items:
$ref: '#/components/schemas/ResourceShape1'
description: Resources that can be allocated to
allocationDependencies:
type: array
items:
$ref: '#/components/schemas/AllocationDependencyShape'
description: Contains pairs of allocations which must be scheduled within a certain time of each other
resourceDependencies:
type: array
items:
$ref: '#/components/schemas/ResourceDependencyShape'
description: Contains sets of allocations which must be allocated to the same resource
locations:
type: array
items:
$ref: '#/components/schemas/LocationShape2'
description: All the locations included in the model for both allocations and resources
schedulingPeriod:
$ref: '#/components/schemas/ScheduleRunWindow'
rollingSchedulingPeriods:
type: array
items:
$ref: '#/components/schemas/ScheduleRunWindow'
description: Optional sub-windows used for rolling schedule optimization; the scheduling period is split into these periods and each is solved sequentially
timezone:
type: string
description: The timezone used for date-based period constraint calculations
options:
$ref: '#/components/schemas/PVRPFeatureOptionsShape'
meta:
type: object
description: 'Additional metadata for the model. For route optimization the default shape is ProductMeta, which contains: ''allocations'' — a map from CorePVRP allocation ID to either a Job reference (jobId, optional initial resource/allocation IDs, optional resourceRequirementId) or an Activity reference (activityId); ''frozenJobs'' — a map from job ID to the reasons it was excluded from optimization (e.g. has dependencies outside scope, outside region, not in requested jobs); ''activityBreaks'' — a map from activity ID to the resource and fixed-time break period for activities that represent resource breaks.'
additionalProperties:
description: Any JSON value (string, number, boolean, null, object, or array)
solver:
type: string
description: Identifies the solver type; always 'pvrp' for CorePVRP models
enum:
- pvrp
phases:
type: array
items:
$ref: '#/components/schemas/PhaseConfigurationShape'
description: Optional ordered list of phases for strict prioritization. Each phase is either 'all' (every object is active) or 'filtered' (per-object-type tag filters control which objects are active). Phases are processed in order and allocations assigned during one phase are locked for subsequent phases.
sharedGroupConstraints:
type: array
items:
$ref: '#/components/schemas/SharedGroupConstraintShape'
description: Collective allocation limits shared across a filtered set of resources. Unlike per-resource groupConstraints, each entry caps the total allocations of a group across all listed resources combined (a shared pool), regardless of how they are distributed. Every resource in the pool shares the exact same period and limit.
ScheduleRunWindow:
required:
- start
- end
type: object
properties:
start:
type: string
format: date-time
end:
type: string
format: date-time
GraphQLJob:
required:
- UID
- Duration
- JobStatus
- JobAllocations
- JobTags
- ResourceRequirements
- JobTimeConstraints
- JobDependenciesFrom
- JobDependenciesTo
- Locked
# --- truncated at 32 KB (77 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/skedulo/refs/heads/main/openapi/skedulo-solve-api-openapi.yml