openapi: 3.0.3
info:
title: Lab API
description: |
# Introduction
Welcome to Skillable Connect: LAB Edition, our core platform for creating, customizing, and managing labs.
## Skillable Production API & Integration Testing
Only lab profiles with a development status of **Complete** are consumable via API.
Development/Integration Testing API available with all the same API calls your production API can make, but has the following settings:
- Max Active Lab Instances: 5
- Max Saved Labs per User: 1
- Max Active Lab Instances per user: 5
- Max lab duration: 30 minutes
- Allows launching of lab profiles with any Development Status (i.e. is not restricted to a Complete development status)
- Has a dedicated API key
- Does not generate billable events
## Authenticate with API Key
Skillable APIs offer one form of authentication: an API Key. All methods require an API Key, which must be obtained from a Skillable team member working with your organization. Our systems use this key to validate your development account.
Pass your API Key as an HTTP request header with the header name "api_key".
termsOfService: 'https://skillable.com/terms-and-conditions/'
contact:
name: Skillable Support
email: support@skillable.com
url: 'https://skillable.com/customer-support/'
x-logo:
url: 'https://raw.githubusercontent.com/LearnOnDemandSystems/ConnectAPI/main/Skillable%20Connect%20Logo.svg'
altText: Skillable Connect
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
version: '3.0'
servers:
- url: 'https://labondemand.com/api/v3'
description: Skillable Connect LAB API
security:
- api_key: []
tags:
- name: Lab Instance Management
description: |-
The Lab Instance Management group of API commands allows interacting with lab instances. This includes but is not limited to the following actions:
* [Launch a lab](https://connect.skillable.com/lab/operation/Launch/)
* [Cancel a lab](https://connect.skillable.com/lab/operation/Cancel/)
* [Save a lab](https://connect.skillable.com/lab/operation/Save/)
* [Resuming a lab](https://connect.skillable.com/lab/operation/Resume/)
* [Initiate scoring of activities in a lab](https://connect.skillable.com/lab/operation/ScoreActivities/)
* [Send notifications to a lab](https://connect.skillable.com/lab/operation/SendNotification-post/)
* [Retrieve information about lab instances](https://connect.skillable.com/lab/operation/Results/)
- name: Lab Profile Management
description: |-
The Lab Profile Management group of API commands allows for managing instructions and retrieving information about Lab Profiles within Skillable Studio.
* [Retrieve information about a specific lab profile](https://connect.skillable.com/lab/operation/LabProfile/)
* [Retrieve lab instructions for a specific lab](https://connect.skillable.com/lab/operation/LabProfile/)
* [Download instructions in a zip file for a specific lab](https://connect.skillable.com/lab/operation/GetLabInstructionsPackage/)
* [Update lab instructions for a specific lab profile using an HTTP post](https://connect.skillable.com/lab/operation/UpdateLabInstructions/)
* [Update lab instructions for a specific lab by uploading a zip file](https://connect.skillable.com/lab/operation/UpdateLabInstructionsPackage/)
- name: Class Management
description: |-
The Class Management group of API commands allows for the creation, management, access, and monitoring of classes within Skillable Studio.
* [Retrieve information about a class in Skillable Studio](https://connect.skillable.com/lab/operation/Class/)
* [Retrieve information about an existing class, if the class does not exist, it will be created](https://connect.skillable.com/lab/operation/GetOrCreateClass/)
* [Return a single access URL to access a class management page](https://connect.skillable.com/lab/operation/ClassAccessUrl/)
* [Return a single use URL to monitor a lab instance](https://connect.skillable.com/lab/operation/LabMonitorUrl/)
* [Return a single use URL to access a lab instance](https://connect.skillable.com/lab/operation/LabAccessUrl/)
* [Update a specific class](https://connect.skillable.com/lab/operation/UpdateClass/)
* [Delete a specific class](https://connect.skillable.com/lab/operation/DeleteClass/)
- name: User Management
description: |-
The User Management group of API commands are used to administer user accounts within Skillable Studio.
* [Return information about saved or running labs for a specific user account](https://connect.skillable.com/lab/operation/UserRunningAndSavedLabs/)
* [Close a user account and remove all associated user information](https://connect.skillable.com/lab/operation/CloseUserAccount/)
- name: Event Management
description: |-
The Event Management group of API commands allows for launching lab profiles for events and retrieving evaluation responses.
* [Launch a lab within an event](https://connect.skillable.com/lab/operation/LaunchforEvent/)
* [Launch a lab within an event, using an external ID](https://connect.skillable.com/lab/operation/LaunchforEventByExternalId/)
* [Retrieve evaluation data for a specified event](https://connect.skillable.com/lab/operation/GetEvaluationResponsesForEvent/)
- name: Organization
description: |-
Organizational API commands provide the ability to return information about lab profiles, lab series, and delivery regions available to your organization in Skillable Studio.
* [Retrieve information about lab profiles, lab series, and delivery regions available to your organization](https://connect.skillable.com/lab/operation/Catalog/)
* [Retrieve information about delivery regions that are available to your organization](https://connect.skillable.com/lab/operation/DeliveryRegions/)
paths:
/launch:
get:
tags:
- Lab Instance Management
summary: Launch a lab
description: The **Launch** command will launch a specified lab for a specified user.
operationId: Launch
parameters:
- name: labid
in: query
description: The ID of the lab profile.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 100
- name: userid
in: query
description: The ID you use to identify the user in your external system.
required: true
style: form
explode: true
schema:
type: string
example: '555'
- name: firstname
in: query
description: An optional parameter used to set the user’s first name. If this value is not provided for a new user a random anonymized value in the format 'anon-#######' will be created.
required: false
style: form
explode: true
schema:
type: string
example: Joe
- name: lastname
in: query
description: An optional parameter used to set the user’s last name. If this value is not provided for a new user a random anonymized value in the format 'anon-########' will be created.
required: false
style: form
explode: true
schema:
type: string
example: Smith
- name: email
in: query
description: An optional parameter used to set the user’s email address.
required: false
style: form
explode: true
schema:
type: string
example: joe.smith@email.com
- name: classId
in: query
description: 'An optional parameter used to associate the lab with a class (see **GetOrCreateClass**). This is the unique identifier of the class as it is represented in your organization. '
required: false
style: form
explode: true
schema:
type: string
example: '1223334444'
- name: canBeMarkedComplete
in: query
description: 'An optional parameter used to specify if the lab can be marked as complete by the student. 1 = true, 2 = false. If not specified, defaults to 1 (true).'
required: false
style: form
explode: true
schema:
type: integer
format: int32
enum:
- 1
- 2
default: 1
example: 1
- name: tag
in: query
description: An optional parameter that can be used for tagging the lab instance with your own custom data.
required: false
style: form
explode: true
schema:
type: string
example: testlaunch
- name: ipAddress
in: query
description: 'When specified, Skillable will attempt to launch the lab in the closest available delivery region. You should provide the IP address of the user that is taking the lab, not the IP address of your system. IPv4 and IPv6 address are supported.'
required: false
style: form
explode: true
schema:
type: string
example: 1.1.1.1
- name: regionId
in: query
description: 'When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the **DeliveryRegions** command or **Catalog** command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 1
- name: roleId
in: query
description: Allows you specify the role(s) to assign to the user. You may pass multiple instances of this parameter to specify multiple roles. Roles are used for specialized integration purposes and are not needed in typical integration scenarios. Role IDs will be provided by Skillable when appropriate.
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 1
- name: variable-name
in: query
description: 'Allows you to set the values of named variables used within the lab instance. The key must start with the fixed text **variable-**. '
required: false
style: form
explode: true
schema:
type: string
example: Chad
- name: maxSavedLabs
in: query
description: The max number of labs an individual user may save is capped by the number configured on your API consumer.
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 2
- name: maxActiveLabs
in: query
description: The max number of concurrent lab instances is capped by the number configured on your API consumer.
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 1
- name: lang
in: query
description: |-
Allows you to override the language of the Instruction Set as well as the lab client UI language. This affects lab client UI elements like menus, tabs, and dialogs. Using this in connection with instructionsId will allow you to select launching labs with a specific Instruction Set in the specified language if they have been defined within the lab profile.
NOTE: If this parameter is omitted, or if the specified language is not specified on one of the Instruction sets in a lab profile, then the default language as defined in the Lab Profile ➔ Manage Instructions Sets option.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
required: false
style: form
explode: true
schema:
type: string
enum:
- en
- es
- fr
- de
- pt
- ja
- zh-hans
- zh-hant
- ko
example: en
- name: instructionsId
in: query
description: |-
When specified, Skillable will attempt to launch the lab and present the selected instructions. If not specified, or the instruction Id could not be found, the default instructions, as defined on the Lab Profile, will be used instead. This is a string that cannot contain spaces.
NOTE: To be able to see how to use this parameter, add the column "API Example" in the Manage Instruction Sets feature while editing the instructions.
required: false
style: form
explode: true
schema:
type: string
example: Base-01
- schema:
type: integer
in: query
name: durationMinutes
description: 'An optional parameter used to adjust the lab timer duration, requires "Allow Lab Duration Customizations" setting to be enabled for the API Consumer. Value can be between a minimum of 15 minutes and a maximum of 1.5 the lab profile configured time. The absolute max is 20160 minutes (approximately 14 days).'
- schema:
type: integer
in: query
name: lastActivityTimeoutMinutes
description: 'An optional parameter used to adjust the last activity timeout of the launched lab, requires "Allow Lab Duration Customizations" setting to be enabled for the API Consumer. Value can be between a minimum of 1 minute and absolute max is 20160 minutes (approximately 14 days).'
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchResponse'
examples:
Example of a successful lab instance launch:
value:
Result: 1
Url: 'https://labondemand.com/console/setup/1b4909d6-0dbe-43db-9ab9-74ee4f913c4e'
LabInstanceId: 3896477
Expires: 1337977153
Status: 1
Error: null
deprecated: false
/cancel:
get:
summary: Cancel a lab instance
description: |-
The **Cancel** command allows you to cancel a specified lab instance.
**Please note**: when issuing this command that there is some time required for the lab instance tear down process. If retrying a lab launch for a user where the Max Active Lab Instances Per User is set to 1 for the API consumer, then please take this teardown time into account for the API integration.
operationId: Cancel
parameters:
- name: labinstanceid
in: query
description: The ID of the lab instance to cancel.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 12345678
responses:
'200':
description: OK Response
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/CancelResponse'
examples:
Example of successfully cancelling a lab instance available to the API consumer:
summary: Example of a successful response
value:
Result: 1
Error: null
Status: 1
Example of trying to cancel a lab instance launched by a different API consumer:
summary: Example of an error response
value:
Error: Invalid integration key
Status: 1
deprecated: false
tags:
- Lab Instance Management
/details:
get:
tags:
- Lab Instance Management
summary: Retrieve details about a lab instance
description: The **Details** command retrieves detailed information about a specified lab instance.
operationId: Details
parameters:
- name: labinstanceid
in: query
description: The ID of the lab instance.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 360701
responses:
'200':
description: OK Response.
content:
application/json:
schema:
$ref: '#/components/schemas/DetailsResponse'
examples:
Example of the details returned from a specific lab instance:
value:
Id: 360701
LabProfileId: 18100
LabProfileName: '01: Launch/Details Call'
SeriesId: 10702
SeriesName: API Examples
UserId: '11'
UserFirstName: Chad
UserLastName: S
ClassId: null
ClassName: null
Start: 1603295589
StartTime: /Date(1603295589000)/
Expires: 1603299334
ExpiresTime: /Date(1603299334000)/
End: 1603295793
EndTime: /Date(1603295793000)/
LastActivity: 1603295787
LastActivityTime: /Date(1603295787000)/
LastSave: null
LastSaveTime: null
SaveExpires: null
SaveExpiresTime: null
State: Tearing Down
CompletionStatus: Complete
PoolMemberName: null
LabHostId: 111
LabHostName: LOD-HV03
DatacenterId: 4
DatacenterName: LOD-East
DeliveryRegionId: 1
DeliveryRegionName: Default
PlatformId: 2
LastSaveTriggerType: null
TimeInSession: 204
TotalRunTime: 204
TimeRemaining: 0
InstructorName: null
StartupDuration: 145
Errors: []
Snapshots: []
Sessions:
- Start: 1603295589
StartTime: /Date(1603295589000)/
End: 1603295793
EndTime: /Date(1603295793000)/
Notes:
- Time: 1603295793
TimeValue: /Date(1603295793000)/
Title: This environment has been submitted for grading and can no longer be accessed.
Text: Submitted for scoring from the lab console by the student.
HasContent: true
Task: null
Exercise: null
NumTasks: 0
NumCompletedTasks: 0
TaskCompletePercent: 100
MonitorUrl: null
DetailsUrl: 'https://labondemand.com/LabInstance/360701'
RemoteController: HTML5
Tag: null
BrowserUserAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36 Edg/86.0.622.48'
LastLatency: 35
ExamPassed: true
ExamScore: 5
ExamMaxPossibleScore: 5
ExamPassingScore: 2
ExamScoredById: null
ExamScoredByName: null
ExamDetails: null
ExamScoredDate: 1603295793
ExamScoredTime: /Date(1603295793000)/
IsExam: true
IpAddress: 198.199.209.76
Country: United States of America
Region: Florida
City: Lakeland
Latitude: 28.03947
Longitude: -81.9498
PublicIpAddresses: []
CloudCredentials:
- PropertiesJson: '{ "Username": "Username2", "Password": "Password2"}'
Expires: 1645557720000
DisplayName: Demo Demo Demo Demo Demo
Message: null
CloudPortalCredentials:
- CloudPlatform: 10
PropertiesJson: "{\r\n \"Username\": \"User1-360701@lod.onmicrosoft.com\",\r\n \"Password\": \"1234ABCD\",\r\n \"_FirstName\": \"Chad\",\r\n \"_LastName\": \"S\"\r\n}"
VirtualMachineCredentials:
- Id: 13484
Name: Windows 10 2004
Username: Student
Password: Pa$$w0rd
CloudPlatformId: 10
ClientUrl: null
ActivityResults:
- ActivityId: 4910
ActivityName: What is 1 + 1?
Scored: true
Score: 1
Passed: true
ActivityType: 0
TextResult: null
UiResponse: You got the correct answer.
AnswerResults:
- AnswerId: 2856
AnswerText: '2'
Correct: true
ScriptResults: []
DisplayScriptsAsTaskList: false
AnswerTexts:
- Correct: false
AnswerId: 2855
Text: '1'
Chosen: false
- Correct: true
AnswerId: 2856
Text: '2'
Chosen: true
- Correct: false
AnswerId: 2857
Text: '3'
Chosen: false
- Correct: false
AnswerId: 2858
Text: '4'
Chosen: false
ScriptTexts: []
ShowResultsInReports: true
- ActivityId: 4911
ActivityName: Select all that result in a product of 4
Scored: true
Score: 3
Passed: true
ActivityType: 10
TextResult: null
UiResponse: 'Good, you understand what a product function is.'
AnswerResults:
- AnswerId: 2859
AnswerText: '1, 4'
Correct: true
- AnswerId: 2860
AnswerText: '-1, -4'
Correct: true
- AnswerId: 2861
AnswerText: '2, 2'
Correct: true
DisplayScriptsAsTaskList: false
AnswerTexts:
- Correct: true
AnswerId: 2859
Text: '1, 4'
Chosen: true
- Correct: true
AnswerId: 2860
Text: '-1, -4'
Chosen: true
- Correct: true
AnswerId: 2861
Text: '2, 2'
Chosen: true
- Correct: false
AnswerId: 2862
Text: '2, -2'
Chosen: false
ScriptTexts: []
ShowResultsInReports: true
- ActivityId: 4912
ActivityName: What is the southernmost continent on earth?
Scored: true
Score: 1
Passed: true
ActivityType: 20
TextResult: Antarctica
UiResponse: 'Great, you know your geography.'
AnswerResults: []
ScriptResults: []
DisplayScriptsAsTaskList: false
AnswerTexts: []
ScriptTexts: []
ShowResultsInReports: true
- ActivityId: 110631
ActivityName: What are the colors of the French flag?
Scored: true
Score: 3
Passed: true
ActivityType: 30
TextResult: 'It''s blue, white, red'
UiResponse: 'Correct, move on to the next flag question.'
AnswerResults: []
ScriptResults: []
DisplayScriptsAsTaskList: false
AnswerTexts: []
ScriptTexts: []
ShowResultsInReports: true
- ActivityId: 91810
ActivityName: 'Create a folder called LAB in the root of C:'
Scored: true
Score: 0
Passed: false
ActivityType: 40
TextResult: null
UiResponse: null
AnswerResults: []
ScriptResults:
- ScriptId: 37337
Score: 0
Passed: false
UiResponse: ''
ScriptResponse: "Check if [C:\\LAB] exists.\r\n\r\nPath Does Not Exist\r\n"
PlatformError: false
ScriptError: false
DisplayScriptsAsTaskList: false
AnswerTexts: []
ScriptTexts:
- ScriptId: 37337
Text: null
ShowResultsInReports: true
ActivityGroupResults:
- Id: 1131
Name: GRP1
ScoreValueTotal: 40
AggregateScore: 20
ActivityResults:
- ActivityId: 91811
ActivityName: Instructor First Name
Scored: true
Score: 20
Passed: true
ActivityType: 20
TextResult: Jon
UiResponse: Correct
AnswerResults: []
ScriptResults: []
DisplayScriptsAsTaskList: false
AnswerTexts: []
ScriptTexts: []
ShowResultsInReports: true
- ActivityId: 91812
ActivityName: Instructor Last Name
Scored: true
Score: 0
Passed: false
ActivityType: 20
TextResult: Kirk
UiResponse: Incorrect
AnswerResults: []
ScriptResults: []
DisplayScriptsAsTaskList: false
AnswerTexts: []
ScriptTexts: []
ShowResultsInReports: true
EstimatedReadySeconds: null
InstructionsId: The ID of the Instructions used
Lang: en
Error: null
Status: 1
deprecated: false
/Result:
get:
tags:
- Lab Instance Management
summary: Retrieve information about a lab instance result
description: The **Result** command returns information about a particular lab instance result.
operationId: Result
parameters:
- name: labinstanceId
in: query
description: The ID of the lab instance.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 2393049
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/ResultResponse'
examples:
Example of successfully returning information about a particular lab instance result:
value:
LabProfileId: 1
Start: 1338224609
End: 1338224624
LastActivity: 1338224624
UserId: '555'
ClassId: null
CompletionStatus: 4
TotalRunTimeSeconds: 4168
TaskCompletePercent: 100
IsExam: false
ExamPassed: null
ExamScore: null
ExamMaxPossibleScore: null
ExamPassingScore: null
IpAddress: null
Country: null
Region: null
City: null
Latitude: null
Longitude: null
LabHostId: 49
DatacenterId: 3
DeliveryRegionId: 2
Status: 1
Error: null
deprecated: false
/Results:
get:
tags:
- Lab Instance Management
summary: Retrieve information about a lab instance result within a specified time range
description: The **Results** command returns information about all lab instance results that started or ended within a specified time range. The time range cannot exceed 7 days.
operationId: Results
parameters:
- name: start
in: query
description: The start of the timeframe to check against (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1325376000
- name: end
in: query
description: The end of the timeframe to check against (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1357002000
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsResponse'
examples:
Example of returning information about all lab instance results that started or ended within a specified time range:
value:
Results:
- LabInstanceId: 349744
LabProfileId: 5522
Start: 1325376800
End: 1325376900
LastActivity: 1325376900
UserId: '555'
ClassId: null
CompletionStatus: 1
TotalRunTimeSeconds: 2548
TaskCompletePercent: 33
IsExam: false
ExamPassed: null
ExamScore: null
ExamMaxPossibleScore: null
ExamPassingScore: null
IpAddress: null
Country: null
Region: null
City: null
Latitude: null
Longitude: null
LabHostId: 49
DatacenterId: 3
DeliveryRegionId: 2
- LabInstanceId: 349745
LabProfileId: 5523
Start: 1325377000
End: 1325377100
LastActivity: 1325377100
UserId: '555'
ClassId: null
CompletionStatus: 1
TotalRunTimeSeconds: 4168
TaskCompletePercent: 44
IsExam: false
ExamPassed: null
ExamScore: null
ExamMaxPossibleScore: null
ExamPassingScore: null
IpAddress: null
Country: null
Region: null
City: null
Latitude: null
Longitude: null
LabHostId: 125
DatacenterId: 4
DeliveryRegionId: 3
Status: 1
Error: null
Example when specifying a date range greater than 7 days:
value:
Error: Timeframe cannot exceed 7 days
Status: 0
deprecated: false
/labinstance/search:
get:
summary: Retrieve multiple lab instance details or results
tags:
- Lab Instance Management
responses:
'200':
description: OK Response.
content:
application/json:
schema:
type: object
properties:
TotalResults:
type: integer
x-stoplight:
id: h5s48n18h1ca4
example: 878
description: The total number of results found.
TotalPages:
type: integer
x-stoplight:
id: vpzujejh05rgu
example: 9
description: The total number of pages containing results.
Results:
x-stoplight:
id: xo2qmubw7w1un
oneOf:
- $ref: '#/components/schemas/ResultResponse'
- $ref: '#/components/schemas/DetailsResponse'
description: 'Response format depends on mode specified. 0 for standard /Result, 10 for verbose). '
operationId: LabInstanceSearch
x-stoplight:
id: 1i3hzl72od78k
description: "The lab instance **Search** command returns paginated information about either lab instance details or lab instance results for all lab instances that meet selected criteria. \r\nThe response body will contain a collection of instance results in one of two formats, depending on the mode specified:\r\n\r\n- Mode = 0, standard: a collection of responses in the format of the **[Result](https://docs.skillable.com/apidocs/retrieve-information-about-a-lab-instance-result-1)** command\r\n\r\n- Mode = 10, verbose (default) a collection of responses in the format of the **[Details](https://docs.skillable.com/apidocs/retrieve-details-about-a-lab-instance)** command \r\n\r\n"
parameters:
- schema:
type: integer
format: int64
example: 1717516139
in: query
name: start
description: The earliest start time of lab instances to return (in Unix epoch time).
- schema:
type: integer
format: int64
example: 1712245739
in: query
name: end
description: The latest end time of lab instances to return (in Unix epoch time).
- schema:
type: string
in: query
name: userId
description: 'The user id of the external system. Must be an exact match. '
- schema:
type: integer
format: int32
example: 54321
in: query
name: labSeriesId
description: The unique numeric identifier of the series the lab profile belongs to.
- schema:
type: integer
format: int32
example: 12345
in: query
name: labProfileId
description: The unique numeric identifier of the lab profile.
- schema:
type: integer
default: 0
format: int32
in: query
name: pageIndex
description: The index of the paged result to return.
- schema:
type: integer
default: 100
format: int32
in: query
name: pageSize
description: The size of the paged result to return.
- schema:
type: string
default: start desc
in: query
name: sort
description: 'The desired sort order of the results. Options include: start (default), start desc, end, end desc, userid, userid desc, labseriesid, labseriesid desc, labprofileid, labprofileid desc.'
- schema:
type: integer
default: 10
format: int32
in: query
name: mode
description: 'Which response schema to return. 0 - standard, returns response body of /Result, 10 - verbose, returns response body of /details.'
parameters: []
/save:
get:
tags:
- Lab Instance Management
summary: Save a lab instance
description: The **Save** command allows you to save a specified lab instance.
operationId: Save
parameters:
- name: labinstanceid
in: query
description: The ID of the lab instance to save.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 2393049
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/SaveResponse'
examples:
Example of successfully saving a specified lab instance:
value:
Result: 1
Expires: 1337977153
Status: 1
Error: null
deprecated: false
/resume:
get:
tags:
- Lab Instance Management
summary: Resume a lab instance from a saved state
description: The **Resume** command allows you to resume a specified lab instance.
operationId: Resume
parameters:
- name: labinstanceid
in: query
description: The ID of the lab instance to resume.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 2393049
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/ResumeResponse'
examples:
Example of resuming a lab with a specific lab instance:
value:
Result: 1
Url: 'https://labondemand.com/console/setup/1b4909d6-0dbe-43db-9ab9-74ee4f913c4e'
Expires: 1337977153
LabProfileId: 18100
Status: 1
Error: null
deprecated: false
/scoreactivities:
get:
tags:
- Lab Instance Management
summary: Initiate scoring in a lab instance
description: |-
The **ScoreActivities** command causes all scored activities in a particular lab instance to undergo scoring. Please note that this is API command is only necessary in specialized situations. In most cases, scoring is triggered by the student in the lab client and this command is not needed. However, if your students do not use our lab client, ScoreActivities provides a mechanism to trigger scoring.
This command does not return scoring results. To obtain scoring results, use the **[Details](https://docs.skillable.com/apidocs/retrieve-details-about-a-lab-instance)** command.
operationId: ScoreActivities
parameters:
- name: labinstanceid
in: query
description: The ID of the lab instance.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 12186142
- name: rescoreAll
in: query
description: The ID of the lab instance.
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 12186142
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/ScoreActivitiesResponse'
examples:
Example successful response:
value:
Status: 1
Error: null
deprecated: false
/sendnotification:
post:
tags:
- Lab Instance Management
summary: Send a notification to a lab instance
description: 'The **SendNotification** command allows you to send a notification to a specified lab instance for the user to see. For notifications sent using the POST HTTP verb, the notification text is limited to 4000 characters.'
operationId: SendNotification-post
parameters:
- name: labinstanceid
in: query
description: The ID of the lab instance to send the notification to.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 2393048
- name: notification
in: query
description: 'The text of the notification to send. Please ensure the message is properly encoded. Line breaks can be included using \n. For notifications sent using the POST HTTP verb, the notification text is limited to 4000 characters.'
required: true
style: form
explode: true
schema:
type: string
example: I'd+like+to+let+you+know
- name: name
in: query
description: 'An optional name for the notification. If you name the notification, subsequent SendNotification commands using the same labInstanceId and name will cause the existing notification to be updated. It is also possible to delete a named notification by sending the name along with no notification value.'
required: false
style: form
explode: true
schema:
type: string
example: Hello
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/SendNotificationResponse'
examples:
Example of successfully sending a notification:
value:
Id: 28297
Result: 1
Status: 1
Error: null
deprecated: false
get:
tags:
- Lab Instance Management
summary: Send a notification to a lab instance
description: 'The **SendNotification** command allows you to send a notification to a specified lab instance for the user to see. For notifications sent using the GET HTTP verb, the notification text is limited to 800 characters. '
operationId: SendNotification-get
parameters:
- name: labinstanceid
in: query
description: The ID of the lab instance to send the notification to.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 2393048
- name: notification
in: query
description: 'The text of the notification to send. Please ensure the message is properly encoded. Line breaks can be included using \n. For notifications sent using the GET HTTP verb, the notification text is limited to 800 characters.'
required: true
style: form
explode: true
schema:
type: string
example: I'd+like+to+let+you+know
- name: name
in: query
description: 'An optional name for the notification. If you name the notification, subsequent SendNotification commands using the same labInstanceId and name will cause the existing notification to be updated. It is also possible to delete a named notification by sending the name along with no notification value.'
required: false
style: form
explode: true
schema:
type: string
example: Hello
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/SendNotificationResponse'
examples:
Example of successfully sending a notification:
value:
Id: 28297
Result: 1
Status: 1
Error: null
deprecated: false
/replacementtokens:
get:
tags:
- Lab Instance Management
summary: Retrieve replacement tokens from a lab instance
description: The **ReplacementTokens** command retrieves all @lab replacement tokens available for a particular lab instance.
operationId: ReplacementTokens
parameters:
- name: labInstanceId
in: query
description: The ID of the lab instance.
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1286841
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/ReplacementTokensResponse'
examples:
Example of retrieving all @lab replacement tokens available for a particular lab instance:
value:
ReplacementTokens:
- Token: '@lab.VirtualMachine(machine1).Username'
Replacement: user1
- Token: '@lab.VirtualMachine(machine1).Password'
Replacement: h&4Fa?)C3/eQ;)?E
- Token: '@lab.VirtualMachine(machine2).Username'
Replacement: user1
- Token: '@lab.VirtualMachine(machine2).Password'
Replacement: LXM(#(Z^Hw4Upp>f
- Token: '@lab.LabInstance.Id'
Replacement: '15167595'
- Token: '@lab.LabInstance.GlobalId'
Replacement: lod15167595
- Token: '@lab.LabInstance.StartDate'
Replacement: '20190809'
- Token: '@lab.LabProfile.Id'
Replacement: '1581178'
- Token: '@lab.User.Id'
Replacement: '11832814'
- Token: '@lab.User.FirstName'
Replacement: 'John '
- Token: '@lab.User.LastName'
Replacement: Doe
- Token: '@lab.User.Email'
Replacement: john.doe@sample.net
Error: null
Status: 1
deprecated: false
/LatestResults:
get:
tags:
- Lab Instance Management
summary: Returns information about all lab instance results that have recently started or ended
description: The **LatestResults** command returns information about all lab instance results that have recently changed state.
operationId: LatestResults
parameters:
- name: minutes
in: query
description: 'Lab instances that have changed state within this many minutes of the current time will be included. This value cannot exceed 10,080 (7 days)'
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 60
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/LatestResultsResponse'
examples:
Example response returning information about all lab instance results that have recently changed state:
value:
Results:
- LabInstanceId: 349744
LabProfileId: 5522
Start: 1325376800
End: 1325376900
LastActivity: 1325376899
UserId: '555'
ClassId: null
CompletionStatus: 1
TotalRunTimeSeconds: 2548
TaskCompletePercent: 33
IsExam: false
ExamPassed: null
ExamScore: null
ExamMaxPossibleScore: null
ExamPassingScore: null
IpAddress: null
Country: null
Region: null
City: null
Latitude: null
Longitude: null
LabHostId: 49
DatacenterId: 3
DeliveryRegionId: 2
- LabInstanceId: 349745
LabProfileId: 5523
Start: 1325377000
End: 1325377100
LastActivity: 1325377099
UserId: '555'
ClassId: null
CompletionStatus: 1
TotalRunTimeSeconds: 4168
TaskCompletePercent: 44
IsExam: false
ExamPassed: null
ExamScore: null
ExamMaxPossibleScore: null
ExamPassingScore: null
IpAddress: null
Country: null
Region: null
City: null
Latitude: null
Longitude: null
LabHostId: 125
DatacenterId: 4
DeliveryRegionId: 3
Status: 1
Error: null
deprecated: false
/runningandsavedlabs:
get:
tags:
- Lab Instance Management
summary: Retrieves running and saved lab instances available to this API consumer
description: |-
The **RunningAndSavedLabs** command retrieves all lab instances launched by this API Consumer that are currently running or saved.
**NOTE**: there are no query parameters for this command.
operationId: RunningAndSavedLabs
parameters: []
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/RunningAndSavedLabsResponse'
examples:
Example of retrieving all lab instances launched by this API Consumer that are currently running or saved:
value:
RunningLabs:
- Id: 3497
UserId: '5843'
UserFirstName: John
UserLastName: Doe
LabProfileId: 5
LabProfileName: Demo Lab 1
LabProfileNumber: LAB001
Start: 1338223121
Expires: 1338244721
IsExam: false
SavedLabs:
- Id: 3493
UserId: '5158'
UserFirstName: Sally
UserLastName: Smith
LabProfileId: 1
LabProfileName: Demo Lab 2
LabProfileNumber: LAB002
Start: 1337987655
Expires: 1338592455
IsExam: false
Status: 1
Error: null
deprecated: false
/stats:
get:
tags:
- Lab Instance Management
summary: Returns statistics about how many labs are currently active and saved
description: |-
The **Stats** command returns statistics about how many labs are currently active and saved.
**NOTE**: there are no query parameters for this command.
operationId: Stats
parameters: []
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/StatsResponse'
examples:
Example of returning statistics about how many labs are currently active and saved:
value:
NumActive: 571
NumSaved: 451
Status: 1
Error: null
deprecated: false
/GetEvaluationResponses:
get:
tags:
- Lab Instance Management
summary: Returns evaluation data for a specific evaluation
description: The **GetEvaluationResponses** command returns evaluation responses.
operationId: GetEvaluationResponses
parameters:
- name: id
in: query
description: The unique identifier of the evaluation.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 12345
- name: takenAfter
in: query
description: The date/time (in Unix epoch time) that the evaluation response is after.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598292299
- name: takenBefore
in: query
description: The date/time (in Unix epoch time) that the evaluation response is after.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: classId
in: query
description: The unique identifier of the class the evaluation was taken in.
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 1223334444
- name: eventId
in: query
description: The unique identifier of the event the evaluation was taken in.
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 24
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/GetEvaluationResponsesResponse'
examples:
Example of a response for an evaluation:
value:
Responses:
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Multiple Choice, Multiple Answers'
Label: ''
A1DText: Answer 2
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, One Answer Per Row'
Label: ''
A1DText: Row 1
A1DWeight: 0
A2DText: Column 2
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, One Answer Per Row'
Label: ''
A1DText: Row 2
A1DWeight: 0
A2DText: Column 2
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, One Answer Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 2
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 1
A1DWeight: 0
A2DText: Column 1
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 3
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Single Textbox
Label: ''
A1DText: null
A1DWeight: null
A2DText: null
A2DWeight: null
TextAnswer: Just answer 2
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Multiple Textboxs
Label: ''
A1DText: Textbox 1
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: Textboxes 2 and 3 are blank.
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Multiple Textboxs
Label: ''
A1DText: Textbox 2
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: This is answer 2
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Multiple Textboxs
Label: ''
A1DText: Textbox 1
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: This is answer 1
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Single Textbox
Label: ''
A1DText: null
A1DWeight: null
A2DText: null
A2DWeight: null
TextAnswer: I answered 1 and 2
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 3
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 1
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
Label: ''
QuestionText: 'Matrix, Multiple Answers Per Row'
A1DText: Row 2
A1DWeight: 0
A2DText: Column 3
A2DWeight: 0
TextAnswer: null
Error: null
Status: 1
deprecated: false
/labprofile:
get:
summary: Retrieves information about a specified lab profile
description: The **LabProfile** command will return information about a specific lab profile.
operationId: LabProfile
parameters:
- name: id
in: query
description: The unique identifier of the lab profile.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 77457
responses:
'200':
description: OK Response.
content:
application/json:
schema:
$ref: '#/components/schemas/LabProfileResponse'
examples:
Example of returning information a specific lab profile:
value:
Error: null
Status: 1
Id: 1
Name: Demo Lab 1
Number: ' Module 1'
PlatformId: 2
Platform: 2
CloudPlatformId: null
SeriesId: 1
OrganizationId: 5
Enabled: true
ReasonDisabled: null
DevelopmentStatusId: 10
DevelopmentStatus: 10
RequiresBrowserPlugin: false
RequiresNestedVirtualization: false
NumPublicIpAddresses: 0
Description: A demo lab.
Objective: This is the HTML-formatted objective of the lab
Scenario: ' This is the HTML-formatted scenario of the lab'
DurationMinutes: 360
ExpectedDurationMinutes: 360
ResourceUnits: 16
Ram: 512
HasIntegratedContent: true
ContentVersion: 2
IsExam: false
PremiumPrice: 10
BasicPrice: 8
PricePerHour: 2
ExpectedCloudCost: 0
ParticipantLabPrice: 0
ExamPages:
- Empty
SharedClassEnvironmentRoleId: 0
SharedClassEnvironmentRole: 0
SharedClassEnvironmentLabProfileId: 0
UsesRdp: false
Tags:
- Tag1
- Tag2
InstructionSets:
- Id: Base-01
Language: en
Description: Basic Instructions
LabTitle: A demo lab
DurationMinutes: 360
OrganizationId: 1
- Id: Base-01
Language: fr
Description: Instructions de base
LabTitle: Un laboratoire de démonstration
DurationMinutes: 360
OrganizationId: 1
Created: 1656366326607
LastModified: 1656440153550
SCORMLastDownloaded: 1755781199000
deprecated: false
tags:
- Lab Profile Management
/GetLabInstructions:
get:
summary: Returns instructions for a specific lab
description: The **GetLabInstructions** command allows you to download the IDLx instructions of a lab as a string.
operationId: GetLabInstructions
parameters:
- name: id
in: query
description: The ID of the lab profile that will be the source of the instructions. The profile must be owned by the organization on the API consumer.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 2393048
- name: lang
in: query
description: |-
Allows you to select the language of the Instruction Set. Using this in connection with instructionsId will allow you to select a specific lab Instruction Set in the specified language if they have been defined within the lab profile.
NOTE: If this parameter is omitted, or if the specified language is not specified on one of the Instruction sets in a lab profile, then the default language as defined in the Lab Profile ➔ Manage Instructions Sets option will be used instead.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
required: false
style: form
explode: true
schema:
type: string
enum:
- en
- es
- fr
- de
- pt
- ja
- zh-hans
- zh-hant
- ko
example: en
- name: instructionsId
in: query
description: |-
When specified, Skillable will attempt to retrieve the selected instructions. If not specified, or the instruction Id could not be found, the default instructions, as defined on the Lab Profile, will be used instead. This is a string that cannot contain spaces.
NOTE: To be able to see how to use this parameter, add the column "API Example" in the Manage Instruction Sets feature while editing the instructions.
required: false
style: form
explode: true
schema:
type: string
example: Base-01
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/GetLabInstructionsResponse'
examples:
Example of retrieving the instructions from a lab:
value:
Instructions: '##Welcome to the world of tomorrow!'
Error: null
Status: 1
Example when trying to retrieve instructions for a nonexistent lab profile:
value:
Error: Lab profile not found
Status: 0
deprecated: false
tags:
- Lab Profile Management
/GetLabInstructionsPackage:
get:
summary: Returns the contents of the instructions for a specific lab as a file archive
description: |-
The **GetLabInstructionsPackage** command allows you to download the IDLx instructions of a lab as an archived file.
The results are returned as a compressed format that can be exported as a .zip file when using Postman. There is an additional Header parameter Content-Disposition that is returned which contains the name of the lab.
operationId: GetLabInstructionsPackage
parameters:
- name: id
in: query
description: The ID of the lab profile that will be the source of the instructions. The profile must be owned by the organization on the API consumer.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 2393048
- name: lang
in: query
description: |-
Allows you to select the language of the Instruction Set. Using this in connection with instructionsId will allow you to select a specific lab Instruction Set in the specified language if they have been defined within the lab profile.
NOTE: If this parameter is omitted, or if the specified language is not specified on one of the Instruction sets in a lab profile, then the default language as defined in the Lab Profile ➔ Manage Instructions Sets option will be used instead.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
required: false
style: form
explode: true
schema:
type: string
enum:
- en
- es
- fr
- de
- pt
- ja
- zh-hans
- zh-hant
- ko
example: en
- name: instructionsId
in: query
description: |-
When specified, Skillable will attempt to retrieve the selected instructions. If not specified, or the instruction Id could not be found, the default instructions, as defined on the Lab Profile, will be used instead. This is a string that cannot contain spaces.
NOTE: To be able to see how to use this parameter, add the column "API Example" in the Manage Instruction Sets feature while editing the instructions.
required: false
style: form
explode: true
schema:
type: string
example: Base-01
responses:
'200':
description: OK Response.
headers:
Content-Disposition:
schema:
type: string
description: |-
attachment; filename="DemoLab.zip"
**Note:** The filename will contain the name of the Lab Profile.
content:
application/zip:
schema:
type: object
properties:
'':
type: string
description: The raw binary compressed package.
format: binary
deprecated: false
tags:
- Lab Profile Management
/updatelabinstructions:
post:
summary: Update IDLx instructions of a lab profile
description: 'The **UpdateLabInstructions** command allows you to update the IDLx instructions of a lab. In order to support longer instructions lengths, this method requires an HTTP POST. The Content-Type of your post should be set to application/x-www-form-urlencoded.'
operationId: UpdateLabInstructions
parameters:
- name: id
in: query
description: The ID of the lab profile to update.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 2393048
- name: lang
in: query
description: |-
Allows you to select the language of the Instruction Set. Using this in connection with instructionsId will allow you to update a specific lab Instruction Set in the specified language if they have been defined within the lab profile.
NOTE: If this parameter is omitted, or if the specified language is not specified on one of the Instruction sets in a lab profile, then the default language as defined in the Lab Profile ➔ Manage Instructions Sets option will be used instead.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
required: false
style: form
explode: true
schema:
type: string
enum:
- en
- es
- fr
- de
- pt
- ja
- zh-hans
- zh-hant
- ko
example: en
- name: instructionsId
in: query
description: |-
When specified, Skillable will attempt to update the selected instructions. If not specified, or the instruction Id could not be found, the default instructions, as defined on the Lab Profile, will be updated instead. This is a string that cannot contain spaces.
NOTE: To be able to see how to use this parameter, add the column "API Example" in the Manage Instruction Sets feature while editing the instructions.
required: false
style: form
explode: true
schema:
type: string
example: Base-01
- name: instructions
in: query
description: The IDLx instructions. This should included in the body of the post.
required: true
style: form
explode: true
schema:
type: string
example: Updated from the API
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateLabInstructionsResponse'
examples:
Example of successfully updating the lab instructions:
value:
Status: 1
Error: null
deprecated: false
tags:
- Lab Profile Management
/updatelabinstructionspackage:
post:
summary: Allows you to update the IDLx instructions of a lab by uploading a ZIP archive
description: |-
The **UpdateLabInstructionsPackage** command allows you to update the IDLx instructions of a lab by uploading a ZIP archive containing the instructions and any referenced files, such as images and videos.
**This method requires an HTTP POST**. The Content-Type of your post should be set to multipart/form-data. This is the same behavior that a browser uses to upload a file to a server. In .NET environments, the System.Net.WebClient class provides an UploadFile method that can be used. Set your content by using the body tab in postman.
operationId: UpdateLabInstructionsPackage
parameters:
- name: Id
in: query
description: The ID of the lab profile to update.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 2393048
- name: lang
in: query
description: |-
Allows you to select the language of the Instruction Set. Using this in connection with instructionsId will allow you to select a specific lab Instruction Set in the specified language if they have been defined within the lab profile.
NOTE: If this parameter is omitted, or if the specified language is not specified on one of the Instruction sets in a lab profile, then the default language as defined in the Lab Profile ➔ Manage Instructions Sets option.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
required: false
style: form
explode: true
schema:
type: string
enum:
- en
- es
- fr
- de
- pt
- ja
- zh-hans
- zh-hant
- ko
example: en
- name: instructionsId
in: query
description: |-
When specified, Skillable will attempt to update the selected instructions. If not specified, or the instruction Id could not be found, the default instructions, as defined on the Lab Profile, will be updated instead. This is a string that cannot contain spaces.
NOTE: To be able to see how to use this parameter, add the column "API Example" in the Manage Instruction Sets feature while editing the instructions.
required: false
style: form
explode: true
schema:
type: string
example: Base-01
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateLabInstructionsResponse'
examples:
Example of successfully updating the lab instructions:
value:
Status: 1
Error: null
deprecated: false
tags:
- Lab Profile Management
/class:
get:
summary: Returns information about a class
description: The **Class** command returns information about a class.
operationId: Class
parameters:
- name: id
in: query
description: 'The unique identifier of the class, as represented in your organization.'
style: form
explode: true
schema:
type: string
example: '1223334444'
required: true
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/ClassResponse'
examples:
Example of getting information about a specific class:
value:
Id: '4449999'
Name: Sample Class
Start: 1333267200
StartTime: /Date(1333267200000)/
End: 1333299600
EndTime: /Date(1333299600000)/
Expires: 1335978000
ExpiresTime: /Date(1335978000000)/
Instructor:
Id: '65214'
FirstName: Demo
LastName: Instructor
Url: null
MaxActiveLabInstances: 20
AvailableLabs:
- 17390
- 17432
Error: null
Status: 1
deprecated: false
tags:
- Class Management
/GetOrCreateClass:
get:
summary: 'Returns information about a class. If the class doesn’t exist, it is created'
description: 'The **GetOrCreateClass** command returns information about a class. If the class doesn’t exist, it is created.'
operationId: GetOrCreateClass
parameters:
- name: id
in: query
description: 'The unique identifier of the class, as represented in your organization.'
required: true
style: form
explode: true
schema:
type: string
example: '1223334444'
- name: name
in: query
description: The name of the class.
required: true
style: form
explode: true
schema:
type: string
example: Sample+Class
- name: start
in: query
description: When the class starts (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1333267200
- name: end
in: query
description: When the class ends (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1333299600
- name: expires
in: query
description: When labs can no longer be associated with the class (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1335978000
- name: instructorId
in: query
description: The ID you use to identify the class instructor in your external system.
required: false
style: form
explode: true
schema:
type: string
example: '65214'
- name: instructorFirstName
in: query
description: The first name of the class instructor.
required: false
style: form
explode: true
schema:
type: string
example: Demo
- name: instructorLastName
in: query
description: The last name of the class instructor.
required: false
style: form
explode: true
schema:
type: string
example: Instructor
- name: maxActiveLabInstances
in: query
description: 'The maximum number of active lab instances than can exist concurrently within this class context. This is optional in most situations. However, it is required for classes that host shared environments. If a shared lab is launched against a class that doesn''t have this value set, the launch will fail.'
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 20
- name: AvailableLabs
in: query
description: 'An optional array of lab profile IDs. When provided, Skillable will know that these labs are available within the class. You do not need to set this value in order to launch labs against the class. This is useful when using Skillable to display a class attendance page, or when consuming shared class environments and you want the shared environment launch link to appear on the class monitor page.'
required: false
style: form
explode: true
schema:
type: array
items:
type: integer
uniqueItems: true
example:
- 17390
- 17432
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/GetOrCreateClassResponse'
examples:
Example of creating a class:
value:
Id: '4449999'
Name: Sample Class
Start: 1333267200
StartTime: /Date(1333267200000)/
End: 1333299600
EndTime: /Date(1333299600000)/
Expires: 1335978000
ExpiresTime: /Date(1335978000000)/
Instructor: null
Url: null
MaxActiveLabInstances: null
AvailableLabs:
- 17390
- 17432
Status: 1
Error: null
Example of retrieving information on an existing class:
value:
Id: '4449999'
Name: Sample Class
Start: 1333267200
StartTime: /Date(1333267200000)/
End: 1333299600
EndTime: /Date(1333299600000)/
Expires: 1335978000
ExpiresTime: /Date(1335978000000)/
Instructor:
Id: '65214'
FirstName: Demo
LastName: Instructor
Url: null
MaxActiveLabInstances: null
AvailableLabs:
- 17390
- 17432
Status: 1
Error: null
deprecated: false
tags:
- Class Management
/ClassAccessUrl:
get:
summary: Returns a single use URL to access a class
description: The **ClassAccessUrl** command returns a single use URL to access the class management page.
operationId: ClassAccessUrl
parameters:
- name: id
in: query
description: 'The unique identifier of the class, as represented in your organization.'
required: true
style: form
explode: true
schema:
type: string
example: '4449999'
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/ClassAccessUrlResponse'
examples:
Example of a successful response with a valid class:
value:
Url: 'https://labondemand.com/class/access/ab1c2345-6d7b-890e-f1gh-234ij5kl6m7n'
Error: null
Status: 1
Example of an error response when class is not found:
value:
Error: Class not found
Status: 0
deprecated: false
tags:
- Class Management
/LabMonitorUrl:
get:
summary: Returns a single use URL to monitor a lab instance
responses:
'200':
description: OK Response.
content:
application/json:
schema:
$ref: '#/components/schemas/LabMonitorUrlResponse'
examples:
Example of successfully retrieving the URL to monitor a lab instance:
value:
Url: 'https://labondemand.com/access/ab1c2345-6d7b-890e-f1gh-234ij5kl6m7n?monitor=1'
Error: null
Status: 1
operationId: LabMonitorUrl
parameters:
- schema:
type: integer
format: int64
in: query
name: labInstanceId
description: The unique identifier of the lab instance.
required: true
style: form
description: The **LabMonitorUrl** command returns a single use URL to monitor a lab instance.
tags:
- Class Management
/LabAccessUrl:
get:
summary: Returns a single use URL is used to access a lab instance
responses:
'200':
description: OK Response.
content:
application/json:
schema:
$ref: '#/components/schemas/LabAccessUrlResponse'
examples:
Example of successfully retrieving the URL for an active Lab instance.:
value:
Url: 'https://labondemand.com/access/ab1c2345-6d7b-890e-f1gh-234ij5kl6m7n'
Error: null
Status: 1
operationId: LabAccessUrl
description: The **LabAccessUrl** command returns a single use URL to access a lab instance.
parameters:
- schema:
type: integer
format: int64
in: query
name: labInstanceId
style: form
description: The unique identifier of the lab instance.
required: true
- schema:
type: integer
format: int32
in: query
name: roleId
description: Allows you to specify the role(s) to assign to the user. You may pass multiple instances of this parameter to specify multiple roles. Roles are used for specialized integration purposes and are not needed in typical integration scenarios. Role IDs will be provided by Skillable when appropriate.
style: form
tags:
- Class Management
/updateclass:
get:
summary: Updates a specified class
description: The **UpdateClass** command updates a specified class.
operationId: UpdateClass
parameters:
- name: id
in: query
description: 'The unique identifier of the class, as represented in your organization.'
required: true
style: form
explode: true
schema:
type: string
example: '1223334444'
- name: name
in: query
description: The name of the class.
required: true
style: form
explode: true
schema:
type: string
example: Sample+Class
- name: start
in: query
description: When the class starts (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1333267200
- name: end
in: query
description: When the class ends (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1333299600
- name: expires
in: query
description: When labs can no longer be associated with the class (in Unix epoch time).
required: true
style: form
explode: true
schema:
type: integer
format: int64
example: 1335978000
- name: instructorId
in: query
description: 'The unique identifier of the class instructor, as represented in your organization.'
required: false
style: form
explode: true
schema:
type: string
example: ABC123
- name: instructorFirstName
in: query
description: The first name of the class instructor.
required: false
style: form
explode: true
schema:
type: string
example: Demo
- name: instructorLastName
in: query
description: The last name of the class instructor.
required: false
style: form
explode: true
schema:
type: string
example: Instructor
- name: maxActiveLabInstances
in: query
description: 'The maximum number of active lab instances than can exist concurrently within this class context. This is optional in most situations. However, it is required for classes that host shared environments. If a shared lab is launched against a class that doesn''t have this value set, the launch will fail.'
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 20
- name: AvailableLabs
in: query
description: 'An optional array of lab profile IDs. When provided, Skillable will know that these labs are available within the class. You do not need to set this value in order to launch labs against the class. This is useful when using Skillable to display a class attendance page, or when consuming shared class environments and you want the shared environment launch link to appear on the class monitor page.'
style: form
explode: true
schema:
type: array
items:
type: integer
uniqueItems: true
example:
- 17390
- 16980
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateClassResponse'
examples:
Example of response after successfully updating information for a specified class:
value:
Success: true
Status: 1
Error: null
deprecated: false
tags:
- Class Management
/deleteclass:
get:
summary: Deletes a specified class
description: The **DeleteClass** command deletes a specified class.
operationId: DeleteClass
parameters:
- name: id
in: query
description: 'The unique identifier of the class, as represented in your organization.'
required: true
style: form
explode: true
schema:
type: string
example: '4449999'
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteClassResponse'
examples:
Example of successfully deleting an existing class:
value:
Success: true
Error: null
Status: 1
Example of trying to delete a class that does not exist:
value:
Error: Class not found
Status: 0
deprecated: false
tags:
- Class Management
/userrunningandsavedlabs:
get:
summary: Retrieve all running or saved labs for a particular user account
description: The **UserRunningAndSavedLabs** command retrieves all labs that are currently running or saved for a particular user account.
operationId: UserRunningAndSavedLabs
parameters:
- name: userid
in: query
description: The unique identifier used to identify the user in within your organization.
required: true
style: form
explode: true
schema:
type: string
example: '555'
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/UserRunningAndSavedLabsResponse'
examples:
Example of retrieving all labs that are currently running or saved for a particular user account:
value:
RunningLabs:
- LabInstanceId: 3497
LabProfileId: 5
LabProfileName: Demo Lab 1
LabProfileNumber: LAB001
Start: 1338223121
Expires: 1338244721
Url: null
IsExam: false
SavedLabs:
- LabInstanceId: 3493
LabProfileId: 1
LabProfileName: Demo Lab 2
LabProfileNumber: LAB002
MinutesRemaining: 359
Saved: 1337987655
Expires: 1338592455
SaveInProgress: false
IsExam: false
SubmittedForGrading: false
Status: 1
Error: null
deprecated: false
tags:
- User Management
/CloseUserAccount:
get:
summary: Close a user account
description: The **CloseUserAccount** command closes a user account and removes all user information using an ID. This is usually a unique identifier used by the calling system.
operationId: CloseUserAccount
parameters:
- name: userId
in: query
description: The ID of the user to retrieve. This is usually a unique identifier used by the calling system.
required: true
style: form
explode: true
schema:
type: string
example: '555'
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/CloseUserAccountResponse'
examples:
Example of successfully closing out a user account:
value:
Status: 1
Error: null
RowsAffected: 25
Example response when the user does not exist and no rows are affected:
value:
RowsAffected: 0
Error: null
Status: 1
deprecated: false
tags:
- User Management
/LaunchForEvent:
get:
summary: Launches a specified lab within an event
description: The **LaunchForEvent** command launches a lab instance within an event.
operationId: LaunchforEvent
parameters:
- name: labId
in: query
description: The ID of the lab profile.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 100
- name: eventId
in: query
description: The ID of the event the lab is part of.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 24
- name: userid
in: query
description: The ID you use to identify the user in your external system.
required: true
style: form
explode: true
schema:
type: string
example: '555'
- name: firstname
in: query
description: The user’s first name.
required: true
style: form
explode: true
schema:
type: string
example: Joe
- name: lastname
in: query
description: The user’s last name.
required: true
style: form
explode: true
schema:
type: string
example: Smith
- name: email
in: query
description: The user’s email address.
required: true
style: form
explode: true
schema:
type: string
example: joe.smith@email.com
- name: classId
in: query
description: 'An optional parameter used to associate the lab with a class (see **GetOrCreateClass**). This is the unique identifier of the class as it is represented in your organization. '
required: false
style: form
explode: true
schema:
type: string
example: '1223334444'
- name: canBeMarkedComplete
in: query
description: 'An optional parameter used to specify if the lab can be marked as complete by the student. 1 = true, 2 = false. If not specified, defaults to 1 (true).'
required: false
style: form
explode: true
schema:
type: integer
format: int32
enum:
- 1
- 2
default: 1
example: 1
- name: tag
in: query
description: An optional parameter that can be used for tagging the lab instance with your own custom data.
required: false
style: form
explode: true
schema:
type: string
example: eventLaunch
- name: ipAddress
in: query
description: 'When specified, Skillable will attempt to launch the lab in the closest available delivery region. You should provide the IP address of the user that is taking the lab, not the IP address of your system.'
required: false
style: form
explode: true
schema:
type: string
example: 1.1.1.1
- name: regionId
in: query
description: 'When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the **DeliveryRegions** command or **Catalog** command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 1
- name: lang
in: query
description: |-
Allows you to override the language of the Instruction Set as well as the lab client UI language. This affects lab client UI elements like menus, tabs, and dialogs. Using this in connection with instructionsId will allow you to select launching labs with a specific Instruction Set in the specified language if they have been defined within the lab profile.
NOTE: If this parameter is omitted, or if the specified language is not specified on one of the Instruction sets in a lab profile, then the default language as defined in the Lab Profile ➔ Manage Instructions Sets option.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
required: false
style: form
explode: true
schema:
type: string
enum:
- en
- es
- fr
- de
- pt
- ja
- zh-hans
- zh-hant
- ko
example: en
- name: instructionsId
in: query
description: |-
When specified, Skillable will attempt to launch the lab and present the selected instructions. If not specified, or the instruction Id could not be found, the default instructions, as defined on the Lab Profile, will be used instead. This is a string that cannot contain spaces.
NOTE: To be able to see how to use this parameter, add the column "API Example" in the Manage Instruction Sets feature while editing the instructions.
required: false
style: form
explode: true
schema:
type: string
example: Base-01
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchForEventResponse'
examples:
Example of a successful lab instance launch within an event:
value:
Result: 1
Url: 'https://labondemand.com/console/setup/1b4909d6-0dbe-43db-9ab9-74ee4f913c4e'
LabInstanceId: 3896477
Expires: 1337977153
Status: 1
Error: null
deprecated: false
tags:
- Event Management
/LaunchForEventByExternalId:
get:
summary: Launches a specified lab within an event using an external lab ID
description: The **LaunchForEventByExternalId** command launches a lab instance within an event by external ID.
operationId: LaunchforEventByExternalId
parameters:
- name: externalLabId
in: query
description: The external ID of the lab to launch. This should be the ID you use in your system.
required: true
style: form
explode: true
schema:
type: string
example: '100'
- name: eventId
in: query
description: The ID of the event the lab is part of.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 24
- name: userid
in: query
description: The ID you use to identify the user in your external system.
required: true
style: form
explode: true
schema:
type: string
example: '555'
- name: firstname
in: query
description: The user’s first name.
required: true
style: form
explode: true
schema:
type: string
example: Joe
- name: lastname
in: query
description: The user’s last name.
required: true
style: form
explode: true
schema:
type: string
example: Smith
- name: email
in: query
description: The user’s email address.
required: true
style: form
explode: true
schema:
type: string
example: joe.smith@email.com
- name: classId
in: query
description: 'An optional parameter used to associate the lab with a class (see **GetOrCreateClass**). This is the unique identifier of the class as it is represented in your organization. '
required: false
style: form
explode: true
schema:
type: string
example: '1223334444'
- name: canBeMarkedComplete
in: query
description: 'An optional parameter used to specify if the lab can be marked as complete by the student. 1 = true, 2 = false. If not specified, defaults to 1 (true).'
required: false
style: form
explode: true
schema:
type: integer
format: int32
enum:
- 1
- 2
default: 1
example: 1
- name: tag
in: query
description: An optional parameter that can be used for tagging the lab instance with your own custom data.
required: false
style: form
explode: true
schema:
type: string
example: eventLaunch
- name: ipAddress
in: query
description: 'When specified, Skillable will attempt to launch the lab in the closest available delivery region. You should provide the IP address of the user that is taking the lab, not the IP address of your system.'
required: false
style: form
explode: true
schema:
type: string
example: 1.1.1.1
- name: regionId
in: query
description: 'When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the **DeliveryRegions** command or **Catalog** command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
required: false
style: form
explode: true
schema:
type: integer
format: int32
example: 1
- name: lang
in: query
description: |-
Allows you to override the language of the Instruction Set as well as the lab client UI language. This affects lab client UI elements like menus, tabs, and dialogs. Using this in connection with instructionsId will allow you to select launching labs with a specific Instruction Set in the specified language if they have been defined within the lab profile.
NOTE: If this parameter is omitted, or if the specified language is not specified on one of the Instruction sets in a lab profile, then the default language as defined in the Lab Profile ➔ Manage Instructions Sets option.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
required: false
style: form
explode: true
schema:
type: string
enum:
- en
- es
- fr
- de
- pt
- ja
- zh-hans
- zh-hant
- ko
example: en
- name: instructionsId
in: query
description: |-
When specified, Skillable will attempt to launch the lab and present the selected instructions. If not specified, or the instruction Id could not be found, the default instructions, as defined on the Lab Profile, will be used instead. This is a string that cannot contain spaces.
NOTE: To be able to see how to use this parameter, add the column "API Example" in the Manage Instruction Sets feature while editing the instructions.
required: false
style: form
explode: true
schema:
type: string
example: Base-01
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/LaunchForEventResponse'
examples:
Example of a successful lab instance launch within an event by external ID:
value:
Result: 1
Url: 'https://labondemand.com/console/setup/1b4909d6-0dbe-43db-9ab9-74ee4f913c4e'
LabInstanceId: 3896477
Expires: 1337977153
Status: 1
Error: null
deprecated: false
tags:
- Event Management
/GetEvaluationResponsesForEvent:
get:
summary: Returns evaluation data for a specific event
description: The **GetEvaluationResponsesForEvent** command returns evaluation responses for a specific event.
operationId: GetEvaluationResponsesForEvent
parameters:
- name: id
in: query
description: The unique identifier of the event.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 12345
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/GetEvaluationResponsesResponse'
examples:
Example of evaluation responses for an event:
value:
Responses:
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Multiple Choice, Multiple Answers'
Label: ''
A1DText: Answer 2
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, One Answer Per Row'
Label: ''
A1DText: Row 1
A1DWeight: 0
A2DText: Column 2
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, One Answer Per Row'
Label: ''
A1DText: Row 2
A1DWeight: 0
A2DText: Column 2
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, One Answer Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 2
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 1
A1DWeight: 0
A2DText: Column 1
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 3
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Single Textbox
Label: ''
A1DText: null
A1DWeight: null
A2DText: null
A2DWeight: null
TextAnswer: Just answer 2
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Multiple Textboxs
Label: ''
A1DText: Textbox 1
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: Textboxes 2 and 3 are blank.
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Multiple Textboxs
Label: ''
A1DText: Textbox 2
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: This is answer 2
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Multiple Textboxs
Label: ''
A1DText: Textbox 1
A1DWeight: 0
A2DText: null
A2DWeight: null
TextAnswer: This is answer 1
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: Single Textbox
Label: ''
A1DText: null
A1DWeight: null
A2DText: null
A2DWeight: null
TextAnswer: I answered 1 and 2
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 3
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
QuestionText: 'Matrix, Multiple Answers Per Row'
Label: ''
A1DText: Row 3
A1DWeight: 0
A2DText: Column 1
A2DWeight: 0
TextAnswer: null
- Number: Sample0101
Name: Sample Lab 0101
Tag: null
Start: 1333267200
End: 1333299600
Label: ''
QuestionText: 'Matrix, Multiple Answers Per Row'
A1DText: Row 2
A1DWeight: 0
A2DText: Column 3
A2DWeight: 0
TextAnswer: null
Error: null
Status: 1
deprecated: false
tags:
- Event Management
/catalog:
get:
summary: 'Returns all lab series, lab profiles, and delivery regions available to your organization'
description: 'The **Catalog** command will return all lab series, lab profiles, and delivery regions available to your organization. Lab profiles are generally grouped into series. Depending on your organization, you may have multiple physical delivery regions available to you.'
operationId: Catalog
parameters:
- name: includeAll
in: query
description: 'This parameter can usually be ignored. When not included (or passed as any value except 1), labs that are not currently available for launch will not be included in catalog results. If you want to include all lab profiles, regardless of whether they are enabled or are developmentally complete, you can pass includeAll=1.'
style: form
explode: true
schema:
type: integer
format: int32
example: 1
- name: LabSeriesID
in: query
description: 'By providing a LabSeriesID, the response will be filtered so that only lab profiles within the specified lab series will be returned.'
style: form
explode: true
schema:
type: integer
format: int32
example: 123456
- name: OrganizationID
in: query
description: 'By providing an OrganizationID, the response will be filtered so that only lab profiles belonging to the specified organization will be returned. Typically omitted.'
style: form
explode: true
schema:
type: integer
format: int32
example: 3
- name: tag
in: query
description: 'By providing a Tag, the response will be filtered so that only lab profiles within the specified lab series defined with the identified tag will be returned. Multiple Tag parameters can be defined.'
schema:
type: array
items:
type: string
example:
- mytag1
- mytag2
- name: LabSeriesCreatedAfter
in: query
description: The date/time (in Unix epoch time) that the Lab Series was created after.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: LabSeriesCreatedBefore
in: query
description: The date/time (in Unix epoch time) that the Lab Series was created before.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: LabSeriesModifiedAfter
in: query
description: The date/time (in Unix epoch time) that the Lab Series was modified after.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: LabSeriesModifiedBefore
in: query
description: The date/time (in Unix epoch time) that the Lab Series was modified before.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: LabProfileCreatedAfter
in: query
description: The date/time (in Unix epoch time) that the Lab Profile was created after.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: LabProfileCreatedBefore
in: query
description: The date/time (in Unix epoch time) that the Lab Profile was created before.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: LabProfileModifiedAfter
in: query
description: The date/time (in Unix epoch time) that the Lab Profile was modified after.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
- name: LabProfileModifiedBefore
in: query
description: The date/time (in Unix epoch time) that the Lab Profile was modified before.
required: false
style: form
explode: true
schema:
type: integer
format: int64
example: 1598465099
responses:
'200':
description: OK Response
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/CatalogResponse'
examples:
Example of successfully retrieving a catalog:
value:
LabSeries:
- Id: 1
Name: Demo Series 1
Description: A demo lab series.
NumTrainingDays: 5
AllowAssignments: true
AllowAssignmentsUntil: /Date(1534438041470)/
Created: 1689505754000
LastModified: 1692886226000
- Id: 2
Name: Demo Series 2
Description: Another demo lab series.
NumTrainingDays: 5
AllowAssignments: false
AllowAssignmentsUntil: null
Created: 1689505754000
LastModified: 1692886226000
LabProfiles:
- Id: 1
Name: Demo Lab 1
Number: ' Module 1'
Description: A demo lab.
SeriesId: 1
OrganizationId: 5
Objective: This is the HTML-formatted objective of the lab
Scenario: ' This is the HTML-formatted scenario of the lab'
DurationMinutes: 360
ExpectedDurationMinutes: 360
ResourceUnits: 11.25
PlatformId: 2
SharedClassEnvironmentRoleId: 0
SharedClassEnvironmentLabProfileId: 5
UsesRdp: false
Ram: 8192
Enabled: true
ReasonDisabled: null
HasIntegratedContent: true
DevelopmentStatusId: 10
RequiresBrowserPlugin: false
RequiresNestedVirtualization: false
NumPublicIpAddresses: 0
IsExam: false
PremiumPrice: 10
BasicPrice: 8
PricePerHour: 2.67
ExpectedCloudCost: 0
ParticipantLabPrice: 8
ExamPages: null
Tags:
- Tag1
- Tag2
CloudPlatformId: null
ContentVersion: 2
Created: /Date(1534438041470)/
LastModified: /Date(1623367490010)/
SCORMLastDownloaded: 1723899599000
InstructionSets:
- UId: 2376859
Id: Base-02
Language: es
Description: Advanced Instructions - Spanish
LabTitle: laboratorio avanzado
DurationMinutes: 60
OrganizationId: 158
- UId: 2376860
Id: Base-02
Language: de
Description: Advanced Instructions - German
LabTitle: Fortgeschrittenes Labor
DurationMinutes: 60
OrganizationId: 158
- Id: 2
Name: Demo Lab 2
Number: ' Module 2'
Description: Another demo lab.
SeriesId: 1
OrganizationId: 7
Objective: This is the HTML-formatted objective of the lab
Scenario: This is the HTML-formatted scenario of the lab
DurationMinutes: 360
ExpectedDurationMinutes: 360
ResourceUnits: 11.25
PlatformId: 2
SharedClassEnvironmentRoleId: 0
SharedClassEnvironmentLabProfileId: 9
UsesRdp: false
Ram: 4096
Enabled: true
ReasonDisabled: null
HasIntegratedContent: true
DevelopmentStatusId: 10
RequiresBrowserPlugin: false
NumPublicIpAddresses: 0
IsExam: false
PremiumPrice: 4
BasicPrice: 4
PricePerHour: 1.33
ExpectedCloudCost: 0
ParticipantLabPrice: 8
ExamPages: null
Tags:
- Tag1
- Tag2
CloudPlatformId: 10
ContentVersion: 2
Created: /Date(1534438041470)/
LastModified: /Date(1623367490010)
SCORMLastDownloaded: 1755781199000
InstructionSets:
- Id: Base-01
Language: en
Description: Base Instructions
LabTitle: General Lab
DurationMinutes: 60
OrganizationId: 158
- Id: Base-01
Language: fr
Description: Base Instructions - French
LabTitle: Laboratoire général
DurationMinutes: 60
OrganizationId: 158
DeliveryRegions:
- Id: 1
Name: North America
Description: North American datacenters.
- Id: 2
Name: Australia
Description: null
Status: 1
Error: null
deprecated: false
tags:
- Organization
/deliveryregions:
get:
summary: Returns all delivery regions available to your organization
description: |-
The **DeliveryRegions** command will return all delivery regions available to your organization.
**NOTE**: there are no query parameters for this command.
operationId: DeliveryRegions
parameters: []
responses:
'200':
description: OK Response.
headers: {}
content:
application/json:
schema:
$ref: '#/components/schemas/DeliveryRegionsResponse'
examples:
Example of a successful response listing all delivery regions available to your organization:
value:
DeliveryRegions:
- Id: 1
Name: North America
Description: North American datacenters.
- Id: 2
Name: Australia
Description: null
Status: 1
Error: null
deprecated: false
tags:
- Organization
components:
securitySchemes:
api_key:
name: api_key
type: apiKey
in: header
description: 'All methods require an API key, which must be obtained from Skillable. This key is used by Skillable to validate your account. The key can be passed as an HTTP request header with the header name "api_key".'
schemas:
CancelResponse:
type: object
properties:
Result:
type: integer
description: |-
Indicates the result of the lab instance cancellation.
0 = Error
1 = Success
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
description: ''
x-examples: {}
CatalogResponse:
type: object
x-examples: {}
properties:
LabSeries:
type: array
uniqueItems: true
minItems: 1
description: Array of Lab Series.
items:
type: object
properties:
Id:
type: integer
description: The unique identifier of the lab series.
Name:
type: string
minLength: 1
description: The name of the lab series.
Description:
type: string
minLength: 1
description: A brief description of the lab series.
NumTrainingDays:
type: integer
description: The number of training days expected to complete the series.
AllowAssignments:
type: boolean
description: Indicates that the Lab Series can be assigned.
AllowAssignmentsUntil:
type: string
description: The date (in Unix epoch time) after which assignments are no longer valid. A null value indicates that assignments do not expire.
nullable: true
Created:
type: integer
format: int64
description: The date (in Unix epoch time) that the Lab Series was created.
nullable: false
LastModified:
type: integer
format: int64
description: The date (in Unix epoch time) that the Lab Series was modified.
nullable: true
LabProfiles:
type: array
uniqueItems: true
minItems: 1
description: Array of Lab Profile.
items:
type: object
properties:
Id:
type: integer
description: The unique identifier of the lab profile.
Name:
type: string
minLength: 1
description: The name of the lab profile.
Number:
type: string
minLength: 1
description: 'The lab number (usually to identify a lab within a series, e.g. Module 1, Module 2, etc.).'
Description:
type: string
minLength: 1
description: A brief description of the lab profile.
nullable: true
SeriesId:
type: integer
description: The unique identifier of the series the lab profile belongs to.
format: int32
OrganizationId:
type: integer
description: The unique identifier of the Organization the lab profile belongs to.
format: int32
nullable: true
Objective:
type: string
minLength: 1
description: Text describing the objective of the lab.
nullable: true
Scenario:
type: string
minLength: 1
description: Text describing the scenario of the lab.
nullable: true
DurationMinutes:
type: integer
description: The maximum number of minutes a lab instance is allowed to run before it expires.
format: int32
ExpectedDurationMinutes:
type: integer
description: The expected number of minutes a user will take to complete the lab.
format: int32
ResourceUnits:
type: number
description: 'This response property is obsolete, and will show the value of RAM/32.'
deprecated: true
PlatformId:
type: integer
description: |-
The virtualization platform the lab is run on.
1 = None
2 = Hyper-V
3 = ESX
10 = Azure
11 = AWS
20 = Docker
SharedClassEnvironmentRoleId:
type: integer
description: |-
Indicates the role the lab plays in a shared environment
0 = None. This lab has no shared environment involvement at all. Most labs work this way.)
10 = Shared Environment. This lab provides the shared infrastructure that participant labs will connect into. Typically launched and maintained by an administrator or instructor.
20 = Participant. This lab will connect into shared environments and act as a participant. Typically launched by students.
format: int32
nullable: true
SharedClassEnvironmentLabProfileId:
type: integer
description: The id of the lab profile that will be used in the shared class environment.
format: int32
nullable: true
UsesRdp:
type: boolean
description: Indicates whether this lab profile uses Remote Desktop Protocol (RDP) or not.
Ram:
type: integer
format: int32
description: The amount of RAM in MB used by the lab.
Enabled:
type: boolean
description: Whether the lab is currently enabled for launch.
ReasonDisabled:
type: string
description: The reason the lab is disabled. Only supplied when the lab is not enabled.
nullable: true
HasIntegratedContent:
type: boolean
description: Indicates whether the lab has integrated digital lab (IDL) content.
DevelopmentStatusId:
type: integer
format: int32
description: |-
Indicates the development status of the lab. In general, a lab not marked as Complete should not be launched (though it can be).
1 = In Development
5 = AwaitingVerification
7 = InVerification
8 = VerificationFailed
10 = Complete
RequiresBrowserPlugin:
type: boolean
description: Indicates if this lab profile requires the use of a browser plugin.
RequiresNestedVirtualization:
type: boolean
description: Indicates if this lab profile requires the use of nested virtualization.
NumPublicIpAddresses:
type: integer
description: Indicates the number of public ip addresses used in this lab profile.
format: int32
nullable: false
IsExam:
type: boolean
description: Indicates whether the lab is scored.
PremiumPrice:
type: number
description: The consumption cost of the lab when premium experience features are included.
BasicPrice:
type: number
description: The consumption cost of the lab when only basic experience features are included.
PricePerHour:
type: number
description: The hourly consumption cost of the lab when only basic experience features are included.
format: float
ExpectedCloudCost:
type: number
description: The expected cloud cost of the lab.
format: float
nullable: true
ParticipantLabPrice:
type: number
description: The expected participant cost of the shared lab.
format: float
nullable: true
ExamPages:
type: array
description: This response property is obsolete and is not Populated.
deprecated: true
nullable: true
items:
type: string
Tags:
type: array
description: A list of tags associated with the lab profile.
items:
type: string
CloudPlatformId:
type: integer
description: |-
The cloud platform the lab is run on.
null = None
10 = Azure
11 = AWS
nullable: true
ContentVersion:
type: integer
format: int32
description: Indicates the content version (only applicable if HasIntegratedContent = true).
Created:
type: string
description: The date when the lab profile was created (in Unix epoch time).
LastModified:
type: string
description: The date when the lab profile was last modified (in Unix epoch time).
SCORMLastDownloaded:
type: integer
format: int64
description: The date when the SCORM package was last downloaded from the lab profile (in Unix epoch time).
InstructionSets:
type: array
description: Array of instruction sets for the lab profile.
items:
type: object
properties:
UId:
type: integer
description: The internal system id of the instruction set/language combination.
Id:
type: string
description: The display id of the instruction set.
Language:
type: string
description: |-
The lanuage code of the instruction set.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
Description:
type: string
description: The description of the instruction set.
LabTitle:
type: string
description: The title of the lab to be displayed in the lab instructions.
DurationMinutes:
type: integer
format: int32
description: The duration of the lab when using the specified instruction set.
OrganizationId:
type: integer
format: int32
description: The id of the organization to which the instruction set belongs.
Skills:
type: array
description: A list of the skills assigned to the lab profile and their basic details.
items:
type: object
x-stoplight:
id: fm124ryyegxxe
properties:
Id:
type: integer
description: The unique identifier of the skill.
x-stoplight:
id: f84t9srl00ywk
ExternalId:
type: string
description: The optional external unique identifier of the skill.
x-stoplight:
id: q9tm7qhkjungj
nullable: true
Name:
type: string
description: The name of the skill.
x-stoplight:
id: 8nwiatb3xgk7b
FrameworkId:
type: integer
description: The unique identifier of the framework of the skill.
x-stoplight:
id: 8ddop9v39rw9n
FrameworkName:
type: string
description: The name of the framework of the skill.
x-stoplight:
id: ssltuu0onknyk
DeliveryRegions:
type: array
uniqueItems: true
minItems: 1
description: Array of DeliveryRegion.
items:
type: object
properties:
Id:
type: integer
format: int32
description: 'The unique identifier of the delivery region. When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the **DeliveryRegions** command or **Catalog** command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
Name:
type: string
minLength: 1
description: The name of the delivery region.
Description:
type: string
minLength: 1
description: A brief description of the delivery region.
nullable: true
Status:
type: number
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
description: 'In the event of an error, this will contain a detailed error message.'
type: string
nullable: true
ClassResponse:
description: ''
type: object
x-examples: {}
properties:
Id:
type: string
minLength: 1
description: 'The unique identifier of the class, as represented in your organization.'
Name:
type: string
minLength: 1
description: The name of the class.
Start:
type: integer
format: int64
description: When the class starts (in Unix epoch time).
StartTime:
type: string
description: When the class starts (in Unix epoch time).
End:
type: integer
format: int64
description: When the class ends (in Unix epoch time).
EndTime:
type: string
minLength: 1
description: When the class ends (in Unix epoch time).
Expires:
type: integer
format: int64
description: When labs can no longer be associated with the class (in Unix epoch time).
ExpiresTime:
type: string
minLength: 1
description: When labs can no longer be associated with the class (in Unix epoch time).
Instructor:
type: object
description: The class instructor object.
properties:
Id:
type: string
minLength: 1
description: 'The unique identifier of the instructor, as represented in your external system.'
FirstName:
type: string
minLength: 1
description: The instructor's first name.
LastName:
type: string
minLength: 1
description: The instructor's last name.
Url:
type: string
description: |-
This response property is deprecated. Unless explicitly allowed by Skillable, this field will always be null.
To obtain a class URL, use the **ClassAccessUrl** API command.
deprecated: true
nullable: true
MaxActiveLabInstances:
type: integer
description: The maximum amount of active lab instances from the class that can be running.
AvailableLabs:
type: array
description: Array of Available Labs for the class.
items:
type: integer
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
ClassAccessUrlResponse:
description: ''
type: object
x-examples: {}
properties:
Url:
type: string
minLength: 1
description: The single use URL to access the class management page.
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
CloseUserAccountResponse:
description: ''
type: object
x-examples: {}
properties:
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message. The status property will also be set to Error (0).'
nullable: true
RowsAffected:
type: integer
format: int32
description: The number of database rows affected while removing all user data for the account.
DeleteClassResponse:
type: object
x-examples: {}
properties:
Success:
type: boolean
description: |-
Returns with true if the class was successfully deleted. This element **will only** be returned for successful class deletions.
true = Success
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
DeliveryRegionsResponse:
type: object
x-examples: {}
properties:
DeliveryRegions:
type: array
description: Array of DeliveryRegion objects.
items:
type: object
properties:
Id:
type: integer
description: The unique identifier of the delivery region.
Name:
type: string
description: The name of the delivery region.
Description:
type: string
description: A brief description of the delivery region.
nullable: true
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
DetailsResponse:
type: object
x-examples: {}
properties:
Id:
type: integer
description: The ID of the lab instance.
format: int64
LabProfileId:
type: integer
description: The ID of the lab profile.
format: int32
LabProfileName:
type: string
description: The name of the lab profile.
SeriesId:
type: integer
description: The ID of the lab series.
format: int32
nullable: true
SeriesName:
type: string
description: The name of the lab series.
nullable: true
UserId:
type: string
description: The ID you use to identify the user in your external system.
UserFirstName:
type: string
description: The user's first name.
UserLastName:
type: string
description: The user's last name.
UserEmail:
description: The user's email address.
type: string
x-stoplight:
id: qov42uvxpcdqz
nullable: true
ClassId:
description: The ID you use to identify the associated class in your external system.
type: string
nullable: true
ClassName:
description: The name of the class the lab instance is associated with.
type: string
nullable: true
PreinstanceStartTime:
type: integer
description: 'When the lab was pre-instanced, if pre-instancing occurred (in Unix epoch time).'
format: int64
x-stoplight:
id: jt1a5kl9l4hdv
Start:
type: integer
description: When the lab was started (in Unix epoch time).
format: int64
StartTime:
type: string
description: When the lab was started (in Unix epoch time).
Expires:
type: integer
description: When the lab expires (in Unix epoch time).
format: int64
ExpiresTime:
type: string
description: When the lab expires (in Unix epoch time).
End:
type: integer
description: When the lab ended (in Unix epoch time).
format: int64
nullable: true
EndTime:
type: string
description: When the lab ended (in Unix epoch time).
nullable: true
LastActivity:
type: integer
description: When student activity was last detected (in Unix epoch time).
format: int64
nullable: true
LastActivityTime:
type: string
description: When student activity was last detected (in Unix epoch time).
nullable: true
LastSave:
type: integer
description: When the lab was last saved (in Unix epoch time).
format: int64
nullable: true
LastSaveTime:
type: string
description: When the lab was last saved (in Unix epoch time).
nullable: true
SaveExpires:
type: integer
description: 'If the lab instance is saved, when the saved data will expire and be deleted (in Unix epoch time).'
format: int64
nullable: true
SaveExpiresTime:
type: string
description: 'If the lab instance is saved, when the saved data will expire and be deleted (in Unix epoch time).'
nullable: true
State:
type: string
description: |-
The state of the lab instance. Possible values:
Off
Provisioning Storage
Building
Building (Displayable)
Starting
Running
Saving
Saved
Resuming
Creating Snapshot
Applying Snapshot
Updating Lab Profile
Tearing Down
Cloning
Creating As Clone
Moving (Running)
Moving (Saved)
Creating New Lab Profile
Scoring
Scheduled
CompletionStatus:
type: string
description: |-
The student's completion status. Possible values:
Scheduled
Cancelled
Not Started
Incomplete
Complete
Storage Provisioning Failed
Lab Creation Failed
Resume Failed
Save Failed
Submitted For Grading
Grading In Progress
PoolMemberName:
description: 'If the lab contains a virtual machine pool, the name of the pool member that was used.'
type: string
nullable: true
LabHostId:
type: integer
description: The ID of the lab host machine.
format: int32
LabHostName:
type: string
description: The name of the lab host machine.
DatacenterId:
type: integer
description: The ID of the datacenter where the lab is located.
format: int32
DatacenterName:
type: string
description: The name of the datacenter where the lab is located.
DeliveryRegionId:
type: integer
description: 'When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the **DeliveryRegions** command or **Catalog** command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
format: int32
DeliveryRegionName:
type: string
description: The name of the delivery region where the lab is located.
PlatformId:
type: integer
description: |-
The platform the lab has hosted on. Possible values:
2 = Hyper-V
3 = ESX
20 = Docker
-1 = None
format: int32
LastSaveTriggerType:
description: |-
If the lab is currently saved, what triggered the save operation. Possible values:
Unknown
By Student
By Administrator
Automatic
From API Consumer
type: string
nullable: true
TimeInSession:
type: integer
description: The total number of seconds the user spent in the lab.
format: int32
TotalRunTime:
type: integer
description: 'The total number of seconds the lab was running, whether or not the student was present.'
format: int32
TimeRemaining:
type: integer
description: The total number of seconds remaining before the lab expires.
format: int32
InstructorName:
description: The name of the instructor for the associated class.
type: string
nullable: true
StartupDuration:
type: integer
description: The number of seconds it took the lab to start.
format: int32
nullable: true
Errors:
type: array
description: An array of all errors associated with the lab instance.
items:
type: object
Snapshots:
type: array
description: An array of snapshots created by the user within the lab. This contains an array of LabInstanceSnapshot objects.
items:
type: object
properties:
Name:
type: string
description: The name that the student gave to the snapshot.
Time:
type: integer
description: When the student created the snapshot (in Unix epoch time).
format: int64
Sessions:
type: array
description: An array of session times the student spent in the lab. This contains an array of LabInstanceSnapshot objects.
items:
type: object
properties:
Start:
type: integer
format: int64
description: When the session started (in Unix epoch time).
StartTime:
type: string
End:
type: integer
description: When the session ended (in Unix epoch time).
nullable: true
EndTime:
type: string
Notes:
type: array
description: Array of notes applicable to the lab instance.
items:
type: object
properties:
Time:
type: integer
TimeValue:
type: string
Title:
type: string
Text:
type: string
HasContent:
type: boolean
description: 'Indicates whether the lab has content, or simply houses virtual machines.'
Task:
description: 'If the lab has content (HasContent=true), indicates the name of the task the student is working on.'
type: string
nullable: true
Exercise:
description: 'If the lab has content (HasContent=true), indicates the name of the exercise the student is working on.'
type: string
nullable: true
NumTasks:
type: integer
description: 'If the lab has content (HasContent=true), indicates the total number of tasks in the lab.'
format: int32
NumCompletedTasks:
type: integer
description: 'If the lab has content (HasContent=true), indicates the number of tasks the student has completed.'
format: int32
TaskCompletePercent:
type: integer
description: 'If the lab has content (HasContent=true), indicates the percentage of tasks that the student has completed.'
format: int32
MonitorUrl:
description: |-
This response property is deprecated. Unless explicitly allowed by Skillable, this field will always be null.
To obtain an access URL, use the **LabMonitorUrl** command.
type: string
nullable: true
DetailsUrl:
type: string
description: The URL at which the lab instance details can be reviewed (required authentication to view).
RemoteController:
type: string
description: The name of the remote controller used by the user.
Tag:
type: string
description: Lab instance tag data.
nullable: true
BrowserUserAgent:
type: string
description: The browser user agent used by the user.
nullable: true
LastLatency:
type: integer
description: The last known latency value as measured between the client and the lab's datacenter.
format: int32
nullable: true
ExamPassed:
type: boolean
description: Indicates whether the user passed the lab. Will only be set if the lab has activities which have been scored.
nullable: true
ExamScore:
type: number
description: Indicates the lab score. Will only be set if the lab has activities which have been scored.
format: float
nullable: true
ExamMaxPossibleScore:
type: integer
description: Indicates the maximum possible score of the lab. Will only be set if the lab has activities which have been scored.
format: int32
nullable: true
ExamPassingScore:
type: integer
description: Indicates the minimum score required to pass the lab. Will only be set if the lab has activities which have been scored.
format: int32
nullable: true
ExamScoredById:
type: integer
description: The ID of the user that manually scored the lab. Will only be set if the lab has activities which have been scored manually. Automatically scored labs will not include a value for this property.
format: int64
nullable: true
ExamScoredByName:
description: The name of the user that manually scored the lab. Will only be set if the lab has activities which have been scored manually. Automatically scored labs will not include a value for this property.
type: string
nullable: true
ExamDetails:
description: Legacy Field from previous scoring engine.
type: string
nullable: true
ExamScoredDate:
type: integer
description: The date the lab was scored (in Unix epoch time).
format: int64
nullable: true
ExamScoredTime:
type: string
description: When the lab was scored (in Unix epoch time). Will only be set if the lab has activities which have been scored.
nullable: true
IsExam:
type: boolean
description: Indicates whether the lab is scored.
IpAddress:
type: string
description: The user's IP address. This is only included if the IP address was provided when the lab was launched.
nullable: true
Country:
type: string
description: The user's country as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Region:
type: string
description: The user's state/region as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
City:
type: string
description: The user's city as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Latitude:
type: number
description: The user's latitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
format: float
nullable: true
Longitude:
type: number
description: The user's longitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
format: float
nullable: true
PublicIpAddresses:
type: array
description: An array of public IP address information objects. This contains an array of IpAddressInfo objects.
items:
type: object
properties:
IpAddress:
type: string
description: An IP address.
MacAddress:
type: string
description: The MAC address of the NIC that the IP address was assigned to.
MachineInstanceName:
type: string
description: The name of the virtual machine instance that the IP address was assigned to.
CloudCredentials:
type: array
description: An array of credentials assigned to the lab instance. This contains an array of CloudCredential objects.
items:
type: object
properties:
PropertiesJson:
type: string
description: 'Json serialized properties for the credentials, as defined in the cloud credential pool.'
Expires:
type: integer
description: When the credentials expire (in Unix epoch time).
format: int64
DisplayName:
type: string
description: Friendly credential name displayed in the lab user interface.
Message:
type: string
nullable: true
CloudPortalCredentials:
type: array
description: An array of credentials assigned to the lab instance. This contains an array of CloudPortalCredential objects.
items:
type: object
properties:
CloudPlatform:
type: integer
format: int32
description: |-
The ID of the cloud platform to which the credentials belong.
10 = Azure
11 = AWS
PropertiesJson:
type: string
description: Json serialized properties for the credentials.
VirtualMachineCredentials:
type: array
description: An array of credentials used to access the virtual machines. This contains an array of VirtualMachineCredential objects.
items:
type: object
properties:
Id:
type: integer
description: ID of the virtual machine.
format: int32
Name:
type: string
description: Name of the virtual machine.
Username:
type: string
description: Username used to accces the virtual machine.
Password:
type: string
description: Password used to access the virtual machine.
CloudPlatformId:
type: integer
description: |-
The ID of the cloud platform. Possible values:
10 = Azure
11 = AWS
format: int32
nullable: true
ClientUrl:
description: |-
This response property is deprecated. Unless explicitly allowed by Skillable, this field will always be null.
To obtain an access URL, use the **LabAccessUrl** command.
type: string
nullable: true
ActivityResults:
type: array
description: An array of results for activities displayed in the lab instance. This contains an array of ActivityResult objects.
items:
type: object
properties:
ActivityId:
type: integer
description: ID of the Activity.
format: int32
ActivityName:
type: string
description: Name of the Activity.
Scored:
type: boolean
description: Whether the activity is scored.
Score:
type: number
description: The Score received by the student.
format: float
Passed:
type: boolean
description: Whether the student received a passing score on the activity.
ActivityType:
type: integer
description: |-
0 = Multiple choice, single answer
10 = Multiple choice, multiple answer
20 = Short answer, exact match
30 = Short answer, regex match
40 = Automated Activity
format: int32
TextResult:
type: string
description: The answer given by a student for Short Answer type questions.
nullable: true
UiResponse:
type: string
description: The response given to the student if specified in the question Answer Feedback.
nullable: true
AnswerResults:
type: array
description: A collection of the answers available in single-answer activities.
items:
type: object
properties:
AnswerId:
type: integer
format: int32
AnswerText:
type: string
Correct:
type: boolean
ScriptResults:
type: array
description: 'A collection of the results of the an automated activity. Includes Script ID, Score, Passing Status, UiResponse, ScriptResponse, PlatformError, and ScriptError.'
items:
type: object
DisplayScriptsAsTaskList:
type: boolean
description: Whether automated activities are scored as a TaskList or individually.
AnswerTexts:
type: array
description: A collection of the answers available in multi- answer activities.
items:
type: object
properties:
Correct:
type: boolean
AnswerId:
type: integer
format: int32
Text:
type: string
Chosen:
type: boolean
ScriptTexts:
type: array
description: The Activity ID and Text displayed in the Task List if Task List is enabled on the activity.
items:
type: object
ShowResultsInReports:
type: boolean
description: Whether results of the script are shown on the lab instance.
Skills:
type: array
description: The list of skills assigned to the lab activity and their basic details.
items:
type: object
x-stoplight:
id: tw3o9xfbb9uqw
properties:
Id:
type: integer
x-stoplight:
id: catx7lwp675c2
description: The unique identifier of the skill.
ExternalId:
type: string
x-stoplight:
id: 1dw7cr9zq6n4j
description: The optional external unique idf
nullable: true
Name:
type: string
x-stoplight:
id: wwdz0ww5ed8dt
description: The name of the skill.
FrameworkId:
type: integer
x-stoplight:
id: zxaqmzr9hb5f5
description: The unique identifier of the framework for this skill.
FrameworkName:
type: string
x-stoplight:
id: 5rrgxdmovdfzl
description: The name of the framework for this skill.
ActivityGroupResults:
type: array
description: An array of results for activities displayed in the lab instance Activity Group. This contains an array of ActivityResult objects.
items:
type: object
properties:
Id:
type: integer
format: int32
description: ID of the Activity Group.
Name:
type: string
description: Name of the Activity Group.
ScoreValueTotal:
type: number
format: float
description: The maximum score for the Activity Group.
AggregateScore:
type: number
format: float
description: The resultant score the of the Activity Group.
ActivityResults:
type: array
description: An array of results for activities displayed in the lab instance Activity Group. This contains an array of ActivityResult objects.
items:
type: object
properties:
ActivityId:
type: integer
format: int32
description: ID of the Activity.
ActivityName:
type: string
description: Name of the Activity.
Scored:
type: boolean
description: Whether the activity is scored.
Score:
type: integer
description: The Score received by the student.
Passed:
type: boolean
description: Whether the student received a passing score on the activity.
ActivityType:
type: integer
description: |-
0 = Multiple choice, single answer
10 = Multiple choice, multiple answer
20 = Short answer, exact match
30 = Short answer, regex match
40 = Automated Activity
TextResult:
type: string
description: The answer given by a student for Short Answer type questions.
UiResponse:
type: string
description: The response given to the student if specified in the question Answer Feedback.
AnswerResults:
type: array
description: A collection of the answers available in single-answer activities.
items:
type: object
ScriptResults:
type: array
description: 'A collection of the results of the an automated activity. Includes Script ID, Score, Passing Status, UiResponse, ScriptResponse, PlatformError, and ScriptError.'
items:
type: object
DisplayScriptsAsTaskList:
type: boolean
description: Whether automated activities are scored as a TaskList or individually.
AnswerTexts:
type: array
description: A collection of the answers available in multi- answer activities.
items:
type: object
properties:
'':
type: string
ScriptTexts:
type: array
description: The Activity ID and Text displayed in the Task List if Task List is enabled on the activity.
items:
type: object
ShowResultsInReports:
type: boolean
description: Whether results of the script are shown on the lab instance.
Skills:
type: array
description: The list of skills assigned to the lab activity and their basic details.
items:
type: object
x-stoplight:
id: smt3iskg6udmq
properties:
Id:
type: integer
x-stoplight:
id: f23m4pglbwax5
format: int32
description: The unique identifier of the skill.
ExternalId:
type: string
x-stoplight:
id: rp18u3c4rmuu7
description: The optional external unique identifier of the skill.
nullable: true
Name:
type: string
x-stoplight:
id: l4iwf8scj45cf
description: The name of the skill.
FrameworkId:
type: integer
x-stoplight:
id: kja02q4qxnmic
description: The unique identifier of the framework for this skill.
FrameworkName:
type: string
x-stoplight:
id: 1gl6wd3eszn87
description: The name of the framework for this skill.
EstimatedReadySeconds:
type: integer
description: An estimated number of seconds before the lab is ready.
format: int32
nullable: true
InstructionsId:
type: string
description: The ID of the Instructions used
nullable: true
Lang:
type: string
description: |-
The lanuage code of the instruction set.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
nullable: true
Skills:
type: array
description: The list of skills assigned to the lab profile and their basic details.
items:
type: object
x-stoplight:
id: jhkn2lvirpmlc
properties:
Id:
type: integer
description: The unique identifier of the skill.
ExternalId:
type: string
description: The optional external identifier of the skill.
x-stoplight:
id: 92n99z40okupz
nullable: true
Name:
type: string
description: The name of the skill.
x-stoplight:
id: h5so2p95worpy
FrameworkId:
type: integer
description: The unique identifier of the framework for this skill.
x-stoplight:
id: 6o4t6ti2lkgq9
FrameworkName:
type: string
description: The name of the framework for this skill.
x-stoplight:
id: jmbwbikfqhb32
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
format: int32
GetEvaluationResponsesResponse:
type: object
x-examples: {}
properties:
Responses:
type: array
items:
type: object
properties:
Number:
type: string
description: The lab number.
Name:
type: string
description: The lab name.
Tag:
type: string
description: The tag associated with the lab instance.
nullable: true
Start:
type: integer
description: The start time of the lab instance (in Unix epoch time).
format: int64
End:
type: integer
description: The end time of the lab instance (in Unix epoch time).
format: int64
QuestionText:
type: string
description: The text of the evaluation question.
Label:
type: string
description: The text of the evaluation question.
nullable: true
A1DText:
type: string
description: The text of the 1D answer option.
nullable: true
A1DWeight:
type: integer
description: The associated weight of the 1D answer option.
format: int32
nullable: true
A2DText:
type: string
description: The text of the 2D answer option.
nullable: true
A2DWeight:
type: integer
description: The associated weight of the 2D answer option.
format: int32
nullable: true
TextAnswer:
type: string
description: The manually entered answer to the evaluation question.
nullable: true
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
GetLabInstructionsResponse:
type: object
x-examples: {}
properties:
Instructions:
type: string
description: The IDLx instructions of a lab.
nullable: true
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
format: int32
description: |-
0 = Error
1 = Success
GetOrCreateClassResponse:
type: object
x-examples: {}
description: ''
properties:
Id:
type: string
description: 'The unique identifier of the class, as represented in your organization.'
Name:
type: string
description: The name of the class.
Start:
type: integer
description: When the class starts (in Unix epoch time).
format: int64
StartTime:
type: string
description: When the class starts (in Unix epoch time).
End:
type: integer
description: When the class ends (in Unix epoch time).
format: int64
EndTime:
type: string
description: When the class ends (in Unix epoch time).
Expires:
type: integer
description: When labs can no longer be associated with the class (in Unix epoch time).
format: int64
ExpiresTime:
type: string
description: When labs can no longer be associated with the class (in Unix epoch time).
Instructor:
type: object
nullable: true
properties:
Id:
type: string
description: The ID of the class instructor in your external system.
FirstName:
type: string
description: The first name of the class instructor.
LastName:
type: string
description: The last name of the class instructor.
Url:
type: string
description: |-
This response property is deprecated. Unless explicitly allowed by Skillable, this field will always be null.
To obtain a class URL, use the **ClassAccessUrl** API command.
nullable: true
MaxActiveLabInstances:
type: integer
description: The maximum number of active lab instances than can exist concurrently within this class context.
format: int32
nullable: true
AvailableLabs:
type: array
description: The IDs of labs available for launch within the class when using the class attendance UI directly in Skillable (generally not used for class deliveries managed outside of Skillable).
items:
type: integer
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
format: int32
Error:
description: 'In the event of an error, this will contain a detailed error message.'
type: string
nullable: true
LabAccessUrlResponse:
type: object
x-examples: {}
properties:
Url:
type: string
description: The single use URL to access the lab instance.
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
LabMonitorUrlResponse:
type: object
x-examples: {}
properties:
Url:
type: string
description: The single use URL to monitor a lab instance
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
LabProfileResponse:
type: object
x-examples: {}
properties:
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
format: int32
Id:
type: integer
description: The unique identifier of the lab profile.
format: int32
Name:
type: string
description: The name of the lab profile.
Number:
type: string
description: 'The lab number (usually to identify a lab within a series, e.g. Module 1, Module 2, etc.).'
nullable: true
PlatformId:
type: integer
description: |-
The virtualization platform the lab is run on.
1 = None
2 = Hyper-V
3 = ESX
10 = Azure
11 = AWS
20 = Docker
format: int32
Platform:
type: integer
description: 'This response property is obsolete, and will show the same value as PlatformId.'
format: int32
deprecated: true
CloudPlatformId:
type: integer
description: |-
The cloud platform the lab is run on.
null = None
10 = Azure
11 = AWS
format: int32
nullable: true
SeriesId:
type: integer
description: The unique identifier of the series the lab profile belongs to.
format: int32
nullable: true
OrganizationId:
type: integer
description: The unique identifier of the Organization the lab profile belongs to.
format: int32
nullable: true
Enabled:
type: boolean
description: Whether the lab is currently enabled for launch.
ReasonDisabled:
type: string
description: The reason the lab is disabled. Only supplied when the lab is not enabled.
nullable: true
DevelopmentStatusId:
type: integer
description: |-
Indicates the development status of the lab. In general, a lab not marked as Complete should not be launched (though it can be).
1 = In Development
5 = AwaitingVerification
7 = InVerification
8 = VerificationFailed
10 = Complete
format: int32
DevelopmentStatus:
type: integer
description: 'This response property is obsolete, and will show the same values as DevelopmentStatusId.'
format: int32
deprecated: true
RequiresBrowserPlugin:
type: boolean
description: Indicates if this lab profile requires the use of a browser plugin.
RequiresNestedVirtualization:
type: boolean
description: Indicates if this lab profile requires the use of nested virtualization.
NumPublicIpAddresses:
type: integer
description: Indicates the number of public ip addresses used in this lab profile.
format: int32
nullable: false
Description:
type: string
description: A brief description of the lab profile.
nullable: true
Objective:
type: string
description: Text describing the objective of the lab.
nullable: true
Scenario:
type: string
description: Text describing the scenario of the lab.
nullable: true
DurationMinutes:
type: integer
description: The maximum number of minutes a lab instance is allowed to run before it expires.
format: int32
ExpectedDurationMinutes:
type: integer
description: 'This response property is obsolete, and will reflect the same value shown for DurationMinutes.'
format: int32
deprecated: true
ResourceUnits:
type: integer
description: 'This response property is obsolete, and will show the value of RAM/32.'
format: int32
deprecated: true
Ram:
type: integer
description: The amount of RAM in MB used by the lab.
format: int32
HasIntegratedContent:
type: boolean
description: Indicates whether the lab has integrated digital lab (IDL) content.
ContentVersion:
type: integer
description: Indicates the content version (only applicable if HasIntegratedContent = true).
format: int32
IsExam:
type: boolean
description: Indicates whether the lab is scored.
PremiumPrice:
type: number
description: The consumption cost of the lab when premium experience features are included.
format: float
BasicPrice:
type: number
description: The consumption cost of the lab when only basic experience features are included.
format: float
PricePerHour:
type: number
description: The hourly consumption cost of the lab when only basic experience features are included.
format: float
ExpectedCloudCost:
type: number
description: The expected cloud cost of the lab.
format: float
nullable: true
ParticipantLabPrice:
type: number
description: The expected participant cost of the shared lab.
format: float
nullable: true
SharedClassEnvironmentRoleId:
type: integer
description: |-
Indicates the role the lab plays in a shared environment.
0 = None. This lab has no shared environment involvement at all. Most labs work this way.)
10 = Shared Environment. This lab provides the shared infrastructure that participant labs will connect into. Typically launched and maintained by an administrator or instructor.
20 = Participant. This lab will connect into shared environments and act as a participant. Typically launched by students.
format: int32
nullable: true
SharedClassEnvironmentRole:
type: integer
description: 'This response property is obsolete, and will show the same value as SharedClassEnvironmentRoleId.'
format: int32
deprecated: true
nullable: true
SharedClassEnvironmentLabProfileId:
type: integer
description: The id of the lab profile that will be used in the shared class environment.
format: int32
nullable: true
UsesRdp:
type: boolean
description: Indicates whether this lab profile uses Remote Desktop Protocol (RDP) or not.
ExamPages:
type: array
description: This response property is obsolete and is not Populated.
deprecated: true
items:
type: string
Tags:
type: array
description: A list of tags associated with the lab profile.
items:
type: string
InstructionSets:
type: array
description: A list of the available instruction sets and their basic details for the lab profile.
items:
type: object
properties:
Id:
type: string
description: The unique identifier of the instruction set.
nullable: false
Language:
type: string
description: |-
The character code for the language of the instruction set.
en = English
es = Spanish
fr = French
de = German
pt = Portuguese
ja = Japanese
zh-hans = Simplified Chinese
zh-hant = Traditional Chinese
ko = Korean
Description:
type: string
description: The description of the instruction set.
LabTitle:
type: string
description: The title of the lab as used in this instruction set.
DurationMinutes:
type: integer
description: 'The duration of the lab, in minutes, when using this instruction set.'
OrganizationId:
type: integer
description: The unique identifier of the organization to which this instruction set belongs.
Created:
type: integer
format: int64
description: The date when the lab profile was created (in Unix epoch time).
LastModified:
type: integer
format: int64
description: The date when the lab profile was last modified (in Unix epoch time).
SCORMLastDownloaded:
type: integer
format: int64
description: The date when the SCORM package was last downloaded for the lab profile (in Unix epoch time).
Skills:
type: array
description: A list of the skills assigned to the lab profile and their basic details.
items:
type: object
x-stoplight:
id: 0xdoqzxrf3l4q
properties:
Id:
type: integer
description: The unique identifier of the skill.
nullable: false
ExternalId:
type: string
description: The optional external unique identifier of the skill.
x-stoplight:
id: 1p51mvcaxobhb
nullable: true
Name:
type: string
description: The name of the skill.
x-stoplight:
id: s9j7rh2zwuc1l
FrameworkId:
type: integer
description: The unique identifier of the framework for this skill.
x-stoplight:
id: q8chtpypezthy
FrameworkName:
type: string
description: The name of the framework for this skill.
x-stoplight:
id: hcbixaiixlte1
LatestResultsResponse:
type: object
x-examples: {}
properties:
Results:
type: array
description: Array of LabResult.
items:
type: object
properties:
LabInstanceId:
type: integer
description: The unique identifier of the lab instance.
format: int64
LabProfileId:
type: integer
format: int32
description: The unique identifier of the lab profile the lab instance is based on.
Start:
type: integer
format: int64
description: When the lab was started (in Unix epoch time).
End:
type: integer
format: int64
description: When the lab ended (in Unix epoch time).
nullable: true
LastActivity:
type: integer
format: int64
description: The last time the student interacted with the lab (in Unix epoch time).
nullable: true
UserId:
type: string
description: 'The unique identifier of the user, as represented in your system.'
nullable: true
ClassId:
description: 'The unique identifier of the class the lab is related to, as represented in your system.'
type: string
nullable: true
CompletionStatus:
type: integer
description: |-
1 = Cancelled
2 = No Show
3 = Incomplete
4 = Complete
10 = Storage Provisioning Failed
20 = Lab Creation Failed
30 = Resume Failed
40 = Save Failed
50 = Submitted For Grading
60 = Grading In Progress
format: int32
TotalRunTimeSeconds:
type: integer
description: 'The total number of seconds the lab was running, whether or not the student was present.'
format: int32
TaskCompletePercent:
type: integer
format: int32
description: 'If the lab has integrated tasks, the percentage of tasks that the user has completed.'
IsExam:
type: boolean
description: Indicates whether the lab is scored.
nullable: true
ExamPassed:
type: boolean
description: Indicates whether the user passed the lab. Will only be set if the lab has activities which have been scored.
nullable: true
ExamScore:
type: integer
format: int32
description: Indicates the lab score. Will only be set if the lab has activities which have been scored.
nullable: true
ExamMaxPossibleScore:
type: integer
format: int32
description: Indicates the maximum possible score of the lab. Will only be set if the lab has activities which have been scored.
nullable: true
ExamPassingScore:
type: integer
format: int32
description: Indicates the minimum score required to pass the lab. Will only be set if the lab has activities which have been scored.
nullable: true
IpAddress:
type: string
description: The user's IP address. This is only included if the IP address was provided when the lab was launched.
nullable: true
Country:
type: string
description: The user's country as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Region:
type: string
description: The user's state/region as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
City:
type: string
description: The user's city as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Latitude:
type: number
description: The user's latitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Longitude:
type: number
description: The user's longitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
LabHostId:
type: integer
description: The ID of the lab host server that the lab instance is housed on.
DatacenterId:
type: integer
description: The ID of the datacenter that the lab instance is located in.
DeliveryRegionId:
type: integer
description: 'When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the DeliveryRegions command or Catalog command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
LaunchResponse:
type: object
x-examples: {}
properties:
Result:
type: integer
format: int32
description: |-
Result of the launch command. Possible values are:
0 = Error
1 = Success
2 = User has too many active labs
3 = Insufficient host resources
5 = API integration has too many active labs
6 = User has a saved instance of this lab
7 = API integration doesn't have enough available RAM
10 = User doesn't have enough available RAM
20 = User's organization has too many active labs
30 = User's organization doesn't have enough available RAM
40 = Lab profile has too many active instances
50 = Lab organization doesn't have enough available RAM
60 = Lab organization has too many active instances
70 = Lab series has too many active instances
80 = Lab series doesn't have enough available RAM
90 = Too many labs within the specified class are currently active for another lab to be launched.
100 = User has launched the maximum number of instances of this lab profile.
110 = This lab is not currently available for launch via API. It is awaiting security review.
120 = Lab instance is not in the correct state to perform the requested action.
130 = This lab is not currently available for launch via API. It is awaiting security review.
140 = The request is invalid or contains invalid parameters.
150 = The participant lab instance cannot be launched because the shared class environment is not currently available.
160 = The lab cannot be launched because the user is required to provide additional information.
Url:
type: string
description: A URL where the lab can be viewed by the user.
LabInstanceId:
type: integer
description: The Id assigned to the new lab instance.
format: int64
Expires:
type: integer
format: int64
description: When the lab will expire (in Unix epoch time).
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
LaunchForEventResponse:
type: object
x-examples: {}
properties:
Result:
type: integer
format: int32
description: |-
Result of the launch command. Possible values are:
0 = Error
1 = Success
2 = User has too many active labs
3 = Insufficient host resources
5 = API integration has too many active labs
6 = User has a saved instance of this lab
7 = API integration doesn't have enough available RAM
10 = User doesn't have enough available RAM
20 = User's organization has too many active labs
30 = User's organization doesn't have enough available RAM
40 = Lab profile has too many active instances
50 = Lab organization doesn't have enough available RAM
60 = Lab organization has too many active instances
70 = Lab series has too many active instances
80 = Lab series doesn't have enough available RAM
Url:
type: string
description: A URL where the lab can be viewed by the user.
LabInstanceId:
type: integer
description: The Id assigned to the new lab instance.
format: int64
Expires:
type: integer
format: int64
description: When the lab will expire (in Unix epoch time).
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
ResultResponse:
type: object
x-examples: {}
properties:
LabProfileId:
type: integer
description: The unique identifier of the lab profile the lab is based on.
format: int32
Start:
type: integer
description: When the lab instance was started (in Unix epoch time).
format: int64
End:
type: integer
description: When the lab instance was ended (in Unix epoch time).
format: int64
nullable: true
LastActivity:
type: integer
description: The last time the student interacted with the lab (in Unix epoch time).
format: int64
nullable: true
UserId:
type: string
description: The user ID as represented in your organization.
nullable: true
ClassId:
type: string
description: The class ID as represented in your organization.
nullable: true
CompletionStatus:
type: integer
description: |-
The status when the lab instance is completed. Possible values are:
1 = Cancelled
2 = No Show
3 = Incomplete
4 = Complete
10 = Storage Provisioning Failed
20 = Lab Creation Failed
30 = Resume Failed
40 = Save Failed
50 = Submitted For Grading
60 = Grading In Progress
format: int32
TotalRunTimeSeconds:
type: integer
description: 'The total number of seconds the lab was running, whether or not the student was present.'
format: int32
TaskCompletePercent:
type: integer
description: 'If the lab has integrated tasks, the percentage of tasks that the user has completed.'
format: int32
IsExam:
type: boolean
description: Indicates whether the lab is scored.
ExamPassed:
type: boolean
description: Indicates whether the user passed the lab. Will only be set if the lab has activities which have been scored.
nullable: true
ExamScore:
type: number
description: Indicates the lab score. Will only be set if the lab has activities which have been scored.
format: float
nullable: true
ExamMaxPossibleScore:
type: integer
description: Indicates the maximum possible score of the lab. Will only be set if the lab has activities which have been scored.
format: int32
nullable: true
ExamPassingScore:
type: integer
description: Indicates the minimum score required to pass the lab. Will only be set if the lab has activities which have been scored.
format: int32
nullable: true
IpAddress:
type: string
description: The user's IP address. This is only included if the IP address was provided when the lab was launched.
nullable: true
Country:
type: string
description: The user's country as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Region:
type: string
description: The user's state/region as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
City:
type: string
description: The user's city as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Latitude:
type: number
description: The user's latitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
format: float
nullable: true
Longitude:
type: number
description: The user's longitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
format: float
nullable: true
LabHostId:
type: integer
description: The ID of the lab host server that the lab instance is housed on.
format: int32
nullable: true
DatacenterId:
type: integer
description: The ID of the datacenter that the lab instance is located in.
format: int32
nullable: true
DeliveryRegionId:
type: integer
description: 'When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the **DeliveryRegions** command or **Catalog** command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
format: int32
nullable: true
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
format: int32
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
ResultsResponse:
type: object
x-examples: {}
properties:
Results:
type: array
description: Array of LabResult objects.
items:
type: object
properties:
LabInstanceId:
type: integer
format: int64
description: The unique identifier of the lab instance.
LabProfileId:
type: integer
format: int32
description: The unique identifier of the lab profile the lab instance is based on.
Start:
type: integer
format: int64
description: When the lab was started (in Unix epoch time).
End:
type: integer
format: int64
description: When the lab was started (in Unix epoch time).
nullable: true
LastActivity:
type: integer
format: int64
description: The last time the student interacted with the lab (in Unix epoch time).
nullable: true
UserId:
type: string
description: 'The unique identifier of the user, as represented in your system.'
nullable: true
ClassId:
type: string
description: 'The unique identifier of the class the lab is related to, as represented in your system.'
nullable: true
CompletionStatus:
type: integer
description: |-
The status when the lab instance is completed. Possible values are:
1 = Cancelled
2 = No Show
3 = Incomplete
4 = Complete
10 = Storage Provisioning Failed
20 = Lab Creation Failed
30 = Resume Failed
40 = Save Failed
50 = Submitted For Grading
60 = Grading In Progress
format: int32
TotalRunTimeSeconds:
type: integer
format: int32
description: 'The total number of seconds the lab was running, whether or not the student was present.'
TaskCompletePercent:
type: integer
format: int32
description: 'If the lab has integrated tasks, the percentage of tasks that the user has completed.'
IsExam:
type: boolean
description: Indicates whether the lab is scored.
ExamPassed:
type: boolean
description: Indicates whether the user passed the lab. Will only be set if the lab has activities which have been scored.
nullable: true
ExamScore:
type: number
description: Indicates the lab score. Will only be set if the lab has activities which have been scored.
format: float
nullable: true
ExamMaxPossibleScore:
type: integer
format: int32
description: Indicates the maximum possible score of the lab. Will only be set if the lab has activities which have been scored.
nullable: true
ExamPassingScore:
type: integer
format: int32
description: Indicates the minimum score required to pass the lab. Will only be set if the lab has activities which have been scored.
nullable: true
IpAddress:
type: string
description: The user's IP address. This is only included if the IP address was provided when the lab was launched.
nullable: true
Country:
type: string
description: The user's country as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Region:
type: string
description: The user's state/region as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
City:
type: string
description: The user's city as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Latitude:
type: number
format: float
description: The user's latitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
Longitude:
type: number
format: float
description: The user's longitude as determined by IP address geolocation. This is only included if the IP address was provided when the lab was launched.
nullable: true
LabHostId:
type: integer
description: The ID of the lab host server that the lab instance is housed on.
nullable: true
DatacenterId:
type: integer
description: The ID of the datacenter that the lab instance is located in.
nullable: true
DeliveryRegionId:
type: integer
description: 'When specified, Skillable will attempt to launch the lab in the specified delivery region if a suitable host in that region is available and all required storage is available in that region. Delivery regions can be found using the **DeliveryRegions** command or **Catalog** command. Using the ipAddress parameter will result in a more reliable geo-location of the lab for the end user.'
nullable: true
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
ReplacementTokensResponse:
type: object
x-examples: {}
properties:
ReplacementTokens:
type: array
description: Array of ReplacementToken objects.
items:
type: object
properties:
Token:
type: string
description: The token name.
Replacement:
type: string
description: The replacement value for the token.
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
ResumeResponse:
type: object
x-examples: {}
properties:
Result:
type: integer
format: int32
description: |-
Result of the Resume command. Possible values are:
0 = Error
1 = Success
2 = User has too many active labs
3 = Insufficient host resources
5 = API integration has too many active labs
6 = User has a saved instance of this lab
7 = API integration doesn't have enough available RAM
10 = User doesn't have enough available RAM
20 = User's organization has too many active labs
30 = User's organization doesn't have enough available RAM
40 = Lab profile has too many active instances
50 = Lab organization doesn't have enough available RAM
60 = Lab organization has too many active instances
70 = Lab series has too many active instances
80 = Lab series doesn't have enough available RAM
Url:
type: string
description: A URL where the lab can be viewed by the user.
LabProfileId:
type: integer
description: The Id of the resumed lab profile.
format: int32
Expires:
type: integer
format: int64
description: When the lab will expire (in Unix epoch time).
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
RunningAndSavedLabsResponse:
type: object
x-examples: {}
properties:
RunningLabs:
type: array
description: Array of LabInstance objects for running labs.
items:
type: object
properties:
Id:
type: integer
format: int64
description: The unique identifier of the lab instance.
UserId:
type: string
description: The ID of the user the lab instance belongs to.
UserFirstName:
type: string
description: The first name of the user the lab instance belongs to.
UserLastName:
type: string
description: The last name of the user the lab instance belongs to.
LabProfileId:
type: integer
format: int32
description: The unique identifier of the lab profile the lab instance is based on.
LabProfileName:
type: string
description: The number/code of the lab profile the lab instance is based on.
LabProfileNumber:
type: string
description: The name of the lab profile the lab instance is based on.
Start:
type: integer
format: int64
description: When the lab instance was started (in Unix epoch time).
Expires:
type: integer
format: int64
description: When the lab will expire (in Unix epoch time).
IsExam:
type: boolean
description: Indicates whether the lab is scored.
SavedLabs:
type: array
description: Array of LabInstance objects for saved labs.
items:
type: object
properties:
Id:
type: integer
format: int64
description: The unique identifier of the lab instance.
UserId:
type: string
description: The ID of the user the lab instance belongs to.
UserFirstName:
type: string
description: The first name of the user the lab instance belongs to.
UserLastName:
type: string
description: The last name of the user the lab instance belongs to.
LabProfileId:
type: integer
format: int32
description: The unique identifier of the lab profile the lab instance is based on.
LabProfileName:
type: string
description: The number/code of the lab profile the lab instance is based on.
LabProfileNumber:
type: string
description: The name of the lab profile the lab instance is based on.
Start:
type: integer
format: int64
description: When the lab instance was started (in Unix epoch time).
Expires:
type: integer
format: int64
description: When the lab will expire (in Unix epoch time).
IsExam:
type: boolean
description: Indicates whether the lab is scored.
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
SaveResponse:
type: object
x-examples: {}
properties:
Result:
type: integer
format: int32
description: |-
Result of the Save command. Possible values are:
0 = Unknown Error
1 = Success
2 = Invalid State
Expires:
type: integer
format: int32
description: When the saved lab will expire (in Unix epoch time).
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
ScoreActivitiesResponse:
type: object
x-examples: {}
properties:
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
SendNotificationResponse:
type: object
x-examples: {}
properties:
name:
type: string
description: 'An optional name for the notification. If you name the notification, subsequent SendNotification commands using the same labInstanceId and name will cause the existing notification to be updated. It is also possible to delete a named notification by sending the name along with no notification value.'
Id:
type: integer
description: The unique identifier of the notification.
format: int32
Result:
type: integer
description: |-
Result of the sending the notification.
0 = Error
1 = Success
format: int32
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
format: int32
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
StatsResponse:
type: object
x-examples: {}
properties:
NumActive:
type: integer
format: int32
description: 'The number of currently active labs (starting, running, tearing down, saving, resuming, etc).'
NumSaved:
type: integer
format: int32
description: The number of currently saved labs.
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
UpdateClassResponse:
type: object
x-examples: {}
properties:
Success:
type: boolean
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
UpdateLabInstructionsResponse:
type: object
x-examples: {}
properties:
Status:
type: integer
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
format: int32
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true
UserRunningAndSavedLabsResponse:
type: object
x-examples: {}
properties:
RunningLabs:
type: array
description: Array of RunningLab objects.
items:
type: object
properties:
LabInstanceId:
type: integer
format: int64
description: The unique identifier of the lab instance.
LabProfileId:
type: integer
format: int32
description: The unique identifier of the lab profile the lab instance is based on.
LabProfileName:
type: string
description: The name of the lab profile the lab instance is based on.
LabProfileNumber:
type: string
description: The number/code of the lab profile the lab instance is based on.
Start:
type: integer
format: int64
description: When the lab instance was started (in Unix epoch time).
Expires:
type: integer
format: int64
description: When the lab will expire (in Unix epoch time).
Url:
description: 'This response property is deprecated. Unless explicitly allowed by Skillable, this field will always be null. To obtain an access URL, use the **LabAccessUrl** command.'
type: string
nullable: true
IsExam:
type: boolean
description: Indicates whether the lab is scored.
SavedLabs:
type: array
description: Array of SavedLab objects.
items:
type: object
properties:
LabInstanceId:
type: integer
format: int64
description: The unique identifier of the lab instance.
LabProfileId:
type: integer
format: int32
description: The unique identifier of the lab profile the lab instance is based on.
LabProfileName:
type: string
description: The name of the lab profile the lab instance is based on.
LabProfileNumber:
type: string
description: The number/code of the lab profile the lab instance is based on.
MinutesRemaining:
type: integer
format: int32
description: The number of minutes remaining for the student to complete the lab (when resumed).
Saved:
type: integer
format: int64
description: When the lab was saved (in Unix epoch time).
Expires:
type: integer
format: int64
description: 'When the saved lab will expire (in Unix epoch time). The student must resume the lab for this date, or the lab will be deleted.'
SaveInProgress:
type: boolean
description: True/false indicating whether the lab is currently in the process of being saved.
IsExam:
type: boolean
description: Indicates whether the lab is scored.
SubmittedForGrading:
type: boolean
description: Indicates whether the lab has been submitted for grading and is in a saved state while awaiting scoring. This will only be true for scored labs.
Status:
type: integer
format: int32
description: |-
Indicates the status of the API request.
0 = Error
1 = Success
Error:
type: string
description: 'In the event of an error, this will contain a detailed error message.'
nullable: true