Immersive - API V1
Our API allows you to integrate your existing systems and tools with our platform. Once authenticated, you can access your organisation's data by making calls in GraphQL format.
Note: This version of the API is no longer being actively maintained. Active enhancements are ongoing for API V2.
Terms of Service
API Endpoints
https://api.immersivelabs.online/v1/graphql
Authentication
You can generate an API key from the API Settings page in the platform. You will be provided an Access key and a Secret token which should be used in the call below:
curl \
-X POST \
-d 'username={your_access_key}&password={your_secret_token}' \
https://api.immersivelabs.online/v1/public/tokens
This will generate a token:
{
"username": "{your_access_key}",
"organisationId": 1,
"accessToken": "{token_uuid}",
"expiresAt": "2021-06-19T15:19:10.000+00:00",
"expiresIn": 604799
}
The token will expire after 30 minutes.
GraphQL
Once you have a token, you will be able to make calls about your organisation in GraphQL format. An example query will be:
query {
viewer {
organisation {
id
}
}
}
An example curl command for the query above will be:
curl \
-X POST https://api.immersivelabs.online/v1/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {token}" \
-d @- << EOF
{"query":"
query {
viewer {
organisation {
id
}
}
}
"}
Which will return a result like this:
{
"data": {
"viewer": {
"organisation": {
"id": "immersivelabs"
}
}
}
}
Changelog
Deprecation Notice
The SeriesType
(field name: series
) is deprecated and is planned to be removed by the 1st May 2024. Please update your code and schema to reference the CollectionType
or field name: collection
.
Queries
achievement
Description
Individual Achievement found by GlobalID
Response
Returns an Achievement
Arguments
Name | Description |
---|---|
id - ID!
|
Example
Query
query achievement($id: ID!) {
achievement(id: $id) {
author {
...AccountFragment
}
earnedAt
id
labContainer {
...CompletableLabContainerFragment
}
pointsAchieved
}
}
Variables
{"id": "4"}
Response
{
"data": {
"achievement": {
"author": Account,
"earnedAt": "2007-12-03T10:15:30Z",
"id": "4",
"labContainer": CompletableLabContainer,
"pointsAchieved": 987
}
}
}
assignableContent
Description
A single top-level instance of some assignable content
Response
Returns an AssignableContent
Arguments
Name | Description |
---|---|
assignableContent - AssignableContentInput!
|
Example
Query
query assignableContent($assignableContent: AssignableContentInput!) {
assignableContent(assignableContent: $assignableContent) {
id
}
}
Variables
{"assignableContent": AssignableContentInput}
Response
{"data": {"assignableContent": {"id": 4}}}
collection
Description
Individual Collection by slug
Response
Returns a Collection
Arguments
Name | Description |
---|---|
id - ID!
|
Example
Query
query collection($id: ID!) {
collection(id: $id) {
badge {
...AssetFragment
}
categories {
...CategoryFragment
}
completedAt
containsUnlicensedLabs
cpeCredits
cyberRoles {
...CyberRoleFragment
}
description
difficulty
id
labsConnection {
...LabConnectionFragment
}
points
realId
timeRequired
title
type
}
}
Variables
{"id": "4"}
Response
{
"data": {
"collection": {
"badge": Asset,
"categories": [Category],
"completedAt": "2007-12-03T10:15:30Z",
"containsUnlicensedLabs": true,
"cpeCredits": 123,
"cyberRoles": [CyberRole],
"description": "abc123",
"difficulty": "BEGINNER",
"id": "4",
"labsConnection": LabConnection,
"points": 987,
"realId": "4",
"timeRequired": 987,
"title": "abc123",
"type": "COLLECTION"
}
}
}
cyberRole
Description
Individual Cyber Role by ID / Slug
Example
Query
query cyberRole($id: ID!) {
cyberRole(id: $id) {
badge {
...AssetFragment
}
completedAt
cpeCredits
description
difficulty
id
points
timeRequired
title
}
}
Variables
{"id": "4"}
Response
{
"data": {
"cyberRole": {
"badge": Asset,
"completedAt": "2007-12-03T10:15:30Z",
"cpeCredits": 987,
"description": "xyz789",
"difficulty": "BEGINNER",
"id": 4,
"points": 123,
"timeRequired": 123,
"title": "xyz789"
}
}
}
labsConnection
Description
All Labs, searchable and sortable - as a connection with filter information
Response
Returns a FilteredLabsConnection!
Arguments
Name | Description |
---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
filters - LabFiltersInput
|
|
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
Example
Query
query labsConnection(
$after: String,
$before: String,
$filters: LabFiltersInput,
$first: Int,
$last: Int
) {
labsConnection(
after: $after,
before: $before,
filters: $filters,
first: $first,
last: $last
) {
currentPage
edges {
...FilteredLabsEdgeFragment
}
nodes {
...LabFragment
}
pageInfo {
...PageInfoFragment
}
totalCount
}
}
Variables
{
"after": "abc123",
"before": "abc123",
"filters": LabFiltersInput,
"first": 123,
"last": 987
}
Response
{
"data": {
"labsConnection": {
"currentPage": 987,
"edges": [FilteredLabsEdge],
"nodes": [Lab],
"pageInfo": PageInfo,
"totalCount": 123
}
}
}
oidcLoginRequest
Response
Returns an OIDCLoginRequest
Arguments
Name | Description |
---|---|
challenge - String!
|
Example
Query
query oidcLoginRequest($challenge: String!) {
oidcLoginRequest(challenge: $challenge) {
initiatedBy
}
}
Variables
{"challenge": "abc123"}
Response
{
"data": {
"oidcLoginRequest": {
"initiatedBy": "abc123"
}
}
}
series
Description
Individual Series by slug
Example
Query
query series($id: ID!) {
series(id: $id) {
badge {
...AssetFragment
}
categories {
...CategoryFragment
}
completedAt
containsUnlicensedLabs
cpeCredits
cyberRoles {
...CyberRoleFragment
}
description
difficulty
id
labsConnection {
...LabConnectionFragment
}
points
realId
timeRequired
title
type
}
}
Variables
{"id": 4}
Response
{
"data": {
"series": {
"badge": Asset,
"categories": [Category],
"completedAt": "2007-12-03T10:15:30Z",
"containsUnlicensedLabs": false,
"cpeCredits": 987,
"cyberRoles": [CyberRole],
"description": "xyz789",
"difficulty": "BEGINNER",
"id": "4",
"labsConnection": LabConnection,
"points": 987,
"realId": "4",
"timeRequired": 123,
"title": "abc123",
"type": "COLLECTION"
}
}
}
viewer
Description
The current authenticated account
Response
Returns an Account
Example
Query
query viewer {
viewer {
createdAt
email
externalId
firstName
fullname
id
lastActiveAt
lastName
loginCount
manageableFilteredWorkforceExerciseConnection {
...ManageableFilteredWorkforceExercisesConnectionFragment
}
organisation {
...OrganisationFragment
}
profileDisplayName
teams {
...TeamFragment
}
}
}
Response
{
"data": {
"viewer": {
"createdAt": "2007-12-03T10:15:30Z",
"email": "abc123",
"externalId": 4,
"firstName": "xyz789",
"fullname": "abc123",
"id": 4,
"lastActiveAt": "2007-12-03T10:15:30Z",
"lastName": "abc123",
"loginCount": 123,
"manageableFilteredWorkforceExerciseConnection": ManageableFilteredWorkforceExercisesConnection,
"organisation": Organisation,
"profileDisplayName": "abc123",
"teams": [Team]
}
}
}
workforceScenariosConnection
Response
Returns a FilteredWorkforceScenariosConnection!
Arguments
Name | Description |
---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
searchTerm - String
|
Example
Query
query workforceScenariosConnection(
$after: String,
$before: String,
$first: Int,
$last: Int,
$searchTerm: String
) {
workforceScenariosConnection(
after: $after,
before: $before,
first: $first,
last: $last,
searchTerm: $searchTerm
) {
currentPage
edges {
...WorkforceScenarioEdgeFragment
}
nodes {
...WorkforceScenarioFragment
}
pageInfo {
...PageInfoFragment
}
totalCount
}
}
Variables
{
"after": "xyz789",
"before": "xyz789",
"first": 123,
"last": 123,
"searchTerm": "xyz789"
}
Response
{
"data": {
"workforceScenariosConnection": {
"currentPage": 987,
"edges": [WorkforceScenarioEdge],
"nodes": [WorkforceScenario],
"pageInfo": PageInfo,
"totalCount": 123
}
}
}
Mutations
oidcAttemptLoginRequest
Description
Approve the existing OIDC Provider user session if it has one
Response
Returns an OIDCAttemptLoginRequestPayload
Arguments
Name | Description |
---|---|
loginChallenge - String!
|
Ory Hydra provided login challenge |
Example
Query
mutation oidcAttemptLoginRequest($loginChallenge: String!) {
oidcAttemptLoginRequest(loginChallenge: $loginChallenge) {
redirectTo
subdomain
}
}
Variables
{"loginChallenge": "xyz789"}
Response
{
"data": {
"oidcAttemptLoginRequest": {
"redirectTo": "xyz789",
"subdomain": "xyz789"
}
}
}
Types
Account
Description
The account of an Immersive Platform user, representing a single individual
Fields
Field Name | Description |
---|---|
createdAt - DateTime!
|
The date and time at which the account was created on the Immersive platform |
email - String
|
The account email |
externalId - ID
|
The customer ID to be used by external clients for integrations |
firstName - String
|
The first name of the account holder |
fullname - String!
|
|
id - ID!
|
The record slug if available, falls back to raw record ID |
lastActiveAt - DateTime
|
The date and time at which the account was last active on the Immersive platform |
lastName - String
|
The last name of the account holder |
loginCount - Int!
|
The number of times the user has logged into the Immersive platform in a given timespan |
manageableFilteredWorkforceExerciseConnection - ManageableFilteredWorkforceExercisesConnection!
|
Workforce exercises manageable by this account |
organisation - Organisation
|
The organisation the account belongs to |
profileDisplayName - String
|
|
teams - [Team!]!
|
The teams of which the account is a member |
Example
{
"createdAt": "2007-12-03T10:15:30Z",
"email": "xyz789",
"externalId": "4",
"firstName": "xyz789",
"fullname": "xyz789",
"id": "4",
"lastActiveAt": "2007-12-03T10:15:30Z",
"lastName": "xyz789",
"loginCount": 123,
"manageableFilteredWorkforceExerciseConnection": ManageableFilteredWorkforceExercisesConnection,
"organisation": Organisation,
"profileDisplayName": "abc123",
"teams": [Team]
}
AccountConnection
Description
The connection type for Account.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [AccountEdge!]!
|
A list of edges. |
nodes - [Account!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 987,
"edges": [AccountEdge],
"nodes": [Account],
"pageInfo": PageInfo,
"totalCount": 987
}
AccountEdge
Achievement
Description
Achievements for completing a series/cyber role
Fields
Field Name | Description |
---|---|
author - Account!
|
|
earnedAt - DateTime!
|
|
id - ID!
|
The record slug if available, falls back to raw record ID |
labContainer - CompletableLabContainer!
|
|
pointsAchieved - Int!
|
Example
{
"author": Account,
"earnedAt": "2007-12-03T10:15:30Z",
"id": 4,
"labContainer": CompletableLabContainer,
"pointsAchieved": 987
}
Asset
AssignableContent
Description
Fields for assignable lab containers including all the assignees. These are scoped to your remit (eg Organisation and your role)
Fields
Field Name | Description |
---|---|
id - ID!
|
The record slug if available, falls back to raw record ID |
Possible Types
AssignableContent Types |
---|
Example
{"id": "4"}
AssignableContentClasses
Description
Models that can be assigned
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
|
|
Example
"COLLECTION"
AssignableContentInput
Description
Information to find an instance of assignable content
Fields
Input Field | Description |
---|---|
id - ID!
|
Slug of the assignable content |
type - AssignableContentClasses!
|
Class of assignable content |
Example
{"id": 4, "type": "COLLECTION"}
Attempt
Description
Represents an Accounts session within a Lab. For some Labs an Attempt may be resumed if the Account exits and then starts the Lab again.
Fields
Field Name | Description |
---|---|
id - ID!
|
The record slug if available, falls back to raw record ID |
Example
{"id": "4"}
Boolean
Description
The Boolean
scalar type represents true
or false
.
Example
true
CWEIdentifier
Description
A Common Weakness Enumeration identifier in the format CWE-ID, where ID is the unique assignment number
Example
CWEIdentifier
Category
Description
Category or SubCategory for a Lab
Fields
Field Name | Description |
---|---|
id - ID!
|
The record slug if available, falls back to raw record ID |
parentCategory - Category
|
|
subCategories - [Category!]
|
|
title - String
|
Example
{
"id": 4,
"parentCategory": Category,
"subCategories": [Category],
"title": "abc123"
}
Collection
Description
A Collection contains Labs and is assignable to Accounts, Teams and Organisations. If the Collection contains any demonstrate labs, it is considered a skill path. A Collection is considered complete if all labs are complete. A skill path is considered complete if all the demonstrate labs are complete
Fields
Field Name | Description |
---|---|
badge - Asset!
|
|
categories - [Category!]
|
|
completedAt - DateTime
|
Time the lab container was completed at, if at all |
containsUnlicensedLabs - Boolean!
|
|
cpeCredits - Int!
|
Continuing Professional Education credit. 1 CPE credit is equivalent to 1 hour of lab time |
cyberRoles - [CyberRole!]
|
|
description - String
|
|
difficulty - LabDifficulty
|
|
id - ID!
|
The record slug if available, falls back to raw record ID |
labsConnection - LabConnection
|
|
points - Int!
|
Sum of labs points in minutes |
realId - ID
|
The raw record ID |
timeRequired - Int!
|
|
title - String!
|
|
type - TypeForSeries!
|
Example
{
"badge": Asset,
"categories": [Category],
"completedAt": "2007-12-03T10:15:30Z",
"containsUnlicensedLabs": true,
"cpeCredits": 987,
"cyberRoles": [CyberRole],
"description": "abc123",
"difficulty": "BEGINNER",
"id": 4,
"labsConnection": LabConnection,
"points": 123,
"realId": 4,
"timeRequired": 987,
"title": "abc123",
"type": "COLLECTION"
}
CompletableLabContainer
Description
Fields for lab containers that can be completed
Fields
Field Name | Description |
---|---|
badge - Asset
|
|
completedAt - DateTime
|
Time the lab container was completed at, if at all |
cpeCredits - Int!
|
Continuing Professional Education credit. 1 CPE credit is equivalent to 1 hour of lab time |
description - String
|
|
difficulty - LabDifficulty
|
The difficulty bucket based on the highest lab difficulty |
id - ID!
|
The record slug if available, falls back to raw record ID |
points - Int!
|
Sum of labs points in minutes |
timeRequired - Int!
|
|
title - String!
|
Possible Types
CompletableLabContainer Types |
---|
Example
{
"badge": Asset,
"completedAt": "2007-12-03T10:15:30Z",
"cpeCredits": 123,
"description": "xyz789",
"difficulty": "BEGINNER",
"id": 4,
"points": 987,
"timeRequired": 987,
"title": "abc123"
}
CreatedBy
Description
Options for created by filter
Values
Enum Value | Description |
---|---|
|
Me |
|
Others |
Example
"ME"
CreatedByFilterOption
Description
Options for Created By filter
Fields
Field Name | Description |
---|---|
label - String!
|
|
values - [CreatedBySearchAggregate!]!
|
Example
{
"label": "xyz789",
"values": [CreatedBySearchAggregate]
}
CreatedBySearchAggregate
Description
Information, including aggregations, for Created By filter
Fields
Field Name | Description |
---|---|
count - Int!
|
|
label - String!
|
|
value - CreatedBy!
|
Example
{
"count": 123,
"label": "xyz789",
"value": "ME"
}
CustomRole
Description
A Custom Role is a catalogue item that contains a collection of Series and/or Objectives. They can be be user created or IML created and are scoped to a particular Organisation.
Fields
Field Name | Description |
---|---|
id - ID!
|
The record slug if available, falls back to raw record ID |
labContainersConnection - CustomRoleLabContainerConnection!
|
|
realId - ID
|
The raw record ID |
Example
{
"id": 4,
"labContainersConnection": CustomRoleLabContainerConnection,
"realId": "4"
}
CustomRoleLabContainer
Description
Lab containers for a Custom Career Path
Fields
Field Name | Description |
---|---|
id - ID!
|
The record slug if available, falls back to raw record ID |
Possible Types
CustomRoleLabContainer Types |
---|
Example
{"id": 4}
CustomRoleLabContainerConnection
Description
The connection type for CustomRoleLabContainer.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [CustomRoleLabContainerEdge!]!
|
A list of edges. |
nodes - [CustomRoleLabContainer!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 987,
"edges": [CustomRoleLabContainerEdge],
"nodes": [CustomRoleLabContainer],
"pageInfo": PageInfo,
"totalCount": 987
}
CustomRoleLabContainerEdge
Description
An edge in a connection.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A cursor for use in pagination. |
node - CustomRoleLabContainer!
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": CustomRoleLabContainer
}
CyberRole
Description
A Cyber Role is a catalogue item that contains a collection of Series. They are IML created only and available to all organisations.
Fields
Field Name | Description |
---|---|
badge - Asset!
|
|
completedAt - DateTime
|
Time the lab container was completed at, if at all |
cpeCredits - Int!
|
Continuing Professional Education credit. 1 CPE credit is equivalent to 1 hour of lab time |
description - String
|
|
difficulty - LabDifficulty
|
The difficulty bucket based on the highest lab difficulty |
id - ID!
|
The record slug if available, falls back to raw record ID |
points - Int!
|
|
timeRequired - Int!
|
|
title - String!
|
Example
{
"badge": Asset,
"completedAt": "2007-12-03T10:15:30Z",
"cpeCredits": 123,
"description": "abc123",
"difficulty": "BEGINNER",
"id": "4",
"points": 987,
"timeRequired": 123,
"title": "abc123"
}
DateTime
Description
An ISO 8601-encoded datetime
Example
"2007-12-03T10:15:30Z"
FilteredAccountsConnection
Description
The connection type for Account.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [FilteredAccountsEdge!]!
|
A list of edges. |
nodes - [Account!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 987,
"edges": [FilteredAccountsEdge],
"nodes": [Account],
"pageInfo": PageInfo,
"totalCount": 987
}
FilteredAccountsEdge
FilteredLabsConnection
Description
The connection type for Lab.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [FilteredLabsEdge!]!
|
A list of edges. |
nodes - [Lab!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 123,
"edges": [FilteredLabsEdge],
"nodes": [Lab],
"pageInfo": PageInfo,
"totalCount": 123
}
FilteredLabsEdge
FilteredWorkforceScenariosConnection
Description
The connection type for WorkforceScenario.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [WorkforceScenarioEdge!]!
|
A list of edges. |
nodes - [WorkforceScenario!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 123,
"edges": [WorkforceScenarioEdge],
"nodes": [WorkforceScenario],
"pageInfo": PageInfo,
"totalCount": 987
}
HasAccounts
Description
A searchable and sortable Interface for the Accounts associated with the implementing Type
Fields
Field Name | Description |
---|---|
accountsConnection - FilteredAccountsConnection
|
All visible Accounts in an Organisation or Team |
deactivatedAccountsConnection - AccountConnection
|
All deactivated Accounts in an Organisation or Team |
Possible Types
HasAccounts Types |
---|
Example
{
"accountsConnection": FilteredAccountsConnection,
"deactivatedAccountsConnection": AccountConnection
}
HasLearningActivities
Description
A searchable and sortable Interface for the LearningActivities associated with the implementing Type
Fields
Field Name | Description |
---|---|
learningActivities - LearningActivityConnection
|
|
Arguments
|
Possible Types
HasLearningActivities Types |
---|
Example
{"learningActivities": LearningActivityConnection}
ID
Description
The ID
scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4"
) or integer (such as 4
) input value will be accepted as an ID.
Example
4
Int
Description
The Int
scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
123
Lab
Description
All available attributes and associations for a lab
Fields
Field Name | Description |
---|---|
collections - [Collection!]
|
|
difficulty - Int!
|
|
id - ID!
|
The record slug if available, falls back to raw record ID |
introduction - String!
|
|
outcomes - [String!]!
|
|
publishedAt - DateTime
|
|
realId - ID
|
The raw record ID |
series - [Series!]
|
2024-01-03: Use collections |
timeRequired - Int!
|
|
title - String!
|
|
url - String!
|
Example
{
"collections": [Collection],
"difficulty": 123,
"id": 4,
"introduction": "xyz789",
"outcomes": ["xyz789"],
"publishedAt": "2007-12-03T10:15:30Z",
"realId": 4,
"series": [Series],
"timeRequired": 987,
"title": "xyz789",
"url": "xyz789"
}
LabConnection
Description
The connection type for Lab.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [LabEdge!]!
|
A list of edges. |
nodes - [Lab!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 987,
"edges": [LabEdge],
"nodes": [Lab],
"pageInfo": PageInfo,
"totalCount": 987
}
LabDifficulty
Description
Lab difficulty
Values
Enum Value | Description |
---|---|
|
Beginner |
|
Expert |
|
Intermediate |
Example
"BEGINNER"
LabEdge
LabFiltersInput
Description
Filters available for Labs
Fields
Input Field | Description |
---|---|
cweIdentifier - [CWEIdentifier!]
|
CWE identifiers associated with the Lab content |
programmingLanguage - [ProgrammingLanguage!]
|
Programming languages associated with the Lab content |
Example
{
"cweIdentifier": [CWEIdentifier],
"programmingLanguage": ["C"]
}
LearningActivity
Description
A learning activity performed by an account
Fields
Field Name | Description |
---|---|
activityAt - ID!
|
The date and time the activity happened |
attempt - Attempt
|
The attempt associated with the Learning Activity |
author - Account
|
The account that perfomed the activity |
id - ID!
|
The unique identifier for the activity |
lab - Lab
|
The lab where the activity was performed |
Possible Types
LearningActivity Types |
---|
Example
{
"activityAt": 4,
"attempt": Attempt,
"author": Account,
"id": "4",
"lab": Lab
}
LearningActivityAttemptCompleted
Description
A completed attempt by the user
Fields
Field Name | Description |
---|---|
activityAt - ID!
|
The date and time the activity happened |
attempt - Attempt
|
The attempt associated with the Learning Activity |
author - Account
|
The account that perfomed the activity |
completedAt - DateTime
|
The date and time when the attempt was completed |
id - ID!
|
The unique identifier for the activity |
lab - Lab
|
The lab where the activity was performed |
Example
{
"activityAt": "4",
"attempt": Attempt,
"author": Account,
"completedAt": "2007-12-03T10:15:30Z",
"id": "4",
"lab": Lab
}
LearningActivityAttemptStarted
Description
A started attempt by the user
Fields
Field Name | Description |
---|---|
activityAt - ID!
|
The date and time the activity happened |
attempt - Attempt
|
The attempt associated with the Learning Activity |
author - Account
|
The account that perfomed the activity |
id - ID!
|
The unique identifier for the activity |
lab - Lab
|
The lab where the activity was performed |
startedAt - DateTime
|
The date and time when the attempt was started |
Example
{
"activityAt": "4",
"attempt": Attempt,
"author": Account,
"id": 4,
"lab": Lab,
"startedAt": "2007-12-03T10:15:30Z"
}
LearningActivityConnection
Description
The connection type for LearningActivity.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [LearningActivityEdge!]!
|
A list of edges. |
nodes - [LearningActivity!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 123,
"edges": [LearningActivityEdge],
"nodes": [LearningActivity],
"pageInfo": PageInfo,
"totalCount": 123
}
LearningActivityEdge
Description
An edge in a connection.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A cursor for use in pagination. |
node - LearningActivity!
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": LearningActivity
}
LearningActivityTypeFilter
Description
Filter LearningActivities by whether they correspond to the start or completion of a lab attempt
Values
Enum Value | Description |
---|---|
|
|
|
Example
"COMPLETED"
ManageableFilteredWorkforceExercisesConnection
Description
The connection type for Workforce.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [WorkforceEdge!]!
|
A list of edges. |
filterOptions - ManageableWorkforceExerciseFilterOptions
|
|
nodes - [Workforce!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 123,
"edges": [WorkforceEdge],
"filterOptions": ManageableWorkforceExerciseFilterOptions,
"nodes": [Workforce],
"pageInfo": PageInfo,
"totalCount": 987
}
ManageableWorkforceExerciseFilterOptions
Description
Filter options for Workforce Exercises
Fields
Field Name | Description |
---|---|
attackVectorFilter - OrgExercisingMetadataFilterOption
|
|
createdByFilter - CreatedByFilterOption
|
|
industrySectorFilter - OrgExercisingMetadataFilterOption
|
|
scenarioTypeFilter - WorkforceScenarioTypeFilterOption
|
|
securityTopicFilter - OrgExercisingMetadataFilterOption
|
|
stateFilter - OrgExercisingExerciseStateFilterOption
|
|
threatActorFilter - OrgExercisingMetadataFilterOption
|
Example
{
"attackVectorFilter": OrgExercisingMetadataFilterOption,
"createdByFilter": CreatedByFilterOption,
"industrySectorFilter": OrgExercisingMetadataFilterOption,
"scenarioTypeFilter": WorkforceScenarioTypeFilterOption,
"securityTopicFilter": OrgExercisingMetadataFilterOption,
"stateFilter": OrgExercisingExerciseStateFilterOption,
"threatActorFilter": OrgExercisingMetadataFilterOption
}
Metadata
Description
An interface for the various Organisational Exercising Metadata types
Possible Types
Metadata Types |
---|
Example
{
"description": "abc123",
"type": "abc123",
"value": "xyz789"
}
OIDCAttemptLoginRequestPayload
Description
Autogenerated return type of OIDCAttemptLoginRequest.
Example
{
"redirectTo": "abc123",
"subdomain": "abc123"
}
OIDCLoginRequest
Description
An existing OIDC Login Request for the given login challenge
Fields
Field Name | Description |
---|---|
initiatedBy - String
|
The owner of the client that initiated the login request |
Example
{"initiatedBy": "xyz789"}
Objective
Description
All available attributes and associations for an objective
Example
{
"allLabRealIds": [4],
"id": "4",
"realId": "4"
}
OrgExercisingAssignment
Fields
Field Name | Description |
---|---|
account - Account
|
|
playthrough - OrgExercisingPlaythrough
|
|
state - OrgExercisingExercisePlaythroughState!
|
Example
{
"account": Account,
"playthrough": OrgExercisingPlaythrough,
"state": "COMPLETED"
}
OrgExercisingAssignmentConnection
Description
The connection type for OrgExercisingAssignment.
Fields
Field Name | Description |
---|---|
currentPage - Int!
|
Current page # based on first / last / after |
edges - [OrgExercisingAssignmentEdge!]!
|
A list of edges. |
nodes - [OrgExercisingAssignment!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Total # of objects returned from this collection |
Example
{
"currentPage": 123,
"edges": [OrgExercisingAssignmentEdge],
"nodes": [OrgExercisingAssignment],
"pageInfo": PageInfo,
"totalCount": 987
}
OrgExercisingAssignmentEdge
Description
An edge in a connection.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A cursor for use in pagination. |
node - OrgExercisingAssignment!
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": OrgExercisingAssignment
}
OrgExercisingExercise
Description
An interface for the various Organisational Exercising exercise types
Fields
Field Name | Description |
---|---|
assignmentsConnection - OrgExercisingAssignmentConnection
|
|
Arguments
|
|
author - Account
|
|
endDate - DateTime
|
|
scenario - OrgExercisingScenario
|
|
startDate - DateTime
|
|
state - OrgExercisingExerciseState!
|
|
title - String
|
|
uuid - ID!
|
Possible Types
OrgExercisingExercise Types |
---|
Example
{
"assignmentsConnection": OrgExercisingAssignmentConnection,
"author": Account,
"endDate": "2007-12-03T10:15:30Z",
"scenario": OrgExercisingScenario,
"startDate": "2007-12-03T10:15:30Z",
"state": "ACTIVE",
"title": "xyz789",
"uuid": "4"
}
OrgExercisingExercisePlaythroughState
Description
states for the accounts playthrough of an exercise
Values
Enum Value | Description |
---|---|
|
The Account has completed the exercises |
|
The Account did not complete the exercises |
|
The Account has started but not completed the exercises |
|
The Account did not complete the exercise This value will be replaced with INCOMPLETE |
|
The Account has not yet started the exercises |
Example
"COMPLETED"
OrgExercisingExerciseState
Description
The states that an Exercise can be in
Values
Enum Value | Description |
---|---|
|
active |
|
closed |
|
draft |
|
pending |
Example
"ACTIVE"
OrgExercisingExerciseStateAggregate
Fields
Field Name | Description |
---|---|
count - Int!
|
|
label - String!
|
|
value - OrgExercisingExerciseState!
|
Example
{
"count": 123,
"label": "abc123",
"value": "ACTIVE"
}
OrgExercisingExerciseStateFilterOption
Fields
Field Name | Description |
---|---|
label - String!
|
|
values - [OrgExercisingExerciseStateAggregate!]!
|
Example
{
"label": "abc123",
"values": [OrgExercisingExerciseStateAggregate]
}
OrgExercisingMetadata
OrgExercisingMetadataAggregate
OrgExercisingMetadataFilterOption
Description
Filter options for Metadata
Fields
Field Name | Description |
---|---|
label - String!
|
|
values - [OrgExercisingMetadataAggregate!]!
|
Example
{
"label": "abc123",
"values": [OrgExercisingMetadataAggregate]
}
OrgExercisingPlaythrough
Fields
Field Name | Description |
---|---|
completedAt - DateTime
|
|
startedAt - DateTime!
|
|
status - OrgExercisingPlaythroughStatus!
|
Example
{
"completedAt": "2007-12-03T10:15:30Z",
"startedAt": "2007-12-03T10:15:30Z",
"status": "ACTIVE"
}
OrgExercisingPlaythroughStatus
Description
The current status of the playthrough
Values
Enum Value | Description |
---|---|
|
active |
|
completed |
|
This will replace the not_completed enum |
|
incomplete |
Example
"ACTIVE"
OrgExercisingScenario
Description
An interface for the various Organisational Exercising Scenario types
Fields
Field Name | Description |
---|---|
attackVectors - [OrgExercisingMetadata!]!
|
|
briefing - String
|
|
industrySectors - [OrgExercisingMetadata!]!
|
|
metadata - [OrgExercisingMetadata!]!
|
|
threatActors - [OrgExercisingMetadata!]!
|
|
title - String!
|
|
uuid - ID!
|
Possible Types
OrgExercisingScenario Types |
---|
Example
{
"attackVectors": [OrgExercisingMetadata],
"briefing": "abc123",
"industrySectors": [OrgExercisingMetadata],
"metadata": [OrgExercisingMetadata],
"threatActors": [OrgExercisingMetadata],
"title": "abc123",
"uuid": "4"
}
Organisation
Description
A company, institution or other collective entity with access to the Immersive platform
Fields
Field Name | Description |
---|---|
accountsConnection - FilteredAccountsConnection
|
All visible Accounts in an Organisation or Team |
deactivatedAccountsConnection - AccountConnection
|
All deactivated Accounts in an Organisation or Team |
id - ID!
|
The record slug if available, falls back to raw record ID |
learningActivities - LearningActivityConnection
|
|
Arguments
|
Example
{
"accountsConnection": FilteredAccountsConnection,
"deactivatedAccountsConnection": AccountConnection,
"id": 4,
"learningActivities": LearningActivityConnection
}
PageInfo
Description
Information about pagination in a connection.
Fields
Field Name | Description |
---|---|
endCursor - String
|
When paginating forwards, the cursor to continue. |
hasNextPage - Boolean!
|
When paginating forwards, are there more items? |
hasPreviousPage - Boolean!
|
When paginating backwards, are there more items? |
startCursor - String
|
When paginating backwards, the cursor to continue. |
Example
{
"endCursor": "xyz789",
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "xyz789"
}
PersistedRecord
Description
An interface for all persisted records
Fields
Field Name | Description |
---|---|
id - ID!
|
The record slug if available, falls back to raw record ID |
Possible Types
PersistedRecord Types |
---|
Example
{"id": "4"}
ProgrammingLanguage
Description
Programming Languages associated with available content
Values
Enum Value | Description |
---|---|
|
C |
|
C++ |
|
C# |
|
Go |
|
Java |
|
JavaScript |
|
PHP |
|
Python |
|
Ruby |
|
TypeScript |
Example
"C"
RiskAreaMetadata
Series
Description
A Series contains Labs and is assignable to Accounts, Teams and Organisations. If the Series contains any demonstrate labs, it is considered a skill path. A Series is considered complete if all labs are complete. A skill path is considered complete if all the demonstrate labs are complete
Fields
Field Name | Description |
---|---|
badge - Asset!
|
|
categories - [Category!]
|
|
completedAt - DateTime
|
Time the lab container was completed at, if at all |
containsUnlicensedLabs - Boolean!
|
|
cpeCredits - Int!
|
Continuing Professional Education credit. 1 CPE credit is equivalent to 1 hour of lab time |
cyberRoles - [CyberRole!]
|
|
description - String
|
|
difficulty - LabDifficulty
|
|
id - ID!
|
The record slug if available, falls back to raw record ID |
labsConnection - LabConnection
|
|
points - Int!
|
Sum of labs points in minutes |
realId - ID
|
The raw record ID |
timeRequired - Int!
|
|
title - String!
|
|
type - TypeForSeries!
|
Example
{
"badge": Asset,
"categories": [Category],
"completedAt": "2007-12-03T10:15:30Z",
"containsUnlicensedLabs": true,
"cpeCredits": 123,
"cyberRoles": [CyberRole],
"description": "abc123",
"difficulty": "BEGINNER",
"id": 4,
"labsConnection": LabConnection,
"points": 123,
"realId": "4",
"timeRequired": 123,
"title": "abc123",
"type": "COLLECTION"
}
String
Description
The String
scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Example
"abc123"
Team
Description
A collection of Accounts which can be managed as a single entity
Fields
Field Name | Description |
---|---|
accountsConnection - FilteredAccountsConnection
|
All visible Accounts in an Organisation or Team |
deactivatedAccountsConnection - AccountConnection
|
All deactivated Accounts in an Organisation or Team |
id - ID!
|
The record slug if available, falls back to raw record ID |
title - String!
|
The name of the team |
Example
{
"accountsConnection": FilteredAccountsConnection,
"deactivatedAccountsConnection": AccountConnection,
"id": "4",
"title": "xyz789"
}
TypeForSeries
Description
Series can either be a Series or a Skill Path. Skill Paths have at least one demonstrate Lab.
Values
Enum Value | Description |
---|---|
|
|
|
|
|
Example
"COLLECTION"
Workforce
Description
A small exercise to rapidly test a workforce's knowledge of security threats
Fields
Field Name | Description |
---|---|
assignmentsConnection - OrgExercisingAssignmentConnection
|
|
Arguments
|
|
author - Account
|
|
endDate - DateTime
|
|
scenario - OrgExercisingScenario
|
|
startDate - DateTime
|
|
state - OrgExercisingExerciseState!
|
|
title - String
|
|
uuid - ID!
|
Example
{
"assignmentsConnection": OrgExercisingAssignmentConnection,
"author": Account,
"endDate": "2007-12-03T10:15:30Z",
"scenario": OrgExercisingScenario,
"startDate": "2007-12-03T10:15:30Z",
"state": "ACTIVE",
"title": "abc123",
"uuid": "4"
}
WorkforceEdge
Description
An edge in a connection.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A cursor for use in pagination. |
node - Workforce!
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": Workforce
}
WorkforceScenario
Fields
Field Name | Description |
---|---|
attackVectors - [OrgExercisingMetadata!]!
|
|
briefing - String
|
|
industrySectors - [OrgExercisingMetadata!]!
|
|
metadata - [OrgExercisingMetadata!]!
|
|
riskAreas - [Metadata!]!
|
|
securityTopics - [OrgExercisingMetadata!]!
|
2024-10-28: Use riskAreas instead |
threatActors - [OrgExercisingMetadata!]!
|
|
title - String!
|
|
uuid - ID!
|
Example
{
"attackVectors": [OrgExercisingMetadata],
"briefing": "xyz789",
"industrySectors": [OrgExercisingMetadata],
"metadata": [OrgExercisingMetadata],
"riskAreas": [Metadata],
"securityTopics": [OrgExercisingMetadata],
"threatActors": [OrgExercisingMetadata],
"title": "abc123",
"uuid": 4
}
WorkforceScenarioEdge
Description
An edge in a connection.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A cursor for use in pagination. |
node - WorkforceScenario!
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": WorkforceScenario
}
WorkforceScenarioTypeAggregate
Description
Aggregation counts for Scenario Type related filters, such as Baselining
Fields
Field Name | Description |
---|---|
count - Int!
|
|
label - String!
|
|
value - WorkforceScenarioTypeFilters!
|
Example
{
"count": 987,
"label": "abc123",
"value": "BASELINING"
}
WorkforceScenarioTypeFilterOption
Description
Filter options for Scenario Type related filters, such as Baselining
Fields
Field Name | Description |
---|---|
label - String!
|
|
values - [WorkforceScenarioTypeAggregate!]!
|
Example
{
"label": "abc123",
"values": [WorkforceScenarioTypeAggregate]
}
WorkforceScenarioTypeFilters
Description
Options to filter content by the type of a Workforce Scenario
Values
Enum Value | Description |
---|---|
|
Baselining |
Example
"BASELINING"