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.

Contact

API Support

support@immersivelabs.com

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

Response

Returns a CyberRole

Arguments
Name Description
id - ID!

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

2024-01-03: Use collection
Description

Individual Series by slug

Response

Returns a Series

Arguments
Name Description
id - ID!

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

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
Arguments
from - DateTime

Filter login count on or after a given date

to - DateTime

Filter login count on or before a given date

manageableFilteredWorkforceExerciseConnection - ManageableFilteredWorkforceExercisesConnection! Workforce exercises manageable by this account
Arguments
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.

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

Description

An edge in a connection.

Fields
Field Name Description
cursor - String! A cursor for use in pagination.
node - Account! The item at the end of the edge.
Example
{
  "cursor": "xyz789",
  "node": Account
}

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

Description

Asset attributes for an Assetable. Usually an image

Fields
Field Name Description
alt - String!
id - ID! The record slug if available, falls back to raw record ID
original - String
Example
{
  "alt": "abc123",
  "id": "4",
  "original": "xyz789"
}

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

Collection

CustomRole

CyberRole

Objective

Series

Example
{"id": "4"}

AssignableContentClasses

Description

Models that can be assigned

Values
Enum Value Description

COLLECTION

CUSTOM_ROLE

CYBER_ROLE

OBJECTIVE

SERIES

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
Arguments
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.

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

Collection

CyberRole

Series

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

Me

OTHERS

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!
Arguments
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.

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

Collection

Objective

Series

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

Description

Edge for filtered accounts

Fields
Field Name Description
cursor - String! A cursor for use in pagination.
node - Account! The item at the end of the edge.
Example
{
  "cursor": "abc123",
  "node": Account
}

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

Description

Edge for filtered Labs

Fields
Field Name Description
cursor - String! A cursor for use in pagination.
node - Lab! The item at the end of the edge.
Example
{
  "cursor": "xyz789",
  "node": Lab
}

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
Arguments
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.

deactivatedAccountsConnection - AccountConnection All deactivated Accounts in an Organisation or Team
Arguments
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.

Possible Types
HasAccounts Types

Organisation

Team

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
activityType - [LearningActivityTypeFilter!]

Filter LearningActivities by activity type, defaulting to all learning activities. A learning activity may correspond to either the start or completion of a lab attempt. Note that this means that each completed lab attempt corresponds to two learning activities.

after - String

Returns the elements in the list that come after the specified cursor.

authorEmails - [String!]

An array of email addresses of the attempt authors (users)

before - String

Returns the elements in the list that come before the specified cursor.

first - Int

Returns the first n elements from the list.

from - DateTime

Filter LearningActivities on or after a given date

labSlugs - [String!]

Filter LearningActivities by one or many labs with the labs slug name. The slug is the last part of the url on the introduction page to a lab. Path: /labs/{lab_slug}/ e.g. where the url is
https://immersivelabs.online/labs/binary/ the lab slug is binary.

last - Int

Returns the last n elements from the list.

to - DateTime

Filter LearningActivities on or before a given date

Possible Types
HasLearningActivities Types

Organisation

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

Beginner

EXPERT

Expert

INTERMEDIATE

Intermediate
Example
"BEGINNER"

LabEdge

Description

An edge in a connection.

Fields
Field Name Description
cursor - String! A cursor for use in pagination.
node - Lab! The item at the end of the edge.
Example
{
  "cursor": "abc123",
  "node": Lab
}

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
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

COMPLETED

STARTED

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

Fields
Field Name Description
description - String
type - String!
value - String!
Possible Types
Metadata Types

OrgExercisingMetadata

RiskAreaMetadata

Example
{
  "description": "abc123",
  "type": "abc123",
  "value": "xyz789"
}

OIDCAttemptLoginRequestPayload

Description

Autogenerated return type of OIDCAttemptLoginRequest.

Fields
Field Name Description
redirectTo - String Redirect location if already authenticated
subdomain - String The org specific subdomain (if any) that the user is trying to access
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

Fields
Field Name Description
allLabRealIds - [ID!]! All published lab raw record ids in the objective in order, including unlicensed labs.
id - ID! The record slug if available, falls back to raw record ID
realId - ID The raw record ID
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
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.

belongsToTeam - Boolean

True will return only Assignments that belong to Teams. False will return only Assignments that do not belong to teams. Nil will return all Assignments.

first - Int

Returns the first n elements from the list.

last - Int

Returns the last n elements from the list.

playthroughStatus - OrgExercisingPlaythroughStatus
searchTerm - String

Searching users by first name or last name

author - Account
endDate - DateTime
scenario - OrgExercisingScenario
startDate - DateTime
state - OrgExercisingExerciseState!
title - String
uuid - ID!
Possible Types
OrgExercisingExercise Types

Workforce

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

COMPLETED

The Account has completed the exercises

INCOMPLETE

The Account did not complete the exercises

IN_PROGRESS

The Account has started but not completed the exercises

NOT_COMPLETED

The Account did not complete the exercise This value will be replaced with INCOMPLETE

NOT_STARTED

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

active

CLOSED

closed

DRAFT

draft

PENDING

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

Fields
Field Name Description
description - String
type - String!
value - String!
Example
{
  "description": "abc123",
  "type": "xyz789",
  "value": "abc123"
}

OrgExercisingMetadataAggregate

Description

Aggregation for Metadata

Fields
Field Name Description
count - Int!
label - String!
value - ID!
Example
{
  "count": 123,
  "label": "xyz789",
  "value": 4
}

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

active

COMPLETED

completed

INCOMPLETE

This will replace the not_completed enum

NOT_COMPLETED

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

WorkforceScenario

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
Arguments
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.

deactivatedAccountsConnection - AccountConnection All deactivated Accounts in an Organisation or Team
Arguments
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.

id - ID! The record slug if available, falls back to raw record ID
learningActivities - LearningActivityConnection
Arguments
activityType - [LearningActivityTypeFilter!]

Filter LearningActivities by activity type, defaulting to all learning activities. A learning activity may correspond to either the start or completion of a lab attempt. Note that this means that each completed lab attempt corresponds to two learning activities.

after - String

Returns the elements in the list that come after the specified cursor.

authorEmails - [String!]

An array of email addresses of the attempt authors (users)

before - String

Returns the elements in the list that come before the specified cursor.

first - Int

Returns the first n elements from the list.

from - DateTime

Filter LearningActivities on or after a given date

labSlugs - [String!]

Filter LearningActivities by one or many labs with the labs slug name. The slug is the last part of the url on the introduction page to a lab. Path: /labs/{lab_slug}/ e.g. where the url is
https://immersivelabs.online/labs/binary/ the lab slug is binary.

last - Int

Returns the last n elements from the list.

to - DateTime

Filter LearningActivities on or before a given date

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
Example
{"id": "4"}

ProgrammingLanguage

Description

Programming Languages associated with available content

Values
Enum Value Description

C

C

CPP

C++

CSHARP

C#

GO

Go

JAVA

Java

JAVASCRIPT

JavaScript

PHP

PHP

PYTHON

Python

RUBY

Ruby

TYPESCRIPT

TypeScript
Example
"C"

RiskAreaMetadata

Fields
Field Name Description
description - String
type - String!
value - String!
Example
{
  "description": "xyz789",
  "type": "xyz789",
  "value": "abc123"
}

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
Arguments
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.

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
Arguments
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.

deactivatedAccountsConnection - AccountConnection All deactivated Accounts in an Organisation or Team
Arguments
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.

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

COLLECTION

SERIES

SKILL_PATH

Example
"COLLECTION"

Workforce

Description

A small exercise to rapidly test a workforce's knowledge of security threats

Fields
Field Name Description
assignmentsConnection - OrgExercisingAssignmentConnection
Arguments
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.

belongsToTeam - Boolean

True will return only Assignments that belong to Teams. False will return only Assignments that do not belong to teams. Nil will return all Assignments.

first - Int

Returns the first n elements from the list.

last - Int

Returns the last n elements from the list.

playthroughStatus - OrgExercisingPlaythroughStatus
searchTerm - String

Searching users by first name or last name

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

Baselining
Example
"BASELINING"