Instruqt GraphQL API Reference
This reference describes the Instruqt GraphQL API and helps you get started.
API Endpoints
https://play.instruqt.com/graphql
Headers
# Add the following HTTP header to your GraphQL requests
Authorization: Bearer YOUR-API-KEY
Getting started
What is the GraphQL API?
The Instruqt GraphQL API lets you exchange data between your systems and the Instruqt platform. As the name suggests, the API is based on GraphQL, a query language for APIs. GraphQL lets you query and update data with queries and mutations in JSON format. This means that you can do the following actions with the Instruqt GraphQL API:
- Query for information about Instruqt artifacts like tracks and challenges.
- Add Instruqt artifacts like track invites or team members.
- Update Instruqt artifacts, including deleting them.
The query response is in JSON format, and the following is an example of a GraphQL query that lists all your tracks by id
, slug
and title
:
query {
tracks(organizationSlug: "instruqt") {
id
slug
title
}
}
Which gives a response like this:
{
"data": {
"tracks": [
{
"id": "amy5xhuaxukc",
"slug": "aws-cloud-account",
"title": "AWS Cloud Account"
},
{
"id": "jrwu2g1tymzn",
"slug": "azure-subscription",
"title": "Azure subscription"
},
{
"id": "4ttuxz0fgyf1",
"slug": "gcp-project",
"title": "GCP project"
},
{
"id": "vnt0zc9owl5c",
"slug": "kubernetes",
"title": "Kubernetes"
}
]
}
}
How to use the GraphQL API
Address the API Endpoint
You address all your GraphQL queries and mutations as HTTP POST
requests to the API Endpoint.
Create your API key for authorization
Instruqt GraphQL API requires your queries and mutations to be authorized by an API key. See the docs for generating your API key, which you include as an Authorization
header on all your GraphQL API queries and mutations.
Create queries and mutations
See the docs for creating queries and mutations.
Queries
challenge
Description
Get a specific challenge
Either challengeID must be specified, or challengeSlug, trackSlug and organizationSlug
Response
Returns a Challenge
Arguments
Name | Description |
---|---|
challengeID - String
|
Unique ID |
challengeSlug - String
|
Slug of the challenge |
trackSlug - String
|
Slug of the track |
organizationSlug - String
|
Slug of the organization |
teamSlug - String
|
Slug of the team |
userID - String
|
User id used to impersonate user |
inviteID - String
|
Invite id used to impersonate the user for a given invite id |
parseAssignmentVariables - Boolean
|
Example
Query
query challenge(
$challengeID: String,
$challengeSlug: String,
$trackSlug: String,
$organizationSlug: String,
$teamSlug: String,
$userID: String,
$inviteID: String,
$parseAssignmentVariables: Boolean
) {
challenge(
challengeID: $challengeID,
challengeSlug: $challengeSlug,
trackSlug: $trackSlug,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug,
userID: $userID,
inviteID: $inviteID,
parseAssignmentVariables: $parseAssignmentVariables
) {
...ChallengeFragment
}
}
Variables
{
"challengeID": "xyz789",
"challengeSlug": "xyz789",
"trackSlug": "xyz789",
"organizationSlug": "xyz789",
"teamSlug": "abc123",
"userID": "abc123",
"inviteID": "xyz789",
"parseAssignmentVariables": false
}
Response
{
"data": {
"challenge": {
"id": "4",
"track": Track,
"answers": ["xyz789"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": true,
"difficulty": "xyz789",
"index": 123,
"notes": [ChallengeNote],
"permalink": "abc123",
"scripts": [ChallengeScript],
"slug": "xyz789",
"solution": [987],
"hasSingleAnswer": false,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 123,
"started": 987,
"completed": 987,
"failed": 987,
"failMessage": "xyz789",
"title": "xyz789",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": true
}
}
}
challengeScript
Description
Get a specific challenge script
Note: you need to be developer of that track to access this
Response
Returns a ChallengeScript
Arguments
Name | Description |
---|---|
scriptID - String!
|
Unique ID |
Example
Query
query challengeScript($scriptID: String!) {
challengeScript(scriptID: $scriptID) {
...ChallengeScriptFragment
}
}
Variables
{"scriptID": "abc123"}
Response
{
"data": {
"challengeScript": {
"id": 4,
"action": "xyz789",
"contents": "xyz789",
"host": "abc123"
}
}
}
challengeScripts
Description
Get the scripts for a challenge
Note: you need to be developer of that track to access this
Response
Returns [ChallengeScript!]
Arguments
Name | Description |
---|---|
challengeID - String!
|
Unique ID |
Example
Query
query challengeScripts($challengeID: String!) {
challengeScripts(challengeID: $challengeID) {
...ChallengeScriptFragment
}
}
Variables
{"challengeID": "abc123"}
Response
{
"data": {
"challengeScripts": [
{
"id": "4",
"action": "xyz789",
"contents": "xyz789",
"host": "xyz789"
}
]
}
}
challenges
Description
Get a all challenges of a track
Either trackID must be specified, or both trackSlug and organizationSlug
Response
Returns [Challenge!]
Example
Query
query challenges(
$trackID: String,
$trackSlug: String,
$organizationSlug: String,
$teamSlug: String,
$parseAssignmentVariables: Boolean
) {
challenges(
trackID: $trackID,
trackSlug: $trackSlug,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug,
parseAssignmentVariables: $parseAssignmentVariables
) {
...ChallengeFragment
}
}
Variables
{
"trackID": "xyz789",
"trackSlug": "xyz789",
"organizationSlug": "xyz789",
"teamSlug": "abc123",
"parseAssignmentVariables": true
}
Response
{
"data": {
"challenges": [
{
"id": "4",
"track": Track,
"answers": ["abc123"],
"assignment": "xyz789",
"attempts": [ChallengeAttempt],
"can_check": false,
"difficulty": "xyz789",
"index": 123,
"notes": [ChallengeNote],
"permalink": "xyz789",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [123],
"hasSingleAnswer": true,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 987,
"started": 123,
"completed": 123,
"failed": 123,
"failMessage": "xyz789",
"title": "abc123",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": false
}
]
}
}
checkConflicts
Description
Returns all files with conflicts and their content
Response
Returns [File]!
Arguments
Name | Description |
---|---|
track - TrackInput!
|
Example
Query
query checkConflicts($track: TrackInput!) {
checkConflicts(track: $track) {
...FileFragment
}
}
Variables
{"track": TrackInput}
Response
{
"data": {
"checkConflicts": [
{
"path": "xyz789",
"content": "xyz789"
}
]
}
}
cloudProviderConfigs
Description
Get a list of all cloud provider configs
Response
Returns [CloudProviderConfig!]!
Example
Query
query cloudProviderConfigs {
cloudProviderConfigs {
...CloudProviderConfigFragment
}
}
Response
{
"data": {
"cloudProviderConfigs": [
{
"provider": "aws",
"services": [CloudProviderService],
"regions": [CloudProviderRegion]
}
]
}
}
customResource
Description
Returns the custom resource with the given ID.
Response
Returns a CustomResource
Arguments
Name | Description |
---|---|
id - ID!
|
Example
Query
query customResource($id: ID!) {
customResource(id: $id) {
...CustomResourceFragment
}
}
Variables
{"id": 4}
Response
{
"data": {
"customResource": {
"id": 4,
"name": "abc123",
"slug": "abc123",
"description": "abc123",
"version": "xyz789",
"logo": "abc123",
"provider": "terraform",
"canDelete": false,
"terraformModule": TerraformModule,
"inputs": [CustomResourceInput],
"outputs": [CustomResourceOutput],
"createdAt": "10:15:30Z",
"createdBy": User
}
}
}
findTeamUsers
Response
Returns [User!]
Example
Query
query findTeamUsers(
$searchTerm: String,
$teamSlug: String!
) {
findTeamUsers(
searchTerm: $searchTerm,
teamSlug: $teamSlug
) {
...UserFragment
}
}
Variables
{
"searchTerm": "abc123",
"teamSlug": "abc123"
}
Response
{
"data": {
"findTeamUsers": [
{
"id": "4",
"profile": UserProfile,
"details": UserDetails,
"organizations": [UserOrganizationEdge],
"teams": [UserTeamEdge],
"is_anonymous": false,
"is_global_admin": true,
"segments": ["instruqt_employee"],
"claims": [InviteClaim],
"accessibleTracks": [Track],
"reportItem": UserReportItem,
"supportVerificationHash": "abc123"
}
]
}
}
findUsers
Response
Returns [User!]
Example
Query
query findUsers(
$searchTerm: String,
$organizationSlug: String,
$teamSlug: String
) {
findUsers(
searchTerm: $searchTerm,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug
) {
...UserFragment
}
}
Variables
{
"searchTerm": "xyz789",
"organizationSlug": "xyz789",
"teamSlug": "abc123"
}
Response
{
"data": {
"findUsers": [
{
"id": 4,
"profile": UserProfile,
"details": UserDetails,
"organizations": [UserOrganizationEdge],
"teams": [UserTeamEdge],
"is_anonymous": true,
"is_global_admin": false,
"segments": ["instruqt_employee"],
"claims": [InviteClaim],
"accessibleTracks": [Track],
"reportItem": UserReportItem,
"supportVerificationHash": "xyz789"
}
]
}
}
getCommit
Description
Returns a commit content
Response
Returns a Commit!
Example
Query
query getCommit(
$trackSlug: String!,
$teamSlug: String!,
$hash: String!
) {
getCommit(
trackSlug: $trackSlug,
teamSlug: $teamSlug,
hash: $hash
) {
...CommitFragment
}
}
Variables
{
"trackSlug": "xyz789",
"teamSlug": "abc123",
"hash": "xyz789"
}
Response
{
"data": {
"getCommit": {
"hash": "xyz789",
"message": "abc123",
"author": CommitAuthor,
"timestamp": "10:15:30Z",
"content": [File]
}
}
}
getSandboxVariable
Description
Get runtime variable value from sandbox host
Response
Returns a SandboxVariable
Example
Query
query getSandboxVariable(
$key: String!,
$hostname: String!,
$sandboxID: String!
) {
getSandboxVariable(
key: $key,
hostname: $hostname,
sandboxID: $sandboxID
) {
...SandboxVariableFragment
}
}
Variables
{
"key": "xyz789",
"hostname": "xyz789",
"sandboxID": "xyz789"
}
Response
{
"data": {
"getSandboxVariable": {
"key": "xyz789",
"value": "xyz789"
}
}
}
hostImage
Description
Returns the host image with the given ID.
Example
Query
query hostImage($id: ID!) {
hostImage(id: $id) {
...HostImageFragment
}
}
Variables
{"id": 4}
Response
{
"data": {
"hostImage": {
"id": 4,
"slug": "xyz789",
"description": "xyz789",
"imageMetadata": ImageMetadata,
"status": "created",
"currentSandbox": HostImageSandbox,
"team": Team,
"usedInTracks": [Track],
"usedInSandboxConfigVersions": [
SandboxConfigVersion
],
"createdAt": "10:15:30Z",
"createdBy": User,
"createdWith": HostImageVMInputs
}
}
}
hotStartPool
Description
Get hot start pool
Response
Returns a HotStartPool!
Example
Query
query hotStartPool(
$id: String!,
$organizationSlug: String,
$teamSlug: String
) {
hotStartPool(
id: $id,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug
) {
...HotStartPoolFragment
}
}
Variables
{
"id": "xyz789",
"organizationSlug": "abc123",
"teamSlug": "abc123"
}
Response
{
"data": {
"hotStartPool": {
"id": 4,
"type": "dedicated",
"size": 987,
"created": "10:15:30Z",
"deleted": "10:15:30Z",
"name": "xyz789",
"auto_refill": false,
"starts_at": "10:15:30Z",
"ends_at": "10:15:30Z",
"created_by": User,
"team": Team,
"tracks": [HotStartPoolTrackEdge],
"configs": [HotStartConfigTrackEdge],
"status": "Running",
"region": "xyz789"
}
}
}
hotStartPools
Description
Get hot start pools in organization
Response
Returns a HotStartPoolConnection
Arguments
Name | Description |
---|---|
organizationSlug - String
|
Slug of organization |
teamSlug - String
|
Slug of team |
paging - Pagination
|
Pagination parameters |
ordering - Ordering
|
Sorting parameters |
Example
Query
query hotStartPools(
$organizationSlug: String,
$teamSlug: String,
$paging: Pagination,
$ordering: Ordering
) {
hotStartPools(
organizationSlug: $organizationSlug,
teamSlug: $teamSlug,
paging: $paging,
ordering: $ordering
) {
...HotStartPoolConnectionFragment
}
}
Variables
{
"organizationSlug": "xyz789",
"teamSlug": "xyz789",
"paging": Pagination,
"ordering": Ordering
}
Response
{
"data": {
"hotStartPools": {
"edges": [HotStartPoolEdge],
"nodes": [HotStartPool],
"pageInfo": PageInfo,
"totalCount": 987
}
}
}
imageMetadata
Description
Gets metadata about an image
Response
Returns an ImageMetadata
Arguments
Name | Description |
---|---|
image - String!
|
Example
Query
query imageMetadata($image: String!) {
imageMetadata(image: $image) {
...ImageMetadataFragment
}
}
Variables
{"image": "abc123"}
Response
{
"data": {
"imageMetadata": {
"id": "4",
"image": "abc123",
"os": "windows",
"diskSizeGB": 987
}
}
}
isContainerImageValid
Description
Checks if the image is valid before it being created
Response
Returns a Boolean!
Example
Query
query isContainerImageValid(
$trackID: String!,
$image: String!
) {
isContainerImageValid(
trackID: $trackID,
image: $image
)
}
Variables
{
"trackID": "abc123",
"image": "abc123"
}
Response
{"data": {"isContainerImageValid": true}}
isEmailConfirmed
Description
Check if user has confirmed their email
Example
Query
query isEmailConfirmed(
$teamID: ID!,
$email: String!,
$inviteID: ID
) {
isEmailConfirmed(
teamID: $teamID,
email: $email,
inviteID: $inviteID
)
}
Variables
{
"teamID": "4",
"email": "xyz789",
"inviteID": "4"
}
Response
{"data": {"isEmailConfirmed": true}}
isURLEmbeddable
Description
Checks whether a URL is embeddable via a frame.
isValidEmail
Description
Check if email is a valid email
Response
Returns a Boolean!
Example
Query
query isValidEmail(
$inviteID: ID,
$email: String!,
$useExternalValidator: Boolean
) {
isValidEmail(
inviteID: $inviteID,
email: $email,
useExternalValidator: $useExternalValidator
)
}
Variables
{
"inviteID": 4,
"email": "xyz789",
"useExternalValidator": true
}
Response
{"data": {"isValidEmail": false}}
isWorkEmail
Description
Check if email is a work email.
lab
Description
Get a specific lab instance
Response
Returns a Lab
Example
Query
query lab(
$teamSlug: String!,
$labName: String!,
$ref: String
) {
lab(
teamSlug: $teamSlug,
labName: $labName,
ref: $ref
) {
...LabFragment
}
}
Variables
{
"teamSlug": "abc123",
"labName": "xyz789",
"ref": "xyz789"
}
Response
{
"data": {
"lab": {
"id": 4,
"name": "abc123",
"title": "abc123",
"labels": Labels,
"team": Team,
"sourceRepo": SourceRepo,
"modified": ModificationMeta,
"versions": [LabVersion],
"activeSession": LabSession
}
}
}
labSession
Response
Returns a LabSession!
Arguments
Name | Description |
---|---|
labSessionID - String!
|
ID of the lab session |
Example
Query
query labSession($labSessionID: String!) {
labSession(labSessionID: $labSessionID) {
...LabSessionFragment
}
}
Variables
{"labSessionID": "abc123"}
Response
{
"data": {
"labSession": {
"id": "4",
"lab": Lab,
"team": Team,
"user": User,
"userType": "instruqt",
"userMeta": Map,
"sandboxMeta": Map,
"status": "unknown",
"events": [LabSessionEvent],
"url": "xyz789"
}
}
}
labSessions
Description
Get a list of the caller's sessions, optionally filtered by lab
Response
Returns [LabSession!]!
Example
Query
query labSessions(
$teamSlug: String!,
$labName: String
) {
labSessions(
teamSlug: $teamSlug,
labName: $labName
) {
...LabSessionFragment
}
}
Variables
{
"teamSlug": "abc123",
"labName": "abc123"
}
Response
{
"data": {
"labSessions": [
{
"id": 4,
"lab": Lab,
"team": Team,
"user": User,
"userType": "instruqt",
"userMeta": Map,
"sandboxMeta": Map,
"status": "unknown",
"events": [LabSessionEvent],
"url": "xyz789"
}
]
}
}
labs
Description
Get a list if Labs for the given team
Example
Query
query labs($teamSlug: String!) {
labs(teamSlug: $teamSlug) {
...LabFragment
}
}
Variables
{"teamSlug": "xyz789"}
Response
{
"data": {
"labs": [
{
"id": 4,
"name": "xyz789",
"title": "xyz789",
"labels": Labels,
"team": Team,
"sourceRepo": SourceRepo,
"modified": ModificationMeta,
"versions": [LabVersion],
"activeSession": LabSession
}
]
}
}
landingPage
Description
Gets a landing page by ID or a combination of team slug and page path
Response
Returns a LandingPage
Example
Query
query landingPage(
$landingPageID: ID,
$teamSlug: String,
$landingPagePath: String
) {
landingPage(
landingPageID: $landingPageID,
teamSlug: $teamSlug,
landingPagePath: $landingPagePath
) {
...LandingPageFragment
}
}
Variables
{
"landingPageID": "4",
"teamSlug": "xyz789",
"landingPagePath": "abc123"
}
Response
{
"data": {
"landingPage": {
"id": 4,
"team": Team,
"internalPageName": "abc123",
"path": "abc123",
"isPublished": false,
"unpublishedAt": "10:15:30Z",
"publishedAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"trackPlayLimit": 987,
"formEnabled": true,
"privacyPolicyUrl": "xyz789",
"termsAndConditionsUrl": "xyz789",
"pageTitle": "xyz789",
"seoDescription": "xyz789",
"robotsIndexingEnabled": false,
"backgroundColor": "abc123",
"textColor": "xyz789",
"logoUrl": "abc123",
"logoLink": "abc123",
"pageHeading": "xyz789",
"pageSubtitle": "xyz789",
"tracks": [LandingPageTrackEdge],
"currentUserClaimed": true
}
}
}
me
Description
Gets the currently logged in user
Response
Returns a User
Example
Query
query me {
me {
...UserFragment
}
}
Response
{
"data": {
"me": {
"id": 4,
"profile": UserProfile,
"details": UserDetails,
"organizations": [UserOrganizationEdge],
"teams": [UserTeamEdge],
"is_anonymous": false,
"is_global_admin": false,
"segments": ["instruqt_employee"],
"claims": [InviteClaim],
"accessibleTracks": [Track],
"reportItem": UserReportItem,
"supportVerificationHash": "abc123"
}
}
}
myTracks
Description
Get a list tracks of the current user
This will return all tracks that are in a user's library. Currently this only includes tracks for which the user has been invited.
Response
Returns [Track!]
Example
Query
query myTracks {
myTracks {
...TrackFragment
}
}
Response
{
"data": {
"myTracks": [
{
"id": 4,
"slug": "abc123",
"version": "abc123",
"revision": "10:15:30Z",
"type": "xyz789",
"title": "xyz789",
"teaser": "xyz789",
"description": "abc123",
"icon": "xyz789",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": true,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": true,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "xyz789",
"play_limit": 987,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 123,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": true,
"skipping_enabled": true,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": false,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
]
}
}
note
Description
Get a challenge note
Response
Returns a ChallengeNote
Arguments
Name | Description |
---|---|
noteID - String!
|
Unique ID |
Example
Query
query note($noteID: String!) {
note(noteID: $noteID) {
...ChallengeNoteFragment
}
}
Variables
{"noteID": "abc123"}
Response
{
"data": {
"note": {
"id": "4",
"contents": "xyz789",
"index": 123,
"type": "image",
"url": "abc123"
}
}
}
organization
Description
Get a specific organization
Response
Returns an Organization
Example
Query
query organization(
$organizationSlug: String,
$organizationID: String
) {
organization(
organizationSlug: $organizationSlug,
organizationID: $organizationID
) {
...OrganizationFragment
}
}
Variables
{
"organizationSlug": "xyz789",
"organizationID": "xyz789"
}
Response
{
"data": {
"organization": {
"id": 4,
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "abc123",
"logo": "xyz789",
"title": "xyz789",
"subtitle": "xyz789",
"slug": "xyz789",
"primary_link_text": "xyz789",
"primary_link_url": "abc123",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": OrganizationTheme,
"personal": false,
"features": OrganizationFeatures,
"invited": ["xyz789"],
"invites": [OrganizationInvite],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
}
}
organizationExists
Description
Check if an organization exists
Response
Returns a Boolean!
Arguments
Name | Description |
---|---|
organizationSlug - String!
|
Slug of the organization |
Example
Query
query organizationExists($organizationSlug: String!) {
organizationExists(organizationSlug: $organizationSlug)
}
Variables
{"organizationSlug": "abc123"}
Response
{"data": {"organizationExists": true}}
organizationInvite
Description
Get an organization invite
Response
Returns an OrganizationInvite
Arguments
Name | Description |
---|---|
token - String!
|
The token of the invite |
Example
Query
query organizationInvite($token: String!) {
organizationInvite(token: $token) {
...OrganizationInviteFragment
}
}
Variables
{"token": "xyz789"}
Response
{
"data": {
"organizationInvite": {
"email": "abc123",
"role": "owner",
"token_expired": true,
"organization": Organization,
"accepted_at": "10:15:30Z",
"created_by": User
}
}
}
organizationStatistics
Response
Returns an OrganizationStatistics
Arguments
Name | Description |
---|---|
organizationID - String
|
ID of the organization |
organizationSlug - String
|
Slug of the organization |
trackIDs - [String!]
|
Filter on specific track id's |
start - Time
|
Start time, defaults to 30 days ago |
end - Time
|
End time, defaults to now |
filterDevelopers - Boolean
|
Filter developers |
Example
Query
query organizationStatistics(
$organizationID: String,
$organizationSlug: String,
$trackIDs: [String!],
$start: Time,
$end: Time,
$filterDevelopers: Boolean
) {
organizationStatistics(
organizationID: $organizationID,
organizationSlug: $organizationSlug,
trackIDs: $trackIDs,
start: $start,
end: $end,
filterDevelopers: $filterDevelopers
) {
...OrganizationStatisticsFragment
}
}
Variables
{
"organizationID": "abc123",
"organizationSlug": "xyz789",
"trackIDs": ["xyz789"],
"start": "10:15:30Z",
"end": "10:15:30Z",
"filterDevelopers": false
}
Response
{
"data": {
"organizationStatistics": {
"started_total": 987,
"completed_total": 123,
"restarted_total": 987,
"organization_series": [OrganizationSeries],
"track_statistics": [TrackStatistics]
}
}
}
organizations
Description
Get the list of all organizations you have access to.
Response
Returns [Organization!]
Example
Query
query organizations {
organizations {
...OrganizationFragment
}
}
Response
{
"data": {
"organizations": [
{
"id": "4",
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "xyz789",
"logo": "abc123",
"title": "abc123",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "abc123",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "xyz789",
"api_key": "abc123",
"theme": OrganizationTheme,
"personal": false,
"features": OrganizationFeatures,
"invited": ["xyz789"],
"invites": [OrganizationInvite],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
]
}
}
playReportItem
Description
playReportItem retrieves a single play with related statistics
Response
Returns a PlayReportItem
Arguments
Name | Description |
---|---|
playID - String!
|
|
input - PlayReportInput!
|
Example
Query
query playReportItem(
$playID: String!,
$input: PlayReportInput!
) {
playReportItem(
playID: $playID,
input: $input
) {
...PlayReportItemFragment
}
}
Variables
{
"playID": "xyz789",
"input": PlayReportInput
}
Response
{
"data": {
"playReportItem": {
"id": 4,
"trackInvite": TrackInvite,
"hotStartPool": HotStartPool,
"landingPage": LandingPage,
"customParameters": [CustomParameter],
"track": Track,
"user": User,
"completionPercent": 987.65,
"timeSpent": 987,
"activity": [PlayActivity],
"playReview": TrackReview,
"totalChallenges": 123,
"completedChallenges": 987,
"startedAt": "10:15:30Z",
"mode": "embed",
"stoppedReason": "abc123",
"isDeveloperPlay": false,
"referrer": "xyz789"
}
}
}
playReports
Description
Returns a page of plays for a team
Response
Returns a PlayReportPage!
Arguments
Name | Description |
---|---|
input - PlayReportInput!
|
Example
Query
query playReports($input: PlayReportInput!) {
playReports(input: $input) {
...PlayReportPageFragment
}
}
Variables
{"input": PlayReportInput}
Response
{
"data": {
"playReports": {
"items": [PlayReportItem],
"totalItems": 987
}
}
}
sandbox
Description
Returns a sandbox with the given ID.
Example
Query
query sandbox($ID: ID!) {
sandbox(ID: $ID) {
...SandboxFragment
}
}
Variables
{"ID": "4"}
Response
{
"data": {
"sandbox": {
"id": 4,
"track": Track,
"state": "creating",
"invite": TrackInvite,
"hot_start_pool": HotStartPool,
"ttl": "10:15:30Z",
"created": "10:15:30Z",
"user": User,
"last_activity_at": "10:15:30Z"
}
}
}
sandboxConfig
Response
Returns a SandboxConfig!
Example
Query
query sandboxConfig(
$teamID: String,
$teamSlug: String,
$configID: String,
$configSlug: String
) {
sandboxConfig(
teamID: $teamID,
teamSlug: $teamSlug,
configID: $configID,
configSlug: $configSlug
) {
...SandboxConfigFragment
}
}
Variables
{
"teamID": "xyz789",
"teamSlug": "abc123",
"configID": "xyz789",
"configSlug": "xyz789"
}
Response
{
"data": {
"sandboxConfig": {
"id": 4,
"name": "abc123",
"slug": "abc123",
"version": 123,
"deleted": "10:15:30Z"
}
}
}
sandboxConfigVersion
Response
Returns a SandboxConfigVersion
Arguments
Name | Description |
---|---|
configVersionID - String!
|
ID of the config version |
Example
Query
query sandboxConfigVersion($configVersionID: String!) {
sandboxConfigVersion(configVersionID: $configVersionID) {
...SandboxConfigVersionFragment
}
}
Variables
{"configVersionID": "abc123"}
Response
{
"data": {
"sandboxConfigVersion": {
"id": "4",
"config": SandboxConfig,
"version": 987,
"description": "xyz789",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "abc123",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
}
}
sandboxConfigVersionDiff
Response
Returns a SandboxConfigVersionDiff
Arguments
Name | Description |
---|---|
sourceConfigVersion - SandboxConfigInput
|
The source config |
sourceConfigVersionID - String
|
The source config version ID |
targetConfigVersionID - String!
|
The target config version ID |
Example
Query
query sandboxConfigVersionDiff(
$sourceConfigVersion: SandboxConfigInput,
$sourceConfigVersionID: String,
$targetConfigVersionID: String!
) {
sandboxConfigVersionDiff(
sourceConfigVersion: $sourceConfigVersion,
sourceConfigVersionID: $sourceConfigVersionID,
targetConfigVersionID: $targetConfigVersionID
) {
...SandboxConfigVersionDiffFragment
}
}
Variables
{
"sourceConfigVersion": SandboxConfigInput,
"sourceConfigVersionID": "xyz789",
"targetConfigVersionID": "abc123"
}
Response
{
"data": {
"sandboxConfigVersionDiff": {
"diff": "xyz789"
}
}
}
sandboxConfigVersions
Response
Returns [SandboxConfigVersion!]
Arguments
Name | Description |
---|---|
teamID - String
|
ID of the team |
teamSlug - String
|
Slug of the team |
filter - SandboxConfigVersionsFilterInput
|
Filter for the result set |
Example
Query
query sandboxConfigVersions(
$teamID: String,
$teamSlug: String,
$filter: SandboxConfigVersionsFilterInput
) {
sandboxConfigVersions(
teamID: $teamID,
teamSlug: $teamSlug,
filter: $filter
) {
...SandboxConfigVersionFragment
}
}
Variables
{
"teamID": "abc123",
"teamSlug": "xyz789",
"filter": SandboxConfigVersionsFilterInput
}
Response
{
"data": {
"sandboxConfigVersions": [
{
"id": 4,
"config": SandboxConfig,
"version": 987,
"description": "abc123",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "xyz789",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
]
}
}
sandboxConfigs
Response
Returns [SandboxConfig!]
Example
Query
query sandboxConfigs(
$teamID: String,
$teamSlug: String
) {
sandboxConfigs(
teamID: $teamID,
teamSlug: $teamSlug
) {
...SandboxConfigFragment
}
}
Variables
{
"teamID": "xyz789",
"teamSlug": "abc123"
}
Response
{
"data": {
"sandboxConfigs": [
{
"id": "4",
"name": "xyz789",
"slug": "abc123",
"version": 987,
"deleted": "10:15:30Z"
}
]
}
}
sandboxes
Description
Returns an array of filtered sandboxes
Response
Returns a SandboxConnection
Arguments
Name | Description |
---|---|
teamID - String
|
ID of the team |
teamSlug - String
|
Slug of the team |
filter - SandboxFilterInput
|
Filter for the query |
paging - Pagination
|
Pagination parameters |
ordering - Ordering
|
Sorting parameters |
Example
Query
query sandboxes(
$teamID: String,
$teamSlug: String,
$filter: SandboxFilterInput,
$paging: Pagination,
$ordering: Ordering
) {
sandboxes(
teamID: $teamID,
teamSlug: $teamSlug,
filter: $filter,
paging: $paging,
ordering: $ordering
) {
...SandboxConnectionFragment
}
}
Variables
{
"teamID": "abc123",
"teamSlug": "xyz789",
"filter": SandboxFilterInput,
"paging": Pagination,
"ordering": Ordering
}
Response
{
"data": {
"sandboxes": {
"edges": [SandboxEdge],
"nodes": [Sandbox],
"pageInfo": PageInfo,
"totalCount": 987,
"pageCount": 987
}
}
}
searchTerraformModules
Description
Returns all terraform modules for the given query.
Response
Returns a SearchTerraformModuleResults
Arguments
Name | Description |
---|---|
query - String!
|
Example
Query
query searchTerraformModules($query: String!) {
searchTerraformModules(query: $query) {
...SearchTerraformModuleResultsFragment
}
}
Variables
{"query": "abc123"}
Response
{
"data": {
"searchTerraformModules": {
"modules": [TerraformModule]
}
}
}
statistics
Description
Get statistics for a track
Either trackID must be specified, or both trackSlug and teamSlug
Response
Returns a Statistics
Arguments
Name | Description |
---|---|
trackID - String
|
ID of the track |
trackSlug - String
|
Slug of the track |
organizationSlug - String
|
Slug of the organization |
teamSlug - String
|
Slug of the team |
start - Time
|
Start time, defaults to 30 days ago |
end - Time
|
End time, defaults to now |
filterDevelopers - Boolean
|
Filter developers |
Example
Query
query statistics(
$trackID: String,
$trackSlug: String,
$organizationSlug: String,
$teamSlug: String,
$start: Time,
$end: Time,
$filterDevelopers: Boolean
) {
statistics(
trackID: $trackID,
trackSlug: $trackSlug,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug,
start: $start,
end: $end,
filterDevelopers: $filterDevelopers
) {
...StatisticsFragment
}
}
Variables
{
"trackID": "abc123",
"trackSlug": "xyz789",
"organizationSlug": "abc123",
"teamSlug": "abc123",
"start": "10:15:30Z",
"end": "10:15:30Z",
"filterDevelopers": false
}
Response
{"data": {"statistics": {"track": TrackStatistics}}}
student
Description
Get the student for a given invite id and user id.
Response
Returns a Student
Example
Query
query student(
$inviteID: ID!,
$userID: ID!
) {
student(
inviteID: $inviteID,
userID: $userID
) {
...StudentFragment
}
}
Variables
{"inviteID": 4, "userID": 4}
Response
{
"data": {
"student": {
"id": "4",
"user": User,
"track": Track,
"challenge": Challenge,
"currentChallengeAttempts": [ChallengeAttempt],
"last_activity_at": "10:15:30Z",
"completed_at": "10:15:30Z",
"accessed_at": "10:15:30Z",
"inspectable": false,
"claim": InviteClaim,
"activeSandboxesTotal": 987,
"raisedHandAt": "10:15:30Z",
"inviteTracks": [Track],
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
}
}
studentStatistics
Description
Get the statistics related to the students.
Response
Returns a StudentStatistics
Arguments
Name | Description |
---|---|
inviteID - ID!
|
ID of the invite. |
Example
Query
query studentStatistics($inviteID: ID!) {
studentStatistics(inviteID: $inviteID) {
...StudentStatisticsFragment
}
}
Variables
{"inviteID": 4}
Response
{"data": {"studentStatistics": {"inProgressTotal": 123, "completedTotal": 123}}}
students
Description
Get the students for a given invite id.
Response
Returns [Student!]
Arguments
Name | Description |
---|---|
inviteID - ID!
|
ID of the invite. |
Example
Query
query students($inviteID: ID!) {
students(inviteID: $inviteID) {
...StudentFragment
}
}
Variables
{"inviteID": 4}
Response
{
"data": {
"students": [
{
"id": 4,
"user": User,
"track": Track,
"challenge": Challenge,
"currentChallengeAttempts": [ChallengeAttempt],
"last_activity_at": "10:15:30Z",
"completed_at": "10:15:30Z",
"accessed_at": "10:15:30Z",
"inspectable": false,
"claim": InviteClaim,
"activeSandboxesTotal": 123,
"raisedHandAt": "10:15:30Z",
"inviteTracks": [Track],
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
]
}
}
tab
Description
Get a challenge tab
Response
Returns a ChallengeTab
Arguments
Name | Description |
---|---|
tabID - String!
|
Unique ID |
Example
Query
query tab($tabID: String!) {
tab(tabID: $tabID) {
...ChallengeTabFragment
}
}
Variables
{"tabID": "xyz789"}
Response
{
"data": {
"tab": {
"id": 4,
"index": 987,
"hostname": "xyz789",
"path": "abc123",
"port": 987,
"target": "xyz789",
"title": "abc123",
"type": "service",
"url": "xyz789",
"new_window": false,
"workdir": "abc123",
"cmd": "abc123",
"custom_headers": [CustomHeader],
"custom_response_headers": [CustomHeader]
}
}
}
team
Description
Get a specific team
Response
Returns a Team
Example
Query
query team(
$teamSlug: String,
$teamID: String
) {
team(
teamSlug: $teamSlug,
teamID: $teamID
) {
...TeamFragment
}
}
Variables
{
"teamSlug": "abc123",
"teamID": "xyz789"
}
Response
{
"data": {
"team": {
"id": 4,
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": false,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "xyz789",
"logo": "xyz789",
"title": "abc123",
"subtitle": "abc123",
"slug": "xyz789",
"primary_link_text": "abc123",
"primary_link_url": "abc123",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": true,
"features": TeamFeatures,
"invited": ["xyz789"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 123,
"enabledRepositories": ["xyz789"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "abc123"
}
}
}
teamExists
Description
Check if a team exists
teamInvite
Description
Get a team invite
Response
Returns a TeamInvite
Arguments
Name | Description |
---|---|
token - String!
|
The token of the invite |
Example
Query
query teamInvite($token: String!) {
teamInvite(token: $token) {
...TeamInviteFragment
}
}
Variables
{"token": "abc123"}
Response
{
"data": {
"teamInvite": {
"email": "xyz789",
"role": "owner",
"token_expired": true,
"team": Team,
"accepted_at": "10:15:30Z",
"created_by": User
}
}
}
teamSecret
Response
Returns a Secret!
Example
Query
query teamSecret(
$teamSlug: String,
$teamID: String,
$name: String!
) {
teamSecret(
teamSlug: $teamSlug,
teamID: $teamID,
name: $name
) {
...SecretFragment
}
}
Variables
{
"teamSlug": "xyz789",
"teamID": "xyz789",
"name": "abc123"
}
Response
{
"data": {
"teamSecret": {
"name": "abc123",
"description": "abc123",
"teamID": "abc123",
"created_at": "10:15:30Z",
"created_by": User,
"updated_at": "10:15:30Z",
"updated_by": User,
"tracks": [Track],
"config_versions": [SandboxConfigVersion]
}
}
}
teamSecrets
Response
Returns [Secret!]
Example
Query
query teamSecrets(
$teamSlug: String,
$teamID: String
) {
teamSecrets(
teamSlug: $teamSlug,
teamID: $teamID
) {
...SecretFragment
}
}
Variables
{
"teamSlug": "abc123",
"teamID": "xyz789"
}
Response
{
"data": {
"teamSecrets": [
{
"name": "xyz789",
"description": "xyz789",
"teamID": "xyz789",
"created_at": "10:15:30Z",
"created_by": User,
"updated_at": "10:15:30Z",
"updated_by": User,
"tracks": [Track],
"config_versions": [SandboxConfigVersion]
}
]
}
}
teamStatistics
Response
Returns a TeamStatistics
Example
Query
query teamStatistics(
$teamID: String,
$teamSlug: String,
$trackIDs: [String!],
$start: Time,
$end: Time,
$filterDevelopers: Boolean
) {
teamStatistics(
teamID: $teamID,
teamSlug: $teamSlug,
trackIDs: $trackIDs,
start: $start,
end: $end,
filterDevelopers: $filterDevelopers
) {
...TeamStatisticsFragment
}
}
Variables
{
"teamID": "abc123",
"teamSlug": "xyz789",
"trackIDs": ["xyz789"],
"start": "10:15:30Z",
"end": "10:15:30Z",
"filterDevelopers": false
}
Response
{
"data": {
"teamStatistics": {
"started_total": 987,
"completed_total": 987,
"restarted_total": 123,
"team_series": [TeamSeries],
"track_statistics": [TrackStatistics]
}
}
}
teams
Description
Get the list of all teams you have access to.
Response
Returns [Team!]
Example
Query
query teams {
teams {
...TeamFragment
}
}
Response
{
"data": {
"teams": [
{
"id": "4",
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": false,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "xyz789",
"logo": "abc123",
"title": "abc123",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "xyz789",
"primary_link_url": "abc123",
"secondary_link_text": "abc123",
"secondary_link_url": "xyz789",
"api_key": "xyz789",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": false,
"features": TeamFeatures,
"invited": ["xyz789"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 987,
"enabledRepositories": ["xyz789"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "abc123"
}
]
}
}
terraformModule
Description
Returns a terraform module for the given id.
Response
Returns a TerraformModule
Example
Query
query terraformModule(
$id: ID,
$module: String,
$version: String
) {
terraformModule(
id: $id,
module: $module,
version: $version
) {
...TerraformModuleFragment
}
}
Variables
{
"id": "4",
"module": "xyz789",
"version": "xyz789"
}
Response
{
"data": {
"terraformModule": {
"id": "4",
"name": "xyz789",
"module": "xyz789",
"description": "xyz789",
"source": "abc123",
"provider": "abc123",
"version": "xyz789",
"availableVersions": ["xyz789"],
"logo": "abc123",
"publishedAt": "10:15:30Z",
"namespace": "xyz789",
"owner": "xyz789",
"inputs": [TerraformModuleInput],
"outputs": [TerraformModuleOutput]
}
}
}
track
Description
Get a specific track
Either trackID must be specified, or both trackSlug and teamlug
Response
Returns a Track
Example
Query
query track(
$trackID: String,
$trackSlug: String,
$organizationSlug: String,
$teamSlug: String,
$userID: String,
$inviteID: String
) {
track(
trackID: $trackID,
trackSlug: $trackSlug,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug,
userID: $userID,
inviteID: $inviteID
) {
...TrackFragment
}
}
Variables
{
"trackID": "xyz789",
"trackSlug": "abc123",
"organizationSlug": "xyz789",
"teamSlug": "abc123",
"userID": "xyz789",
"inviteID": "abc123"
}
Response
{
"data": {
"track": {
"id": "4",
"slug": "xyz789",
"version": "abc123",
"revision": "10:15:30Z",
"type": "abc123",
"title": "abc123",
"teaser": "abc123",
"description": "xyz789",
"icon": "abc123",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": true,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": false,
"maintenance": false,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 123,
"median_starttime": 123,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 123,
"show_timer": true,
"skipping_enabled": true,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": false,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
}
}
trackConfig
Description
Get the config for a track
Note: you need to be developer of that track to access this
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
trackID - String!
|
Unique ID |
Example
Query
query trackConfig($trackID: String!) {
trackConfig(trackID: $trackID) {
...TrackConfigFragment
}
}
Variables
{"trackID": "abc123"}
Response
{
"data": {
"trackConfig": {
"id": "4",
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
trackConfigPresets
Description
Get presets for track config
Response
Returns a TrackConfigPresets
Example
Query
query trackConfigPresets {
trackConfigPresets {
...TrackConfigPresetsFragment
}
}
Response
{
"data": {
"trackConfigPresets": {
"containers": [ContainerConfigPreset],
"virtualmachines": [VirtualMachineConfigPreset],
"machinetypes": [MachineTypePreset],
"googlecloudmachinetypes": [
GoogleCloudMachineTypePreset
]
}
}
}
trackExists
Description
Check if a track exists
Response
Returns a Boolean!
Example
Query
query trackExists(
$trackSlug: String!,
$organizationSlug: String,
$teamSlug: String
) {
trackExists(
trackSlug: $trackSlug,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug
)
}
Variables
{
"trackSlug": "xyz789",
"organizationSlug": "xyz789",
"teamSlug": "abc123"
}
Response
{"data": {"trackExists": false}}
trackInvite
Description
Get a specific invite for a track
Response
Returns a TrackInvite
Arguments
Name | Description |
---|---|
inviteID - String!
|
Unique ID |
Example
Query
query trackInvite($inviteID: String!) {
trackInvite(inviteID: $inviteID) {
...TrackInviteFragment
}
}
Variables
{"inviteID": "abc123"}
Response
{
"data": {
"trackInvite": {
"id": 4,
"title": "xyz789",
"publicTitle": "abc123",
"publicDescription": "abc123",
"tracks": [Track],
"trackEdges": [TrackInviteTrackEdge],
"authors": [TrackInviteAuthor],
"trackLibrary": TrackLibraryEntryConnection,
"organization": Organization,
"team": Team,
"accessSetting": "anyone",
"inviteLimit": 123,
"inviteCount": 123,
"claimCount": 987,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 987,
"playTTL": 123,
"created": "10:15:30Z",
"last_updated": "10:15:30Z",
"allowAnonymous": true,
"allowedEmailAddresses": ["xyz789"],
"allowedEmailAddressesOnly": false,
"currentUserAllowed": true,
"currentUserClaim": InviteClaim,
"currentUserClaimed": false,
"claims": [InviteClaim],
"activeUsers": [UserActivity],
"plays": [InvitePlay],
"type": "self_paced",
"status": "active",
"daysUntil": 123,
"enableLearnerSharing": false,
"canClaim": false,
"runtimeParameters": RuntimeParameters,
"shareMethod": "link",
"deletedAt": "10:15:30Z",
"emailOwnershipConfirmationRequired": false,
"instructorToolsEnabled": false,
"screenSharingEnabled": false,
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
}
}
trackInviteClaim
Description
Get an InviteClaim for a specific invite and user
Either claimID or a combination of inviteID and userID must be specified
Response
Returns an InviteClaim
Example
Query
query trackInviteClaim(
$claimID: String,
$inviteID: String,
$userID: String
) {
trackInviteClaim(
claimID: $claimID,
inviteID: $inviteID,
userID: $userID
) {
...InviteClaimFragment
}
}
Variables
{
"claimID": "abc123",
"inviteID": "xyz789",
"userID": "abc123"
}
Response
{
"data": {
"trackInviteClaim": {
"id": 4,
"username": "abc123",
"user": User,
"trackInvite": TrackInvite,
"playLimit": 987,
"playCount": 987,
"playTTL": "10:15:30Z",
"claimedAt": "10:15:30Z",
"customParameters": [CustomParameter],
"events": [InviteEvent],
"trackLibrary": [TrackLibraryEntry],
"student": Student
}
}
}
trackInvites
Description
Get all invites for a team
Either teamSlug or teamID must be specified
Response
Returns [TrackInvite!]
Arguments
Name | Description |
---|---|
organizationSlug - String
|
Slug of the organization |
organizationID - String
|
ID of the organization |
teamSlug - String
|
Slug of the team |
teamID - String
|
ID of the team |
filters - InviteFilters
|
Filter invite |
Example
Query
query trackInvites(
$organizationSlug: String,
$organizationID: String,
$teamSlug: String,
$teamID: String,
$filters: InviteFilters
) {
trackInvites(
organizationSlug: $organizationSlug,
organizationID: $organizationID,
teamSlug: $teamSlug,
teamID: $teamID,
filters: $filters
) {
...TrackInviteFragment
}
}
Variables
{
"organizationSlug": "xyz789",
"organizationID": "abc123",
"teamSlug": "abc123",
"teamID": "xyz789",
"filters": InviteFilters
}
Response
{
"data": {
"trackInvites": [
{
"id": 4,
"title": "xyz789",
"publicTitle": "xyz789",
"publicDescription": "xyz789",
"tracks": [Track],
"trackEdges": [TrackInviteTrackEdge],
"authors": [TrackInviteAuthor],
"trackLibrary": TrackLibraryEntryConnection,
"organization": Organization,
"team": Team,
"accessSetting": "anyone",
"inviteLimit": 123,
"inviteCount": 123,
"claimCount": 123,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 987,
"playTTL": 987,
"created": "10:15:30Z",
"last_updated": "10:15:30Z",
"allowAnonymous": false,
"allowedEmailAddresses": ["xyz789"],
"allowedEmailAddressesOnly": true,
"currentUserAllowed": false,
"currentUserClaim": InviteClaim,
"currentUserClaimed": false,
"claims": [InviteClaim],
"activeUsers": [UserActivity],
"plays": [InvitePlay],
"type": "self_paced",
"status": "active",
"daysUntil": 987,
"enableLearnerSharing": false,
"canClaim": true,
"runtimeParameters": RuntimeParameters,
"shareMethod": "link",
"deletedAt": "10:15:30Z",
"emailOwnershipConfirmationRequired": true,
"instructorToolsEnabled": false,
"screenSharingEnabled": true,
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
]
}
}
trackLibrary
Description
Get a list tracks of the current user
This will return all tracks that are in a user's library. Currently this only includes tracks for which the user has been invited.
Response
Returns a TrackLibraryEntryConnection
Example
Query
query trackLibrary(
$after: String,
$first: Int
) {
trackLibrary(
after: $after,
first: $first
) {
...TrackLibraryEntryConnectionFragment
}
}
Variables
{"after": "xyz789", "first": 123}
Response
{
"data": {
"trackLibrary": {
"edges": [TrackLibraryEntryEdge],
"nodes": [TrackLibraryEntry],
"pageInfo": PageInfo,
"totalCount": 123
}
}
}
trackPlayLimits
Description
Get all the limits configured for the given team
Response
Returns [TrackPlayLimit!]!
Example
Query
query trackPlayLimits(
$teamID: String,
$teamSlug: String
) {
trackPlayLimits(
teamID: $teamID,
teamSlug: $teamSlug
) {
...TrackPlayLimitFragment
}
}
Variables
{
"teamID": "abc123",
"teamSlug": "abc123"
}
Response
{
"data": {
"trackPlayLimits": [
{
"track": Track,
"rollingMonth": 123,
"rollingIPAddressPerHour": 123,
"calendarMonth": 987,
"concurrentPlaysPerIP": 123
}
]
}
}
trackReview
Description
Gets a track review by ID
Response
Returns a TrackReview!
Arguments
Name | Description |
---|---|
reviewID - ID!
|
Example
Query
query trackReview($reviewID: ID!) {
trackReview(reviewID: $reviewID) {
...TrackReviewFragment
}
}
Variables
{"reviewID": 4}
Response
{
"data": {
"trackReview": {
"id": "4",
"track": Track,
"challenge": Challenge,
"user": User,
"play": Play,
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"score": 123,
"content": "xyz789"
}
}
}
trackReviews
Description
Get reviews for a specific track
A trackID must be specified
Response
Returns a TrackReviewConnection
Example
Query
query trackReviews(
$trackID: String!,
$after: String,
$first: Int
) {
trackReviews(
trackID: $trackID,
after: $after,
first: $first
) {
...TrackReviewConnectionFragment
}
}
Variables
{
"trackID": "abc123",
"after": "xyz789",
"first": 123
}
Response
{
"data": {
"trackReviews": {
"edges": [TrackReviewEdge],
"nodes": [TrackReview],
"pageInfo": PageInfo,
"totalCount": 987
}
}
}
trackScript
Description
Get a specific challenge script
Note: you need to be developer of that track to access this
Response
Returns a TrackScript
Arguments
Name | Description |
---|---|
scriptID - String!
|
Unique ID |
Example
Query
query trackScript($scriptID: String!) {
trackScript(scriptID: $scriptID) {
...TrackScriptFragment
}
}
Variables
{"scriptID": "abc123"}
Response
{
"data": {
"trackScript": {
"id": "4",
"action": "xyz789",
"contents": "abc123",
"host": "abc123"
}
}
}
trackScripts
Description
Get the scripts for a track
Note: you need to be developer of that track to access this
Response
Returns [TrackScript!]
Arguments
Name | Description |
---|---|
trackID - String!
|
Unique ID |
Example
Query
query trackScripts($trackID: String!) {
trackScripts(trackID: $trackID) {
...TrackScriptFragment
}
}
Variables
{"trackID": "abc123"}
Response
{
"data": {
"trackScripts": [
{
"id": "4",
"action": "xyz789",
"contents": "abc123",
"host": "abc123"
}
]
}
}
tracks
Description
Get a list of tracks
If either teamSlug or teamID is set, it will return only tracks for that team. Otherwise it will return tracks from all teams
Response
Returns [Track!]
Arguments
Name | Description |
---|---|
organizationSlug - String
|
Slug of the organization |
organizationID - String
|
ID of the organization |
teamSlug - String
|
Slug of the team |
teamID - String
|
ID of the team |
orderBy - TrackOrder
|
Order results, defaults to title_ASC |
invitable - Boolean
|
Wether we want to filter out tracks that are not invitable |
Example
Query
query tracks(
$organizationSlug: String,
$organizationID: String,
$teamSlug: String,
$teamID: String,
$orderBy: TrackOrder,
$invitable: Boolean
) {
tracks(
organizationSlug: $organizationSlug,
organizationID: $organizationID,
teamSlug: $teamSlug,
teamID: $teamID,
orderBy: $orderBy,
invitable: $invitable
) {
...TrackFragment
}
}
Variables
{
"organizationSlug": "xyz789",
"organizationID": "xyz789",
"teamSlug": "xyz789",
"teamID": "abc123",
"orderBy": "last_update_ASC",
"invitable": false
}
Response
{
"data": {
"tracks": [
{
"id": 4,
"slug": "xyz789",
"version": "abc123",
"revision": "10:15:30Z",
"type": "abc123",
"title": "xyz789",
"teaser": "abc123",
"description": "xyz789",
"icon": "abc123",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "xyz789",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": false,
"published": true,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 123,
"show_timer": true,
"skipping_enabled": true,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "abc123",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "abc123",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
]
}
}
user
Description
Gets a user
One of userID, email or slug must be specified
Response
Returns a User
Example
Query
query user(
$userID: String,
$email: String,
$slug: String
) {
user(
userID: $userID,
email: $email,
slug: $slug
) {
...UserFragment
}
}
Variables
{
"userID": "xyz789",
"email": "xyz789",
"slug": "xyz789"
}
Response
{
"data": {
"user": {
"id": 4,
"profile": UserProfile,
"details": UserDetails,
"organizations": [UserOrganizationEdge],
"teams": [UserTeamEdge],
"is_anonymous": false,
"is_global_admin": false,
"segments": ["instruqt_employee"],
"claims": [InviteClaim],
"accessibleTracks": [Track],
"reportItem": UserReportItem,
"supportVerificationHash": "xyz789"
}
}
}
userConsentedToPrivacyPolicy
Description
Check if the user consented to the team's privacy policy
userExists
Description
Check whether the user exists
userInOrganization
Description
Check if the currently logged in user is member of the given organiztion
Response
Returns a Boolean!
Arguments
Name | Description |
---|---|
organizationSlug - String!
|
Slug of the organization |
Example
Query
query userInOrganization($organizationSlug: String!) {
userInOrganization(organizationSlug: $organizationSlug)
}
Variables
{"organizationSlug": "xyz789"}
Response
{"data": {"userInOrganization": false}}
userInTeam
Description
Check if the currently logged in user is member of the given team
userIsTrackDeveloper
Description
Checks if the currently logged in user is a developer for the given track
Either trackID must be specified, or both trackSlug and teamSlug
Response
Returns a Boolean!
Example
Query
query userIsTrackDeveloper(
$trackID: String,
$trackSlug: String,
$organizationSlug: String,
$teamSlug: String
) {
userIsTrackDeveloper(
trackID: $trackID,
trackSlug: $trackSlug,
organizationSlug: $organizationSlug,
teamSlug: $teamSlug
)
}
Variables
{
"trackID": "abc123",
"trackSlug": "xyz789",
"organizationSlug": "xyz789",
"teamSlug": "abc123"
}
Response
{"data": {"userIsTrackDeveloper": false}}
userTrackInvites
Description
Get all the accepted invites or a user
Response
Returns [TrackInvite!]
Arguments
Name | Description |
---|---|
userID - String!
|
Example
Query
query userTrackInvites($userID: String!) {
userTrackInvites(userID: $userID) {
...TrackInviteFragment
}
}
Variables
{"userID": "xyz789"}
Response
{
"data": {
"userTrackInvites": [
{
"id": "4",
"title": "xyz789",
"publicTitle": "xyz789",
"publicDescription": "abc123",
"tracks": [Track],
"trackEdges": [TrackInviteTrackEdge],
"authors": [TrackInviteAuthor],
"trackLibrary": TrackLibraryEntryConnection,
"organization": Organization,
"team": Team,
"accessSetting": "anyone",
"inviteLimit": 123,
"inviteCount": 987,
"claimCount": 987,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 123,
"playTTL": 123,
"created": "10:15:30Z",
"last_updated": "10:15:30Z",
"allowAnonymous": true,
"allowedEmailAddresses": ["abc123"],
"allowedEmailAddressesOnly": true,
"currentUserAllowed": false,
"currentUserClaim": InviteClaim,
"currentUserClaimed": false,
"claims": [InviteClaim],
"activeUsers": [UserActivity],
"plays": [InvitePlay],
"type": "self_paced",
"status": "active",
"daysUntil": 123,
"enableLearnerSharing": true,
"canClaim": true,
"runtimeParameters": RuntimeParameters,
"shareMethod": "link",
"deletedAt": "10:15:30Z",
"emailOwnershipConfirmationRequired": false,
"instructorToolsEnabled": true,
"screenSharingEnabled": false,
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
]
}
}
userWithSlugExists
Description
Check whether the user exists
viewInvite
Description
Get a specific invite for a track
This query is similar to trackInvite(inviteID), but will throw an error when the invite has expired
Response
Returns a TrackInvite
Arguments
Name | Description |
---|---|
inviteID - String!
|
Unique ID |
Example
Query
query viewInvite($inviteID: String!) {
viewInvite(inviteID: $inviteID) {
...TrackInviteFragment
}
}
Variables
{"inviteID": "xyz789"}
Response
{
"data": {
"viewInvite": {
"id": 4,
"title": "xyz789",
"publicTitle": "xyz789",
"publicDescription": "abc123",
"tracks": [Track],
"trackEdges": [TrackInviteTrackEdge],
"authors": [TrackInviteAuthor],
"trackLibrary": TrackLibraryEntryConnection,
"organization": Organization,
"team": Team,
"accessSetting": "anyone",
"inviteLimit": 123,
"inviteCount": 987,
"claimCount": 987,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 987,
"playTTL": 123,
"created": "10:15:30Z",
"last_updated": "10:15:30Z",
"allowAnonymous": false,
"allowedEmailAddresses": ["xyz789"],
"allowedEmailAddressesOnly": true,
"currentUserAllowed": true,
"currentUserClaim": InviteClaim,
"currentUserClaimed": true,
"claims": [InviteClaim],
"activeUsers": [UserActivity],
"plays": [InvitePlay],
"type": "self_paced",
"status": "active",
"daysUntil": 987,
"enableLearnerSharing": true,
"canClaim": false,
"runtimeParameters": RuntimeParameters,
"shareMethod": "link",
"deletedAt": "10:15:30Z",
"emailOwnershipConfirmationRequired": false,
"instructorToolsEnabled": true,
"screenSharingEnabled": true,
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
}
}
virtualBrowserCheck
Description
Returns a single Virtual Browser Check corresponding to the given challenge and host.
Response
Returns a VirtualBrowserCheck!
Example
Query
query virtualBrowserCheck(
$challenge: String!,
$host: String!
) {
virtualBrowserCheck(
challenge: $challenge,
host: $host
) {
...VirtualBrowserCheckFragment
}
}
Variables
{
"challenge": "xyz789",
"host": "xyz789"
}
Response
{
"data": {
"virtualBrowserCheck": {
"id": 4,
"challenge": Challenge,
"host": "abc123",
"browserLocation": Location,
"element": [HtmlElement],
"innerText": [HtmlElement]
}
}
}
virtualBrowserChecks
Description
Returns all Virtual Browser Checks corresponding to the given track.
Response
Returns [VirtualBrowserCheck!]!
Arguments
Name | Description |
---|---|
track - String!
|
Example
Query
query virtualBrowserChecks($track: String!) {
virtualBrowserChecks(track: $track) {
...VirtualBrowserCheckFragment
}
}
Variables
{"track": "abc123"}
Response
{
"data": {
"virtualBrowserChecks": [
{
"id": "4",
"challenge": Challenge,
"host": "abc123",
"browserLocation": Location,
"element": [HtmlElement],
"innerText": [HtmlElement]
}
]
}
}
webhooks
Description
Returns all a teams webhooks
Response
Returns [Webhook!]!
Example
Query
query webhooks(
$teamID: String,
$teamSlug: String
) {
webhooks(
teamID: $teamID,
teamSlug: $teamSlug
) {
...WebhookFragment
}
}
Variables
{
"teamID": "abc123",
"teamSlug": "abc123"
}
Response
{
"data": {
"webhooks": [
{
"id": 4,
"name": "abc123",
"url": "abc123",
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"events": ["abc123"],
"custom_headers": [CustomHeader]
}
]
}
}
Mutations
archiveHotStartPool
Description
Archive hot start pool
Response
Returns a HotStartPool
Arguments
Name | Description |
---|---|
poolID - ID!
|
ID of hot start pool to archive |
Example
Query
mutation archiveHotStartPool($poolID: ID!) {
archiveHotStartPool(poolID: $poolID) {
...HotStartPoolFragment
}
}
Variables
{"poolID": 4}
Response
{
"data": {
"archiveHotStartPool": {
"id": "4",
"type": "dedicated",
"size": 987,
"created": "10:15:30Z",
"deleted": "10:15:30Z",
"name": "xyz789",
"auto_refill": false,
"starts_at": "10:15:30Z",
"ends_at": "10:15:30Z",
"created_by": User,
"team": Team,
"tracks": [HotStartPoolTrackEdge],
"configs": [HotStartConfigTrackEdge],
"status": "Running",
"region": "xyz789"
}
}
}
buildTrack
Description
Build a track
This converts the track config into a participant environment definition. After a build, the (updated) track is available for new participant.
Note: you need to be a developer for this track
changeTeamUserRole
Description
Promote or demote a user within a team.
Response
Returns a Team
Example
Query
mutation changeTeamUserRole(
$teamID: String!,
$userID: String!,
$role: RoleName!
) {
changeTeamUserRole(
teamID: $teamID,
userID: $userID,
role: $role
) {
...TeamFragment
}
}
Variables
{
"teamID": "xyz789",
"userID": "xyz789",
"role": "owner"
}
Response
{
"data": {
"changeTeamUserRole": {
"id": 4,
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": true,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "abc123",
"logo": "xyz789",
"title": "xyz789",
"subtitle": "abc123",
"slug": "xyz789",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "xyz789",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": false,
"features": TeamFeatures,
"invited": ["abc123"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 987,
"enabledRepositories": ["xyz789"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "abc123"
}
}
}
changeUserRole
Description
Promote or demote a user within an organization.
Response
Returns an Organization
Example
Query
mutation changeUserRole(
$organizationID: String!,
$userID: String!,
$role: RoleName!
) {
changeUserRole(
organizationID: $organizationID,
userID: $userID,
role: $role
) {
...OrganizationFragment
}
}
Variables
{
"organizationID": "abc123",
"userID": "xyz789",
"role": "owner"
}
Response
{
"data": {
"changeUserRole": {
"id": "4",
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "xyz789",
"logo": "abc123",
"title": "xyz789",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "abc123",
"primary_link_url": "abc123",
"secondary_link_text": "abc123",
"secondary_link_url": "xyz789",
"api_key": "abc123",
"theme": OrganizationTheme,
"personal": true,
"features": OrganizationFeatures,
"invited": ["xyz789"],
"invites": [OrganizationInvite],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
}
}
checkChallenge
Description
Runs the check script of the challenge
Response
Returns a Challenge
Example
Query
mutation checkChallenge(
$challengeID: String!,
$userID: String,
$inviteID: String,
$waitForCleanup: Boolean
) {
checkChallenge(
challengeID: $challengeID,
userID: $userID,
inviteID: $inviteID,
waitForCleanup: $waitForCleanup
) {
...ChallengeFragment
}
}
Variables
{
"challengeID": "abc123",
"userID": "xyz789",
"inviteID": "abc123",
"waitForCleanup": false
}
Response
{
"data": {
"checkChallenge": {
"id": 4,
"track": Track,
"answers": ["abc123"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": true,
"difficulty": "abc123",
"index": 987,
"notes": [ChallengeNote],
"permalink": "xyz789",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [123],
"hasSingleAnswer": false,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 987,
"started": 987,
"completed": 987,
"failed": 123,
"failMessage": "xyz789",
"title": "abc123",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": false
}
}
}
checkQuiz
Description
Check if a quiz type challenge is correct
Response
Returns a Challenge
Example
Query
mutation checkQuiz(
$challengeID: String!,
$userID: String,
$inviteID: String,
$solution: [Int!]!
) {
checkQuiz(
challengeID: $challengeID,
userID: $userID,
inviteID: $inviteID,
solution: $solution
) {
...ChallengeFragment
}
}
Variables
{
"challengeID": "xyz789",
"userID": "xyz789",
"inviteID": "xyz789",
"solution": [987]
}
Response
{
"data": {
"checkQuiz": {
"id": "4",
"track": Track,
"answers": ["xyz789"],
"assignment": "xyz789",
"attempts": [ChallengeAttempt],
"can_check": false,
"difficulty": "abc123",
"index": 123,
"notes": [ChallengeNote],
"permalink": "abc123",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [123],
"hasSingleAnswer": false,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 123,
"started": 123,
"completed": 987,
"failed": 123,
"failMessage": "abc123",
"title": "xyz789",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": false
}
}
}
claimLandingPage
Response
Returns a LandingPageClaim
Arguments
Name | Description |
---|---|
landingPageID - ID!
|
|
userDetails - UserDetailsInput
|
Example
Query
mutation claimLandingPage(
$landingPageID: ID!,
$userDetails: UserDetailsInput
) {
claimLandingPage(
landingPageID: $landingPageID,
userDetails: $userDetails
) {
...LandingPageClaimFragment
}
}
Variables
{"landingPageID": 4, "userDetails": UserDetailsInput}
Response
{
"data": {
"claimLandingPage": {
"id": 4,
"claimedAt": "10:15:30Z",
"landingPage": LandingPage,
"user": User
}
}
}
claimOrganizationInvite
Description
Claim an organizatation invite
Response
Returns an OrganizationInvite
Arguments
Name | Description |
---|---|
token - String!
|
The token you want to claim an invite for |
Example
Query
mutation claimOrganizationInvite($token: String!) {
claimOrganizationInvite(token: $token) {
...OrganizationInviteFragment
}
}
Variables
{"token": "abc123"}
Response
{
"data": {
"claimOrganizationInvite": {
"email": "xyz789",
"role": "owner",
"token_expired": false,
"organization": Organization,
"accepted_at": "10:15:30Z",
"created_by": User
}
}
}
claimTeamInvites
Description
Claims team invites associated with the current user's email.
Response
Returns a User
Arguments
Name | Description |
---|---|
token - String
|
An (optional) team invite token to claim, incase email does not match. |
Example
Query
mutation claimTeamInvites($token: String) {
claimTeamInvites(token: $token) {
...UserFragment
}
}
Variables
{"token": "abc123"}
Response
{
"data": {
"claimTeamInvites": {
"id": "4",
"profile": UserProfile,
"details": UserDetails,
"organizations": [UserOrganizationEdge],
"teams": [UserTeamEdge],
"is_anonymous": false,
"is_global_admin": true,
"segments": ["instruqt_employee"],
"claims": [InviteClaim],
"accessibleTracks": [Track],
"reportItem": UserReportItem,
"supportVerificationHash": "xyz789"
}
}
}
claimTrackInvite
Description
Claim a track invite.
Response
Returns an InviteClaim
Arguments
Name | Description |
---|---|
inviteID - String!
|
ID of the invite being claimed |
userDetails - UserDetailsInput
|
Details of the user claiming the invite |
customParameters - [CustomParametersInput!]
|
Custom Parameters used to inject metadata to the claim |
Example
Query
mutation claimTrackInvite(
$inviteID: String!,
$userDetails: UserDetailsInput,
$customParameters: [CustomParametersInput!]
) {
claimTrackInvite(
inviteID: $inviteID,
userDetails: $userDetails,
customParameters: $customParameters
) {
...InviteClaimFragment
}
}
Variables
{
"inviteID": "abc123",
"userDetails": UserDetailsInput,
"customParameters": [CustomParametersInput]
}
Response
{
"data": {
"claimTrackInvite": {
"id": 4,
"username": "abc123",
"user": User,
"trackInvite": TrackInvite,
"playLimit": 987,
"playCount": 987,
"playTTL": "10:15:30Z",
"claimedAt": "10:15:30Z",
"customParameters": [CustomParameter],
"events": [InviteEvent],
"trackLibrary": [TrackLibraryEntry],
"student": Student
}
}
}
confirmEmailOwnership
Description
Confirm email ownership based on the given code for a user in a team
Response
Returns a Boolean!
Example
Query
mutation confirmEmailOwnership(
$teamID: ID!,
$code: String!,
$email: String,
$inviteID: ID
) {
confirmEmailOwnership(
teamID: $teamID,
code: $code,
email: $email,
inviteID: $inviteID
)
}
Variables
{
"teamID": 4,
"code": "xyz789",
"email": "xyz789",
"inviteID": 4
}
Response
{"data": {"confirmEmailOwnership": false}}
consentToOrganizationPrivacyPolicy
Description
Set whether or not the user gives consent to receive marketing updates from the given organization.
Example
Query
mutation consentToOrganizationPrivacyPolicy(
$organizationID: String!,
$consent: Boolean!
) {
consentToOrganizationPrivacyPolicy(
organizationID: $organizationID,
consent: $consent
)
}
Variables
{
"organizationID": "xyz789",
"consent": false
}
Response
{"data": {"consentToOrganizationPrivacyPolicy": true}}
consentToTeamPrivacyPolicy
Description
Set whether or not the user gives consent to receive marketing updates from the given team.
Example
Query
mutation consentToTeamPrivacyPolicy(
$teamID: String!,
$consent: Boolean!
) {
consentToTeamPrivacyPolicy(
teamID: $teamID,
consent: $consent
)
}
Variables
{"teamID": "abc123", "consent": false}
Response
{"data": {"consentToTeamPrivacyPolicy": false}}
createAwsAccountConfig
Description
Create an AWS account config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - AwsAccountConfigInput!
|
The AWS account config to create |
Example
Query
mutation createAwsAccountConfig($config: AwsAccountConfigInput!) {
createAwsAccountConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": AwsAccountConfigInput}
Response
{
"data": {
"createAwsAccountConfig": {
"id": "4",
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
createAzureSubscriptionConfig
Description
Create an Azure Subscription config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - AzureSubscriptionConfigInput!
|
The Azure Subscription config to create |
Example
Query
mutation createAzureSubscriptionConfig($config: AzureSubscriptionConfigInput!) {
createAzureSubscriptionConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": AzureSubscriptionConfigInput}
Response
{
"data": {
"createAzureSubscriptionConfig": {
"id": 4,
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
createChallenge
Description
Create a new challenge for a track
Note: you need to be a developer for this track
Response
Returns a Challenge
Arguments
Name | Description |
---|---|
challenge - ChallengeInput!
|
The challenge to create |
Example
Query
mutation createChallenge($challenge: ChallengeInput!) {
createChallenge(challenge: $challenge) {
...ChallengeFragment
}
}
Variables
{"challenge": ChallengeInput}
Response
{
"data": {
"createChallenge": {
"id": 4,
"track": Track,
"answers": ["abc123"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": false,
"difficulty": "abc123",
"index": 987,
"notes": [ChallengeNote],
"permalink": "xyz789",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [987],
"hasSingleAnswer": false,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "xyz789",
"timelimit": 123,
"started": 123,
"completed": 123,
"failed": 123,
"failMessage": "abc123",
"title": "abc123",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": false
}
}
}
createChallengeNote
Description
Create a challenge note
Note: you need to be a developer for this track
Response
Returns a ChallengeNote
Arguments
Name | Description |
---|---|
note - ChallengeNoteInput!
|
The note to create |
Example
Query
mutation createChallengeNote($note: ChallengeNoteInput!) {
createChallengeNote(note: $note) {
...ChallengeNoteFragment
}
}
Variables
{"note": ChallengeNoteInput}
Response
{
"data": {
"createChallengeNote": {
"id": 4,
"contents": "xyz789",
"index": 123,
"type": "image",
"url": "abc123"
}
}
}
createChallengeTab
Description
Create a challenge tab
Note: you need to be a developer for this track
Response
Returns a ChallengeTab
Arguments
Name | Description |
---|---|
tab - ChallengeTabInput!
|
The tab to create |
Example
Query
mutation createChallengeTab($tab: ChallengeTabInput!) {
createChallengeTab(tab: $tab) {
...ChallengeTabFragment
}
}
Variables
{"tab": ChallengeTabInput}
Response
{
"data": {
"createChallengeTab": {
"id": 4,
"index": 123,
"hostname": "xyz789",
"path": "abc123",
"port": 987,
"target": "abc123",
"title": "xyz789",
"type": "service",
"url": "xyz789",
"new_window": false,
"workdir": "abc123",
"cmd": "abc123",
"custom_headers": [CustomHeader],
"custom_response_headers": [CustomHeader]
}
}
}
createContainerConfig
Description
Create a container config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - ContainerConfigInput!
|
The container config to create |
Example
Query
mutation createContainerConfig($config: ContainerConfigInput!) {
createContainerConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": ContainerConfigInput}
Response
{
"data": {
"createContainerConfig": {
"id": "4",
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
createGcpProjectConfig
Description
Create a GCP project config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - GcpProjectConfigInput!
|
The gcp project config to create |
Example
Query
mutation createGcpProjectConfig($config: GcpProjectConfigInput!) {
createGcpProjectConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": GcpProjectConfigInput}
Response
{
"data": {
"createGcpProjectConfig": {
"id": "4",
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
createGithubIntegration
Description
Create a github app integration
Response
Returns a GithubIntegration!
Example
Query
mutation createGithubIntegration(
$teamSlug: String!,
$installationID: String!
) {
createGithubIntegration(
teamSlug: $teamSlug,
installationID: $installationID
) {
...GithubIntegrationFragment
}
}
Variables
{
"teamSlug": "abc123",
"installationID": "xyz789"
}
Response
{
"data": {
"createGithubIntegration": {
"installationID": 987,
"account": "xyz789"
}
}
}
createHostImage
Description
Creates a new host image
Response
Returns a HostImage!
Arguments
Name | Description |
---|---|
input - HostImageInput!
|
Example
Query
mutation createHostImage($input: HostImageInput!) {
createHostImage(input: $input) {
...HostImageFragment
}
}
Variables
{"input": HostImageInput}
Response
{
"data": {
"createHostImage": {
"id": 4,
"slug": "xyz789",
"description": "abc123",
"imageMetadata": ImageMetadata,
"status": "created",
"currentSandbox": HostImageSandbox,
"team": Team,
"usedInTracks": [Track],
"usedInSandboxConfigVersions": [
SandboxConfigVersion
],
"createdAt": "10:15:30Z",
"createdBy": User,
"createdWith": HostImageVMInputs
}
}
}
createHotStartPool
Description
Create a new hot start pool
Response
Returns a HotStartPool
Arguments
Name | Description |
---|---|
pool - HotStartPoolInput!
|
pool to create |
Example
Query
mutation createHotStartPool($pool: HotStartPoolInput!) {
createHotStartPool(pool: $pool) {
...HotStartPoolFragment
}
}
Variables
{"pool": HotStartPoolInput}
Response
{
"data": {
"createHotStartPool": {
"id": 4,
"type": "dedicated",
"size": 123,
"created": "10:15:30Z",
"deleted": "10:15:30Z",
"name": "xyz789",
"auto_refill": true,
"starts_at": "10:15:30Z",
"ends_at": "10:15:30Z",
"created_by": User,
"team": Team,
"tracks": [HotStartPoolTrackEdge],
"configs": [HotStartConfigTrackEdge],
"status": "Running",
"region": "xyz789"
}
}
}
createInviteAuthor
Description
Adds an author to an invite
Response
Returns a TrackInviteAuthor!
Example
Query
mutation createInviteAuthor(
$inviteID: ID!,
$userID: ID!
) {
createInviteAuthor(
inviteID: $inviteID,
userID: $userID
) {
...TrackInviteAuthorFragment
}
}
Variables
{"inviteID": 4, "userID": "4"}
Response
{
"data": {
"createInviteAuthor": {
"id": "4",
"user": User
}
}
}
createLandingPage
Response
Returns a LandingPage!
Arguments
Name | Description |
---|---|
input - LandingPageInput!
|
Example
Query
mutation createLandingPage($input: LandingPageInput!) {
createLandingPage(input: $input) {
...LandingPageFragment
}
}
Variables
{"input": LandingPageInput}
Response
{
"data": {
"createLandingPage": {
"id": "4",
"team": Team,
"internalPageName": "abc123",
"path": "xyz789",
"isPublished": false,
"unpublishedAt": "10:15:30Z",
"publishedAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"trackPlayLimit": 987,
"formEnabled": true,
"privacyPolicyUrl": "xyz789",
"termsAndConditionsUrl": "xyz789",
"pageTitle": "xyz789",
"seoDescription": "abc123",
"robotsIndexingEnabled": true,
"backgroundColor": "abc123",
"textColor": "xyz789",
"logoUrl": "abc123",
"logoLink": "xyz789",
"pageHeading": "xyz789",
"pageSubtitle": "xyz789",
"tracks": [LandingPageTrackEdge],
"currentUserClaimed": true
}
}
}
createLtiToolRegistration
Description
Add an LTI 1.3 tool
Response
Returns a LtiToolRegistration!
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
input - LtiToolRegistrationInput!
|
Example
Query
mutation createLtiToolRegistration(
$teamID: ID!,
$input: LtiToolRegistrationInput!
) {
createLtiToolRegistration(
teamID: $teamID,
input: $input
) {
...LtiToolRegistrationFragment
}
}
Variables
{"teamID": 4, "input": LtiToolRegistrationInput}
Response
{
"data": {
"createLtiToolRegistration": {
"id": "4",
"name": "xyz789",
"teamID": "xyz789",
"issuer": "xyz789",
"clientID": "abc123",
"keySetURL": "abc123",
"publicKey": "abc123",
"accessTokenURL": "abc123",
"authURL": "xyz789",
"deploymentIDs": ["abc123"]
}
}
}
createOrganization
Description
Create an organization
Note: you need to be an instruqt admin to call this mutation
Response
Returns an Organization
Arguments
Name | Description |
---|---|
slug - String!
|
Slug of the organization |
name - String!
|
Name of the organization |
ownerEmails - [String!]!
|
OwnerEmails are a list of emails that will be given the Owner role |
Example
Query
mutation createOrganization(
$slug: String!,
$name: String!,
$ownerEmails: [String!]!
) {
createOrganization(
slug: $slug,
name: $name,
ownerEmails: $ownerEmails
) {
...OrganizationFragment
}
}
Variables
{
"slug": "xyz789",
"name": "abc123",
"ownerEmails": ["abc123"]
}
Response
{
"data": {
"createOrganization": {
"id": "4",
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "abc123",
"logo": "abc123",
"title": "abc123",
"subtitle": "xyz789",
"slug": "xyz789",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "xyz789",
"secondary_link_url": "xyz789",
"api_key": "xyz789",
"theme": OrganizationTheme,
"personal": true,
"features": OrganizationFeatures,
"invited": ["abc123"],
"invites": [OrganizationInvite],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
}
}
createSamlSsoConnection
Response
Returns a SsoConnection
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
ssoConnection - SsoSamlConnectionInput!
|
The connection that is going to be created |
Example
Query
mutation createSamlSsoConnection(
$teamID: ID!,
$ssoConnection: SsoSamlConnectionInput!
) {
createSamlSsoConnection(
teamID: $teamID,
ssoConnection: $ssoConnection
) {
...SsoConnectionFragment
}
}
Variables
{"teamID": 4, "ssoConnection": SsoSamlConnectionInput}
Response
{
"data": {
"createSamlSsoConnection": {
"name": "xyz789",
"organizationID": "xyz789",
"strategy": "okta",
"options": DefaultSsoConnectionOptions
}
}
}
createSandboxConfig
Description
Creates a sandbox config with the given details and resources
Response
Returns a SandboxConfigVersion
Arguments
Name | Description |
---|---|
teamID - String
|
ID of the team |
teamSlug - String
|
Slug of the team |
name - String
|
Name of the config |
slug - String
|
Slug of the config |
config - SandboxConfigInput!
|
The config |
Example
Query
mutation createSandboxConfig(
$teamID: String,
$teamSlug: String,
$name: String,
$slug: String,
$config: SandboxConfigInput!
) {
createSandboxConfig(
teamID: $teamID,
teamSlug: $teamSlug,
name: $name,
slug: $slug,
config: $config
) {
...SandboxConfigVersionFragment
}
}
Variables
{
"teamID": "abc123",
"teamSlug": "xyz789",
"name": "abc123",
"slug": "xyz789",
"config": SandboxConfigInput
}
Response
{
"data": {
"createSandboxConfig": {
"id": "4",
"config": SandboxConfig,
"version": 987,
"description": "xyz789",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "xyz789",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
}
}
createSsoConnection
Response
Returns a SsoConnection
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
ssoConnection - SsoConnectionInput!
|
The connection that is going to be created |
Example
Query
mutation createSsoConnection(
$teamID: ID!,
$ssoConnection: SsoConnectionInput!
) {
createSsoConnection(
teamID: $teamID,
ssoConnection: $ssoConnection
) {
...SsoConnectionFragment
}
}
Variables
{
"teamID": "4",
"ssoConnection": SsoConnectionInput
}
Response
{
"data": {
"createSsoConnection": {
"name": "abc123",
"organizationID": "xyz789",
"strategy": "okta",
"options": DefaultSsoConnectionOptions
}
}
}
createTag
Description
Creates a new tag
Example
Query
mutation createTag(
$teamID: ID!,
$input: TagInput!
) {
createTag(
teamID: $teamID,
input: $input
) {
...TagFragment
}
}
Variables
{"teamID": 4, "input": TagInput}
Response
{
"data": {
"createTag": {
"id": "4",
"value": "xyz789",
"createdAt": "10:15:30Z",
"tracks": [Track],
"groups": [TagGroup]
}
}
}
createTagGroup
Description
Creates a new tag group
Response
Returns a TagGroup!
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
input - TagGroupInput!
|
|
tagIDs - [ID!]!
|
Example
Query
mutation createTagGroup(
$teamID: ID!,
$input: TagGroupInput!,
$tagIDs: [ID!]!
) {
createTagGroup(
teamID: $teamID,
input: $input,
tagIDs: $tagIDs
) {
...TagGroupFragment
}
}
Variables
{"teamID": 4, "input": TagGroupInput, "tagIDs": [4]}
Response
{
"data": {
"createTagGroup": {
"id": 4,
"name": "xyz789",
"createdAt": "10:15:30Z",
"tags": [Tag]
}
}
}
createTeam
Description
Create a team
Note: you need to be an instruqt admin to call this mutation
Response
Returns a Team
Arguments
Name | Description |
---|---|
slug - String!
|
Slug of the team |
name - String!
|
Name of the team |
ownerEmails - [String!]!
|
OwnerEmails are a list of emails that will be given the Owner role |
Example
Query
mutation createTeam(
$slug: String!,
$name: String!,
$ownerEmails: [String!]!
) {
createTeam(
slug: $slug,
name: $name,
ownerEmails: $ownerEmails
) {
...TeamFragment
}
}
Variables
{
"slug": "abc123",
"name": "abc123",
"ownerEmails": ["xyz789"]
}
Response
{
"data": {
"createTeam": {
"id": "4",
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": true,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "xyz789",
"logo": "xyz789",
"title": "abc123",
"subtitle": "xyz789",
"slug": "xyz789",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "xyz789",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": true,
"features": TeamFeatures,
"invited": ["xyz789"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 123,
"enabledRepositories": ["xyz789"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "xyz789"
}
}
}
createTrack
Description
Create a track
Note: you need to be a member of the organization that owns the track
Response
Returns a Track
Arguments
Name | Description |
---|---|
track - TrackInput!
|
The track to create |
Example
Query
mutation createTrack($track: TrackInput!) {
createTrack(track: $track) {
...TrackFragment
}
}
Variables
{"track": TrackInput}
Response
{
"data": {
"createTrack": {
"id": "4",
"slug": "abc123",
"version": "abc123",
"revision": "10:15:30Z",
"type": "abc123",
"title": "xyz789",
"teaser": "xyz789",
"description": "xyz789",
"icon": "abc123",
"level": "beginner",
"tags": ["abc123"],
"trackTags": [Tag],
"owner": "xyz789",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": false,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 987,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 123,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": false,
"skipping_enabled": true,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "abc123",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
}
}
createTrackDeveloper
Description
Create a track developer
Note: you need to be a developer for this track
Response
Returns a Track
Example
Query
mutation createTrackDeveloper(
$trackID: String!,
$userID: String!
) {
createTrackDeveloper(
trackID: $trackID,
userID: $userID
) {
...TrackFragment
}
}
Variables
{
"trackID": "xyz789",
"userID": "abc123"
}
Response
{
"data": {
"createTrackDeveloper": {
"id": 4,
"slug": "abc123",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "abc123",
"title": "abc123",
"teaser": "abc123",
"description": "xyz789",
"icon": "xyz789",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": true,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": true,
"skipping_enabled": true,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "abc123",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
createTrackInstructor
Description
Add a instructor to a track
Response
Returns a TrackInstructor!
Example
Query
mutation createTrackInstructor(
$trackID: ID!,
$userID: ID!
) {
createTrackInstructor(
trackID: $trackID,
userID: $userID
) {
...TrackInstructorFragment
}
}
Variables
{"trackID": 4, "userID": 4}
Response
{
"data": {
"createTrackInstructor": {"id": 4, "user": User}
}
}
createTrackInvite
Description
Create a new track invite
Note: you need to be a member of the organization of the track the invite is for
Response
Returns a TrackInvite
Arguments
Name | Description |
---|---|
invite - TrackInviteInput!
|
invite to create |
Example
Query
mutation createTrackInvite($invite: TrackInviteInput!) {
createTrackInvite(invite: $invite) {
...TrackInviteFragment
}
}
Variables
{"invite": TrackInviteInput}
Response
{
"data": {
"createTrackInvite": {
"id": "4",
"title": "abc123",
"publicTitle": "xyz789",
"publicDescription": "xyz789",
"tracks": [Track],
"trackEdges": [TrackInviteTrackEdge],
"authors": [TrackInviteAuthor],
"trackLibrary": TrackLibraryEntryConnection,
"organization": Organization,
"team": Team,
"accessSetting": "anyone",
"inviteLimit": 987,
"inviteCount": 987,
"claimCount": 987,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 123,
"playTTL": 987,
"created": "10:15:30Z",
"last_updated": "10:15:30Z",
"allowAnonymous": true,
"allowedEmailAddresses": ["xyz789"],
"allowedEmailAddressesOnly": true,
"currentUserAllowed": false,
"currentUserClaim": InviteClaim,
"currentUserClaimed": false,
"claims": [InviteClaim],
"activeUsers": [UserActivity],
"plays": [InvitePlay],
"type": "self_paced",
"status": "active",
"daysUntil": 123,
"enableLearnerSharing": true,
"canClaim": true,
"runtimeParameters": RuntimeParameters,
"shareMethod": "link",
"deletedAt": "10:15:30Z",
"emailOwnershipConfirmationRequired": true,
"instructorToolsEnabled": true,
"screenSharingEnabled": true,
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
}
}
createTrackReview
Description
Create track review.
Note: this stores track review as the currently authenticated user.
Response
Returns a TrackReview
Arguments
Name | Description |
---|---|
input - TrackReviewInput!
|
Example
Query
mutation createTrackReview($input: TrackReviewInput!) {
createTrackReview(input: $input) {
...TrackReviewFragment
}
}
Variables
{"input": TrackReviewInput}
Response
{
"data": {
"createTrackReview": {
"id": "4",
"track": Track,
"challenge": Challenge,
"user": User,
"play": Play,
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"score": 987,
"content": "abc123"
}
}
}
createVirtualBrowserConfig
Description
Create a virtualbrowser config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - VirtualBrowserConfigInput!
|
The vm config to create |
Example
Query
mutation createVirtualBrowserConfig($config: VirtualBrowserConfigInput!) {
createVirtualBrowserConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": VirtualBrowserConfigInput}
Response
{
"data": {
"createVirtualBrowserConfig": {
"id": 4,
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
createVirtualMachineConfig
Description
Create a virtualmachine config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - VirtualMachineConfigInput!
|
The vm config to create |
Example
Query
mutation createVirtualMachineConfig($config: VirtualMachineConfigInput!) {
createVirtualMachineConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": VirtualMachineConfigInput}
Response
{
"data": {
"createVirtualMachineConfig": {
"id": 4,
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
createWebhook
Description
Create a webhook
Response
Returns a Webhook!
Arguments
Name | Description |
---|---|
teamID - String
|
ID of the team |
teamSlug - String
|
Slug of the team |
webhook - WebhookInput!
|
The input properties to update the webhook with |
Example
Query
mutation createWebhook(
$teamID: String,
$teamSlug: String,
$webhook: WebhookInput!
) {
createWebhook(
teamID: $teamID,
teamSlug: $teamSlug,
webhook: $webhook
) {
...WebhookFragment
}
}
Variables
{
"teamID": "abc123",
"teamSlug": "abc123",
"webhook": WebhookInput
}
Response
{
"data": {
"createWebhook": {
"id": 4,
"name": "xyz789",
"url": "xyz789",
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"events": ["xyz789"],
"custom_headers": [CustomHeader]
}
}
}
deleteAwsAccountConfig
Description
Delete an AWS account config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
awsAccountID - String!
|
The ID of the AWS account config to delete |
Example
Query
mutation deleteAwsAccountConfig($awsAccountID: String!) {
deleteAwsAccountConfig(awsAccountID: $awsAccountID) {
...TrackConfigFragment
}
}
Variables
{"awsAccountID": "abc123"}
Response
{
"data": {
"deleteAwsAccountConfig": {
"id": 4,
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
deleteAzureSubscriptionConfig
Description
Delete an Azure Subscription config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
azureSubscriptionID - String!
|
The ID of the Azure Subscription config to delete |
Example
Query
mutation deleteAzureSubscriptionConfig($azureSubscriptionID: String!) {
deleteAzureSubscriptionConfig(azureSubscriptionID: $azureSubscriptionID) {
...TrackConfigFragment
}
}
Variables
{"azureSubscriptionID": "xyz789"}
Response
{
"data": {
"deleteAzureSubscriptionConfig": {
"id": "4",
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
deleteChallenge
Description
Delete a challenge from a track
Note: you need to be a developer for this track
deleteChallengeNote
Description
Delete a challenge note
Note: you need to be a developer for this track
deleteChallengeScript
Description
Delete a challenge script
Note: you need to be a developer for this track
Response
Returns a Boolean!
Arguments
Name | Description |
---|---|
challengeScriptID - String!
|
ID of the challenge script |
Example
Query
mutation deleteChallengeScript($challengeScriptID: String!) {
deleteChallengeScript(challengeScriptID: $challengeScriptID)
}
Variables
{"challengeScriptID": "xyz789"}
Response
{"data": {"deleteChallengeScript": false}}
deleteChallengeTab
Description
Delete a challenge tab
Note: you need to be a developer for this track
deleteContainerConfig
Description
Delete a container config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
containerID - String!
|
The ID of the container config to delete |
Example
Query
mutation deleteContainerConfig($containerID: String!) {
deleteContainerConfig(containerID: $containerID) {
...TrackConfigFragment
}
}
Variables
{"containerID": "abc123"}
Response
{
"data": {
"deleteContainerConfig": {
"id": 4,
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
deleteCustomResource
Description
deletes the custom resource with the given id
deleteGcpProjectConfig
Description
Delete a GCP project config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
gcpProjectID - String!
|
The ID of the gcp project config to delete |
Example
Query
mutation deleteGcpProjectConfig($gcpProjectID: String!) {
deleteGcpProjectConfig(gcpProjectID: $gcpProjectID) {
...TrackConfigFragment
}
}
Variables
{"gcpProjectID": "abc123"}
Response
{
"data": {
"deleteGcpProjectConfig": {
"id": 4,
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
deleteGithubIntegration
Description
Delete a github app integration
Example
Query
mutation deleteGithubIntegration(
$teamSlug: String!,
$installationID: String!
) {
deleteGithubIntegration(
teamSlug: $teamSlug,
installationID: $installationID
)
}
Variables
{
"teamSlug": "xyz789",
"installationID": "xyz789"
}
Response
{"data": {"deleteGithubIntegration": false}}
deleteHostImage
Description
Deletes an existing host image
deleteHotStartPool
Description
Delete hot start pool
deleteInviteAuthor
Description
Removes an author from an invite
Example
Query
mutation deleteInviteAuthor(
$inviteID: ID!,
$userID: ID!
) {
deleteInviteAuthor(
inviteID: $inviteID,
userID: $userID
)
}
Variables
{"inviteID": 4, "userID": "4"}
Response
{"data": {"deleteInviteAuthor": false}}
deleteLab
Description
Delete a lab
deleteLandingPage
Response
Returns a LandingPage!
Arguments
Name | Description |
---|---|
landingPageID - ID!
|
Example
Query
mutation deleteLandingPage($landingPageID: ID!) {
deleteLandingPage(landingPageID: $landingPageID) {
...LandingPageFragment
}
}
Variables
{"landingPageID": "4"}
Response
{
"data": {
"deleteLandingPage": {
"id": "4",
"team": Team,
"internalPageName": "abc123",
"path": "abc123",
"isPublished": false,
"unpublishedAt": "10:15:30Z",
"publishedAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"trackPlayLimit": 987,
"formEnabled": true,
"privacyPolicyUrl": "xyz789",
"termsAndConditionsUrl": "abc123",
"pageTitle": "abc123",
"seoDescription": "xyz789",
"robotsIndexingEnabled": true,
"backgroundColor": "abc123",
"textColor": "xyz789",
"logoUrl": "xyz789",
"logoLink": "xyz789",
"pageHeading": "abc123",
"pageSubtitle": "xyz789",
"tracks": [LandingPageTrackEdge],
"currentUserClaimed": true
}
}
}
deleteLtiToolRegistration
Description
Delete an LTI 1.3 tool
deleteOrganizationInvite
Description
Delete an organization invite
Note: you need to be a member of the organization to invite a user
Response
Returns an Organization
Example
Query
mutation deleteOrganizationInvite(
$organizationID: String!,
$email: String!
) {
deleteOrganizationInvite(
organizationID: $organizationID,
email: $email
) {
...OrganizationFragment
}
}
Variables
{
"organizationID": "xyz789",
"email": "xyz789"
}
Response
{
"data": {
"deleteOrganizationInvite": {
"id": 4,
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "xyz789",
"logo": "abc123",
"title": "xyz789",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "abc123",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "xyz789",
"theme": OrganizationTheme,
"personal": true,
"features": OrganizationFeatures,
"invited": ["xyz789"],
"invites": [OrganizationInvite],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
}
}
deleteSandboxConfig
Description
Deletes the given config version drafts are deleted published are archived
Response
Returns a Boolean!
Arguments
Name | Description |
---|---|
configVersionID - String!
|
The config version id |
Example
Query
mutation deleteSandboxConfig($configVersionID: String!) {
deleteSandboxConfig(configVersionID: $configVersionID)
}
Variables
{"configVersionID": "abc123"}
Response
{"data": {"deleteSandboxConfig": true}}
deleteSandboxConfigHost
Response
Returns a SandboxConfigVersion
Example
Query
mutation deleteSandboxConfigHost(
$configID: String!,
$hostName: String!
) {
deleteSandboxConfigHost(
configID: $configID,
hostName: $hostName
) {
...SandboxConfigVersionFragment
}
}
Variables
{
"configID": "xyz789",
"hostName": "abc123"
}
Response
{
"data": {
"deleteSandboxConfigHost": {
"id": "4",
"config": SandboxConfig,
"version": 123,
"description": "abc123",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "xyz789",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
}
}
deleteSsoConnection
Response
Returns a Boolean!
Example
Query
mutation deleteSsoConnection(
$teamID: ID!,
$connectionName: String!
) {
deleteSsoConnection(
teamID: $teamID,
connectionName: $connectionName
)
}
Variables
{"teamID": 4, "connectionName": "xyz789"}
Response
{"data": {"deleteSsoConnection": true}}
deleteTag
Description
Deletes a tag
deleteTagGroup
Description
Deletes a tag group
deleteTeamGithubData
Description
Delete github data from a team
deleteTeamInvite
Description
Delete a team invite
Note: you need to be a member of the team to invite a user
Response
Returns a Team
Example
Query
mutation deleteTeamInvite(
$teamID: String!,
$email: String!
) {
deleteTeamInvite(
teamID: $teamID,
email: $email
) {
...TeamFragment
}
}
Variables
{
"teamID": "abc123",
"email": "abc123"
}
Response
{
"data": {
"deleteTeamInvite": {
"id": "4",
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": false,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "abc123",
"logo": "xyz789",
"title": "xyz789",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": false,
"features": TeamFeatures,
"invited": ["abc123"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "abc123",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 123,
"enabledRepositories": ["abc123"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "xyz789"
}
}
}
deleteTeamSecret
Response
Returns a Boolean!
Example
Query
mutation deleteTeamSecret(
$teamSlug: String,
$teamID: String,
$name: String!
) {
deleteTeamSecret(
teamSlug: $teamSlug,
teamID: $teamID,
name: $name
)
}
Variables
{
"teamSlug": "abc123",
"teamID": "xyz789",
"name": "abc123"
}
Response
{"data": {"deleteTeamSecret": true}}
deleteTrack
Description
Delete a track
Note: you need to be a developer for this track
deleteTrackInstructor
Description
Remove instructor from a track
Example
Query
mutation deleteTrackInstructor(
$trackID: ID!,
$userID: ID!
) {
deleteTrackInstructor(
trackID: $trackID,
userID: $userID
)
}
Variables
{"trackID": 4, "userID": 4}
Response
{"data": {"deleteTrackInstructor": true}}
deleteTrackInvite
Description
Delete a track invite
Deleting an invite does not delete the access to the track for users that have already accepted the invite.
Note: you need to be a member of the organization of the track the invite is for
deleteTrackInviteClaim
Description
Delete a track invite claim.
deleteUser
Description
Deletes a user
Response
Returns a Boolean!
Example
Query
mutation deleteUser {
deleteUser
}
Response
{"data": {"deleteUser": true}}
deleteVirtualBrowserCheck
Description
Delete a virtual browser check
Response
Returns a Boolean!
Arguments
Name | Description |
---|---|
id - String!
|
The ID of the virtual browser check to be deleted |
Example
Query
mutation deleteVirtualBrowserCheck($id: String!) {
deleteVirtualBrowserCheck(id: $id)
}
Variables
{"id": "abc123"}
Response
{"data": {"deleteVirtualBrowserCheck": false}}
deleteVirtualBrowserConfig
Description
Delete a virtualbrowser config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
virtualbrowserID - String!
|
The ID of the vm config to delete |
Example
Query
mutation deleteVirtualBrowserConfig($virtualbrowserID: String!) {
deleteVirtualBrowserConfig(virtualbrowserID: $virtualbrowserID) {
...TrackConfigFragment
}
}
Variables
{"virtualbrowserID": "abc123"}
Response
{
"data": {
"deleteVirtualBrowserConfig": {
"id": 4,
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
deleteVirtualMachineConfig
Description
Delete a virtualmachine config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
virtualmachineID - String!
|
The ID of the vm config to delete |
Example
Query
mutation deleteVirtualMachineConfig($virtualmachineID: String!) {
deleteVirtualMachineConfig(virtualmachineID: $virtualmachineID) {
...TrackConfigFragment
}
}
Variables
{"virtualmachineID": "abc123"}
Response
{
"data": {
"deleteVirtualMachineConfig": {
"id": "4",
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
deleteWebhook
Description
Delete a webhook
Response
Returns a Boolean!
Example
Query
mutation deleteWebhook(
$id: String!,
$teamID: String,
$teamSlug: String
) {
deleteWebhook(
id: $id,
teamID: $teamID,
teamSlug: $teamSlug
)
}
Variables
{
"id": "abc123",
"teamID": "xyz789",
"teamSlug": "xyz789"
}
Response
{"data": {"deleteWebhook": false}}
discardChanges
Description
Remove changes made under version control
Response
Returns a Boolean!
Arguments
Name | Description |
---|---|
track - TrackInput!
|
Example
Query
mutation discardChanges($track: TrackInput!) {
discardChanges(track: $track)
}
Variables
{"track": TrackInput}
Response
{"data": {"discardChanges": true}}
generateOneTimePlayToken
Description
Generate a new one time play token for a track
Note: you need to be a developer for this track
generateOrganizationAPIKey
Description
Generate an API key for an organization
Either organizationSlug or organizationID must be specified
Note: you need to be a member of the organization to generate an API key
Response
Returns a String
Example
Query
mutation generateOrganizationAPIKey(
$organizationID: String,
$organizationSlug: String
) {
generateOrganizationAPIKey(
organizationID: $organizationID,
organizationSlug: $organizationSlug
)
}
Variables
{
"organizationID": "abc123",
"organizationSlug": "abc123"
}
Response
{
"data": {
"generateOrganizationAPIKey": "xyz789"
}
}
generateTeamAPIKey
Description
Generate an API key for a team
Either teamSlug or teamID must be specified
Note: you need to be a member of the team to generate an API key
Response
Returns a String
Example
Query
mutation generateTeamAPIKey(
$teamID: String,
$teamSlug: String
) {
generateTeamAPIKey(
teamID: $teamID,
teamSlug: $teamSlug
)
}
Variables
{
"teamID": "xyz789",
"teamSlug": "xyz789"
}
Response
{"data": {"generateTeamAPIKey": "abc123"}}
generateTeamLTICredentials
Description
Generate LTI credentials for a team
Either teamSlug or teamID must be specified
Note: you need to be a member of the team to generate an API key
Response
Returns an LTICredentials
Example
Query
mutation generateTeamLTICredentials(
$teamID: String,
$teamSlug: String
) {
generateTeamLTICredentials(
teamID: $teamID,
teamSlug: $teamSlug
) {
...LTICredentialsFragment
}
}
Variables
{
"teamID": "xyz789",
"teamSlug": "xyz789"
}
Response
{
"data": {
"generateTeamLTICredentials": {
"id": "4",
"consumer_name": "abc123",
"consumer_key": "xyz789",
"instruqt_public_key": "xyz789",
"instruqt_public_key_set_url": "xyz789",
"instruqt_login_url": "abc123"
}
}
}
generateTrackEmbedToken
Description
Generate a new embed token for a track
Note: you need to be a developer for this track
Example
Query
mutation generateTrackEmbedToken($trackID: String!) {
generateTrackEmbedToken(trackID: $trackID) {
...TrackFragment
}
}
Variables
{"trackID": "abc123"}
Response
{
"data": {
"generateTrackEmbedToken": {
"id": 4,
"slug": "abc123",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "abc123",
"title": "xyz789",
"teaser": "xyz789",
"description": "abc123",
"icon": "xyz789",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "xyz789",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": false,
"published": false,
"maintenance": false,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 123,
"median_starttime": 987,
"prestart": true,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 123,
"show_timer": true,
"skipping_enabled": true,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": false,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
}
}
icpStunCredentials
Description
Generate short-lived credentials for screen sharing
Response
Returns a String!
Arguments
Name | Description |
---|---|
input - StunIceInput!
|
Example
Query
mutation icpStunCredentials($input: StunIceInput!) {
icpStunCredentials(input: $input)
}
Variables
{"input": StunIceInput}
Response
{"data": {"icpStunCredentials": "abc123"}}
importLab
Description
Create a new lab
Response
Returns a Lab!
Arguments
Name | Description |
---|---|
lab - ImportLabInput!
|
Example
Query
mutation importLab($lab: ImportLabInput!) {
importLab(lab: $lab) {
...LabFragment
}
}
Variables
{"lab": ImportLabInput}
Response
{
"data": {
"importLab": {
"id": "4",
"name": "abc123",
"title": "xyz789",
"labels": Labels,
"team": Team,
"sourceRepo": SourceRepo,
"modified": ModificationMeta,
"versions": [LabVersion],
"activeSession": LabSession
}
}
}
importTerraformModule
Description
Imports a terraform module with the given ID into the given team
Response
Returns a CustomResource!
Arguments
Name | Description |
---|---|
teamID - String
|
|
teamSlug - String
|
|
input - ImportTerraformModuleInput!
|
Example
Query
mutation importTerraformModule(
$teamID: String,
$teamSlug: String,
$input: ImportTerraformModuleInput!
) {
importTerraformModule(
teamID: $teamID,
teamSlug: $teamSlug,
input: $input
) {
...CustomResourceFragment
}
}
Variables
{
"teamID": "xyz789",
"teamSlug": "xyz789",
"input": ImportTerraformModuleInput
}
Response
{
"data": {
"importTerraformModule": {
"id": 4,
"name": "xyz789",
"slug": "xyz789",
"description": "xyz789",
"version": "xyz789",
"logo": "xyz789",
"provider": "terraform",
"canDelete": false,
"terraformModule": TerraformModule,
"inputs": [CustomResourceInput],
"outputs": [CustomResourceOutput],
"createdAt": "10:15:30Z",
"createdBy": User
}
}
}
inviteLinkCopied
Description
Invite link copied
Response
Returns a Boolean!
Example
Query
mutation inviteLinkCopied(
$inviteID: String!,
$teamID: String!
) {
inviteLinkCopied(
inviteID: $inviteID,
teamID: $teamID
)
}
Variables
{
"inviteID": "xyz789",
"teamID": "xyz789"
}
Response
{"data": {"inviteLinkCopied": false}}
inviteOrganizationUser
Description
Invite a user to an organization
Note: you need to be a member of the organization to invite a user
Response
Returns an Organization
Example
Query
mutation inviteOrganizationUser(
$organizationID: String!,
$userID: String,
$email: String,
$role: RoleName
) {
inviteOrganizationUser(
organizationID: $organizationID,
userID: $userID,
email: $email,
role: $role
) {
...OrganizationFragment
}
}
Variables
{
"organizationID": "xyz789",
"userID": "abc123",
"email": "xyz789",
"role": "owner"
}
Response
{
"data": {
"inviteOrganizationUser": {
"id": 4,
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "abc123",
"logo": "abc123",
"title": "abc123",
"subtitle": "xyz789",
"slug": "xyz789",
"primary_link_text": "abc123",
"primary_link_url": "abc123",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "xyz789",
"theme": OrganizationTheme,
"personal": true,
"features": OrganizationFeatures,
"invited": ["abc123"],
"invites": [OrganizationInvite],
"privacy_policy": "abc123",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
}
}
inviteTeamUser
Description
Invite a user to a team
Note: you need to be a member of the team to invite a user
Response
Returns a Team
Example
Query
mutation inviteTeamUser(
$teamID: String!,
$userID: String,
$email: String,
$role: RoleName
) {
inviteTeamUser(
teamID: $teamID,
userID: $userID,
email: $email,
role: $role
) {
...TeamFragment
}
}
Variables
{
"teamID": "xyz789",
"userID": "abc123",
"email": "xyz789",
"role": "owner"
}
Response
{
"data": {
"inviteTeamUser": {
"id": 4,
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": true,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "abc123",
"logo": "abc123",
"title": "xyz789",
"subtitle": "abc123",
"slug": "xyz789",
"primary_link_text": "abc123",
"primary_link_url": "abc123",
"secondary_link_text": "xyz789",
"secondary_link_url": "abc123",
"api_key": "xyz789",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": true,
"features": TeamFeatures,
"invited": ["abc123"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "xyz789",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 123,
"enabledRepositories": ["xyz789"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "abc123"
}
}
}
keepAlive
Description
Notify the track idle service that a participant is still active
Response
Returns a Track!
Arguments
Name | Description |
---|---|
trackID - ID!
|
ID of the track user is currently using |
Example
Query
mutation keepAlive($trackID: ID!) {
keepAlive(trackID: $trackID) {
...TrackFragment
}
}
Variables
{"trackID": 4}
Response
{
"data": {
"keepAlive": {
"id": 4,
"slug": "xyz789",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "xyz789",
"title": "xyz789",
"teaser": "abc123",
"description": "xyz789",
"icon": "xyz789",
"level": "beginner",
"tags": ["abc123"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": false,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 987,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 123,
"show_timer": false,
"skipping_enabled": false,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": false,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
lowerHand
Description
Lowers the raised hand for a user
Example
Query
mutation lowerHand(
$inviteID: ID!,
$userID: ID!
) {
lowerHand(
inviteID: $inviteID,
userID: $userID
) {
...StudentFragment
}
}
Variables
{"inviteID": "4", "userID": 4}
Response
{
"data": {
"lowerHand": {
"id": 4,
"user": User,
"track": Track,
"challenge": Challenge,
"currentChallengeAttempts": [ChallengeAttempt],
"last_activity_at": "10:15:30Z",
"completed_at": "10:15:30Z",
"accessed_at": "10:15:30Z",
"inspectable": false,
"claim": InviteClaim,
"activeSandboxesTotal": 123,
"raisedHandAt": "10:15:30Z",
"inviteTracks": [Track],
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
}
}
mergeAnonymousUser
Description
Merge a anonymous account into a registered account
Note: should be called by a logged in user
newTrackInviteBroadcastChatMessage
Description
Sends a new broadcast message in a track invite chat
Response
Returns a TrackInviteChatMessage
Example
Query
mutation newTrackInviteBroadcastChatMessage(
$invite_id: ID!,
$message: String!
) {
newTrackInviteBroadcastChatMessage(
invite_id: $invite_id,
message: $message
) {
...TrackInviteChatMessageFragment
}
}
Variables
{"invite_id": 4, "message": "abc123"}
Response
{
"data": {
"newTrackInviteBroadcastChatMessage": {
"id": "4",
"sender": ChatSender,
"message": "abc123",
"createdAt": "10:15:30Z",
"readAt": "10:15:30Z",
"channel": TrackInviteChatChannel
}
}
}
newTrackInviteDirectChatMessage
Description
Sends a new direct message to a specific student in a track invite chat
Response
Returns a TrackInviteChatMessage
Example
Query
mutation newTrackInviteDirectChatMessage(
$invite_id: ID!,
$student_user_id: ID!,
$message: String!
) {
newTrackInviteDirectChatMessage(
invite_id: $invite_id,
student_user_id: $student_user_id,
message: $message
) {
...TrackInviteChatMessageFragment
}
}
Variables
{
"invite_id": 4,
"student_user_id": "4",
"message": "abc123"
}
Response
{
"data": {
"newTrackInviteDirectChatMessage": {
"id": "4",
"sender": ChatSender,
"message": "xyz789",
"createdAt": "10:15:30Z",
"readAt": "10:15:30Z",
"channel": TrackInviteChatChannel
}
}
}
publishSandboxConfig
Description
Publish publishes the draft version for the given configID
Response
Returns a SandboxConfigVersion
Example
Query
mutation publishSandboxConfig(
$configID: String!,
$changeLogEntry: String
) {
publishSandboxConfig(
configID: $configID,
changeLogEntry: $changeLogEntry
) {
...SandboxConfigVersionFragment
}
}
Variables
{
"configID": "abc123",
"changeLogEntry": "xyz789"
}
Response
{
"data": {
"publishSandboxConfig": {
"id": "4",
"config": SandboxConfig,
"version": 123,
"description": "abc123",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "abc123",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
}
}
removeOrganizationUser
Description
Remove a user from an organization
Note: you need to be a member of the organization to remove a user
Response
Returns an Organization
Example
Query
mutation removeOrganizationUser(
$organizationID: String!,
$userID: String!
) {
removeOrganizationUser(
organizationID: $organizationID,
userID: $userID
) {
...OrganizationFragment
}
}
Variables
{
"organizationID": "xyz789",
"userID": "abc123"
}
Response
{
"data": {
"removeOrganizationUser": {
"id": "4",
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "xyz789",
"logo": "xyz789",
"title": "abc123",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "abc123",
"primary_link_url": "abc123",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": OrganizationTheme,
"personal": true,
"features": OrganizationFeatures,
"invited": ["xyz789"],
"invites": [OrganizationInvite],
"privacy_policy": "abc123",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
}
}
removeTeamUser
Description
Remove a user from a team
Note: you need to be a member of the team to remove a user
Response
Returns a Team
Example
Query
mutation removeTeamUser(
$teamID: String!,
$userID: String!
) {
removeTeamUser(
teamID: $teamID,
userID: $userID
) {
...TeamFragment
}
}
Variables
{
"teamID": "abc123",
"userID": "xyz789"
}
Response
{
"data": {
"removeTeamUser": {
"id": 4,
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": false,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "xyz789",
"logo": "xyz789",
"title": "xyz789",
"subtitle": "xyz789",
"slug": "abc123",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "xyz789",
"secondary_link_url": "abc123",
"api_key": "xyz789",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": false,
"features": TeamFeatures,
"invited": ["xyz789"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "abc123",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 987,
"enabledRepositories": ["abc123"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "abc123"
}
}
}
removeTrackDeveloper
Description
Remove a track developer
Note: you need to be a developer for this track
Response
Returns a Boolean!
Example
Query
mutation removeTrackDeveloper(
$trackID: String!,
$userID: String!
) {
removeTrackDeveloper(
trackID: $trackID,
userID: $userID
)
}
Variables
{
"trackID": "xyz789",
"userID": "abc123"
}
Response
{"data": {"removeTrackDeveloper": true}}
renameSandboxConfig
Description
Renames a sandbox config with the given id
Response
Returns a SandboxConfig
Example
Query
mutation renameSandboxConfig(
$configID: String!,
$name: String!
) {
renameSandboxConfig(
configID: $configID,
name: $name
) {
...SandboxConfigFragment
}
}
Variables
{
"configID": "abc123",
"name": "xyz789"
}
Response
{
"data": {
"renameSandboxConfig": {
"id": 4,
"name": "xyz789",
"slug": "xyz789",
"version": 987,
"deleted": "10:15:30Z"
}
}
}
renameSandboxConfigHost
Response
Returns a SandboxConfigVersion
Example
Query
mutation renameSandboxConfigHost(
$configID: String!,
$hostName: String!,
$newName: String!
) {
renameSandboxConfigHost(
configID: $configID,
hostName: $hostName,
newName: $newName
) {
...SandboxConfigVersionFragment
}
}
Variables
{
"configID": "xyz789",
"hostName": "abc123",
"newName": "abc123"
}
Response
{
"data": {
"renameSandboxConfigHost": {
"id": "4",
"config": SandboxConfig,
"version": 123,
"description": "abc123",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "abc123",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
}
}
resendEmailOwnershipConfirmationCode
Description
Resend email ownership confirmation code for a user in a team
Response
Returns a Boolean!
Example
Query
mutation resendEmailOwnershipConfirmationCode(
$teamID: ID!,
$userID: ID,
$email: String,
$InviteID: ID
) {
resendEmailOwnershipConfirmationCode(
teamID: $teamID,
userID: $userID,
email: $email,
InviteID: $InviteID
)
}
Variables
{
"teamID": "4",
"userID": 4,
"email": "abc123",
"InviteID": "4"
}
Response
{"data": {"resendEmailOwnershipConfirmationCode": false}}
restoreLandingPage
Response
Returns a LandingPage!
Arguments
Name | Description |
---|---|
landingPageID - ID!
|
Example
Query
mutation restoreLandingPage($landingPageID: ID!) {
restoreLandingPage(landingPageID: $landingPageID) {
...LandingPageFragment
}
}
Variables
{"landingPageID": "4"}
Response
{
"data": {
"restoreLandingPage": {
"id": 4,
"team": Team,
"internalPageName": "abc123",
"path": "abc123",
"isPublished": false,
"unpublishedAt": "10:15:30Z",
"publishedAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"trackPlayLimit": 987,
"formEnabled": true,
"privacyPolicyUrl": "xyz789",
"termsAndConditionsUrl": "xyz789",
"pageTitle": "xyz789",
"seoDescription": "abc123",
"robotsIndexingEnabled": true,
"backgroundColor": "abc123",
"textColor": "abc123",
"logoUrl": "xyz789",
"logoLink": "abc123",
"pageHeading": "xyz789",
"pageSubtitle": "xyz789",
"tracks": [LandingPageTrackEdge],
"currentUserClaimed": true
}
}
}
saveChallengeScript
Description
Save a challenge script
Note: you need to be a developer for this track
Response
Returns a ChallengeScript
Arguments
Name | Description |
---|---|
base64Encoded - Boolean
|
If the content is base64 encoded |
script - ChallengeScriptInput!
|
The challenge script to save |
Example
Query
mutation saveChallengeScript(
$base64Encoded: Boolean,
$script: ChallengeScriptInput!
) {
saveChallengeScript(
base64Encoded: $base64Encoded,
script: $script
) {
...ChallengeScriptFragment
}
}
Variables
{"base64Encoded": true, "script": ChallengeScriptInput}
Response
{
"data": {
"saveChallengeScript": {
"id": "4",
"action": "abc123",
"contents": "abc123",
"host": "abc123"
}
}
}
saveHostImage
Description
Saves a host image
Response
Returns a HostImage!
Example
Query
mutation saveHostImage(
$hostImageID: ID!,
$sandboxID: ID!
) {
saveHostImage(
hostImageID: $hostImageID,
sandboxID: $sandboxID
) {
...HostImageFragment
}
}
Variables
{"hostImageID": 4, "sandboxID": 4}
Response
{
"data": {
"saveHostImage": {
"id": 4,
"slug": "abc123",
"description": "abc123",
"imageMetadata": ImageMetadata,
"status": "created",
"currentSandbox": HostImageSandbox,
"team": Team,
"usedInTracks": [Track],
"usedInSandboxConfigVersions": [
SandboxConfigVersion
],
"createdAt": "10:15:30Z",
"createdBy": User,
"createdWith": HostImageVMInputs
}
}
}
saveTrackPlayLimit
Description
Set a track play limit
This sets a limit how many times a public track can be played. You can use this to prevent excessive charges to your account.
Note: you have to be a developer for this track
Response
Returns a Track
Example
Query
mutation saveTrackPlayLimit(
$trackID: String!,
$organizationID: String!,
$limit: Int!
) {
saveTrackPlayLimit(
trackID: $trackID,
organizationID: $organizationID,
limit: $limit
) {
...TrackFragment
}
}
Variables
{
"trackID": "abc123",
"organizationID": "xyz789",
"limit": 123
}
Response
{
"data": {
"saveTrackPlayLimit": {
"id": "4",
"slug": "xyz789",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "xyz789",
"title": "xyz789",
"teaser": "xyz789",
"description": "xyz789",
"icon": "xyz789",
"level": "beginner",
"tags": ["abc123"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": true,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": false,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 987,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 123,
"prestart": true,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 123,
"show_timer": true,
"skipping_enabled": true,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "abc123",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
saveTrackPlayLimits
Description
Set th track play limits for the given track and team
Note: if the track ID is not specified the limits will apply globally for all tracks
Response
Returns [TrackPlayLimit!]!
Arguments
Name | Description |
---|---|
trackID - String
|
ID of the track |
teamID - String
|
ID of the team |
teamSlug - String
|
Slug of the team |
trackPlayLimits - TrackPlayLimitInput!
|
The configured limits |
Example
Query
mutation saveTrackPlayLimits(
$trackID: String,
$teamID: String,
$teamSlug: String,
$trackPlayLimits: TrackPlayLimitInput!
) {
saveTrackPlayLimits(
trackID: $trackID,
teamID: $teamID,
teamSlug: $teamSlug,
trackPlayLimits: $trackPlayLimits
) {
...TrackPlayLimitFragment
}
}
Variables
{
"trackID": "xyz789",
"teamID": "xyz789",
"teamSlug": "xyz789",
"trackPlayLimits": TrackPlayLimitInput
}
Response
{
"data": {
"saveTrackPlayLimits": [
{
"track": Track,
"rollingMonth": 123,
"rollingIPAddressPerHour": 987,
"calendarMonth": 987,
"concurrentPlaysPerIP": 987
}
]
}
}
saveTrackScript
Description
Save a track script
Note: you need to be a developer for this track
Response
Returns a TrackScript
Arguments
Name | Description |
---|---|
base64Encoded - Boolean
|
If the content is base64 encoded |
script - TrackScriptInput!
|
The challenge script to save |
Example
Query
mutation saveTrackScript(
$base64Encoded: Boolean,
$script: TrackScriptInput!
) {
saveTrackScript(
base64Encoded: $base64Encoded,
script: $script
) {
...TrackScriptFragment
}
}
Variables
{"base64Encoded": false, "script": TrackScriptInput}
Response
{
"data": {
"saveTrackScript": {
"id": 4,
"action": "xyz789",
"contents": "abc123",
"host": "abc123"
}
}
}
sendEmailOwnershipConfirmationCode
Description
Send email ownership confirmation code to the provided email address for a specific invite
Response
Returns a SendEmailOwnershipConfirmationCode!
Example
Query
mutation sendEmailOwnershipConfirmationCode(
$email: String!,
$inviteID: ID!
) {
sendEmailOwnershipConfirmationCode(
email: $email,
inviteID: $inviteID
) {
...SendEmailOwnershipConfirmationCodeFragment
}
}
Variables
{"email": "xyz789", "inviteID": 4}
Response
{"data": {"sendEmailOwnershipConfirmationCode": {"needVerification": true}}}
setChatMessagesAsRead
Response
Returns [TrackInviteChatMessage!]!
Example
Query
mutation setChatMessagesAsRead(
$channel_id: ID!,
$message_ids: [ID!]!
) {
setChatMessagesAsRead(
channel_id: $channel_id,
message_ids: $message_ids
) {
...TrackInviteChatMessageFragment
}
}
Variables
{
"channel_id": "4",
"message_ids": ["4"]
}
Response
{
"data": {
"setChatMessagesAsRead": [
{
"id": "4",
"sender": ChatSender,
"message": "xyz789",
"createdAt": "10:15:30Z",
"readAt": "10:15:30Z",
"channel": TrackInviteChatChannel
}
]
}
}
setInstructorRole
Description
Promote or demote a user within a team.
Response
Returns a Team
Example
Query
mutation setInstructorRole(
$teamID: String!,
$userID: String!,
$trackIDs: [ID!]!
) {
setInstructorRole(
teamID: $teamID,
userID: $userID,
trackIDs: $trackIDs
) {
...TeamFragment
}
}
Variables
{
"teamID": "abc123",
"userID": "abc123",
"trackIDs": [4]
}
Response
{
"data": {
"setInstructorRole": {
"id": "4",
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": false,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "abc123",
"logo": "abc123",
"title": "abc123",
"subtitle": "xyz789",
"slug": "abc123",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": false,
"features": TeamFeatures,
"invited": ["abc123"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "abc123",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 123,
"enabledRepositories": ["abc123"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "xyz789"
}
}
}
setInstructorTracks
Description
Add instructor to multiple tracks
Response
Returns [TrackInstructor!]!
Example
Query
mutation setInstructorTracks(
$userID: ID!,
$trackIDs: [ID!]!
) {
setInstructorTracks(
userID: $userID,
trackIDs: $trackIDs
) {
...TrackInstructorFragment
}
}
Variables
{
"userID": "4",
"trackIDs": ["4"]
}
Response
{
"data": {
"setInstructorTracks": [
{
"id": "4",
"user": User
}
]
}
}
setSandboxVariable
Description
Set runtime variable value to sandbox host
Response
Returns a SandboxVariable
Example
Query
mutation setSandboxVariable(
$key: String!,
$value: String!,
$hostname: String!,
$sandboxID: String!
) {
setSandboxVariable(
key: $key,
value: $value,
hostname: $hostname,
sandboxID: $sandboxID
) {
...SandboxVariableFragment
}
}
Variables
{
"key": "xyz789",
"value": "abc123",
"hostname": "xyz789",
"sandboxID": "xyz789"
}
Response
{
"data": {
"setSandboxVariable": {
"key": "xyz789",
"value": "xyz789"
}
}
}
setTeamGithubInstallationID
Description
Adds github installation ID to a team
Example
Query
mutation setTeamGithubInstallationID(
$teamSlug: String!,
$installationID: String!
) {
setTeamGithubInstallationID(
teamSlug: $teamSlug,
installationID: $installationID
)
}
Variables
{
"teamSlug": "xyz789",
"installationID": "xyz789"
}
Response
{"data": {"setTeamGithubInstallationID": false}}
setTrackMaintenance
Description
Set maintenance flag for a track
Note: you need to be a developer for this track
Response
Returns a Track
Example
Query
mutation setTrackMaintenance(
$trackID: String!,
$maintenance: Boolean!
) {
setTrackMaintenance(
trackID: $trackID,
maintenance: $maintenance
) {
...TrackFragment
}
}
Variables
{"trackID": "xyz789", "maintenance": true}
Response
{
"data": {
"setTrackMaintenance": {
"id": "4",
"slug": "xyz789",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "xyz789",
"title": "abc123",
"teaser": "abc123",
"description": "abc123",
"icon": "xyz789",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "xyz789",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": true,
"instructors": [TrackInstructor],
"updated_by": User,
"private": false,
"published": true,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 123,
"median_starttime": 123,
"prestart": true,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": true,
"skipping_enabled": true,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
}
}
setTrackSandboxConfigVersion
Example
Query
mutation setTrackSandboxConfigVersion(
$trackID: String!,
$configVersionID: String
) {
setTrackSandboxConfigVersion(
trackID: $trackID,
configVersionID: $configVersionID
)
}
Variables
{
"trackID": "xyz789",
"configVersionID": "abc123"
}
Response
{"data": {"setTrackSandboxConfigVersion": true}}
setupChallenge
Description
Runs the setup script for a challenge
Example
Query
mutation setupChallenge($challengeID: String!) {
setupChallenge(challengeID: $challengeID) {
...ChallengeFragment
}
}
Variables
{"challengeID": "abc123"}
Response
{
"data": {
"setupChallenge": {
"id": 4,
"track": Track,
"answers": ["xyz789"],
"assignment": "xyz789",
"attempts": [ChallengeAttempt],
"can_check": false,
"difficulty": "xyz789",
"index": 987,
"notes": [ChallengeNote],
"permalink": "abc123",
"scripts": [ChallengeScript],
"slug": "xyz789",
"solution": [123],
"hasSingleAnswer": false,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "xyz789",
"timelimit": 123,
"started": 987,
"completed": 123,
"failed": 123,
"failMessage": "abc123",
"title": "abc123",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": true
}
}
}
skipChallenge
Description
Skip a specific challenge of a track
Response
Returns a Challenge
Example
Query
mutation skipChallenge(
$trackID: String!,
$challengeID: String!,
$userID: String,
$inviteID: String
) {
skipChallenge(
trackID: $trackID,
challengeID: $challengeID,
userID: $userID,
inviteID: $inviteID
) {
...ChallengeFragment
}
}
Variables
{
"trackID": "xyz789",
"challengeID": "xyz789",
"userID": "abc123",
"inviteID": "abc123"
}
Response
{
"data": {
"skipChallenge": {
"id": 4,
"track": Track,
"answers": ["abc123"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": true,
"difficulty": "xyz789",
"index": 123,
"notes": [ChallengeNote],
"permalink": "abc123",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [987],
"hasSingleAnswer": true,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "xyz789",
"timelimit": 123,
"started": 123,
"completed": 123,
"failed": 987,
"failMessage": "abc123",
"title": "xyz789",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": false
}
}
}
skipToChallenge
Description
Skip to a specific challenge of a track
Response
Returns a Track
Arguments
Name | Description |
---|---|
trackID - String!
|
ID of the track |
challengeID - String!
|
ID of the challenge you want to skip to |
userID - String
|
ID of the user being impersonated |
inviteID - String
|
ID of the invite for the user being impersonated |
force - Boolean
|
Wheter you want to force skipping or let the skip walk through all scripts |
Example
Query
mutation skipToChallenge(
$trackID: String!,
$challengeID: String!,
$userID: String,
$inviteID: String,
$force: Boolean
) {
skipToChallenge(
trackID: $trackID,
challengeID: $challengeID,
userID: $userID,
inviteID: $inviteID,
force: $force
) {
...TrackFragment
}
}
Variables
{
"trackID": "abc123",
"challengeID": "abc123",
"userID": "xyz789",
"inviteID": "xyz789",
"force": true
}
Response
{
"data": {
"skipToChallenge": {
"id": 4,
"slug": "abc123",
"version": "abc123",
"revision": "10:15:30Z",
"type": "xyz789",
"title": "abc123",
"teaser": "xyz789",
"description": "xyz789",
"icon": "xyz789",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": true,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": true,
"skipping_enabled": false,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": false,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
solveChallenge
Description
Solve callenge solves the challenge
Example
Query
mutation solveChallenge($challengeID: String!) {
solveChallenge(challengeID: $challengeID) {
...ChallengeFragment
}
}
Variables
{"challengeID": "abc123"}
Response
{
"data": {
"solveChallenge": {
"id": "4",
"track": Track,
"answers": ["abc123"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": false,
"difficulty": "abc123",
"index": 987,
"notes": [ChallengeNote],
"permalink": "xyz789",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [123],
"hasSingleAnswer": true,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 987,
"started": 987,
"completed": 123,
"failed": 123,
"failMessage": "xyz789",
"title": "xyz789",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": true
}
}
}
startChallenge
Description
Starts a challenge
Should be called after the setup has completed successfully
Example
Query
mutation startChallenge($challengeID: String!) {
startChallenge(challengeID: $challengeID) {
...ChallengeFragment
}
}
Variables
{"challengeID": "xyz789"}
Response
{
"data": {
"startChallenge": {
"id": "4",
"track": Track,
"answers": ["xyz789"],
"assignment": "xyz789",
"attempts": [ChallengeAttempt],
"can_check": true,
"difficulty": "xyz789",
"index": 987,
"notes": [ChallengeNote],
"permalink": "xyz789",
"scripts": [ChallengeScript],
"slug": "xyz789",
"solution": [123],
"hasSingleAnswer": false,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "xyz789",
"timelimit": 987,
"started": 987,
"completed": 987,
"failed": 987,
"failMessage": "abc123",
"title": "xyz789",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": false
}
}
}
startHostImage
Description
Starts a sandbox for a host image
Response
Returns a Sandbox!
Arguments
Name | Description |
---|---|
hostImageID - ID!
|
|
vmConfig - HostImageVMConfigInput
|
Example
Query
mutation startHostImage(
$hostImageID: ID!,
$vmConfig: HostImageVMConfigInput
) {
startHostImage(
hostImageID: $hostImageID,
vmConfig: $vmConfig
) {
...SandboxFragment
}
}
Variables
{
"hostImageID": "4",
"vmConfig": HostImageVMConfigInput
}
Response
{
"data": {
"startHostImage": {
"id": 4,
"track": Track,
"state": "creating",
"invite": TrackInvite,
"hot_start_pool": HotStartPool,
"ttl": "10:15:30Z",
"created": "10:15:30Z",
"user": User,
"last_activity_at": "10:15:30Z"
}
}
}
startLab
Response
Returns a LabSession!
Example
Query
mutation startLab(
$name: String!,
$teamSlug: String!,
$ref: String,
$region: String
) {
startLab(
name: $name,
teamSlug: $teamSlug,
ref: $ref,
region: $region
) {
...LabSessionFragment
}
}
Variables
{
"name": "xyz789",
"teamSlug": "abc123",
"ref": "xyz789",
"region": "xyz789"
}
Response
{
"data": {
"startLab": {
"id": "4",
"lab": Lab,
"team": Team,
"user": User,
"userType": "instruqt",
"userMeta": Map,
"sandboxMeta": Map,
"status": "unknown",
"events": [LabSessionEvent],
"url": "xyz789"
}
}
}
startTrack
Description
Starts a track
Will start a new play for the logged in user. If the user already has a running instance of this track, that one will be returned rather than starting a new one.
Response
Returns a Track
Arguments
Name | Description |
---|---|
trackID - String!
|
ID of the track |
force - Boolean
|
Force starting a new track, instead of the option of getting an already started track |
prestart - Boolean
|
Prestart this track, so it will be available faster. This will only create the infrastructure, and not run the challenge setup |
mode - Mode
|
Mode in which the track was started (e.g. embed) |
inviteID - String
|
ID of the invite from where the track is started |
landingPageID - String
|
ID of the landing page from where the track is started |
customParameters - [CustomParametersInput!]
|
Custom Parameters used to inject metadata to the play. |
runtimeParameters - RuntimeParametersInput
|
Runtime Parameters used to inject metadata to the sandbox. |
region - String
|
Region, sandbox will be created in |
referrer - String
|
From which address the user navigated from |
Example
Query
mutation startTrack(
$trackID: String!,
$force: Boolean,
$prestart: Boolean,
$mode: Mode,
$inviteID: String,
$landingPageID: String,
$customParameters: [CustomParametersInput!],
$runtimeParameters: RuntimeParametersInput,
$region: String,
$referrer: String
) {
startTrack(
trackID: $trackID,
force: $force,
prestart: $prestart,
mode: $mode,
inviteID: $inviteID,
landingPageID: $landingPageID,
customParameters: $customParameters,
runtimeParameters: $runtimeParameters,
region: $region,
referrer: $referrer
) {
...TrackFragment
}
}
Variables
{
"trackID": "abc123",
"force": false,
"prestart": true,
"mode": "embed",
"inviteID": "abc123",
"landingPageID": "xyz789",
"customParameters": [CustomParametersInput],
"runtimeParameters": RuntimeParametersInput,
"region": "abc123",
"referrer": "abc123"
}
Response
{
"data": {
"startTrack": {
"id": "4",
"slug": "abc123",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "abc123",
"title": "xyz789",
"teaser": "abc123",
"description": "abc123",
"icon": "abc123",
"level": "beginner",
"tags": ["abc123"],
"trackTags": [Tag],
"owner": "xyz789",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": true,
"instructors": [TrackInstructor],
"updated_by": User,
"private": false,
"published": false,
"maintenance": false,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 987,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": true,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": false,
"skipping_enabled": true,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
stopAllTracks
Description
Stop all active tracks
Response
Returns a Boolean!
Example
Query
mutation stopAllTracks {
stopAllTracks
}
Response
{"data": {"stopAllTracks": true}}
stopHostImage
Description
Stops a sandbox for a host image
Example
Query
mutation stopHostImage($hostImageID: ID!) {
stopHostImage(hostImageID: $hostImageID) {
...SandboxFragment
}
}
Variables
{"hostImageID": "4"}
Response
{
"data": {
"stopHostImage": {
"id": "4",
"track": Track,
"state": "creating",
"invite": TrackInvite,
"hot_start_pool": HotStartPool,
"ttl": "10:15:30Z",
"created": "10:15:30Z",
"user": User,
"last_activity_at": "10:15:30Z"
}
}
}
stopLab
stopSandbox
Description
Stop a sandbox instance
Response
Returns a Sandbox
Arguments
Name | Description |
---|---|
sandboxID - String!
|
Sandbox id to set value for |
Example
Query
mutation stopSandbox($sandboxID: String!) {
stopSandbox(sandboxID: $sandboxID) {
...SandboxFragment
}
}
Variables
{"sandboxID": "abc123"}
Response
{
"data": {
"stopSandbox": {
"id": 4,
"track": Track,
"state": "creating",
"invite": TrackInvite,
"hot_start_pool": HotStartPool,
"ttl": "10:15:30Z",
"created": "10:15:30Z",
"user": User,
"last_activity_at": "10:15:30Z"
}
}
}
stopTrack
Description
Stops a track
Response
Returns a Track
Arguments
Name | Description |
---|---|
trackID - String!
|
ID of the track |
reason - TrackStopReason
|
Reason for stopping the track |
Example
Query
mutation stopTrack(
$trackID: String!,
$reason: TrackStopReason
) {
stopTrack(
trackID: $trackID,
reason: $reason
) {
...TrackFragment
}
}
Variables
{"trackID": "xyz789", "reason": "expired"}
Response
{
"data": {
"stopTrack": {
"id": 4,
"slug": "abc123",
"version": "abc123",
"revision": "10:15:30Z",
"type": "abc123",
"title": "xyz789",
"teaser": "xyz789",
"description": "abc123",
"icon": "abc123",
"level": "beginner",
"tags": ["abc123"],
"trackTags": [Tag],
"owner": "xyz789",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": true,
"instructors": [TrackInstructor],
"updated_by": User,
"private": false,
"published": true,
"maintenance": false,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 123,
"show_timer": false,
"skipping_enabled": false,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "abc123",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
toggleRaisedHand
Description
Toggles the raised hand status for a user
Example
Query
mutation toggleRaisedHand($inviteID: ID!) {
toggleRaisedHand(inviteID: $inviteID) {
...StudentFragment
}
}
Variables
{"inviteID": "4"}
Response
{
"data": {
"toggleRaisedHand": {
"id": 4,
"user": User,
"track": Track,
"challenge": Challenge,
"currentChallengeAttempts": [ChallengeAttempt],
"last_activity_at": "10:15:30Z",
"completed_at": "10:15:30Z",
"accessed_at": "10:15:30Z",
"inspectable": true,
"claim": InviteClaim,
"activeSandboxesTotal": 987,
"raisedHandAt": "10:15:30Z",
"inviteTracks": [Track],
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
}
}
updateAwsAccountConfig
Description
Update an AWS account config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - AwsAccountConfigInput!
|
The AWS Account config to update |
Example
Query
mutation updateAwsAccountConfig($config: AwsAccountConfigInput!) {
updateAwsAccountConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": AwsAccountConfigInput}
Response
{
"data": {
"updateAwsAccountConfig": {
"id": "4",
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
updateAzureSubscriptionConfig
Description
Update an Azure Subscription config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - AzureSubscriptionConfigInput!
|
The Azure Subscription config to update |
Example
Query
mutation updateAzureSubscriptionConfig($config: AzureSubscriptionConfigInput!) {
updateAzureSubscriptionConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": AzureSubscriptionConfigInput}
Response
{
"data": {
"updateAzureSubscriptionConfig": {
"id": "4",
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
updateChallenge
Description
Update a challenge of a track
Note: you need to be a developer for this track
Response
Returns a Challenge
Arguments
Name | Description |
---|---|
challenge - ChallengeInput!
|
the challenge to update |
Example
Query
mutation updateChallenge($challenge: ChallengeInput!) {
updateChallenge(challenge: $challenge) {
...ChallengeFragment
}
}
Variables
{"challenge": ChallengeInput}
Response
{
"data": {
"updateChallenge": {
"id": 4,
"track": Track,
"answers": ["xyz789"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": false,
"difficulty": "abc123",
"index": 123,
"notes": [ChallengeNote],
"permalink": "xyz789",
"scripts": [ChallengeScript],
"slug": "xyz789",
"solution": [987],
"hasSingleAnswer": true,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 123,
"started": 123,
"completed": 987,
"failed": 123,
"failMessage": "abc123",
"title": "abc123",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": true
}
}
}
updateChallengeIndexes
Description
Update the challenge order of a track
Note: you need to be a developer for this track
Response
Returns [Challenge!]
Arguments
Name | Description |
---|---|
trackID - String!
|
ID of the track |
challenges - [String!]!
|
List of challenge IDs, in the order of which they need to be |
Example
Query
mutation updateChallengeIndexes(
$trackID: String!,
$challenges: [String!]!
) {
updateChallengeIndexes(
trackID: $trackID,
challenges: $challenges
) {
...ChallengeFragment
}
}
Variables
{
"trackID": "xyz789",
"challenges": ["xyz789"]
}
Response
{
"data": {
"updateChallengeIndexes": [
{
"id": 4,
"track": Track,
"answers": ["abc123"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": true,
"difficulty": "xyz789",
"index": 987,
"notes": [ChallengeNote],
"permalink": "abc123",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [987],
"hasSingleAnswer": true,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 987,
"started": 987,
"completed": 987,
"failed": 123,
"failMessage": "xyz789",
"title": "xyz789",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": false
}
]
}
}
updateChallengeLabConfig
Description
Update a challenge lab config
Response
Returns a Challenge!
Arguments
Name | Description |
---|---|
challengeID - ID!
|
|
input - ChallengeLabConfigInput!
|
Example
Query
mutation updateChallengeLabConfig(
$challengeID: ID!,
$input: ChallengeLabConfigInput!
) {
updateChallengeLabConfig(
challengeID: $challengeID,
input: $input
) {
...ChallengeFragment
}
}
Variables
{"challengeID": 4, "input": ChallengeLabConfigInput}
Response
{
"data": {
"updateChallengeLabConfig": {
"id": 4,
"track": Track,
"answers": ["xyz789"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": true,
"difficulty": "xyz789",
"index": 123,
"notes": [ChallengeNote],
"permalink": "abc123",
"scripts": [ChallengeScript],
"slug": "abc123",
"solution": [987],
"hasSingleAnswer": true,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "xyz789",
"timelimit": 987,
"started": 987,
"completed": 123,
"failed": 123,
"failMessage": "xyz789",
"title": "xyz789",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": true
}
}
}
updateChallengeNote
Description
Update a challenge note
Note: you need to be a developer for this track
Response
Returns a ChallengeNote
Arguments
Name | Description |
---|---|
note - ChallengeNoteInput!
|
The note to update |
Example
Query
mutation updateChallengeNote($note: ChallengeNoteInput!) {
updateChallengeNote(note: $note) {
...ChallengeNoteFragment
}
}
Variables
{"note": ChallengeNoteInput}
Response
{
"data": {
"updateChallengeNote": {
"id": "4",
"contents": "xyz789",
"index": 123,
"type": "image",
"url": "abc123"
}
}
}
updateChallengeNoteIndexes
Description
Update challenge note order
Note: you need to be a developer for this track
Response
Returns [ChallengeNote!]
Arguments
Name | Description |
---|---|
challengeID - String!
|
ID of the challenge |
notes - [String!]!
|
List of note IDs, in the order of which they need to be |
Example
Query
mutation updateChallengeNoteIndexes(
$challengeID: String!,
$notes: [String!]!
) {
updateChallengeNoteIndexes(
challengeID: $challengeID,
notes: $notes
) {
...ChallengeNoteFragment
}
}
Variables
{
"challengeID": "abc123",
"notes": ["abc123"]
}
Response
{
"data": {
"updateChallengeNoteIndexes": [
{
"id": "4",
"contents": "abc123",
"index": 123,
"type": "image",
"url": "abc123"
}
]
}
}
updateChallengeTab
Description
Update a challenge tab
Note: you need to be a developer for this track
Response
Returns a ChallengeTab
Arguments
Name | Description |
---|---|
tab - ChallengeTabInput!
|
The tab to update |
Example
Query
mutation updateChallengeTab($tab: ChallengeTabInput!) {
updateChallengeTab(tab: $tab) {
...ChallengeTabFragment
}
}
Variables
{"tab": ChallengeTabInput}
Response
{
"data": {
"updateChallengeTab": {
"id": "4",
"index": 987,
"hostname": "xyz789",
"path": "xyz789",
"port": 123,
"target": "xyz789",
"title": "abc123",
"type": "service",
"url": "xyz789",
"new_window": false,
"workdir": "xyz789",
"cmd": "abc123",
"custom_headers": [CustomHeader],
"custom_response_headers": [CustomHeader]
}
}
}
updateChallengeTabIndexes
Description
Update challenge tab order
Note: you need to be a developer for this track
Response
Returns [ChallengeTab!]
Arguments
Name | Description |
---|---|
challengeID - String!
|
ID of the challenge |
tabs - [String!]!
|
List of tab IDs, in the order of which they need to be |
Example
Query
mutation updateChallengeTabIndexes(
$challengeID: String!,
$tabs: [String!]!
) {
updateChallengeTabIndexes(
challengeID: $challengeID,
tabs: $tabs
) {
...ChallengeTabFragment
}
}
Variables
{
"challengeID": "abc123",
"tabs": ["xyz789"]
}
Response
{
"data": {
"updateChallengeTabIndexes": [
{
"id": 4,
"index": 123,
"hostname": "abc123",
"path": "abc123",
"port": 123,
"target": "abc123",
"title": "abc123",
"type": "service",
"url": "abc123",
"new_window": true,
"workdir": "xyz789",
"cmd": "xyz789",
"custom_headers": [CustomHeader],
"custom_response_headers": [CustomHeader]
}
]
}
}
updateCloudProviderConfig
Description
Update the cloud provider configuration of a team
Response
Returns a CloudProviderConfig!
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
input - CloudProviderConfigInput!
|
Example
Query
mutation updateCloudProviderConfig(
$teamID: ID!,
$input: CloudProviderConfigInput!
) {
updateCloudProviderConfig(
teamID: $teamID,
input: $input
) {
...CloudProviderConfigFragment
}
}
Variables
{
"teamID": "4",
"input": CloudProviderConfigInput
}
Response
{
"data": {
"updateCloudProviderConfig": {
"provider": "aws",
"services": [CloudProviderService],
"regions": [CloudProviderRegion]
}
}
}
updateCompleteTrack
Description
Update a complete track
This is similar to updateTrack, but will also update the developers, challenge scripts and track config. It expects that all these fields are set on the input. If they are not set, it will remove any existing values from the database. The main use-case for this is facilitating the CLI.
Note: you need to be a developer for this track
Response
Returns a Track
Arguments
Name | Description |
---|---|
track - TrackInput!
|
Example
Query
mutation updateCompleteTrack($track: TrackInput!) {
updateCompleteTrack(track: $track) {
...TrackFragment
}
}
Variables
{"track": TrackInput}
Response
{
"data": {
"updateCompleteTrack": {
"id": 4,
"slug": "abc123",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "xyz789",
"title": "abc123",
"teaser": "abc123",
"description": "abc123",
"icon": "abc123",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": true,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "xyz789",
"play_limit": 123,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 123,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": false,
"skipping_enabled": false,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "abc123",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "abc123",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
updateCompleteTrackVersioned
Response
Returns a VersionedTrack
Arguments
Name | Description |
---|---|
track - TrackInput!
|
|
files - [FileInput!]
|
Files that have conflicts |
Example
Query
mutation updateCompleteTrackVersioned(
$track: TrackInput!,
$files: [FileInput!]
) {
updateCompleteTrackVersioned(
track: $track,
files: $files
) {
...VersionedTrackFragment
}
}
Variables
{
"track": TrackInput,
"files": [FileInput]
}
Response
{
"data": {
"updateCompleteTrackVersioned": {
"track": Track,
"conflicts": [File]
}
}
}
updateContainerConfig
Description
Update a container config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - ContainerConfigInput!
|
The container config to update |
Example
Query
mutation updateContainerConfig($config: ContainerConfigInput!) {
updateContainerConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": ContainerConfigInput}
Response
{
"data": {
"updateContainerConfig": {
"id": 4,
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
updateCustomResource
Description
updates the custom resource with the given id
Response
Returns a CustomResource!
Arguments
Name | Description |
---|---|
id - ID!
|
|
input - UpdateCustomResourceInput!
|
Example
Query
mutation updateCustomResource(
$id: ID!,
$input: UpdateCustomResourceInput!
) {
updateCustomResource(
id: $id,
input: $input
) {
...CustomResourceFragment
}
}
Variables
{"id": 4, "input": UpdateCustomResourceInput}
Response
{
"data": {
"updateCustomResource": {
"id": 4,
"name": "xyz789",
"slug": "abc123",
"description": "xyz789",
"version": "xyz789",
"logo": "abc123",
"provider": "terraform",
"canDelete": true,
"terraformModule": TerraformModule,
"inputs": [CustomResourceInput],
"outputs": [CustomResourceOutput],
"createdAt": "10:15:30Z",
"createdBy": User
}
}
}
updateForm
Description
Updates the user details form for a team
Response
Returns a Form
Arguments
Name | Description |
---|---|
form - FormInput!
|
Example
Query
mutation updateForm($form: FormInput!) {
updateForm(form: $form) {
...FormFragment
}
}
Variables
{"form": FormInput}
Response
{
"data": {
"updateForm": {
"id": 4,
"formTitle": "xyz789",
"consentNotice": "xyz789",
"fields": [FormField],
"validateWorkEmail": false,
"confirmEmailOwnership": true
}
}
}
updateGcpProjectConfig
Description
Update a GCP project config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - GcpProjectConfigInput!
|
The gcp project config to update |
Example
Query
mutation updateGcpProjectConfig($config: GcpProjectConfigInput!) {
updateGcpProjectConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": GcpProjectConfigInput}
Response
{
"data": {
"updateGcpProjectConfig": {
"id": "4",
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
updateHostImage
Description
Updates an existing host image
Response
Returns a HostImage!
Arguments
Name | Description |
---|---|
input - HostImageInput!
|
Example
Query
mutation updateHostImage($input: HostImageInput!) {
updateHostImage(input: $input) {
...HostImageFragment
}
}
Variables
{"input": HostImageInput}
Response
{
"data": {
"updateHostImage": {
"id": "4",
"slug": "abc123",
"description": "xyz789",
"imageMetadata": ImageMetadata,
"status": "created",
"currentSandbox": HostImageSandbox,
"team": Team,
"usedInTracks": [Track],
"usedInSandboxConfigVersions": [
SandboxConfigVersion
],
"createdAt": "10:15:30Z",
"createdBy": User,
"createdWith": HostImageVMInputs
}
}
}
updateHotStartPool
Description
Update hot start pool
Response
Returns a HotStartPool
Arguments
Name | Description |
---|---|
id - ID!
|
ID of hot start pool to update |
pool - HotStartPoolInput!
|
pool to update |
Example
Query
mutation updateHotStartPool(
$id: ID!,
$pool: HotStartPoolInput!
) {
updateHotStartPool(
id: $id,
pool: $pool
) {
...HotStartPoolFragment
}
}
Variables
{
"id": "4",
"pool": HotStartPoolInput
}
Response
{
"data": {
"updateHotStartPool": {
"id": 4,
"type": "dedicated",
"size": 123,
"created": "10:15:30Z",
"deleted": "10:15:30Z",
"name": "xyz789",
"auto_refill": false,
"starts_at": "10:15:30Z",
"ends_at": "10:15:30Z",
"created_by": User,
"team": Team,
"tracks": [HotStartPoolTrackEdge],
"configs": [HotStartConfigTrackEdge],
"status": "Running",
"region": "xyz789"
}
}
}
updateLandingPage
Response
Returns a LandingPage!
Arguments
Name | Description |
---|---|
input - LandingPageInput!
|
Example
Query
mutation updateLandingPage($input: LandingPageInput!) {
updateLandingPage(input: $input) {
...LandingPageFragment
}
}
Variables
{"input": LandingPageInput}
Response
{
"data": {
"updateLandingPage": {
"id": 4,
"team": Team,
"internalPageName": "abc123",
"path": "abc123",
"isPublished": true,
"unpublishedAt": "10:15:30Z",
"publishedAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"trackPlayLimit": 987,
"formEnabled": true,
"privacyPolicyUrl": "abc123",
"termsAndConditionsUrl": "xyz789",
"pageTitle": "xyz789",
"seoDescription": "abc123",
"robotsIndexingEnabled": false,
"backgroundColor": "abc123",
"textColor": "xyz789",
"logoUrl": "abc123",
"logoLink": "xyz789",
"pageHeading": "xyz789",
"pageSubtitle": "xyz789",
"tracks": [LandingPageTrackEdge],
"currentUserClaimed": true
}
}
}
updateLtiToolRegistration
Description
Update an LTI 1.3 tool
Response
Returns a LtiToolRegistration!
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
id - ID!
|
|
input - LtiToolRegistrationInput!
|
Example
Query
mutation updateLtiToolRegistration(
$teamID: ID!,
$id: ID!,
$input: LtiToolRegistrationInput!
) {
updateLtiToolRegistration(
teamID: $teamID,
id: $id,
input: $input
) {
...LtiToolRegistrationFragment
}
}
Variables
{"teamID": 4, "id": 4, "input": LtiToolRegistrationInput}
Response
{
"data": {
"updateLtiToolRegistration": {
"id": 4,
"name": "abc123",
"teamID": "abc123",
"issuer": "abc123",
"clientID": "xyz789",
"keySetURL": "abc123",
"publicKey": "xyz789",
"accessTokenURL": "xyz789",
"authURL": "xyz789",
"deploymentIDs": ["xyz789"]
}
}
}
updateOrganization
Description
Update an organization
Response
Returns an Organization
Arguments
Name | Description |
---|---|
organization - OrganizationInput!
|
Example
Query
mutation updateOrganization($organization: OrganizationInput!) {
updateOrganization(organization: $organization) {
...OrganizationFragment
}
}
Variables
{"organization": OrganizationInput}
Response
{
"data": {
"updateOrganization": {
"id": 4,
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "abc123",
"logo": "abc123",
"title": "xyz789",
"subtitle": "abc123",
"slug": "xyz789",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "xyz789",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": OrganizationTheme,
"personal": true,
"features": OrganizationFeatures,
"invited": ["abc123"],
"invites": [OrganizationInvite],
"privacy_policy": "abc123",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
}
}
updateRemoteRepository
Description
Update remote git repository in a track
Example
Query
mutation updateRemoteRepository(
$trackID: String!,
$repository: String!
) {
updateRemoteRepository(
trackID: $trackID,
repository: $repository
) {
...TrackFragment
}
}
Variables
{
"trackID": "xyz789",
"repository": "abc123"
}
Response
{
"data": {
"updateRemoteRepository": {
"id": "4",
"slug": "abc123",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "abc123",
"title": "abc123",
"teaser": "xyz789",
"description": "abc123",
"icon": "abc123",
"level": "beginner",
"tags": ["abc123"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": false,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 987,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": false,
"skipping_enabled": true,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
updateSamlSsoConnection
Response
Returns a SsoConnection
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
connectionName - String!
|
Name of the connection being updated |
ssoConnection - SsoSamlConnectionInput!
|
The connection values being updated |
Example
Query
mutation updateSamlSsoConnection(
$teamID: ID!,
$connectionName: String!,
$ssoConnection: SsoSamlConnectionInput!
) {
updateSamlSsoConnection(
teamID: $teamID,
connectionName: $connectionName,
ssoConnection: $ssoConnection
) {
...SsoConnectionFragment
}
}
Variables
{
"teamID": 4,
"connectionName": "xyz789",
"ssoConnection": SsoSamlConnectionInput
}
Response
{
"data": {
"updateSamlSsoConnection": {
"name": "abc123",
"organizationID": "abc123",
"strategy": "okta",
"options": DefaultSsoConnectionOptions
}
}
}
updateSandboxConfig
Description
Updates the given config
Response
Returns a SandboxConfigVersion
Arguments
Name | Description |
---|---|
configID - String!
|
The config id |
config - SandboxConfigInput!
|
The config |
Example
Query
mutation updateSandboxConfig(
$configID: String!,
$config: SandboxConfigInput!
) {
updateSandboxConfig(
configID: $configID,
config: $config
) {
...SandboxConfigVersionFragment
}
}
Variables
{
"configID": "abc123",
"config": SandboxConfigInput
}
Response
{
"data": {
"updateSandboxConfig": {
"id": 4,
"config": SandboxConfig,
"version": 987,
"description": "abc123",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "abc123",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
}
}
updateSandboxTTL
Description
Update the sandbox ttl time
Response
Returns a Sandbox
Example
Query
mutation updateSandboxTTL(
$sandboxID: String!,
$until: Time!
) {
updateSandboxTTL(
sandboxID: $sandboxID,
until: $until
) {
...SandboxFragment
}
}
Variables
{
"sandboxID": "abc123",
"until": "10:15:30Z"
}
Response
{
"data": {
"updateSandboxTTL": {
"id": 4,
"track": Track,
"state": "creating",
"invite": TrackInvite,
"hot_start_pool": HotStartPool,
"ttl": "10:15:30Z",
"created": "10:15:30Z",
"user": User,
"last_activity_at": "10:15:30Z"
}
}
}
updateSecretConfig
Description
Updates the secret configs for a track
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
trackID - String!
|
The ID of the track |
configs - [SecretConfigInput!]!
|
The secret configs to add |
Example
Query
mutation updateSecretConfig(
$trackID: String!,
$configs: [SecretConfigInput!]!
) {
updateSecretConfig(
trackID: $trackID,
configs: $configs
) {
...TrackConfigFragment
}
}
Variables
{
"trackID": "xyz789",
"configs": [SecretConfigInput]
}
Response
{
"data": {
"updateSecretConfig": {
"id": 4,
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
updateSsoConnection
Response
Returns a SsoConnection
Arguments
Name | Description |
---|---|
teamID - ID!
|
|
connectionName - String!
|
Name of the connection being updated |
ssoConnection - SsoConnectionInput!
|
The connection values being updated |
Example
Query
mutation updateSsoConnection(
$teamID: ID!,
$connectionName: String!,
$ssoConnection: SsoConnectionInput!
) {
updateSsoConnection(
teamID: $teamID,
connectionName: $connectionName,
ssoConnection: $ssoConnection
) {
...SsoConnectionFragment
}
}
Variables
{
"teamID": 4,
"connectionName": "abc123",
"ssoConnection": SsoConnectionInput
}
Response
{
"data": {
"updateSsoConnection": {
"name": "xyz789",
"organizationID": "xyz789",
"strategy": "okta",
"options": DefaultSsoConnectionOptions
}
}
}
updateTag
Description
Updates an existing tag
Example
Query
mutation updateTag(
$id: ID!,
$input: TagInput!
) {
updateTag(
id: $id,
input: $input
) {
...TagFragment
}
}
Variables
{
"id": "4",
"input": TagInput
}
Response
{
"data": {
"updateTag": {
"id": 4,
"value": "abc123",
"createdAt": "10:15:30Z",
"tracks": [Track],
"groups": [TagGroup]
}
}
}
updateTagGroup
Description
Updates an existing tag group
Response
Returns a TagGroup!
Arguments
Name | Description |
---|---|
id - ID!
|
|
input - TagGroupInput!
|
|
tagIDs - [ID!]!
|
Example
Query
mutation updateTagGroup(
$id: ID!,
$input: TagGroupInput!,
$tagIDs: [ID!]!
) {
updateTagGroup(
id: $id,
input: $input,
tagIDs: $tagIDs
) {
...TagGroupFragment
}
}
Variables
{
"id": "4",
"input": TagGroupInput,
"tagIDs": ["4"]
}
Response
{
"data": {
"updateTagGroup": {
"id": 4,
"name": "abc123",
"createdAt": "10:15:30Z",
"tags": [Tag]
}
}
}
updateTeam
Description
Update a team
Response
Returns a Team
Arguments
Name | Description |
---|---|
team - TeamInput!
|
Example
Query
mutation updateTeam($team: TeamInput!) {
updateTeam(team: $team) {
...TeamFragment
}
}
Variables
{"team": TeamInput}
Response
{
"data": {
"updateTeam": {
"id": 4,
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": false,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "abc123",
"logo": "abc123",
"title": "xyz789",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "abc123",
"primary_link_url": "abc123",
"secondary_link_text": "xyz789",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": false,
"features": TeamFeatures,
"invited": ["xyz789"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "abc123",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 987,
"enabledRepositories": ["abc123"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "xyz789"
}
}
}
updateTeamFeatures
Description
Update team features
Response
Returns a TeamFeatures
Arguments
Name | Description |
---|---|
teamID - String!
|
ID of the team |
features - TeamFeaturesInput!
|
Features to be updated |
Example
Query
mutation updateTeamFeatures(
$teamID: String!,
$features: TeamFeaturesInput!
) {
updateTeamFeatures(
teamID: $teamID,
features: $features
) {
...TeamFeaturesFragment
}
}
Variables
{
"teamID": "abc123",
"features": TeamFeaturesInput
}
Response
{
"data": {
"updateTeamFeatures": {
"max_tracks": 123,
"max_timelimit": 987,
"max_hot_start_pool_size_always_on": 987,
"max_hot_start_pool_size_scheduled": 123,
"containers": true,
"virtual_machines": true,
"gcp_projects": true,
"aws_accounts": true,
"azure_subscriptions": false,
"blueprint_sandbox": false,
"embedded": true,
"members_skip_to_challenge": true,
"track_reviews": false,
"accept_terms_checkbox": true,
"hot_start": true,
"custom_machine_type": false,
"shared_hotstart_pools": true,
"scripts_over_http": false,
"global_sandboxes": true,
"use_new_terminal": false,
"custom_resources": true,
"crm_integration": false,
"can_hide_sidebar": true,
"can_add_feedback_tab": false,
"exclude_instruqt_plays": false,
"versioned": false,
"new_content_structure": false,
"user_completion_rate": true,
"labV2": false,
"landingPages": true,
"exposeCloudAccountCredentials": true,
"instantSandboxes": false,
"cloudProvidersConfig": true,
"useExternalEmailValidation": false,
"consumptionOverview": true,
"emailOwnershipConfirmation": false,
"temporal": false,
"authType": "FGA_ONLY",
"enhancedLabLoading": true,
"instructorTools": false,
"screenSharing": true
}
}
}
updateTrack
Description
Update a track
Note: you need to be a developer for this track
Response
Returns a Track
Arguments
Name | Description |
---|---|
track - TrackInput!
|
The track to update |
Example
Query
mutation updateTrack($track: TrackInput!) {
updateTrack(track: $track) {
...TrackFragment
}
}
Variables
{"track": TrackInput}
Response
{
"data": {
"updateTrack": {
"id": "4",
"slug": "xyz789",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "abc123",
"title": "xyz789",
"teaser": "abc123",
"description": "abc123",
"icon": "xyz789",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": true,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": false,
"maintenance": false,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 123,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 123,
"median_starttime": 987,
"prestart": true,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": false,
"skipping_enabled": true,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": false,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "xyz789",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
}
}
updateTrackFeatures
Description
Update track features
Response
Returns a Track!
Arguments
Name | Description |
---|---|
trackID - String!
|
ID of the track |
features - TrackFeaturesInput!
|
Features to be updated |
Example
Query
mutation updateTrackFeatures(
$trackID: String!,
$features: TrackFeaturesInput!
) {
updateTrackFeatures(
trackID: $trackID,
features: $features
) {
...TrackFragment
}
}
Variables
{
"trackID": "xyz789",
"features": TrackFeaturesInput
}
Response
{
"data": {
"updateTrackFeatures": {
"id": "4",
"slug": "abc123",
"version": "abc123",
"revision": "10:15:30Z",
"type": "abc123",
"title": "abc123",
"teaser": "xyz789",
"description": "xyz789",
"icon": "abc123",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": false,
"published": true,
"maintenance": true,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 987,
"play_count": 987,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": true,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 987,
"show_timer": true,
"skipping_enabled": true,
"can_skip": false,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": false,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 987,
"studentStatistics": StudentTrackStatistics,
"timelimit": 123,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "abc123",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": false
}
}
}
updateTrackInvite
Description
Update a track invite
Note: you need to be a member of the organization of the track the invite is for
Response
Returns a TrackInvite
Arguments
Name | Description |
---|---|
invite - TrackInviteInput!
|
invite to update |
Example
Query
mutation updateTrackInvite($invite: TrackInviteInput!) {
updateTrackInvite(invite: $invite) {
...TrackInviteFragment
}
}
Variables
{"invite": TrackInviteInput}
Response
{
"data": {
"updateTrackInvite": {
"id": "4",
"title": "xyz789",
"publicTitle": "abc123",
"publicDescription": "xyz789",
"tracks": [Track],
"trackEdges": [TrackInviteTrackEdge],
"authors": [TrackInviteAuthor],
"trackLibrary": TrackLibraryEntryConnection,
"organization": Organization,
"team": Team,
"accessSetting": "anyone",
"inviteLimit": 987,
"inviteCount": 123,
"claimCount": 987,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 123,
"playTTL": 987,
"created": "10:15:30Z",
"last_updated": "10:15:30Z",
"allowAnonymous": true,
"allowedEmailAddresses": ["abc123"],
"allowedEmailAddressesOnly": false,
"currentUserAllowed": true,
"currentUserClaim": InviteClaim,
"currentUserClaimed": true,
"claims": [InviteClaim],
"activeUsers": [UserActivity],
"plays": [InvitePlay],
"type": "self_paced",
"status": "active",
"daysUntil": 987,
"enableLearnerSharing": true,
"canClaim": true,
"runtimeParameters": RuntimeParameters,
"shareMethod": "link",
"deletedAt": "10:15:30Z",
"emailOwnershipConfirmationRequired": true,
"instructorToolsEnabled": true,
"screenSharingEnabled": false,
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
}
}
updateTrackReview
Description
Update track review with content.
Note: this updates track review as the currently authenticated user.
Response
Returns a TrackReview
Arguments
Name | Description |
---|---|
id - ID!
|
|
input - TrackReviewInput!
|
Example
Query
mutation updateTrackReview(
$id: ID!,
$input: TrackReviewInput!
) {
updateTrackReview(
id: $id,
input: $input
) {
...TrackReviewFragment
}
}
Variables
{
"id": "4",
"input": TrackReviewInput
}
Response
{
"data": {
"updateTrackReview": {
"id": 4,
"track": Track,
"challenge": Challenge,
"user": User,
"play": Play,
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"score": 123,
"content": "xyz789"
}
}
}
updateUser
Description
Update a user with displayName and/or slug (username)
Response
Returns a User
Example
Query
mutation updateUser(
$userID: String,
$displayName: String,
$slug: String
) {
updateUser(
userID: $userID,
displayName: $displayName,
slug: $slug
) {
...UserFragment
}
}
Variables
{
"userID": "abc123",
"displayName": "xyz789",
"slug": "xyz789"
}
Response
{
"data": {
"updateUser": {
"id": 4,
"profile": UserProfile,
"details": UserDetails,
"organizations": [UserOrganizationEdge],
"teams": [UserTeamEdge],
"is_anonymous": true,
"is_global_admin": true,
"segments": ["instruqt_employee"],
"claims": [InviteClaim],
"accessibleTracks": [Track],
"reportItem": UserReportItem,
"supportVerificationHash": "xyz789"
}
}
}
updateVirtualBrowserConfig
Description
Update a virtualbrowser config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - VirtualBrowserConfigInput!
|
The vm config to update |
Example
Query
mutation updateVirtualBrowserConfig($config: VirtualBrowserConfigInput!) {
updateVirtualBrowserConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": VirtualBrowserConfigInput}
Response
{
"data": {
"updateVirtualBrowserConfig": {
"id": 4,
"version": "xyz789",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
updateVirtualMachineConfig
Description
Update a virtualmachine config
Note: you need to be a developer for this track
Response
Returns a TrackConfig
Arguments
Name | Description |
---|---|
config - VirtualMachineConfigInput!
|
The vm config to update |
Example
Query
mutation updateVirtualMachineConfig($config: VirtualMachineConfigInput!) {
updateVirtualMachineConfig(config: $config) {
...TrackConfigFragment
}
}
Variables
{"config": VirtualMachineConfigInput}
Response
{
"data": {
"updateVirtualMachineConfig": {
"id": 4,
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
}
}
updateWebhook
Description
Update a webhook
Response
Returns a Webhook!
Arguments
Name | Description |
---|---|
id - String!
|
The ID of the webhook to be updated |
teamID - String
|
ID of the team |
teamSlug - String
|
Slug of the team |
webhook - WebhookInput!
|
The input properties of the new webhook |
Example
Query
mutation updateWebhook(
$id: String!,
$teamID: String,
$teamSlug: String,
$webhook: WebhookInput!
) {
updateWebhook(
id: $id,
teamID: $teamID,
teamSlug: $teamSlug,
webhook: $webhook
) {
...WebhookFragment
}
}
Variables
{
"id": "xyz789",
"teamID": "xyz789",
"teamSlug": "abc123",
"webhook": WebhookInput
}
Response
{
"data": {
"updateWebhook": {
"id": "4",
"name": "xyz789",
"url": "xyz789",
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"events": ["abc123"],
"custom_headers": [CustomHeader]
}
}
}
upsertTeamSecret
Response
Returns a Secret
Example
Query
mutation upsertTeamSecret(
$teamSlug: String,
$teamID: String,
$name: String!,
$description: String!,
$secret: String!
) {
upsertTeamSecret(
teamSlug: $teamSlug,
teamID: $teamID,
name: $name,
description: $description,
secret: $secret
) {
...SecretFragment
}
}
Variables
{
"teamSlug": "abc123",
"teamID": "xyz789",
"name": "xyz789",
"description": "abc123",
"secret": "abc123"
}
Response
{
"data": {
"upsertTeamSecret": {
"name": "abc123",
"description": "xyz789",
"teamID": "xyz789",
"created_at": "10:15:30Z",
"created_by": User,
"updated_at": "10:15:30Z",
"updated_by": User,
"tracks": [Track],
"config_versions": [SandboxConfigVersion]
}
}
}
upsertVirtualBrowserCheck
Description
Create a new virtual browser check
Response
Returns a VirtualBrowserCheck!
Arguments
Name | Description |
---|---|
virtualBrowserCheck - VirtualBrowserCheckInput!
|
The input properties of the new virtual browser check |
Example
Query
mutation upsertVirtualBrowserCheck($virtualBrowserCheck: VirtualBrowserCheckInput!) {
upsertVirtualBrowserCheck(virtualBrowserCheck: $virtualBrowserCheck) {
...VirtualBrowserCheckFragment
}
}
Variables
{"virtualBrowserCheck": VirtualBrowserCheckInput}
Response
{
"data": {
"upsertVirtualBrowserCheck": {
"id": "4",
"challenge": Challenge,
"host": "xyz789",
"browserLocation": Location,
"element": [HtmlElement],
"innerText": [HtmlElement]
}
}
}
Subscriptions
dashboardRaisedHandSubscription
Description
Subscription for instructors to receive raised hand events.
Response
Returns a RaisedHandEvent!
Arguments
Name | Description |
---|---|
inviteID - ID!
|
The invite ID. |
Example
Query
subscription dashboardRaisedHandSubscription($inviteID: ID!) {
dashboardRaisedHandSubscription(inviteID: $inviteID) {
...RaisedHandEventFragment
}
}
Variables
{"inviteID": "4"}
Response
{
"data": {
"dashboardRaisedHandSubscription": {
"inviteID": 4,
"studentID": 4,
"raisedHandAt": "10:15:30Z",
"createdAt": "10:15:30Z",
"error": EventError
}
}
}
instructorChatMessageSubscription
Description
Subscription for instructor users to receive chat messages.
Response
Returns a TrackInviteChatMessageEvent!
Arguments
Name | Description |
---|---|
inviteID - ID!
|
Example
Query
subscription instructorChatMessageSubscription($inviteID: ID!) {
instructorChatMessageSubscription(inviteID: $inviteID) {
...TrackInviteChatMessageEventFragment
}
}
Variables
{"inviteID": 4}
Response
{
"data": {
"instructorChatMessageSubscription": {
"chatMessage": TrackInviteChatMessage,
"error": EventError
}
}
}
instructorLearnerEventSubscription
Description
Subscription for instructors to receive learner events.
Response
Returns a LearnerEventEvent!
Arguments
Name | Description |
---|---|
inviteID - ID!
|
Example
Query
subscription instructorLearnerEventSubscription($inviteID: ID!) {
instructorLearnerEventSubscription(inviteID: $inviteID) {
...LearnerEventEventFragment
}
}
Variables
{"inviteID": 4}
Response
{
"data": {
"instructorLearnerEventSubscription": {
"learnerEvent": LearnerEvent,
"error": EventError
}
}
}
labRaisedHandSubscription
Description
Subscription for users to receive raised hand events.
Response
Returns a RaisedHandEvent!
Arguments
Name | Description |
---|---|
inviteID - ID!
|
The invite ID. |
Example
Query
subscription labRaisedHandSubscription($inviteID: ID!) {
labRaisedHandSubscription(inviteID: $inviteID) {
...RaisedHandEventFragment
}
}
Variables
{"inviteID": 4}
Response
{
"data": {
"labRaisedHandSubscription": {
"inviteID": 4,
"studentID": "4",
"raisedHandAt": "10:15:30Z",
"createdAt": "10:15:30Z",
"error": EventError
}
}
}
readMessagesSubscription
Description
Subscription for users to receive read messages status event.
Response
Returns a ReadMessageEvent!
Arguments
Name | Description |
---|---|
inviteID - ID!
|
Example
Query
subscription readMessagesSubscription($inviteID: ID!) {
readMessagesSubscription(inviteID: $inviteID) {
...ReadMessageEventFragment
}
}
Variables
{"inviteID": "4"}
Response
{
"data": {
"readMessagesSubscription": {
"readAtEvents": [ReadAtEvent],
"error": EventError
}
}
}
studentChatMessageSubscription
Description
Subscription for student users to receive chat messages.
Response
Returns a TrackInviteChatMessageEvent!
Arguments
Name | Description |
---|---|
inviteID - ID!
|
Example
Query
subscription studentChatMessageSubscription($inviteID: ID!) {
studentChatMessageSubscription(inviteID: $inviteID) {
...TrackInviteChatMessageEventFragment
}
}
Variables
{"inviteID": "4"}
Response
{
"data": {
"studentChatMessageSubscription": {
"chatMessage": TrackInviteChatMessage,
"error": EventError
}
}
}
studentLearnerEventSubscription
Description
Subscription for students to receive learner events.
Response
Returns a LearnerEventEvent!
Arguments
Name | Description |
---|---|
inviteID - ID!
|
Example
Query
subscription studentLearnerEventSubscription($inviteID: ID!) {
studentLearnerEventSubscription(inviteID: $inviteID) {
...LearnerEventEventFragment
}
}
Variables
{"inviteID": 4}
Response
{
"data": {
"studentLearnerEventSubscription": {
"learnerEvent": LearnerEvent,
"error": EventError
}
}
}
Types
AccessSetting
Values
Enum Value | Description |
---|---|
|
|
|
|
|
Example
"anyone"
AuthType
Description
AuthType enumerates the possible auth types
Values
Enum Value | Description |
---|---|
|
Completely disables legacy system |
|
Responds with result of the shadow system, compare behind the scene |
|
Responds with legacy system, compare behind the scene |
|
Completely disables FGA |
Example
"FGA_ONLY"
AwsAccountConfig
Description
An AwsAccountConfig stores the details of an AWS account
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
name - String!
|
Name of the project |
services - [String!]!
|
List of services that should be enabled. |
regions - [String!]!
|
List of regions that should be enabled. |
iam_policy - String
|
IAM policy that should be applied to the account, can be empty |
managed_policies - [String!]!
|
List of managed policies that should be applied to the account. See https://console.aws.amazon.com/iam/home?region=eu-west-1#/policies |
admin_iam_policy - String
|
IAM policy that should be applied to the admin account. |
admin_managed_policies - [String!]!
|
List of managed policies that should be applied to the admin account. |
scp_policy - String
|
Service Control policy that will be applied to the account, can be empty |
expose_to_user - Boolean!
|
Whether the project should be exposed to the user |
Example
{
"id": "4",
"name": "abc123",
"services": ["xyz789"],
"regions": ["xyz789"],
"iam_policy": "abc123",
"managed_policies": ["xyz789"],
"admin_iam_policy": "xyz789",
"admin_managed_policies": ["xyz789"],
"scp_policy": "xyz789",
"expose_to_user": true
}
AwsAccountConfigInput
Description
An AwsAccountConfigInput stores the details of an AWS account
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this config belongs to |
name - String
|
Name of the project |
iam_policy - String
|
IAM policy that should be applied to the account, can be empty |
managed_policies - [String!]
|
List of managed policies that should be applied to the account. See https://console.aws.amazon.com/iam/home?region=eu-west-1#/policies |
admin_iam_policy - String
|
IAM policy that should be applied to the admin account. |
admin_managed_policies - [String!]
|
List of managed policies that should be applied to the admin account. |
scp_policy - String
|
Service Control policy that will be applied to the account, can be empty |
expose_to_user - Boolean
|
Whether the project should be exposed to the user |
services - [String!]
|
List of services that should be enabled |
regions - [String!]
|
List of regions that should be enabled |
Example
{
"id": "4",
"track": "xyz789",
"name": "xyz789",
"iam_policy": "abc123",
"managed_policies": ["abc123"],
"admin_iam_policy": "abc123",
"admin_managed_policies": ["abc123"],
"scp_policy": "xyz789",
"expose_to_user": false,
"services": ["xyz789"],
"regions": ["abc123"]
}
AzureSubscriptionConfig
Description
An AzureSubscriptionConfig stores the details of an Azure Subscription
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
name - String!
|
Name of the project |
services - [String!]!
|
List of services that should be enabled. |
regions - [String!]!
|
List of regions that should be enabled. |
user_only - Boolean!
|
Only create an AAD user |
roles - [String!]!
|
Roles to assign to the user |
admin_roles - [String!]!
|
Roles to assign to the admin user |
expose_to_user - Boolean!
|
Whether the project should be exposed to the user |
Example
{
"id": 4,
"name": "abc123",
"services": ["abc123"],
"regions": ["xyz789"],
"user_only": true,
"roles": ["xyz789"],
"admin_roles": ["xyz789"],
"expose_to_user": false
}
AzureSubscriptionConfigInput
Description
An AzureSubscriptionInput stores the details of an Azure Subscription
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this config belongs to |
name - String
|
Name of the project |
user_only - Boolean
|
Only create an AAD user |
roles - [String!]
|
Roles to assign to the user |
admin_roles - [String!]
|
Roles to assign to the admin user |
expose_to_user - Boolean
|
Whether the project should be exposed to the user |
services - [String!]
|
List of services that should be enabled |
regions - [String!]
|
List of regions that should be enabled |
Example
{
"id": "4",
"track": "abc123",
"name": "abc123",
"user_only": false,
"roles": ["xyz789"],
"admin_roles": ["abc123"],
"expose_to_user": false,
"services": ["xyz789"],
"regions": ["abc123"]
}
Blueprint
Fields
Field Name | Description |
---|---|
id - ID!
|
|
repository - String!
|
|
path - String!
|
|
variables - [BlueprintVariable!]!
|
|
resources - BlueprintResources!
|
Example
{
"id": 4,
"repository": "xyz789",
"path": "abc123",
"variables": [BlueprintVariable],
"resources": BlueprintResources
}
BlueprintInput
Fields
Input Field | Description |
---|---|
repository - String!
|
URL to the repository where the blueprint is located |
path - String
|
The path of the blueprint within the repository |
variables - [BlueprintVariableInput!]!
|
The variables that are passed to the blueprint |
resources - BlueprintResourcesInput
|
The resources the blueprint needs to start |
Example
{
"repository": "abc123",
"path": "xyz789",
"variables": [BlueprintVariableInput],
"resources": BlueprintResourcesInput
}
BlueprintResources
BlueprintResourcesInput
BlueprintVariable
BlueprintVariableInput
Boolean
Description
The Boolean
scalar type represents true
or false
.
Challenge
Description
A challenge is a bite-sized problem that needs to be solved. Each challenge consists of the explanation followed by a hands-on assignment or quiz.
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
track - Track!
|
The track associated with the challenge |
answers - [String!]!
|
List of possible answers in case of a quiz type challenge |
assignment - String!
|
The assignment a user has to complete. In case of a quiz, this is the question. |
Arguments
|
|
attempts - [ChallengeAttempt!]!
|
List of attempts the user has done to solve the challenge |
can_check - Boolean
|
Whether checking is available or not, this is dependent on the presence of a check script |
difficulty - String!
|
Difficulty of the challenge. This field is currently not used |
index - Int!
|
Index of the challenge, used for ordering the challenges in a track. Starts at 0. |
notes - [ChallengeNote!]!
|
List of notes for this challenge |
permalink - String
|
Permalink for this challenge. Will be generated automatically, based on the slugs of the team, track and challenge. |
scripts - [ChallengeScript!]!
|
List of scripts for this challenge |
slug - String!
|
Slug of the challenge. This will be visible in the address bar of the browser |
solution - [Int!]!
|
List of valid answers for a quiz |
hasSingleAnswer - Boolean!
|
True if there is only one correct answer |
status - ChallengeStatus!
|
Status of the challenge |
tabs - [ChallengeTab!]!
|
List of tabs for this challenge |
teaser - String!
|
Teaser of the challenge. This will be visible for the user when the challenge is not yet unlocked. |
timelimit - Int
|
Maximum time the challenge is available. The sum of timelimits of all challenges determine the total TTL for a track. |
started - Int!
|
Timestamp when the challenge was started. Will be 0 when not yet started |
completed - Int!
|
Timestamp when the challenge was completed. Will be 0 when not yet completed |
failed - Int!
|
Timestamp when the challenge was failed. Will be 0 when there was no error |
failMessage - String
|
Error message for when the challenge was failed. Will be null if there was no error |
title - String!
|
Title of the challenge |
type - ChallengeType!
|
Type of the challenge |
unlocks - Challenge
|
Which challenge will be unlocked after this challenge has been successfully completed. This field is currently not used (the next challenge in the list will automatically be unlocked) |
labConfig - ChallengeLabConfig
|
ChallengeLabConfig represents the configuration settings for the challenge lab |
deletedAt - Time
|
Timestamp of when challenge has been deleted |
enhancedLoading - Boolean
|
Enables enhanced loading behavior |
Example
{
"id": 4,
"track": Track,
"answers": ["xyz789"],
"assignment": "abc123",
"attempts": [ChallengeAttempt],
"can_check": true,
"difficulty": "abc123",
"index": 987,
"notes": [ChallengeNote],
"permalink": "abc123",
"scripts": [ChallengeScript],
"slug": "xyz789",
"solution": [987],
"hasSingleAnswer": true,
"status": "locked",
"tabs": [ChallengeTab],
"teaser": "abc123",
"timelimit": 987,
"started": 987,
"completed": 987,
"failed": 987,
"failMessage": "xyz789",
"title": "abc123",
"type": "challenge",
"unlocks": Challenge,
"labConfig": ChallengeLabConfig,
"deletedAt": "10:15:30Z",
"enhancedLoading": true
}
ChallengeAttempt
ChallengeInput
Description
A challenge is a bite-sized problem that needs to be solved. Each challenge consists of the explanation followed by a hands-on assignment or quiz.
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
type - String
|
Type of the challenge |
track - String
|
ID of the track this challenge belongs to |
assignment - String
|
The assignment a user has to complete. In case of a quiz, this is the question. |
difficulty - String
|
Difficulty of the challenge. This field is currently not used |
slug - String
|
Slug of the challenge. This will be visible in the address bar of the browser |
teaser - String
|
Teaser of the challenge. This will be visible for the user when the challenge is not yet unlocked. |
timelimit - Int
|
Maximum time the challenge is available. The sum of timelimits of all challenges determine the total TTL for a track. |
title - String
|
Title of the challenge |
answers - [String!]
|
List of possible answers in case of a quiz type challenge |
solution - [Int!]
|
List of valid answers for a quiz |
tabs - [ChallengeTabInput!]
|
List of tabs for this challenge |
notes - [ChallengeNoteInput!]
|
List of notes for this challenge |
scripts - [ChallengeScriptInput!]
|
List of scripts for this challenge |
browserScripts - [VirtualBrowserCheckInput!]
|
List of browser scripts for this challenge |
index - Int
|
Index of the challenge, used for ordering the challenges in a track. Starts at 0. |
labConfig - ChallengeLabConfigInput
|
Configuration of the lab for this challenge |
enhancedLoading - Boolean
|
Enables enhanced loading behavior |
Example
{
"id": "4",
"type": "abc123",
"track": "abc123",
"assignment": "xyz789",
"difficulty": "xyz789",
"slug": "abc123",
"teaser": "xyz789",
"timelimit": 987,
"title": "xyz789",
"answers": ["abc123"],
"solution": [123],
"tabs": [ChallengeTabInput],
"notes": [ChallengeNoteInput],
"scripts": [ChallengeScriptInput],
"browserScripts": [VirtualBrowserCheckInput],
"index": 123,
"labConfig": ChallengeLabConfigInput,
"enhancedLoading": false
}
ChallengeLabConfig
Description
ChallengeLabConfig represents the configuration settings for the challenge lab
Fields
Field Name | Description |
---|---|
defaultLayout - DefaultLabLayout
|
The default layout for the challenge layout |
defaultLayoutSidebarSize - Int
|
The default size of the sidebar in the default layout |
customLayout - String
|
A custom layout specified as a string JSON |
Example
{
"defaultLayout": "AssignmentRight",
"defaultLayoutSidebarSize": 123,
"customLayout": "abc123"
}
ChallengeLabConfigInput
Fields
Input Field | Description |
---|---|
defaultLayout - DefaultLabLayout
|
The default layout for the challenge layout |
defaultLayoutSidebarSize - Int
|
The default size of the sidebar in the default layout |
customLayout - String
|
A custom layout specified as a string JSON |
Example
{
"defaultLayout": "AssignmentRight",
"defaultLayoutSidebarSize": 987,
"customLayout": "abc123"
}
ChallengeNote
Description
A ChallengeNote is displayed when the infrastructure of your challenge is being created. You can display markdown text but also show an image or video.
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
contents - String
|
Text contents |
index - Int!
|
Index of the note, used for ordering the notes of a challenge. Starts at 0. |
type - ChallengeNoteType!
|
Type of the note |
url - String
|
URL for image and video notes |
Example
{
"id": 4,
"contents": "abc123",
"index": 123,
"type": "image",
"url": "xyz789"
}
ChallengeNoteInput
Description
A ChallengeNote is displayed when the infrastructure of your challenge is being created. You can display markdown text but also show an image or video.
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this note belongs to |
challenge - String
|
ID of the challenge this note belongs to |
contents - String
|
Text contents |
type - ChallengeNoteType
|
Type of the note |
url - String
|
URL for image and video notes |
index - Int
|
Index of the note, used for ordering the notes of a challenge. Starts at 0. |
Example
{
"id": "4",
"track": "abc123",
"challenge": "abc123",
"contents": "abc123",
"type": "image",
"url": "abc123",
"index": 987
}
ChallengeNoteType
Description
ChallengeNoteType enumerated the possible note types
Values
Enum Value | Description |
---|---|
|
|
|
|
|
Example
"image"
ChallengeScript
Description
Challenge scripts provide the automation hooks for interacting with the infrastructure of the track. There are 4 actions: setup, check, cleanup and solve
Example
{
"id": "4",
"action": "abc123",
"contents": "abc123",
"host": "xyz789"
}
ChallengeScriptInput
Description
Challenge scripts provide the automation hooks for interacting with the infrastructure of the track. There are 4 actions: setup, check, cleanup and solve
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this script belongs to |
challenge - String
|
ID of the track this challenge belongs to |
host - String
|
On which host the script is executed. Must reference a host in the track config |
action - String
|
One of: setup, check, cleanup and solve |
contents - String
|
The script contents |
Example
{
"id": 4,
"track": "abc123",
"challenge": "abc123",
"host": "xyz789",
"action": "xyz789",
"contents": "xyz789"
}
ChallengeSeries
ChallengeStatistics
Fields
Field Name | Description |
---|---|
id - ID!
|
|
title - String
|
|
unlocked_total - Int
|
|
started_total - Int
|
|
completed_total - Int
|
|
series - [ChallengeSeries!]!
|
|
attempts_total - Int
|
|
attempts_min - Int
|
|
attempts_max - Int
|
|
attempts_avg - Int
|
|
attempts_stddev - Int
|
|
duration_min - Int
|
|
duration_max - Int
|
|
duration_avg - Int
|
|
duration_stddev - Int
|
Example
{
"id": "4",
"title": "abc123",
"unlocked_total": 987,
"started_total": 123,
"completed_total": 123,
"series": [ChallengeSeries],
"attempts_total": 123,
"attempts_min": 987,
"attempts_max": 123,
"attempts_avg": 123,
"attempts_stddev": 987,
"duration_min": 123,
"duration_max": 987,
"duration_avg": 123,
"duration_stddev": 987
}
ChallengeStatus
Description
ChallengeStatus enumerates the possible states for challenges
Values
Enum Value | Description |
---|---|
|
The challenge is locked, another challenge has to be completed first |
|
The challenge is available to play, but has not yet been started by the user |
|
The setup script is being run |
|
The challenge is ready for the user to start playing |
|
The setup script has failed to run |
|
The user has started the challenge |
|
The check script is being run |
|
The user has completed the challenge successfully |
Example
"locked"
ChallengeTab
Description
A tab shows a service, terminal or (external) website for a challenge
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
index - Int!
|
Index of the tab, used for ordering the tabs of a challenge. Starts at 0. |
hostname - String
|
Refers to a host in the track config. Must be set for types service and terminal. |
path - String
|
Path of a service. Only valid for type service, defaults to / |
port - Int
|
Port of a service. Only valid for type service |
target - String
|
Currently not used |
title - String!
|
Title of the tab |
type - ChallengeTabType!
|
Type of the tab |
url - String
|
URL of an (external) website. Only valid for type website and external |
new_window - Boolean!
|
Whether to open this tab in an external window |
workdir - String
|
Initial work directory, only valid for terminal tabs |
cmd - String
|
initial command to run, only valid for terminal tabs |
custom_headers - [CustomHeader!]
|
custom headers to send with proxy response |
custom_response_headers - [CustomHeader!]
|
custom headers to send from proxy response |
Example
{
"id": "4",
"index": 123,
"hostname": "abc123",
"path": "abc123",
"port": 987,
"target": "xyz789",
"title": "xyz789",
"type": "service",
"url": "xyz789",
"new_window": true,
"workdir": "xyz789",
"cmd": "abc123",
"custom_headers": [CustomHeader],
"custom_response_headers": [CustomHeader]
}
ChallengeTabInput
Description
A tab shows a service, terminal or (external) website for a challenge
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this tab belongs to |
challenge - String
|
ID of the challenge this tab belongs to |
hostname - String
|
Refers to a host in the track config. Must be set for types service and terminal. |
path - String
|
Path of a service. Only valid for type service, defaults to / |
port - Int
|
Port of a service. Only valid for type service |
title - String
|
Title of the tab |
type - ChallengeTabType
|
Type of the tab |
url - String
|
URL of an (external) website. Only valid for type website and external |
index - Int
|
Index of the tab, used for ordering the tabs of a challenge. Starts at 0. |
new_window - Boolean
|
Whether to open this tab in an external window |
workdir - String
|
Initial work directory, only valid for terminal tabs |
cmd - String
|
initial command to run, only valid for terminal tabs |
custom_headers - [CustomHeaderInput!]
|
custom headers to send with proxy response |
custom_response_headers - [CustomHeaderInput!]
|
custom headers to send from proxy response |
Example
{
"id": "4",
"track": "abc123",
"challenge": "abc123",
"hostname": "abc123",
"path": "abc123",
"port": 987,
"title": "xyz789",
"type": "service",
"url": "abc123",
"index": 123,
"new_window": true,
"workdir": "xyz789",
"cmd": "xyz789",
"custom_headers": [CustomHeaderInput],
"custom_response_headers": [CustomHeaderInput]
}
ChallengeTabType
Description
ChallengeTabType enumerates the possible tab types
Values
Enum Value | Description |
---|---|
|
Internal service of your track, should reference a host in the track config |
|
Terminal to a host in the track config |
|
Simple code editor |
|
URL to a website. The website should be frameable in an iframe |
|
URL to an external website. Useful for sites that are not frameable |
|
Virtual browser provided as a service |
|
Form to collect feedback from the user |
Example
"service"
ChallengeType
Description
ChallengeType enumerates the possible challenge types
Values
Enum Value | Description |
---|---|
|
A challenge has setup and scripts |
|
A quiz has a question and one or more answers |
Example
"challenge"
ChatChannelType
Values
Enum Value | Description |
---|---|
|
|
|
Example
"direct"
ChatSender
CloudProvider
Description
The different cloud providers
Values
Enum Value | Description |
---|---|
|
Amazon Web Services |
|
Google Cloud Platform |
|
Microsoft Azure |
Example
"aws"
CloudProviderConfig
Fields
Field Name | Description |
---|---|
provider - CloudProvider!
|
The cloud provider |
services - [CloudProviderService!]!
|
The list of available services IDs and names |
regions - [CloudProviderRegion!]!
|
The list of available regions IDs and names |
Example
{
"provider": "aws",
"services": [CloudProviderService],
"regions": [CloudProviderRegion]
}
CloudProviderConfigInput
Fields
Input Field | Description |
---|---|
provider - CloudProvider!
|
|
services - [String!]
|
|
regions - [String!]
|
Example
{
"provider": "aws",
"services": ["xyz789"],
"regions": ["xyz789"]
}
CloudProviderRegion
CloudProviderService
Commit
Fields
Field Name | Description |
---|---|
hash - String!
|
The commit hash |
message - String!
|
The commit message |
author - CommitAuthor!
|
The commit author |
timestamp - Time!
|
The commit timestamp |
content - [File]!
|
The files that have changes |
Example
{
"hash": "abc123",
"message": "xyz789",
"author": CommitAuthor,
"timestamp": "10:15:30Z",
"content": [File]
}
CommitAuthor
Fields
Field Name | Description |
---|---|
id - ID!
|
|
profile - CommitAuthorProfile!
|
The author profile |
Example
{
"id": "4",
"profile": CommitAuthorProfile
}
CommitAuthorProfile
CompletionRateSeries
Fields
Field Name | Description |
---|---|
min - Float!
|
|
max - Float!
|
|
sum - Float!
|
|
average - Float!
|
|
Items - [CompletionRateSeriesItem!]!
|
Example
{
"min": 123.45,
"max": 987.65,
"sum": 987.65,
"average": 987.65,
"Items": [CompletionRateSeriesItem]
}
CompletionRateSeriesItem
ConditionType
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"equals"
ConsumptionInsight
Fields
Field Name | Description |
---|---|
series - ConsumptionInsightSeries!
|
|
Arguments
|
Example
{"series": ConsumptionInsightSeries}
ConsumptionInsightSeries
Fields
Field Name | Description |
---|---|
granularity - TimeSeriesGranularity!
|
|
sandboxes - SandboxesSeries!
|
|
totalSandboxTime - TotalSandboxTimeSeries!
|
|
unclaimedHotStarts - UnclaimedHosStartSeries!
|
|
totalHotStartTime - TotalHotStartTimeSeries!
|
Example
{
"granularity": "HOURLY",
"sandboxes": SandboxesSeries,
"totalSandboxTime": TotalSandboxTimeSeries,
"unclaimedHotStarts": UnclaimedHosStartSeries,
"totalHotStartTime": TotalHotStartTimeSeries
}
ConsumptionTrackInsight
Fields
Field Name | Description |
---|---|
page - ConsumptionTrackInsightPage!
|
|
Arguments
|
Example
{"page": ConsumptionTrackInsightPage}
ConsumptionTrackInsightItem
Fields
Field Name | Description |
---|---|
id - ID!
|
|
track - Track!
|
|
currentPeriod - ConsumptionTrackInsightsItemPeriod!
|
|
previousPeriod - ConsumptionTrackInsightsItemPeriod!
|
Example
{
"id": 4,
"track": Track,
"currentPeriod": ConsumptionTrackInsightsItemPeriod,
"previousPeriod": ConsumptionTrackInsightsItemPeriod
}
ConsumptionTrackInsightPage
Fields
Field Name | Description |
---|---|
items - [ConsumptionTrackInsightItem!]!
|
|
totalItems - Int!
|
Example
{
"items": [ConsumptionTrackInsightItem],
"totalItems": 123
}
ConsumptionTrackInsightsItemPeriod
ContainerConfig
Description
A ContainerConfig stores the details of a container
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
environment - [EnvironmentVariable!]
|
List of key-value pairs that are injected as environment variables |
image - String!
|
Container image to use |
entrypoint - String
|
Override the ENTRYPOINT from the docker image |
cmd - String
|
Override the CMD from the docker image |
name - String!
|
Name of the container, will be used as hostname |
ports - [Int!]
|
Ports to expose |
shell - String!
|
Which shell to expose in the terminal. Defaults to /bin/sh |
memory - Int!
|
Amount of memory to use, in megabytes. Defaults to 32 |
resources - ContainerResources!
|
Deprecated |
Example
{
"id": 4,
"environment": [EnvironmentVariable],
"image": "abc123",
"entrypoint": "abc123",
"cmd": "abc123",
"name": "abc123",
"ports": [987],
"shell": "abc123",
"memory": 987,
"resources": ContainerResources
}
ContainerConfigInput
Description
A ContainerConfig stores the details of a container
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this config belongs to |
name - String
|
Name of the container, will be used as hostname |
image - String
|
Container image to use |
entrypoint - String
|
Override the ENTRYPOINT from the docker image |
cmd - String
|
Override the CMD from the docker image |
ports - [Int!]
|
Ports to expose |
shell - String
|
Which shell to expose in the terminal. Defaults to /bin/sh |
environment - [EnvironmentInput!]
|
List of key-value pairs that are injected as environment variables |
memory - Int
|
Amount of memory to use, in megabytes. Defaults to 32 |
resources - ContainerResourcesInput
|
Deprecated |
Example
{
"id": 4,
"track": "abc123",
"name": "abc123",
"image": "xyz789",
"entrypoint": "abc123",
"cmd": "xyz789",
"ports": [987],
"shell": "abc123",
"environment": [EnvironmentInput],
"memory": 987,
"resources": ContainerResourcesInput
}
ContainerConfigPreset
ContainerResources
Description
Deprecated
Fields
Field Name | Description |
---|---|
memory - Int!
|
Example
{"memory": 987}
ContainerResourcesInput
Description
Deprecated
Fields
Input Field | Description |
---|---|
memory - Int
|
Example
{"memory": 987}
CustomHeader
CustomHeaderInput
CustomParameter
CustomParameterFilter
CustomParametersInput
CustomResource
Fields
Field Name | Description |
---|---|
id - ID!
|
|
name - String!
|
|
slug - String!
|
|
description - String!
|
|
version - String!
|
|
logo - String!
|
|
provider - CustomResourceProvider!
|
|
canDelete - Boolean!
|
|
terraformModule - TerraformModule
|
|
inputs - [CustomResourceInput!]!
|
|
outputs - [CustomResourceOutput!]!
|
|
createdAt - Time!
|
|
createdBy - User!
|
Example
{
"id": "4",
"name": "xyz789",
"slug": "abc123",
"description": "abc123",
"version": "abc123",
"logo": "abc123",
"provider": "terraform",
"canDelete": false,
"terraformModule": TerraformModule,
"inputs": [CustomResourceInput],
"outputs": [CustomResourceOutput],
"createdAt": "10:15:30Z",
"createdBy": User
}
CustomResourceConfig
Description
A CustomResourceConfig stores the details of a custom resource
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
name - String!
|
The name of the custom resource config |
slug - String!
|
The slug of the custom resource config |
custom_resource - CustomResource!
|
The custom resource |
inputs - [CustomResourceInputConfig!]!
|
URL of the custom resource |
Example
{
"id": "4",
"name": "xyz789",
"slug": "abc123",
"custom_resource": CustomResource,
"inputs": [CustomResourceInputConfig]
}
CustomResourceConfigInput
Description
A CustomResourceConfigInput is a custom resource that can be used in a sandbox
Fields
Input Field | Description |
---|---|
name - String
|
Name of the custom resource |
slug - String
|
The slug of the custom resource |
inputs - [CustomResourceConfigInputInput!]
|
The inputs for the custom resource |
Example
{
"name": "abc123",
"slug": "xyz789",
"inputs": [CustomResourceConfigInputInput]
}
CustomResourceConfigInputInput
Description
A CustomResourceConfigInputInput is an input for a custom resource config
Fields
Input Field | Description |
---|---|
name - String
|
Name of the input |
source - CustomResourceInputSource
|
Source of the input |
value - String
|
value of the input |
Example
{
"name": "xyz789",
"source": "secret",
"value": "xyz789"
}
CustomResourceDataType
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"string"
CustomResourceInput
Fields
Field Name | Description |
---|---|
name - String!
|
|
description - String!
|
|
type - CustomResourceDataType!
|
|
required - Boolean!
|
|
readOnly - Boolean!
|
Example
{
"name": "xyz789",
"description": "xyz789",
"type": "string",
"required": true,
"readOnly": false
}
CustomResourceInputConfig
Description
A CustomResourceInputConfig stores the details of a custom resource input
Fields
Field Name | Description |
---|---|
name - String!
|
Name of the input |
source - CustomResourceInputSource!
|
Source of the input |
value - String!
|
Value of the input depending on the source |
Example
{
"name": "xyz789",
"source": "secret",
"value": "xyz789"
}
CustomResourceInputSource
Description
A CustomResourceInputSource stores of the source of a custom resource input value
Values
Enum Value | Description |
---|---|
|
The input is a secret |
|
The input is plain user defined |
Example
"secret"
CustomResourceOutput
CustomResourceProvider
Values
Enum Value | Description |
---|---|
|
Example
"terraform"
DateRangeFilter
DefaultLabLayout
Description
DefaultLabLayout is an enumeration representing the available layout options for the default challenge layout
Values
Enum Value | Description |
---|---|
|
Assignment pane on the right side of the layout |
|
Assignment pane on the left side of the layout |
|
Assignment pane at the bottom of the layout |
Example
"AssignmentRight"
DefaultSsoConnectionOptions
Direction
Description
Sort direction, can be either Asc or Desc.
Values
Enum Value | Description |
---|---|
|
|
|
Example
"Asc"
EnvironmentInput
EnvironmentVariable
ErrorCode
Values
Enum Value | Description |
---|---|
|
|
|
image not found |
|
Invalid challenge tab type |
|
Invalid PlayType specified |
|
multiple PlayIDs are not allowed for this method |
|
there is more than one Play for this request |
|
there is more than one User for this request |
|
secret not found |
|
invalid secret name |
|
The user has already claimed this invite |
|
UserID not found |
|
ArcadeTeam not found |
|
challenge not found |
|
challenge not in the right state to be skipped |
|
challenge track id and args track id don't match |
|
could not find current participant. start the track first |
|
environment not started or not ready yet. try again when the environment is started |
|
the environment has been stopped. start the track again before skipping |
|
could not skip to this challenge. It has already been completed |
|
could not skip to this challenge. Wait until the environment has been created |
|
custom resource is currently in use |
|
Secret is used in track config, remove usage from all track configs first |
|
Secret is used in track invite, remove usage from all invites first |
|
Secret is used in sandbox config, remove usage from all sandbox configs first |
|
A Hot start pool is attached to the track |
|
Entity already exists |
|
Failed to create SSO organization |
|
Failed to get SSO organization |
|
SSO connection already exists |
|
Failed to rollback SSO connection |
|
Failed to add SSO connection to the organization |
|
Failed to get SSO connection |
|
SSO connection does not exist |
|
Failed to get SSO connection for the provided team |
|
Entity not found |
|
Could not find the image |
|
Invalid image name |
|
Hot start pool is deleted |
|
domain is not a valid dns name |
|
must be a valid email |
|
must be a valid hostname (starts with letter, only contains lower case letters, digits and hyphens |
|
must be a valid slug (starts and ends with letter or digit, only contains lower case letters, digits and hyphens) |
|
must be a valid URL |
|
must be a valid URL or file path |
|
must be a valid HTTPS URL |
|
must be work email |
|
Repository not found |
|
failed to set sandbox variable on host |
|
failed to get sandbox variable from host |
|
Image cannot be deleted whilst in use |
|
Your team needs an API key before you can generate an LTI key |
|
Track is not versioned |
|
Team not found |
|
Invalid cloud provider |
|
Cloud provider config not found |
|
GitHub integration is not setup |
|
Cloud provider config not enabled |
|
Unauthorized to manage AWS Account |
|
Unauthorized to manage GCP Project |
|
Unauthorized to manage Azure Subscription |
|
preset is currently used on 1 or more tracks |
|
preset is currently used on 1 or more hot start pools |
|
file is not in a correct format |
|
Branch does not exist |
|
must be valid work email |
|
details are required when AccessSetting is AnyoneLeavingDetails |
|
Unable to remove services that are in use by tracks |
|
Unable to remove regions that are in use by tracks |
|
The user has already claimed this landing page |
|
Missing argument: UserID, Email or Slug |
|
Credentials not found |
|
Credentials already exist |
|
Could not create github integration |
|
The remote repository must be empty |
|
Versioning is not enabled for this track or team |
|
This repository is already linked to another track |
|
nothing to commit, working tree clean |
|
Existing unpublished changes for the same user |
|
unexpected version control error |
|
branch not found |
|
pubsub is not available |
|
can not make a machine with the given resources |
Example
"BE_001_ImageNotFound"
EventError
Description
Used by subscriptions to return errors
Fields
Field Name | Description |
---|---|
code - ErrorCode!
|
|
message - String!
|
Example
{
"code": "BE_001_ImageNotFound",
"message": "abc123"
}
File
FileInput
Float
Description
The Float
scalar type represents signed double-precision fractional values as specified by IEEE 754.
Example
987.65
Form
Example
{
"id": 4,
"formTitle": "abc123",
"consentNotice": "xyz789",
"fields": [FormField],
"validateWorkEmail": false,
"confirmEmailOwnership": true
}
FormField
Fields
Field Name | Description |
---|---|
id - ID!
|
|
fieldName - FormFieldName!
|
Name of the field |
isRequired - Boolean!
|
Is this field required to be filled in by the user |
Example
{"id": 4, "fieldName": "first_name", "isRequired": false}
FormFieldInput
Fields
Input Field | Description |
---|---|
fieldName - FormFieldName!
|
|
isRequired - Boolean!
|
Example
{"fieldName": "first_name", "isRequired": false}
FormFieldName
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
"first_name"
FormInput
Example
{
"id": "4",
"formTitle": "abc123",
"consentNotice": "abc123",
"fields": [FormFieldInput],
"validateWorkEmail": true,
"confirmEmailOwnership": false
}
GcpProjectConfig
Description
A GcpProjectConfig stores the details of a GCP Project
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
name - String!
|
Name of the project |
services - [String!]!
|
List of services that should be enabled. See https://cloud.google.com/service-usage/docs/list-services |
regions - [String!]!
|
List of regions that should be enabled. |
roles - [String!]!
|
List of roles that should be applied to the project Service Account and User, e.g. roles/compute.admin. See predefined list https://cloud.google.com/iam/docs/understanding-roles#predefined |
admin_roles - [String!]!
|
List of roles that should be applied to the projects admin Service Account and User. |
expose_to_user - Boolean!
|
Whether the project should be exposed to the user |
Example
{
"id": 4,
"name": "abc123",
"services": ["abc123"],
"regions": ["abc123"],
"roles": ["abc123"],
"admin_roles": ["xyz789"],
"expose_to_user": true
}
GcpProjectConfigInput
Description
A GcpProjectConfig stores the details of a GCP Project
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this config belongs to |
name - String
|
Name of the project |
services - [String!]
|
List of services that should be enabled. See https://cloud.google.com/service-usage/docs/list-services |
roles - [String!]
|
List of roles that should be applied to the project Service Account and User, e.g. roles/compute.admin. See predefined list https://cloud.google.com/iam/docs/understanding-roles#predefined |
admin_roles - [String!]
|
List of roles that should be applied to the projects admin Service Account and User. |
expose_to_user - Boolean
|
Whether the project should be exposed to the user |
regions - [String!]
|
List of regions that should be enabled |
Example
{
"id": "4",
"track": "abc123",
"name": "xyz789",
"services": ["xyz789"],
"roles": ["xyz789"],
"admin_roles": ["xyz789"],
"expose_to_user": false,
"regions": ["xyz789"]
}
GithubIntegration
GithubWebhookEvent
Fields
Field Name | Description |
---|---|
id - ID!
|
|
eventType - String!
|
Type of the webhook comnig from GitHub |
eventMessage - String!
|
The event message describing the event result |
payload - String!
|
The payload of the webhook |
status - GithubWebhookEventStatus!
|
The status of the event |
createdAt - Time!
|
The time the event was created |
Example
{
"id": "4",
"eventType": "abc123",
"eventMessage": "xyz789",
"payload": "xyz789",
"status": "error",
"createdAt": "10:15:30Z"
}
GithubWebhookEventStatus
Description
ChallengeStatus enumerates the possible states for challenges
Values
Enum Value | Description |
---|---|
|
The webhook has been received but failed to process |
|
The webhook has been received and processed with success |
Example
"error"
GoogleCloudMachineTypePreset
HappinessCount
HostImage
Fields
Field Name | Description |
---|---|
id - ID!
|
|
slug - String!
|
|
description - String
|
|
imageMetadata - ImageMetadata
|
|
status - HostImageStatus!
|
|
currentSandbox - HostImageSandbox
|
|
team - Team
|
|
usedInTracks - [Track!]!
|
|
usedInSandboxConfigVersions - [SandboxConfigVersion!]!
|
|
createdAt - Time!
|
|
createdBy - User!
|
|
createdWith - HostImageVMInputs
|
Example
{
"id": "4",
"slug": "xyz789",
"description": "abc123",
"imageMetadata": ImageMetadata,
"status": "created",
"currentSandbox": HostImageSandbox,
"team": Team,
"usedInTracks": [Track],
"usedInSandboxConfigVersions": [SandboxConfigVersion],
"createdAt": "10:15:30Z",
"createdBy": User,
"createdWith": HostImageVMInputs
}
HostImageInput
HostImageSandbox
HostImageStatus
Values
Enum Value | Description |
---|---|
|
|
|
Example
"created"
HostImageVMConfigInput
HostImageVMInputs
HotStartConfigTrackEdge
Fields
Field Name | Description |
---|---|
claimed - Int!
|
The amount of claimed sandboxes. |
available - Int!
|
The amount of available sandboxes. |
created - Int!
|
The amount of created sandboxes. |
failed - Int!
|
The amount of sandboxes that failed to create. |
creating - Int!
|
The amount of sandboxes currently being created. |
total - Int!
|
The total amount of sandboxes. |
node - SandboxConfig!
|
The config version node |
Example
{
"claimed": 123,
"available": 123,
"created": 123,
"failed": 123,
"creating": 123,
"total": 987,
"node": SandboxConfig
}
HotStartPool
Description
A hot start pool manages the hot sandboxes available per track
Fields
Field Name | Description |
---|---|
id - ID!
|
ID of the hot start pool |
type - HotStartPoolType!
|
The type of hot start pool |
size - Int!
|
Number of sandboxes available per track |
created - Time
|
Creation time of the hot start pool |
deleted - Time
|
Deletion time of the hot start pool |
name - String!
|
Name given to the hot start pool |
auto_refill - Boolean!
|
Flag that signals if the sandboxes should be auto refillable |
starts_at - Time
|
Schedule time for the hot start pool to start creating sandboxes |
ends_at - Time
|
Schedule time for the hot start pool to stop creating sandboxes |
created_by - User
|
The user that created the pool |
team - Team!
|
The team that owns the hot start pool |
tracks - [HotStartPoolTrackEdge!]!
|
Tracks in the hot start pool |
configs - [HotStartConfigTrackEdge!]!
|
Tracks in the hot start pool |
status - HotStartStatus!
|
Status of the hot start pool |
region - String
|
Region of a hotstart pool |
Example
{
"id": "4",
"type": "dedicated",
"size": 987,
"created": "10:15:30Z",
"deleted": "10:15:30Z",
"name": "xyz789",
"auto_refill": false,
"starts_at": "10:15:30Z",
"ends_at": "10:15:30Z",
"created_by": User,
"team": Team,
"tracks": [HotStartPoolTrackEdge],
"configs": [HotStartConfigTrackEdge],
"status": "Running",
"region": "abc123"
}
HotStartPoolConnection
Fields
Field Name | Description |
---|---|
edges - [HotStartPoolEdge!]!
|
A list of edges containing cursors to each node. |
nodes - [HotStartPool!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Pagination information. |
totalCount - Int!
|
Total items in the current result set. |
Example
{
"edges": [HotStartPoolEdge],
"nodes": [HotStartPool],
"pageInfo": PageInfo,
"totalCount": 987
}
HotStartPoolEdge
Fields
Field Name | Description |
---|---|
cursor - String!
|
Cursor to the current node. |
node - HotStartPool
|
The current node. |
Example
{
"cursor": "abc123",
"node": HotStartPool
}
HotStartPoolInput
Description
A hot start pool is a pool of sandboxes available before the tracks start
Fields
Input Field | Description |
---|---|
type - HotStartPoolType
|
The type of hotstart pool |
tracks - [String!]
|
List of track IDs |
configs - [String!]
|
List of config IDs |
size - Int
|
The amount of sandboxes per track |
name - String
|
Name of the hot start pool |
auto_refill - Boolean
|
If the pool should be auto refilled |
starts_at - Time
|
Scheduled time for the pool to start creating sandboxes |
ends_at - Time
|
Scheduled time for the pool to start stopping sandboxes |
organization_slug - String
|
Organization Slug of the organization creating the pool |
team_slug - String
|
Team Slug of the organization creating the pool |
region - String
|
Region of the hotstart pool |
Example
{
"type": "dedicated",
"tracks": ["abc123"],
"configs": ["abc123"],
"size": 987,
"name": "abc123",
"auto_refill": true,
"starts_at": "10:15:30Z",
"ends_at": "10:15:30Z",
"organization_slug": "abc123",
"team_slug": "abc123",
"region": "xyz789"
}
HotStartPoolTrackEdge
Fields
Field Name | Description |
---|---|
claimed - Int!
|
The amount of claimed sandboxes. |
available - Int!
|
The amount of available sandboxes. |
created - Int!
|
The amount of created sandboxes. |
failed - Int!
|
The amount of sandboxes that failed to create. |
creating - Int!
|
The amount of sandboxes currently being created. |
total - Int!
|
The total amount of sandboxes. |
node - Track!
|
The track node |
Example
{
"claimed": 987,
"available": 987,
"created": 987,
"failed": 123,
"creating": 987,
"total": 987,
"node": Track
}
HotStartPoolType
Values
Enum Value | Description |
---|---|
|
|
|
Example
"dedicated"
HotStartStatus
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
|
Example
"Running"
HtmlElement
Description
Represents a criterium to match against
Example
{
"selector": "abc123",
"value": "abc123",
"errorMsg": "xyz789"
}
HtmlElementInput
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
ImageMetadata
ImageOS
Values
Enum Value | Description |
---|---|
|
|
|
Example
"windows"
ImportLabInput
Fields
Input Field | Description |
---|---|
name - String!
|
Lab name |
title - String!
|
Lab title |
teamSlug - String!
|
Slug of the team that owns the lab |
repoUrl - String!
|
The source repository URL |
repoPath - String
|
The path in the source repository, defaults to / |
defaultRepoRef - String
|
The default ref to use, defaults to repo default |
Example
{
"name": "abc123",
"title": "abc123",
"teamSlug": "xyz789",
"repoUrl": "xyz789",
"repoPath": "abc123",
"defaultRepoRef": "xyz789"
}
ImportTerraformModuleInput
Example
{
"terraformModuleID": "abc123",
"name": "abc123",
"slug": "xyz789",
"description": "abc123"
}
Insights
Description
An Insights has list of different insights
Fields
Field Name | Description |
---|---|
play - PlayInsight!
|
|
track - TrackInsight!
|
|
consumption - ConsumptionInsight!
|
|
consumptionTrack - ConsumptionTrackInsight!
|
Example
{
"play": PlayInsight,
"track": TrackInsight,
"consumption": ConsumptionInsight,
"consumptionTrack": ConsumptionTrackInsight
}
InstructorInput
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
987
Integrations
Fields
Field Name | Description |
---|---|
paragon - ParagonIntegration!
|
Example
{"paragon": ParagonIntegration}
InviteClaim
Description
A claim is a used that has accepted an invite
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
username - String!
|
Username of the user that has accepted the invite Replaced by user object |
user - User!
|
The user that has accepted the invite |
trackInvite - TrackInvite
|
The invite associated with this claim |
playLimit - Int
|
The number of plays the end user is allowed to do |
playCount - Int!
|
The number of plays the end user has done |
playTTL - Time
|
The TTL until when the end user can play the track |
claimedAt - Time
|
When the user claimed the invite |
customParameters - [CustomParameter!]!
|
Custom parameters associated with this claim |
events - [InviteEvent!]!
|
A list of events for this track |
trackLibrary - [TrackLibraryEntry!]!
|
The list of library entries for the claim |
student - Student
|
The student associated with this claim |
Example
{
"id": "4",
"username": "xyz789",
"user": User,
"trackInvite": TrackInvite,
"playLimit": 123,
"playCount": 123,
"playTTL": "10:15:30Z",
"claimedAt": "10:15:30Z",
"customParameters": [CustomParameter],
"events": [InviteEvent],
"trackLibrary": [TrackLibraryEntry],
"student": Student
}
InviteEvent
Description
An event stores the timestamp and status of an invite
Example
{
"participantID": "abc123",
"time": "10:15:30Z",
"status": "invited",
"message": "abc123",
"track": Track,
"challenge": Challenge
}
InviteFilterStatus
Description
InviteFilterStatus options
Values
Enum Value | Description |
---|---|
|
Active invites |
|
Upcoming invites |
|
Expired invites |
|
All invites |
Example
"active"
InviteFilters
Description
InviteFilters applies filters to the invite
Fields
Input Field | Description |
---|---|
status - InviteFilterStatus
|
Status filters the invite status. Deprecated: Use statuses . |
statuses - [TrackInviteStatus!]
|
Status filters the invite status |
Example
{"status": "active", "statuses": ["active"]}
InvitePlay
Description
InvitePlay the metadata of a user's track play.
Fields
Field Name | Description |
---|---|
participant - Play!
|
The play. |
track_started_at - Time!
|
The instant the track was started. |
track_completed_at - Time
|
The instant the track was completed. |
total_challenges - Int!
|
The amount of challenges associated with the track. |
completed_challenges - Int!
|
Number of completed challenges. |
failed_challenge_attempts - Int!
|
The number of failed challenge attempts. |
last_activity - Time!
|
The last instant the user was active on this track. |
track - Track!
|
The track that the user played. |
time_spent - Int!
|
The time spent on this play in seconds. |
user - User!
|
The user. |
Example
{
"participant": Play,
"track_started_at": "10:15:30Z",
"track_completed_at": "10:15:30Z",
"total_challenges": 987,
"completed_challenges": 123,
"failed_challenge_attempts": 987,
"last_activity": "10:15:30Z",
"track": Track,
"time_spent": 987,
"user": User
}
InviteStatus
Description
InviteStatus enumerated the status of the invite
Values
Enum Value | Description |
---|---|
|
User has accepted the invite invited was ambiguous, use 'accessed' instead. |
|
User has accessed the invite |
|
User has started the track |
|
User has stopped the track |
|
User has created the track |
|
User has completed the track |
|
User has attempted to solve the challange |
|
User has skipped the challenge |
Example
"invited"
LTICredentials
Fields
Field Name | Description |
---|---|
id - ID!
|
The id of the LTI credentials. |
consumer_name - String!
|
The consumer name of LTI credentials. |
consumer_key - String!
|
The consumer key of LTI credentials. |
instruqt_public_key - String!
|
The public key of LTI credentials. |
instruqt_public_key_set_url - String!
|
The set URL of LTI credentials. |
instruqt_login_url - String!
|
The login URL of LTI credentials. |
Example
{
"id": 4,
"consumer_name": "xyz789",
"consumer_key": "abc123",
"instruqt_public_key": "xyz789",
"instruqt_public_key_set_url": "abc123",
"instruqt_login_url": "abc123"
}
Lab
Fields
Field Name | Description |
---|---|
id - ID!
|
The lab ID |
name - String!
|
Lab name |
title - String!
|
Title of default ref |
labels - Labels!
|
Labels of default ref |
team - Team!
|
The team that owns the track |
sourceRepo - SourceRepo!
|
The location of the lab source code |
modified - ModificationMeta!
|
Modification meta data |
versions - [LabVersion!]!
|
The lab versions |
activeSession - LabSession
|
The active session for the calling user, null if there is no active session |
Example
{
"id": 4,
"name": "abc123",
"title": "abc123",
"labels": Labels,
"team": Team,
"sourceRepo": SourceRepo,
"modified": ModificationMeta,
"versions": [LabVersion],
"activeSession": LabSession
}
LabConfig
Fields
Field Name | Description |
---|---|
overlay - Boolean!
|
Defines if the assignment side bar for the track's lab will overlay on top of the content No longer used |
width - Int!
|
The amount of space the asignment side bar will take for the track's lab No longer used |
position - String!
|
Where in the screen will the assignment side bar show No longer used |
extendTTL - Int
|
The seconds lab can be extended for |
hideStopButton - Boolean!
|
Whether to present a stop button to learners |
enableLoadingMessages - Boolean!
|
Whether to show loading messages (e.g. "Beep boop beep... loading...") |
loadingMessages - [String!]!
|
The loading messages to show when the lab is loading |
sidebarEnabled - Boolean!
|
Whether to show the sidebar on all challenges |
feedbackTabEnabled - Boolean!
|
Whether to show the feedback tab on all challenges |
feedbackRecapEnabled - Boolean!
|
Whether to show the feedback screen on the recap screen at the end of a track |
labV2 - Boolean
|
Is new lab layout v2 enabled for this track No longer used |
theme - TrackTheme
|
The track lab theme. |
overrideChallengeLayout - Boolean
|
The flag indicates whether the challenge layout should be overridden |
defaultLayout - DefaultLabLayout
|
The default layout for the track layout |
defaultLayoutSidebarSize - Int
|
The default size of the sidebar in the default layout |
Example
{
"overlay": false,
"width": 987,
"position": "xyz789",
"extendTTL": 123,
"hideStopButton": true,
"enableLoadingMessages": true,
"loadingMessages": ["abc123"],
"sidebarEnabled": true,
"feedbackTabEnabled": true,
"feedbackRecapEnabled": true,
"labV2": true,
"theme": TrackTheme,
"overrideChallengeLayout": true,
"defaultLayout": "AssignmentRight",
"defaultLayoutSidebarSize": 123
}
LabConfigInput
Fields
Input Field | Description |
---|---|
overlay - Boolean
|
The lab's assignement side pannel overlays on top of the content |
width - Int
|
The width the assignment side pannel starts with |
position - String
|
The position the side pannel starts on |
extendTTL - Int
|
The amount of time the sandbox will be extended |
hideStopButton - Boolean
|
Whether to present a stop button to learners |
enableLoadingMessages - Boolean
|
Whether to show loading messages (e.g. "Beep boop beep... loading...") |
loadingMessages - [String!]
|
loadingMessages is a list of messages to show while loading |
sidebarEnabled - Boolean
|
Whether to show the sidebar on all challenges |
feedbackTabEnabled - Boolean
|
Whether to show the feedback tab for all challenges |
feedbackRecapEnabled - Boolean
|
Whether to show the feedback screen on the recap screen at the end of a track |
labV2 - Boolean
|
The flag that indicates if the track is using the new lab layout |
theme - TrackThemeInput
|
The v2 lab layout theme |
overrideChallengeLayout - Boolean
|
The flag indicates whether the challenge layout should be overridden |
defaultLayout - DefaultLabLayout
|
The default layout for the track layout |
defaultLayoutSidebarSize - Int
|
The default size of the sidebar in the default layout |
Example
{
"overlay": true,
"width": 987,
"position": "abc123",
"extendTTL": 123,
"hideStopButton": true,
"enableLoadingMessages": false,
"loadingMessages": ["xyz789"],
"sidebarEnabled": false,
"feedbackTabEnabled": false,
"feedbackRecapEnabled": true,
"labV2": true,
"theme": TrackThemeInput,
"overrideChallengeLayout": true,
"defaultLayout": "AssignmentRight",
"defaultLayoutSidebarSize": 123
}
LabSession
Fields
Field Name | Description |
---|---|
id - ID!
|
The lab session ID |
lab - Lab!
|
The lab this session is for |
team - Team!
|
The team that owns the lab |
user - User
|
The user that started the session, can be nil if unclaimed |
userType - UserType
|
The user type |
userMeta - Map!
|
The user meta data |
sandboxMeta - Map!
|
The sandbox meta data |
status - LabSessionStatus!
|
The status of the lab session |
events - [LabSessionEvent!]!
|
Lab session events |
url - String!
|
The base url for the session |
Example
{
"id": "4",
"lab": Lab,
"team": Team,
"user": User,
"userType": "instruqt",
"userMeta": Map,
"sandboxMeta": Map,
"status": "unknown",
"events": [LabSessionEvent],
"url": "xyz789"
}
LabSessionEvent
Fields
Field Name | Description |
---|---|
id - ID!
|
The event ID |
type - LabSessionEventType!
|
The event type |
data - Map!
|
The event data |
time - Time!
|
The event time |
Example
{
"id": 4,
"type": "start",
"data": Map,
"time": "10:15:30Z"
}
LabSessionEventType
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
"start"
LabSessionStatus
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
"unknown"
LabVersion
Fields
Field Name | Description |
---|---|
id - ID!
|
The lab version ID |
sourceRepo - SourceRepo!
|
The location of the lab source code |
title - String!
|
The lab title |
labels - Labels!
|
The lab title |
modified - ModificationMeta!
|
Modification meta data |
version - String!
|
Lab format version |
Example
{
"id": "4",
"sourceRepo": SourceRepo,
"title": "abc123",
"labels": Labels,
"modified": ModificationMeta,
"version": "abc123"
}
Labels
Description
Labels is a map of string to string
Example
Labels
LandingPage
Fields
Field Name | Description |
---|---|
id - ID!
|
|
team - Team!
|
|
internalPageName - String
|
|
path - String!
|
|
isPublished - Boolean!
|
|
unpublishedAt - Time
|
|
publishedAt - Time
|
|
updatedAt - Time
|
|
deletedAt - Time
|
|
trackPlayLimit - Int
|
|
formEnabled - Boolean!
|
|
privacyPolicyUrl - String
|
|
termsAndConditionsUrl - String
|
|
pageTitle - String
|
|
seoDescription - String
|
|
robotsIndexingEnabled - Boolean!
|
|
backgroundColor - String
|
|
textColor - String
|
|
logoUrl - String
|
|
logoLink - String
|
|
pageHeading - String
|
|
pageSubtitle - String
|
|
tracks - [LandingPageTrackEdge!]!
|
|
currentUserClaimed - Boolean!
|
Example
{
"id": "4",
"team": Team,
"internalPageName": "abc123",
"path": "xyz789",
"isPublished": true,
"unpublishedAt": "10:15:30Z",
"publishedAt": "10:15:30Z",
"updatedAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"trackPlayLimit": 123,
"formEnabled": true,
"privacyPolicyUrl": "abc123",
"termsAndConditionsUrl": "abc123",
"pageTitle": "abc123",
"seoDescription": "abc123",
"robotsIndexingEnabled": true,
"backgroundColor": "abc123",
"textColor": "abc123",
"logoUrl": "abc123",
"logoLink": "xyz789",
"pageHeading": "abc123",
"pageSubtitle": "xyz789",
"tracks": [LandingPageTrackEdge],
"currentUserClaimed": true
}
LandingPageClaim
Fields
Field Name | Description |
---|---|
id - ID!
|
|
claimedAt - Time
|
|
landingPage - LandingPage
|
|
user - User
|
Example
{
"id": 4,
"claimedAt": "10:15:30Z",
"landingPage": LandingPage,
"user": User
}
LandingPageInput
Fields
Input Field | Description |
---|---|
id - ID
|
|
teamId - ID
|
|
internalPageName - String
|
|
path - String
|
|
unpublishedAt - Time
|
|
publishedAt - Time
|
|
trackPlayLimit - Int
|
|
formEnabled - Boolean
|
|
privacyPolicyUrl - String
|
|
termsAndConditionsUrl - String
|
|
pageTitle - String
|
|
seoDescription - String
|
|
robotsIndexingEnabled - Boolean
|
|
backgroundColor - String
|
|
textColor - String
|
|
logoUrl - String
|
|
logoLink - String
|
|
pageHeading - String
|
|
pageSubtitle - String
|
|
tracks - [LandingPageTrackInput!]
|
Example
{
"id": 4,
"teamId": 4,
"internalPageName": "abc123",
"path": "abc123",
"unpublishedAt": "10:15:30Z",
"publishedAt": "10:15:30Z",
"trackPlayLimit": 987,
"formEnabled": false,
"privacyPolicyUrl": "abc123",
"termsAndConditionsUrl": "abc123",
"pageTitle": "abc123",
"seoDescription": "xyz789",
"robotsIndexingEnabled": false,
"backgroundColor": "abc123",
"textColor": "abc123",
"logoUrl": "xyz789",
"logoLink": "xyz789",
"pageHeading": "xyz789",
"pageSubtitle": "abc123",
"tracks": [LandingPageTrackInput]
}
LandingPageTrackEdge
LandingPageTrackInput
LearnerEvent
Fields
Field Name | Description |
---|---|
id - ID!
|
|
student - Student!
|
|
eventType - LearnerEventTypes!
|
|
invite - TrackInvite!
|
|
track - Track
|
|
challenge - Challenge
|
|
instructor - User
|
|
timestamp - Time!
|
Example
{
"id": "4",
"student": Student,
"eventType": "joined",
"invite": TrackInvite,
"track": Track,
"challenge": Challenge,
"instructor": User,
"timestamp": "10:15:30Z"
}
LearnerEventEvent
Fields
Field Name | Description |
---|---|
learnerEvent - LearnerEvent!
|
|
error - EventError
|
Example
{
"learnerEvent": LearnerEvent,
"error": EventError
}
LearnerEventTypes
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
"joined"
LearnersReachedSeries
Fields
Field Name | Description |
---|---|
min - Int!
|
|
max - Int!
|
|
sum - Int!
|
|
items - [LearnersReachedSeriesItem!]!
|
Example
{
"min": 123,
"max": 987,
"sum": 987,
"items": [LearnersReachedSeriesItem]
}
LearnersReachedSeriesItem
Level
Values
Enum Value | Description |
---|---|
|
|
|
|
|
Example
"beginner"
Location
Description
Represents a browser URL criterium to match against
Fields
Field Name | Description |
---|---|
errorMsg - String
|
The custom error message that will be displayed if none of the URLs match |
conditions - [UrlCondition!]!
|
URLs to match against together with their string matching rules |
Example
{
"errorMsg": "xyz789",
"conditions": [UrlCondition]
}
LocationCheckConditionInput
Fields
Input Field | Description |
---|---|
urlPart - String!
|
|
condition - ConditionType!
|
Example
{"urlPart": "xyz789", "condition": "equals"}
LocationCheckInput
Fields
Input Field | Description |
---|---|
errorMsg - String
|
Error message if any of the conditions don't match |
conditions - [LocationCheckConditionInput!]
|
All conditions must be met for check to pass |
Example
{
"errorMsg": "xyz789",
"conditions": [LocationCheckConditionInput]
}
LtiToolRegistration
Example
{
"id": "4",
"name": "abc123",
"teamID": "xyz789",
"issuer": "abc123",
"clientID": "abc123",
"keySetURL": "abc123",
"publicKey": "xyz789",
"accessTokenURL": "xyz789",
"authURL": "abc123",
"deploymentIDs": ["xyz789"]
}
LtiToolRegistrationInput
Example
{
"name": "xyz789",
"issuer": "abc123",
"clientID": "xyz789",
"keySetURL": "abc123",
"publicKey": "abc123",
"accessTokenURL": "abc123",
"authURL": "abc123",
"deploymentIDs": ["xyz789"]
}
MachineTypePreset
Description
A MachineTypePreset defines an instruqt machine type.
Example
{
"label": "abc123",
"memory": 123,
"cpus": 987
}
Map
Description
Map is a map of string to any
Example
Map
Mode
Description
The mode in which a play was started.
Values
Enum Value | Description |
---|---|
|
Embedded play |
|
Platform play |
|
CI test play |
Example
"embed"
ModificationMeta
Fields
Field Name | Description |
---|---|
createdBy - User!
|
The user that created the lab |
createdAt - Time!
|
The time the lab was created |
updatedBy - User
|
The user that last updated the lab |
updatedAt - Time
|
The time the lab was last updated |
deletedBy - User
|
The user that deleted the lab |
deletedAt - Time
|
The time the lab was deleted |
Example
{
"createdBy": User,
"createdAt": "10:15:30Z",
"updatedBy": User,
"updatedAt": "10:15:30Z",
"deletedBy": User,
"deletedAt": "10:15:30Z"
}
Ordering
Organization
Description
An organization has members and tracks
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
members - [OrganizationMember!]!
|
List of members TODO: IN-364 Remove deprecated members field from organization. use users field
|
users - [OrganizationUserEdge!]
|
List of users |
name - String!
|
Name of the organization |
logo - String
|
Logo of the organization |
title - String
|
Title of the organization |
subtitle - String
|
Subtitle of the organization |
slug - String!
|
Slug of the organization |
primary_link_text - String
|
Text of the primary link of the organization |
primary_link_url - String
|
URL of the primary link of the organization |
secondary_link_text - String
|
Text of the secondary link of the organization |
secondary_link_url - String
|
URL of the secondary link of the organization |
api_key - String
|
API Key for the organization |
theme - OrganizationTheme
|
The theme that is used to style the organization page |
personal - Boolean
|
Whether the organization is personal or not No longer supported |
features - OrganizationFeatures
|
The list of features that an organization can access or use |
invited - [String!]!
|
Invited shows a list of email addresses that are invites TODO: IN-378 Remove deprecated field. use field invites
|
invites - [OrganizationInvite!]
|
A list of active invites for this organization |
privacy_policy - String
|
The URL of the organization's privacy policy, if any. |
webhook_dashboard_url - String!
|
The one time use URL for the Svix dashboard to configure webhook endpoints. |
created_at - Time
|
The time the organization was created at. |
customer_since - Time
|
The time the organization has become a customer at. |
trial_end_at - Time
|
The time the organization's trial terminates. |
Example
{
"id": "4",
"members": [OrganizationMember],
"users": [OrganizationUserEdge],
"name": "xyz789",
"logo": "abc123",
"title": "abc123",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": OrganizationTheme,
"personal": false,
"features": OrganizationFeatures,
"invited": ["xyz789"],
"invites": [OrganizationInvite],
"privacy_policy": "abc123",
"webhook_dashboard_url": "xyz789",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z"
}
OrganizationFeatures
Description
OrganizationFeatures define what features are enabled for an organization
Fields
Field Name | Description |
---|---|
max_tracks - Int!
|
The maximum number of tracks that can be created |
max_timelimit - Int!
|
The maximum timelimit for a single track |
max_hot_start_pool_size_always_on - Int!
|
The maximum size of an always on hot start pool |
max_hot_start_pool_size_scheduled - Int!
|
The maximum size of a scheduled hot start pool |
containers - Boolean!
|
Whether containers can be used |
virtual_machines - Boolean!
|
Whether virtual machines can be used |
gcp_projects - Boolean!
|
Whether GCP projects can be used |
aws_accounts - Boolean!
|
Whether AWS accounts can be used |
azure_subscriptions - Boolean!
|
Whether Azure subscriptions can be used |
embedded - Boolean!
|
Whether tracks can be embedded in other pages |
members_skip_to_challenge - Boolean!
|
Whether organization members can skip to a challenge |
track_reviews - Boolean!
|
Whether students can leave a track review after finishing a track. |
accept_terms_checkbox - Boolean!
|
Whether the user has a custom invite with the terms of service |
hot_start - Boolean!
|
Whether hot start is enabled for this organization |
Example
{
"max_tracks": 987,
"max_timelimit": 987,
"max_hot_start_pool_size_always_on": 123,
"max_hot_start_pool_size_scheduled": 987,
"containers": false,
"virtual_machines": false,
"gcp_projects": false,
"aws_accounts": false,
"azure_subscriptions": false,
"embedded": true,
"members_skip_to_challenge": true,
"track_reviews": false,
"accept_terms_checkbox": false,
"hot_start": false
}
OrganizationInput
Description
An organization has members and tracks
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
slug - String
|
Slug of the organization |
name - String
|
Name of the organization |
logo - String
|
Logo of the organization |
title - String
|
Title of the organization |
subtitle - String
|
Subtitle of the organization |
customer_since - Time
|
time when the organization became a customer |
trial_end_at - Time
|
instant at which the organization's ends / ended |
primary_link_text - String
|
Text of the primary link of the organization |
primary_link_url - String
|
URL of the primary link of the organization |
secondary_link_text - String
|
Text of the secondary link of the organization |
secondary_link_url - String
|
URL of the secondary link of the organization |
theme - OrganizationThemeInput
|
The theme that is used to style the organization page |
Example
{
"id": "4",
"slug": "abc123",
"name": "xyz789",
"logo": "xyz789",
"title": "xyz789",
"subtitle": "xyz789",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "xyz789",
"secondary_link_url": "xyz789",
"theme": OrganizationThemeInput
}
OrganizationInvite
Description
OrganizationInvite represents an outstanding invite for an email address to join the organization
Fields
Field Name | Description |
---|---|
email - String!
|
The email of the invite |
role - RoleName!
|
The role that the user will get when accepting the invite |
token_expired - Boolean!
|
Whether the token in the email invite has expired |
organization - Organization
|
The organization this invite belongs to |
accepted_at - Time
|
The time the invite was accepted |
created_by - User
|
The user the invite was created by |
Example
{
"email": "abc123",
"role": "owner",
"token_expired": true,
"organization": Organization,
"accepted_at": "10:15:30Z",
"created_by": User
}
OrganizationMember
Description
Member of an organization TODO: IN-364 Remove deprecated type.
Fields
Field Name | Description |
---|---|
id - ID!
|
The user's ID use field user
|
profile - UserProfile
|
The user's profile use field user
|
user - User!
|
The user |
role - RoleName!
|
The user's role in the organization |
Example
{
"id": 4,
"profile": UserProfile,
"user": User,
"role": "owner"
}
OrganizationSeries
OrganizationStatistics
Fields
Field Name | Description |
---|---|
started_total - Int
|
|
completed_total - Int
|
|
restarted_total - Int
|
|
organization_series - [OrganizationSeries!]!
|
|
track_statistics - [TrackStatistics!]!
|
Example
{
"started_total": 987,
"completed_total": 987,
"restarted_total": 987,
"organization_series": [OrganizationSeries],
"track_statistics": [TrackStatistics]
}
OrganizationTheme
Description
An OrganizationTeme defines the look and feel for an organization
Fields
Field Name | Description |
---|---|
foreground_color - String
|
The color used for the text in the header |
foreground_image - String
|
The image that is shown in the header |
background_color - String
|
The color used for the background of the header |
background_image - String
|
The image used for the background of the header |
primary_foreground_color - String
|
The color used for the text of the primary button |
primary_background_color - String
|
The color used for the background of the primary button |
secondary_foreground_color - String
|
The color used for the text of the secondary button |
secondary_background_color - String
|
The color used for the background of the secondary button |
Example
{
"foreground_color": "xyz789",
"foreground_image": "xyz789",
"background_color": "abc123",
"background_image": "xyz789",
"primary_foreground_color": "xyz789",
"primary_background_color": "abc123",
"secondary_foreground_color": "abc123",
"secondary_background_color": "abc123"
}
OrganizationThemeInput
Fields
Input Field | Description |
---|---|
foreground_color - String
|
The color used for the text in the header |
foreground_image - String
|
The image that is shown in the header |
background_color - String
|
The color used for the background of the header |
background_image - String
|
The image used for the background of the header |
primary_foreground_color - String
|
The color used for the text of the primary button |
primary_background_color - String
|
The color used for the background of the primary button |
secondary_foreground_color - String
|
The color used for the text of the secondary button |
secondary_background_color - String
|
The color used for the background of the secondary button |
Example
{
"foreground_color": "xyz789",
"foreground_image": "xyz789",
"background_color": "xyz789",
"background_image": "abc123",
"primary_foreground_color": "abc123",
"primary_background_color": "xyz789",
"secondary_foreground_color": "xyz789",
"secondary_background_color": "abc123"
}
OrganizationUserEdge
Description
Represents the user's which are member of an organization.
Example
{"id": 4, "node": User, "role": "owner"}
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": false,
"hasPreviousPage": true,
"startCursor": "abc123"
}
Pagination
ParagonIntegration
Play
Description
Play is the domain model of a user's journey through a track.
Fields
Field Name | Description |
---|---|
id - ID!
|
The ID of this user's play. |
user - User
|
The user of a play. |
track - Track
|
The track of a play. |
startedAt - Time
|
The time of track start |
mode - Mode
|
The way this track was played |
ttlExtendedByUser - Boolean!
|
TTL has been extended by the user |
track_invite - TrackInvite
|
The track invitation of a play. |
hotStartPool - HotStartPool
|
The hot start pool used for the play, if the track was hot started. |
customParameters - [CustomParameter!]!
|
Custom parameters associated with this play. |
Example
{
"id": "4",
"user": User,
"track": Track,
"startedAt": "10:15:30Z",
"mode": "embed",
"ttlExtendedByUser": false,
"track_invite": TrackInvite,
"hotStartPool": HotStartPool,
"customParameters": [CustomParameter]
}
PlayActivity
Description
Events for play user's activity log
Example
{
"challenge": Challenge,
"time": "10:15:30Z",
"message": "abc123"
}
PlayInsight
Fields
Field Name | Description |
---|---|
series - PlayInsightSeries!
|
|
Arguments
|
Example
{"series": PlayInsightSeries}
PlayInsightSeries
Fields
Field Name | Description |
---|---|
granularity - TimeSeriesGranularity!
|
|
plays - PlaySeries!
|
|
learnersReached - LearnersReachedSeries!
|
|
timeSpent - TimeSpentSeries!
|
|
completionRate - CompletionRateSeries!
|
Example
{
"granularity": "HOURLY",
"plays": PlaySeries,
"learnersReached": LearnersReachedSeries,
"timeSpent": TimeSpentSeries,
"completionRate": CompletionRateSeries
}
PlayInsightSeriesInput
Description
Input types for track table
Fields
Input Field | Description |
---|---|
dateRangeFilter - DateRangeFilter
|
Date range filter for plays |
trackIds - [String!]
|
IDs of tracks for which we want to get plays |
trackAuthorIds - [String!]
|
IDs of track auhtors as context |
tagIds - [String!]
|
IDs of content tags for context |
trackInviteIds - [String!]
|
track invite IDs for context |
landingPageIds - [String!]
|
Landing page IDs for context |
playType - PlayType!
|
Filter for play type |
granularity - TimeSeriesGranularity
|
Specify which granularity the time series should return |
Example
{
"dateRangeFilter": DateRangeFilter,
"trackIds": ["xyz789"],
"trackAuthorIds": ["xyz789"],
"tagIds": ["abc123"],
"trackInviteIds": ["xyz789"],
"landingPageIds": ["abc123"],
"playType": "ALL",
"granularity": "HOURLY"
}
PlayReportInput
Description
PlayInput defines input for plays for team tracks
Fields
Input Field | Description |
---|---|
teamSlug - String!
|
Slug of a team for which we want to get plays |
dateRangeFilter - DateRangeFilter
|
Date range filter for plays |
trackIds - [String!]
|
IDs of tracks for which we want to get plays |
trackInviteIds - [String!]
|
Track invite IDs to filter on |
landingPageIds - [String!]
|
Landing page IDs to filter on |
tags - [String!]
|
Track tags to filter on |
customParameterFilters - [CustomParameterFilter!]
|
Filter for custom parameters |
userIds - [String!]
|
IDs of users as context |
ordering - Ordering
|
Sorting parameters |
pagination - SkipTakePagination
|
Pagination parameters |
playType - PlayType
|
Filter for play type |
Example
{
"teamSlug": "abc123",
"dateRangeFilter": DateRangeFilter,
"trackIds": ["abc123"],
"trackInviteIds": ["xyz789"],
"landingPageIds": ["abc123"],
"tags": ["abc123"],
"customParameterFilters": [CustomParameterFilter],
"userIds": ["abc123"],
"ordering": Ordering,
"pagination": SkipTakePagination,
"playType": "ALL"
}
PlayReportItem
Description
Play is the domain model of a user's journey through a track.
Fields
Field Name | Description |
---|---|
id - ID!
|
The ID of this user's play. |
trackInvite - TrackInvite
|
The track invitation of a play. |
hotStartPool - HotStartPool
|
The hot start pool used for the play, if the track was hot started. |
landingPage - LandingPage
|
The landing page of a play. |
customParameters - [CustomParameter!]!
|
Custom parameters associated with this play. |
track - Track!
|
Track associated with this play |
user - User!
|
User associated with this play |
completionPercent - Float!
|
Percentage of play chellenges completed in track |
timeSpent - Int!
|
Time spent on play |
activity - [PlayActivity!]!
|
Log of activities in play |
playReview - TrackReview
|
The review of the user for the play |
totalChallenges - Int!
|
The number of all the challenges of a user |
completedChallenges - Int!
|
The number of the completed challenges of a user in all plays |
startedAt - Time
|
The time of track start |
mode - Mode
|
The way this track was played |
stoppedReason - String
|
The reason the track was stopped |
isDeveloperPlay - Boolean!
|
Indicates if the play was conducted by a developer |
referrer - String
|
From which address the user navigated from, if any |
Example
{
"id": "4",
"trackInvite": TrackInvite,
"hotStartPool": HotStartPool,
"landingPage": LandingPage,
"customParameters": [CustomParameter],
"track": Track,
"user": User,
"completionPercent": 987.65,
"timeSpent": 123,
"activity": [PlayActivity],
"playReview": TrackReview,
"totalChallenges": 987,
"completedChallenges": 987,
"startedAt": "10:15:30Z",
"mode": "embed",
"stoppedReason": "abc123",
"isDeveloperPlay": true,
"referrer": "abc123"
}
PlayReportPage
Fields
Field Name | Description |
---|---|
items - [PlayReportItem!]!
|
|
totalItems - Int!
|
Example
{"items": [PlayReportItem], "totalItems": 123}
PlaySeries
Fields
Field Name | Description |
---|---|
min - Int!
|
|
max - Int!
|
|
sum - Int!
|
|
items - [PlaySeriesItem!]!
|
Example
{
"min": 123,
"max": 123,
"sum": 987,
"items": [PlaySeriesItem]
}
PlaySeriesItem
PlayType
Description
Types of play that could be played
Values
Enum Value | Description |
---|---|
|
|
|
|
|
Example
"ALL"
RaisedHandEvent
Description
Raised hand event.
Fields
Field Name | Description |
---|---|
inviteID - ID!
|
The invite ID. |
studentID - ID!
|
The student ID. |
raisedHandAt - Time
|
The time when the student raised their hand. Null if the student lowered their hand. |
createdAt - Time!
|
The timestamp when the event was created. |
error - EventError
|
The error if there was an error processing the event. |
Example
{
"inviteID": "4",
"studentID": "4",
"raisedHandAt": "10:15:30Z",
"createdAt": "10:15:30Z",
"error": EventError
}
ReadAtEvent
ReadMessageEvent
Fields
Field Name | Description |
---|---|
readAtEvents - [ReadAtEvent!]
|
|
error - EventError
|
Example
{
"readAtEvents": [ReadAtEvent],
"error": EventError
}
RecommendationType
Values
Enum Value | Description |
---|---|
|
|
|
Example
"create_notes"
RoleName
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"owner"
RuntimeParameters
Fields
Field Name | Description |
---|---|
secrets - [RuntimeSecret!]!
|
|
environmentVariables - [EnvironmentVariable!]!
|
Example
{
"secrets": [RuntimeSecret],
"environmentVariables": [EnvironmentVariable]
}
RuntimeParametersInput
Description
Runtime parameters can be used to inject additional metadata, such as secrets and environment variables, into script executions.
Fields
Input Field | Description |
---|---|
secrets - [SecretInput!]
|
|
environmentVariables - [EnvironmentInput!]
|
Example
{
"secrets": [SecretInput],
"environmentVariables": [EnvironmentInput]
}
RuntimeSecret
SamlSsoConnectionOptions
Sandbox
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
track - Track
|
Track for which the sandbox is for |
state - SandboxState!
|
State of the sandbox |
invite - TrackInvite
|
The invite for the sandbox |
hot_start_pool - HotStartPool
|
The hot start pool of the sandbox |
ttl - Time
|
The TTL of the current active environment |
created - Time
|
The created time of the sandbox |
user - User
|
The user of the sandbox |
last_activity_at - Time
|
The last time there was recorded activity in the sandbox |
Example
{
"id": 4,
"track": Track,
"state": "creating",
"invite": TrackInvite,
"hot_start_pool": HotStartPool,
"ttl": "10:15:30Z",
"created": "10:15:30Z",
"user": User,
"last_activity_at": "10:15:30Z"
}
SandboxConfig
Example
{
"id": "4",
"name": "abc123",
"slug": "xyz789",
"version": 123,
"deleted": "10:15:30Z"
}
SandboxConfigInput
Fields
Input Field | Description |
---|---|
description - String
|
Description of the config |
resources - SandboxResourcesInput
|
Resources for the config |
scripts - [SandboxScriptInput!]
|
Scripts for the config |
Example
{
"description": "abc123",
"resources": SandboxResourcesInput,
"scripts": [SandboxScriptInput]
}
SandboxConfigVersion
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
config - SandboxConfig
|
The config |
version - Int!
|
Version of the config |
description - String!
|
Description of the config |
status - SandboxConfigVersionStatus!
|
Status of the version |
published_at - Time
|
The time the config was published |
published_by - User
|
The user who published the config |
change_log_entry - String!
|
The change log entry of the config |
resources - SandboxResources
|
The resources for the config |
scripts - [SandboxScript!]
|
The scripts for the config version |
tracks - [Track]!
|
The tracks using the config version |
hot_start_pools - [HotStartPool]!
|
The hot-start pools using the config version |
Example
{
"id": 4,
"config": SandboxConfig,
"version": 123,
"description": "abc123",
"status": "draft",
"published_at": "10:15:30Z",
"published_by": User,
"change_log_entry": "abc123",
"resources": SandboxResources,
"scripts": [SandboxScript],
"tracks": [Track],
"hot_start_pools": [HotStartPool]
}
SandboxConfigVersionDiff
Fields
Field Name | Description |
---|---|
diff - String!
|
The diff text |
Example
{"diff": "xyz789"}
SandboxConfigVersionStatus
Description
Sandbox config statuses
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"draft"
SandboxConfigVersionsFilterInput
Fields
Input Field | Description |
---|---|
config_id - String
|
Config ID to filter on |
statuses - [SandboxConfigVersionStatus!]
|
Config version statuses to filter on |
Example
{
"config_id": "xyz789",
"statuses": ["draft"]
}
SandboxConnection
Fields
Field Name | Description |
---|---|
edges - [SandboxEdge!]!
|
A list of edges containing cursors to each node. |
nodes - [Sandbox!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Pagination information. |
totalCount - Int!
|
Total items in the current result set. |
pageCount - Int!
|
Total number of pages |
Example
{
"edges": [SandboxEdge],
"nodes": [Sandbox],
"pageInfo": PageInfo,
"totalCount": 987,
"pageCount": 987
}
SandboxEdge
SandboxFilterInput
Description
Filter fields for querying sandboxes
Fields
Input Field | Description |
---|---|
track_ids - [String!]
|
ID a track to filter on |
invite_ids - [String!]
|
ID an invite to filter on |
pool_ids - [String!]
|
ID a hot start pool to filter on |
user_name_or_id - String
|
The users name or id |
state - [SandboxState!]
|
Status to filter on |
from - Time
|
From time to filter on |
to - Time
|
To time to filter on |
Example
{
"track_ids": ["xyz789"],
"invite_ids": ["abc123"],
"pool_ids": ["abc123"],
"user_name_or_id": "abc123",
"state": ["creating"],
"from": "10:15:30Z",
"to": "10:15:30Z"
}
SandboxResources
Fields
Field Name | Description |
---|---|
containers - [ContainerConfig!]!
|
List of containers |
virtualmachines - [VirtualMachineConfig!]!
|
List of virtual machines |
virtualbrowsers - [VirtualBrowserConfig!]!
|
List of virtual browsers |
gcp_projects - [GcpProjectConfig!]!
|
List of GCP projects |
aws_accounts - [AwsAccountConfig!]!
|
List of AWS accounts |
azure_subscriptions - [AzureSubscriptionConfig!]!
|
List of Azure subscriptions |
secrets - [SecretConfig!]!
|
List of secrets |
custom_resources - [CustomResourceConfig!]!
|
List of custom resources |
blueprint - Blueprint
|
Blueprint |
Example
{
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
SandboxResourcesInput
Fields
Input Field | Description |
---|---|
containers - [ContainerConfigInput!]
|
List of containers |
virtualmachines - [VirtualMachineConfigInput!]
|
List of virtual machines |
virtualbrowsers - [VirtualBrowserConfigInput!]
|
List of virtual browsers |
gcp_projects - [GcpProjectConfigInput!]
|
List of GCP projects |
aws_accounts - [AwsAccountConfigInput!]
|
List of AWS accounts |
azure_subscriptions - [AzureSubscriptionConfigInput!]
|
List of Azure subscriptions |
secrets - [SecretConfigInput!]
|
List of secrets |
custom_resources - [CustomResourceConfigInput!]
|
List of custom resources |
blueprint - BlueprintInput
|
Blueprint |
Example
{
"containers": [ContainerConfigInput],
"virtualmachines": [VirtualMachineConfigInput],
"virtualbrowsers": [VirtualBrowserConfigInput],
"gcp_projects": [GcpProjectConfigInput],
"aws_accounts": [AwsAccountConfigInput],
"azure_subscriptions": [AzureSubscriptionConfigInput],
"secrets": [SecretConfigInput],
"custom_resources": [CustomResourceConfigInput],
"blueprint": BlueprintInput
}
SandboxScript
SandboxScriptInput
SandboxSeriesItem
SandboxState
Description
Sandbox states
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example
"creating"
SandboxVariable
SandboxesSeries
Fields
Field Name | Description |
---|---|
sum - Int!
|
|
items - [SandboxSeriesItem!]!
|
Example
{"sum": 123, "items": [SandboxSeriesItem]}
SearchTerraformModuleResults
Fields
Field Name | Description |
---|---|
modules - [TerraformModule!]!
|
Example
{"modules": [TerraformModule]}
Secret
Fields
Field Name | Description |
---|---|
name - String!
|
The name of the secret. |
description - String!
|
A description of the secret. |
teamID - String!
|
ID of the team |
created_at - Time!
|
The time the secret was created |
created_by - User!
|
The user who created the secret |
updated_at - Time
|
The time the secret was last updated |
updated_by - User
|
The user who last updated the secret |
tracks - [Track!]!
|
Tracks which make use of the secret |
config_versions - [SandboxConfigVersion!]!
|
Config versions which make use of the secret |
Example
{
"name": "abc123",
"description": "abc123",
"teamID": "xyz789",
"created_at": "10:15:30Z",
"created_by": User,
"updated_at": "10:15:30Z",
"updated_by": User,
"tracks": [Track],
"config_versions": [SandboxConfigVersion]
}
SecretConfig
SecretConfigInput
Description
A SecretConfigInput stores details about a secret
Fields
Input Field | Description |
---|---|
name - String
|
Name of the secret |
Example
{"name": "xyz789"}
SecretInput
SendEmailOwnershipConfirmationCode
Fields
Field Name | Description |
---|---|
needVerification - Boolean!
|
Example
{"needVerification": true}
SkipTakePagination
SourceRepo
SsoConnection
Fields
Field Name | Description |
---|---|
name - String!
|
|
organizationID - String!
|
|
strategy - Strategy!
|
|
options - SsoConnectionOptions!
|
Example
{
"name": "xyz789",
"organizationID": "abc123",
"strategy": "okta",
"options": DefaultSsoConnectionOptions
}
SsoConnectionInput
SsoConnectionOptions
Types
Union Types |
---|
Example
DefaultSsoConnectionOptions
SsoSamlConnectionInput
Statistics
Fields
Field Name | Description |
---|---|
track - TrackStatistics
|
Example
{"track": TrackStatistics}
Strategy
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"okta"
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"
Student
Fields
Field Name | Description |
---|---|
id - ID!
|
The user ID. |
user - User
|
Student user. |
track - Track
|
Name of the track the student is currently on. |
challenge - Challenge
|
Challenge the student currently is within the track. |
currentChallengeAttempts - [ChallengeAttempt!]!
|
The current challenge attempts the student is working on. |
last_activity_at - Time
|
Last activity the user had in track's challenge. |
completed_at - Time
|
Last time that the user has completed a track. |
accessed_at - Time
|
The time when the user has accessed the invite. |
inspectable - Boolean
|
Whether the student machine is available to inspect or not |
claim - InviteClaim
|
The claim associated to the student |
activeSandboxesTotal - Int
|
The amount of active sandboxes for the user |
raisedHandAt - Time
|
Timestamp when the student raised their hand Experimental feature, may change. |
inviteTracks - [Track!]
|
The invite tracks that the student has played |
chatChannels - [TrackInviteChatChannel!]!
|
List of chat channels related to the user behind this student, it contains broadcast and direct Channel Experimental feature, may change. |
Arguments
|
|
learnerEvents - [LearnerEvent!]!
|
List learner events for the student. |
Arguments
|
Example
{
"id": "4",
"user": User,
"track": Track,
"challenge": Challenge,
"currentChallengeAttempts": [ChallengeAttempt],
"last_activity_at": "10:15:30Z",
"completed_at": "10:15:30Z",
"accessed_at": "10:15:30Z",
"inspectable": true,
"claim": InviteClaim,
"activeSandboxesTotal": 987,
"raisedHandAt": "10:15:30Z",
"inviteTracks": [Track],
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
StudentStatistics
StudentTrackStatistics
Description
Track statistics for a specific classroom.
Example
{"inProgressTotal": 123, "completedTotal": 123}
StunIceInput
Fields
Input Field | Description |
---|---|
ttl - Int
|
Example
{"ttl": 123}
Tag
Fields
Field Name | Description |
---|---|
id - ID!
|
|
value - String!
|
|
createdAt - Time!
|
|
tracks - [Track!]!
|
|
groups - [TagGroup!]!
|
Example
{
"id": 4,
"value": "abc123",
"createdAt": "10:15:30Z",
"tracks": [Track],
"groups": [TagGroup]
}
TagGroup
TagGroupInput
Fields
Input Field | Description |
---|---|
name - String!
|
Example
{"name": "abc123"}
TagInput
Fields
Input Field | Description |
---|---|
value - String!
|
Example
{"value": "abc123"}
Team
Description
A team has members and tracks
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
members - [TeamMember!]!
|
List of members TODO: IN-364 Remove deprecated members field from team. use users field
|
users - [TeamUserEdge!]!
|
List of users |
userInTeam - Boolean!
|
Check if the currently logged in user is in the team |
userReportPage - UserReportPage!
|
userReportPage retrieves a page users with related statistics |
Arguments
|
|
userDetails - [UserDetails!]!
|
userDetails resolves all collected user details for the resolved team |
name - String!
|
Name of the team |
logo - String
|
Logo of the team |
title - String
|
Title of the team |
subtitle - String
|
Subtitle of the team |
slug - String!
|
Slug of the team |
primary_link_text - String
|
Text of the primary link of the team |
primary_link_url - String
|
URL of the primary link of the team |
secondary_link_text - String
|
Text of the secondary link of the team |
secondary_link_url - String
|
URL of the secondary link of the team |
api_key - String
|
API Key for the team |
theme - TeamTheme
|
The theme that is used to style the team page |
themes - [TrackTheme!]!
|
List of available themes |
personal - Boolean
|
Whether the team is personal or not No longer supported |
features - TeamFeatures
|
The list of features that a team can access or use |
invited - [String!]!
|
Invited shows a list of email addresses that are invites TODO: IN-378 Remove deprecated field. use field invites
|
invites - [TeamInvite!]
|
A list of active invites for this team |
insights - Insights!
|
A list of insights for this team |
tracks - [Track!]!
|
A list of tracks for this team |
hotStartPools - [HotStartPool!]!
|
A list of hot start pools for this team |
privacy_policy - String
|
The URL of the team's privacy policy, if any. |
webhook_dashboard_url - String!
|
The one time use URL for the Svix dashboard to configure webhook endpoints. |
created_at - Time
|
The time the team was created at. |
customer_since - Time
|
The time the team has become a customer at. |
trial_end_at - Time
|
The time the team's trial terminates. |
lti_credentials - LTICredentials
|
The LTI credentials for a team. |
form - Form
|
The user details form for a team. |
ssoConnection - SsoConnection
|
The SSO configuration for a team |
tags - [Tag!]!
|
The tags for a team |
tagGroups - [TagGroup!]!
|
The tag groups for a team |
customResources - [CustomResource!]!
|
The custom resources for a team |
hostImages - [HostImage!]!
|
Host images for a team |
integrations - Integrations!
|
The integrations that the team has configured |
landingPages - [LandingPage!]!
|
|
ltiToolRegistrations - [LtiToolRegistration!]!
|
|
cloudProviderConfigs - [CloudProviderConfig!]!
|
|
githubInstallationID - Int
|
|
enabledRepositories - [String!]!
|
|
githubIntegrations - [GithubIntegration!]!
|
|
tpgPublicKey - String
|
Public key to encrypt user details data for the pii query string parameter of an invite |
Example
{
"id": "4",
"members": [TeamMember],
"users": [TeamUserEdge],
"userInTeam": false,
"userReportPage": UserReportPage,
"userDetails": [UserDetails],
"name": "abc123",
"logo": "xyz789",
"title": "xyz789",
"subtitle": "abc123",
"slug": "abc123",
"primary_link_text": "xyz789",
"primary_link_url": "xyz789",
"secondary_link_text": "xyz789",
"secondary_link_url": "abc123",
"api_key": "abc123",
"theme": TeamTheme,
"themes": [TrackTheme],
"personal": true,
"features": TeamFeatures,
"invited": ["abc123"],
"invites": [TeamInvite],
"insights": Insights,
"tracks": [Track],
"hotStartPools": [HotStartPool],
"privacy_policy": "abc123",
"webhook_dashboard_url": "abc123",
"created_at": "10:15:30Z",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"lti_credentials": LTICredentials,
"form": Form,
"ssoConnection": SsoConnection,
"tags": [Tag],
"tagGroups": [TagGroup],
"customResources": [CustomResource],
"hostImages": [HostImage],
"integrations": Integrations,
"landingPages": [LandingPage],
"ltiToolRegistrations": [LtiToolRegistration],
"cloudProviderConfigs": [CloudProviderConfig],
"githubInstallationID": 123,
"enabledRepositories": ["abc123"],
"githubIntegrations": [GithubIntegration],
"tpgPublicKey": "abc123"
}
TeamFeatures
Description
TeamFeatures define what features are enabled for a team
Fields
Field Name | Description |
---|---|
max_tracks - Int!
|
The maximum number of tracks that can be created |
max_timelimit - Int!
|
The maximum timelimit for a single track |
max_hot_start_pool_size_always_on - Int!
|
The maximum size of an always on hot start pool |
max_hot_start_pool_size_scheduled - Int!
|
The maximum size of a scheduled hot start pool |
containers - Boolean!
|
Whether containers can be used |
virtual_machines - Boolean!
|
Whether virtual machines can be used |
gcp_projects - Boolean!
|
Whether GCP projects can be used |
aws_accounts - Boolean!
|
Whether AWS accounts can be used |
azure_subscriptions - Boolean!
|
Whether Azure subscriptions can be used |
blueprint_sandbox - Boolean!
|
Whether Jumppad blueprints can be used to define a sandbox |
embedded - Boolean!
|
Whether tracks can be embedded in other pages |
members_skip_to_challenge - Boolean!
|
Whether team members can skip to a challenge |
track_reviews - Boolean!
|
Whether students can leave a track review after finishing a track. |
accept_terms_checkbox - Boolean!
|
Whether the user has a custom invite with the terms of service |
hot_start - Boolean!
|
Whether hot start is enabled for this team |
custom_machine_type - Boolean!
|
Where resource based virtual machines is enabled for this team |
shared_hotstart_pools - Boolean!
|
Whether the new shared hotstart pools invite flow is enabled for this team |
scripts_over_http - Boolean!
|
Whether the new scripts over http is enabled for this team |
global_sandboxes - Boolean!
|
Whether multi-region setup is enabled for this team |
use_new_terminal - Boolean!
|
Whether we should replace the terminal iframe with xterm directly on the frontend |
custom_resources - Boolean!
|
Whether custom resources are enabled for this team |
crm_integration - Boolean!
|
Whether CRM integration is enabled for this team |
can_hide_sidebar - Boolean!
|
Whether team is allowed to hide the sidebar on track config |
can_add_feedback_tab - Boolean!
|
Whether team is allowed to enable feedback tabs on track config |
exclude_instruqt_plays - Boolean!
|
Whether instruqt plays should be excluded |
versioned - Boolean!
|
Whether the versioned is enabled for this team |
new_content_structure - Boolean!
|
Whether the new_content_structure is enabled for this team Use versioned instead |
user_completion_rate - Boolean!
|
Whether the new report metric user completion rate is enabled for this team |
labV2 - Boolean!
|
Whether the team has access to the new lab v2 layout feature No longer used |
landingPages - Boolean!
|
Whether the team has access to the landing pages feature No longer supported |
exposeCloudAccountCredentials - Boolean!
|
Whether the exposeCloudAccountCredentials is enabled for this team |
instantSandboxes - Boolean!
|
Whether instant sandboxes are enabled for this team |
cloudProvidersConfig - Boolean!
|
Whether cloud providers configuration is enabled for this team |
useExternalEmailValidation - Boolean!
|
Whether external email validation enabled for this team |
consumptionOverview - Boolean!
|
Whether the team has access to the consumption overview page |
emailOwnershipConfirmation - Boolean!
|
Whether email ownership confirmation is enabled for this team |
temporal - Boolean!
|
Whether temporal is enabled for this team |
authType - AuthType!
|
The auth type that is being used |
enhancedLabLoading - Boolean!
|
Whether enhanced lab loading is enabled for this team |
instructorTools - Boolean!
|
Whether the team has access to the new live events feature |
screenSharing - Boolean!
|
Whether screen sharing is enabled for this team |
Example
{
"max_tracks": 123,
"max_timelimit": 987,
"max_hot_start_pool_size_always_on": 123,
"max_hot_start_pool_size_scheduled": 987,
"containers": true,
"virtual_machines": true,
"gcp_projects": false,
"aws_accounts": false,
"azure_subscriptions": true,
"blueprint_sandbox": false,
"embedded": false,
"members_skip_to_challenge": true,
"track_reviews": false,
"accept_terms_checkbox": true,
"hot_start": false,
"custom_machine_type": true,
"shared_hotstart_pools": true,
"scripts_over_http": true,
"global_sandboxes": true,
"use_new_terminal": true,
"custom_resources": false,
"crm_integration": false,
"can_hide_sidebar": false,
"can_add_feedback_tab": true,
"exclude_instruqt_plays": true,
"versioned": true,
"new_content_structure": true,
"user_completion_rate": true,
"labV2": false,
"landingPages": false,
"exposeCloudAccountCredentials": true,
"instantSandboxes": false,
"cloudProvidersConfig": false,
"useExternalEmailValidation": true,
"consumptionOverview": false,
"emailOwnershipConfirmation": false,
"temporal": false,
"authType": "FGA_ONLY",
"enhancedLabLoading": false,
"instructorTools": true,
"screenSharing": false
}
TeamFeaturesInput
Description
TeamFeaturesInput defines the input for mutating features of a team.
Fields
Input Field | Description |
---|---|
max_tracks - Int
|
The maximum number of tracks that can be created |
max_timelimit - Int
|
The maximum timelimit for a single track |
max_hot_start_pool_size_always_on - Int
|
The maximum size of an always on hot start pool |
max_hot_start_pool_size_scheduled - Int
|
The maximum size of a scheduled hot start pool |
containers - Boolean
|
Whether containers can be used |
virtual_machines - Boolean
|
Whether virtual machines can be used |
gcp_projects - Boolean
|
Whether GCP projects can be used |
aws_accounts - Boolean
|
Whether AWS accounts can be used |
azure_subscriptions - Boolean
|
Whether Azure subscriptions can be used |
blueprint_sandbox - Boolean
|
Whether Jumppad blueprints can be used to define a sandbox |
embedded - Boolean
|
Whether tracks can be embedded in other pages |
members_skip_to_challenge - Boolean
|
Whether team members can skip to a challenge |
track_reviews - Boolean
|
Whether students can leave a track review after finishing a track. |
accept_terms_checkbox - Boolean
|
Whether the user has a custom invite with the terms of service |
hot_start - Boolean
|
Whether hot start is enabled for this team |
custom_machine_type - Boolean
|
Where resource based virtual machines is enabled for this team |
shared_hotstart_pools - Boolean
|
Whether the new shared hotstart pools invite flow is enabled for this team |
scripts_over_http - Boolean
|
Whether the new scripts over http is enabled for this team |
global_sandboxes - Boolean
|
Whether multi-region setup is enabled for this team |
use_new_terminal - Boolean
|
Whether we should replace the terminal iframe with xterm directly on the frontend |
custom_resources - Boolean
|
Whether custom_resources are enabled for this team |
crm_integration - Boolean
|
Whether CRM integration is enabled for this team |
can_hide_sidebar - Boolean
|
Whether team is allowed to hide the sidebar on track config |
can_add_feedback_tab - Boolean
|
Whether team is allowed to enable feedback tabs on track config |
exclude_instruqt_plays - Boolean
|
Whether instruqt plays should be excluded |
versioned - Boolean
|
Whether the team is allowed to use the version control flow |
new_content_structure - Boolean
|
Whether the team is allowed to use the new content structure flow |
user_completion_rate - Boolean
|
Whether the new report metric user completion rate is enabled for this team |
labV2 - Boolean
|
Whether the new lab v2 layout is enabled for this team |
landingPages - Boolean
|
Whether the team has access to the landing pages feature |
exposeCloudAccountCredentials - Boolean
|
Whether the exposeCloudAccountCredentials is enabled for this team |
instantSandboxes - Boolean
|
Whether instant sandboxes are enabled for this team |
cloudProvidersConfig - Boolean
|
Whether cloud providers configuration is enabled for this team |
useExternalEmailValidation - Boolean
|
Whether external email validation enabled for this team |
consumptionOverview - Boolean
|
Whether the team has access to the consumption overview page |
emailOwnershipConfirmation - Boolean
|
Whether email ownership confirmation is enabled for this team |
temporal - Boolean
|
Whether temporal is enabled for this team |
authType - AuthType
|
The auth type that is being used |
enhancedLabLoading - Boolean
|
Whether enhanced lab loading is enabled for this team |
instructorTools - Boolean
|
Whether the team has access to the new live events feature |
screenSharing - Boolean
|
Whether screen sharing is enabled for this team |
Example
{
"max_tracks": 123,
"max_timelimit": 123,
"max_hot_start_pool_size_always_on": 987,
"max_hot_start_pool_size_scheduled": 123,
"containers": false,
"virtual_machines": false,
"gcp_projects": true,
"aws_accounts": false,
"azure_subscriptions": false,
"blueprint_sandbox": false,
"embedded": false,
"members_skip_to_challenge": true,
"track_reviews": true,
"accept_terms_checkbox": true,
"hot_start": false,
"custom_machine_type": false,
"shared_hotstart_pools": false,
"scripts_over_http": false,
"global_sandboxes": false,
"use_new_terminal": false,
"custom_resources": false,
"crm_integration": false,
"can_hide_sidebar": true,
"can_add_feedback_tab": false,
"exclude_instruqt_plays": false,
"versioned": false,
"new_content_structure": true,
"user_completion_rate": false,
"labV2": true,
"landingPages": true,
"exposeCloudAccountCredentials": false,
"instantSandboxes": false,
"cloudProvidersConfig": false,
"useExternalEmailValidation": false,
"consumptionOverview": false,
"emailOwnershipConfirmation": false,
"temporal": true,
"authType": "FGA_ONLY",
"enhancedLabLoading": true,
"instructorTools": false,
"screenSharing": false
}
TeamInput
Description
A team has members and tracks
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
slug - String
|
Slug of the team |
name - String
|
Name of the team |
logo - String
|
Logo of the team |
title - String
|
Title of the team |
subtitle - String
|
Subtitle of the team |
customer_since - Time
|
time when the team became a customer |
trial_end_at - Time
|
instant at which the team's ends / ended |
primary_link_text - String
|
Text of the primary link of the team |
primary_link_url - String
|
URL of the primary link of the team |
secondary_link_text - String
|
Text of the secondary link of the team |
secondary_link_url - String
|
URL of the secondary link of the team |
theme - TeamThemeInput
|
The theme that is used to style the team page |
Example
{
"id": "4",
"slug": "xyz789",
"name": "xyz789",
"logo": "xyz789",
"title": "xyz789",
"subtitle": "abc123",
"customer_since": "10:15:30Z",
"trial_end_at": "10:15:30Z",
"primary_link_text": "abc123",
"primary_link_url": "xyz789",
"secondary_link_text": "abc123",
"secondary_link_url": "xyz789",
"theme": TeamThemeInput
}
TeamInvite
Description
TeamInvite represents an outstanding invite for an email address to join the team
Fields
Field Name | Description |
---|---|
email - String!
|
The email of the invite |
role - RoleName!
|
The role that the user will get when accepting the invite |
token_expired - Boolean!
|
Whether the token in the email invite has expired |
team - Team
|
The team this invite belongs to |
accepted_at - Time
|
The time the invite was accepted |
created_by - User
|
The user the invite was created by |
Example
{
"email": "abc123",
"role": "owner",
"token_expired": true,
"team": Team,
"accepted_at": "10:15:30Z",
"created_by": User
}
TeamMember
Description
Member of a team
Fields
Field Name | Description |
---|---|
id - ID!
|
The user's ID use field user
|
profile - UserProfile
|
The user's profile use field user
|
user - User!
|
The user |
role - RoleName!
|
The user's role in the organization |
Example
{
"id": 4,
"profile": UserProfile,
"user": User,
"role": "owner"
}
TeamSeries
TeamStatistics
Fields
Field Name | Description |
---|---|
started_total - Int
|
|
completed_total - Int
|
|
restarted_total - Int
|
|
team_series - [TeamSeries!]!
|
|
track_statistics - [TrackStatistics!]!
|
Example
{
"started_total": 123,
"completed_total": 123,
"restarted_total": 123,
"team_series": [TeamSeries],
"track_statistics": [TrackStatistics]
}
TeamTheme
Description
A TeamTeme defines the look and feel for a team
Fields
Field Name | Description |
---|---|
foreground_color - String
|
The color used for the text in the header |
foreground_image - String
|
The image that is shown in the header |
background_color - String
|
The color used for the background of the header |
background_image - String
|
The image used for the background of the header |
primary_foreground_color - String
|
The color used for the text of the primary button |
primary_background_color - String
|
The color used for the background of the primary button |
secondary_foreground_color - String
|
The color used for the text of the secondary button |
secondary_background_color - String
|
The color used for the background of the secondary button |
Example
{
"foreground_color": "abc123",
"foreground_image": "xyz789",
"background_color": "abc123",
"background_image": "xyz789",
"primary_foreground_color": "xyz789",
"primary_background_color": "abc123",
"secondary_foreground_color": "abc123",
"secondary_background_color": "xyz789"
}
TeamThemeInput
Fields
Input Field | Description |
---|---|
foreground_color - String
|
The color used for the text in the header |
foreground_image - String
|
The image that is shown in the header |
background_color - String
|
The color used for the background of the header |
background_image - String
|
The image used for the background of the header |
primary_foreground_color - String
|
The color used for the text of the primary button |
primary_background_color - String
|
The color used for the background of the primary button |
secondary_foreground_color - String
|
The color used for the text of the secondary button |
secondary_background_color - String
|
The color used for the background of the secondary button |
Example
{
"foreground_color": "xyz789",
"foreground_image": "xyz789",
"background_color": "xyz789",
"background_image": "xyz789",
"primary_foreground_color": "abc123",
"primary_background_color": "xyz789",
"secondary_foreground_color": "abc123",
"secondary_background_color": "xyz789"
}
TeamUserEdge
TerraformModule
Fields
Field Name | Description |
---|---|
id - ID!
|
|
name - String!
|
|
module - String!
|
|
description - String!
|
|
source - String!
|
|
provider - String!
|
|
version - String!
|
|
availableVersions - [String!]!
|
|
logo - String!
|
|
publishedAt - Time!
|
|
namespace - String!
|
|
owner - String!
|
|
inputs - [TerraformModuleInput!]!
|
|
outputs - [TerraformModuleOutput!]!
|
Example
{
"id": "4",
"name": "abc123",
"module": "xyz789",
"description": "abc123",
"source": "xyz789",
"provider": "abc123",
"version": "xyz789",
"availableVersions": ["xyz789"],
"logo": "xyz789",
"publishedAt": "10:15:30Z",
"namespace": "abc123",
"owner": "xyz789",
"inputs": [TerraformModuleInput],
"outputs": [TerraformModuleOutput]
}
TerraformModuleInput
TerraformModuleOutput
Time
Example
"10:15:30Z"
TimeSeriesGranularity
Description
The time series granularity
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"HOURLY"
TimeSpentSeries
Fields
Field Name | Description |
---|---|
min - Float!
|
|
max - Float!
|
|
sum - Float!
|
|
average - Float!
|
|
items - [TimeSpentSeriesItem!]!
|
Example
{
"min": 987.65,
"max": 123.45,
"sum": 123.45,
"average": 123.45,
"items": [TimeSpentSeriesItem]
}
TimeSpentSeriesItem
TotalHotStartTimeSeries
Fields
Field Name | Description |
---|---|
sum - Int!
|
|
items - [TotalHotStartTimeSeriesItem!]!
|
Example
{"sum": 987, "items": [TotalHotStartTimeSeriesItem]}
TotalHotStartTimeSeriesItem
TotalSandboxTimeSeries
Fields
Field Name | Description |
---|---|
sum - Int!
|
|
items - [TotalSandboxTimeSeriesItem!]!
|
Example
{"sum": 987, "items": [TotalSandboxTimeSeriesItem]}
TotalSandboxTimeSeriesItem
Track
Description
A track consists of a list of challenges
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
slug - String!
|
Slug of the track |
version - String!
|
Version of the track. Currently not used |
revision - Time!
|
Revision of the track. Currently not used |
type - String!
|
Type of the track. One of: track, sandbox. Defaults to track. When choosing sandbox, the 'check' button changes to 'next'. no longer used |
title - String!
|
Title of the track |
teaser - String!
|
Teaser of the track |
description - String!
|
Description of the track |
icon - String!
|
Icon of the track |
level - Level
|
Level defines the skill level the track is designed for |
tags - [String!]!
|
List of tags for this track Use the trackTags field |
trackTags - [Tag!]!
|
List of tags for this track |
owner - String
|
Slug of the team that owns the track Use the team field |
team - Team
|
The team that owns the track |
developers - [User!]!
|
List of developers for this track |
userIsTrackDeveloper - Boolean!
|
Checks if the currently logged in user is a developer for this track |
instructors - [TrackInstructor!]!
|
List of users with access to this track |
updated_by - User
|
User that last updated the track |
private - Boolean!
|
If a track is private, it is only visible for team members No longer in use |
published - Boolean!
|
If a track is not published, it is only visible to track developers No longer in use |
maintenance - Boolean!
|
Whether the track is in maintenance mode. If it is, a maintenance banner will be shown and the track will not be playable. |
challenges - [Challenge!]!
|
List of challenges for this track |
config - TrackConfig
|
The config for this track |
sandboxConfig - SandboxConfigVersion
|
The sandbox config for the track |
trackConfig - TrackConfig
|
The config for a track |
status - TrackStatus
|
Status of the track |
started - Time!
|
Start time of this track |
creating - Time!
|
Time when track creation has started |
created - Time!
|
Time when track was created successfully |
failed - Time!
|
Time when track failed to create |
stopped - Time!
|
Time when track was stopped |
completed - Time!
|
Time when track was completed |
cleaned - Time!
|
Time when track was cleaned |
permalink - String
|
Permalink for this track. Will be generated automatically, based on the slugs of the team and track |
play_limit - Int
|
Amount of public plays allowed for this track |
play_count - Int
|
Amount of public plays done |
expiry_date - Time
|
When the access to this track expires. Only set when track is made available through an invite Should be resolved from the relevant track_invite |
expiry_count - Int
|
How many plays are left on this track. Only set when track is made available through an invite Should be resolved from the relevant track_library entry |
median_starttime - Int
|
Median starting time of the track and the first challenge |
prestart - Boolean!
|
Whether the track has pre start capabilities. |
skipping_to - Challenge
|
Which challenge the track is currently skipping to. |
scripts - [TrackScript!]!
|
Scripts that belong to the track |
actual_pool_size - Int!
|
Actual pool size repesents the amount of actual enviroments in the stand-by pool |
show_timer - Boolean!
|
Show timer represents the track setting whether to show a timer or not. |
skipping_enabled - Boolean!
|
Whether skipping is enabled for the challenges in this track |
can_skip - Boolean!
|
Whether skipping is available or not, this is dependent on the presence of check & solve scripts |
ttl - Time
|
The TTL of the current active environment |
last_update - Time!
|
Timestamp of when track has been last updated |
createdAt - Time!
|
Timestamp of when track was created |
deletedAt - Time
|
Timestamp of when track has been deleted |
accessible - Boolean!
|
Whether the current user can play this track. |
embed_token - String!
|
Embed token |
visibility - VisibilityStatus!
|
Visibility status of the track Replaced by private , published and maintenance
|
trackReviews - TrackReviewConnection
|
Get reviews for a specific track |
statistics - TrackStatistics
|
Track statistics |
participant - Play
|
The latest play of the current user on this track if available |
idle_timeout - Int
|
The timeout value in seconds before the underlying sandbox will be detroyed. |
studentStatistics - StudentTrackStatistics
|
Track statistics for a specific live event. |
Arguments
|
|
timelimit - Int
|
the time limit value in seconds that the sandbox will be available for the track as a whole. |
lab_config - LabConfig
|
The lab configuration for the track. |
sourceTrack - Track
|
The track the current track has been copied from. |
recommendations - [RecommendationType!]!
|
Array of recommended actions for the track |
commits - [Commit!]!
|
Array of commits pushed to the track |
lastCommit - Commit
|
Last commit pushed to the track |
remote_repository - String
|
Track git repository |
githubWebhookEvents - [GithubWebhookEvent!]!
|
Github webhook events for the track |
features - TrackFeatures
|
The list of features that a track can access or use |
enhancedLoading - Boolean!
|
Enables enhanced loading behavior |
Example
{
"id": "4",
"slug": "abc123",
"version": "xyz789",
"revision": "10:15:30Z",
"type": "abc123",
"title": "xyz789",
"teaser": "xyz789",
"description": "xyz789",
"icon": "abc123",
"level": "beginner",
"tags": ["xyz789"],
"trackTags": [Tag],
"owner": "abc123",
"team": Team,
"developers": [User],
"userIsTrackDeveloper": false,
"instructors": [TrackInstructor],
"updated_by": User,
"private": true,
"published": false,
"maintenance": false,
"challenges": [Challenge],
"config": TrackConfig,
"sandboxConfig": SandboxConfigVersion,
"trackConfig": TrackConfig,
"status": "started",
"started": "10:15:30Z",
"creating": "10:15:30Z",
"created": "10:15:30Z",
"failed": "10:15:30Z",
"stopped": "10:15:30Z",
"completed": "10:15:30Z",
"cleaned": "10:15:30Z",
"permalink": "abc123",
"play_limit": 987,
"play_count": 123,
"expiry_date": "10:15:30Z",
"expiry_count": 987,
"median_starttime": 987,
"prestart": false,
"skipping_to": Challenge,
"scripts": [TrackScript],
"actual_pool_size": 123,
"show_timer": true,
"skipping_enabled": true,
"can_skip": true,
"ttl": "10:15:30Z",
"last_update": "10:15:30Z",
"createdAt": "10:15:30Z",
"deletedAt": "10:15:30Z",
"accessible": true,
"embed_token": "xyz789",
"visibility": "unpublished",
"trackReviews": TrackReviewConnection,
"statistics": TrackStatistics,
"participant": Play,
"idle_timeout": 123,
"studentStatistics": StudentTrackStatistics,
"timelimit": 987,
"lab_config": LabConfig,
"sourceTrack": Track,
"recommendations": ["create_notes"],
"commits": [Commit],
"lastCommit": Commit,
"remote_repository": "abc123",
"githubWebhookEvents": [GithubWebhookEvent],
"features": TrackFeatures,
"enhancedLoading": true
}
TrackConfig
Description
A track config contains the infrastructure needed for the challenges
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
version - String
|
Version of the config, latest version is "2" |
containers - [ContainerConfig!]!
|
List of containers |
virtualmachines - [VirtualMachineConfig!]!
|
List of virtual machines |
virtualbrowsers - [VirtualBrowserConfig!]!
|
List of virtual browsers |
gcp_projects - [GcpProjectConfig!]!
|
List of GCP projects |
aws_accounts - [AwsAccountConfig!]!
|
List of AWS accounts |
azure_subscriptions - [AzureSubscriptionConfig!]!
|
List of Azure subscriptions |
secrets - [SecretConfig!]!
|
List of secrets |
custom_resources - [CustomResourceConfig!]!
|
List of custom resources |
blueprint - Blueprint
|
Blueprint |
Example
{
"id": 4,
"version": "abc123",
"containers": [ContainerConfig],
"virtualmachines": [VirtualMachineConfig],
"virtualbrowsers": [VirtualBrowserConfig],
"gcp_projects": [GcpProjectConfig],
"aws_accounts": [AwsAccountConfig],
"azure_subscriptions": [AzureSubscriptionConfig],
"secrets": [SecretConfig],
"custom_resources": [CustomResourceConfig],
"blueprint": Blueprint
}
TrackConfigInput
Description
A track config contains the infrastructure needed for the challenges
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
version - String
|
Version of the config, latest version is "2" |
containers - [ContainerConfigInput!]
|
List of containers |
virtualmachines - [VirtualMachineConfigInput!]
|
List of virtual machines |
virtualbrowsers - [VirtualBrowserConfigInput!]
|
List of virtual browsers |
gcp_projects - [GcpProjectConfigInput!]
|
List of GCP projects |
aws_accounts - [AwsAccountConfigInput!]
|
List of AWS accounts |
azure_subscriptions - [AzureSubscriptionConfigInput!]
|
List of Azure Subscriptions |
secrets - [SecretConfigInput!]
|
List of secret configs |
blueprint - BlueprintInput
|
Blueprint |
Example
{
"id": "4",
"version": "abc123",
"containers": [ContainerConfigInput],
"virtualmachines": [VirtualMachineConfigInput],
"virtualbrowsers": [VirtualBrowserConfigInput],
"gcp_projects": [GcpProjectConfigInput],
"aws_accounts": [AwsAccountConfigInput],
"azure_subscriptions": [AzureSubscriptionConfigInput],
"secrets": [SecretConfigInput],
"blueprint": BlueprintInput
}
TrackConfigPresets
Description
A track config presets contains presets for track configs
Fields
Field Name | Description |
---|---|
containers - [ContainerConfigPreset!]!
|
List of container presets |
virtualmachines - [VirtualMachineConfigPreset!]!
|
List of virtual machine presets |
machinetypes - [MachineTypePreset!]!
|
List of all Instruqt machine types |
googlecloudmachinetypes - [GoogleCloudMachineTypePreset!]!
|
List of all Google Cloud machine types |
Example
{
"containers": [ContainerConfigPreset],
"virtualmachines": [VirtualMachineConfigPreset],
"machinetypes": [MachineTypePreset],
"googlecloudmachinetypes": [
GoogleCloudMachineTypePreset
]
}
TrackFeatures
Description
TrackFeatures define what features are enabled for a track
Fields
Field Name | Description |
---|---|
versioned - Boolean!
|
Whether the versioned is enabled for this track |
Example
{"versioned": false}
TrackFeaturesInput
Description
TrackFeaturesInput defines the input for mutating features of a track.
Fields
Input Field | Description |
---|---|
versioned - Boolean
|
Whether the team is allowed to use the version control flow |
Example
{"versioned": true}
TrackInput
Description
A track consists of a list of challenges
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
slug - String
|
Slug of the track |
version - String
|
Version of the track. Currently not used |
revision - Time
|
Revision of the track. Currently not used |
title - String
|
Title of the track |
teaser - String
|
Teaser of the track |
description - String
|
Description of the track |
icon - String
|
Icon of the track |
level - Level
|
Level defines the skill level the track is designed for |
tags - [String!]
|
List of tags for this track |
owner - String
|
Slug of the team that owns the track |
developers - [UserInput!]
|
List of developers for this track |
instructors - [InstructorInput!]
|
List of instructors for this track |
private - Boolean
|
If a track is private, it is only visible for team members |
published - Boolean
|
If a track is not published, it is only visible to track developers |
maintenance - Boolean
|
If a track is in maintenance, it can only be played by developers, but is visible to others |
show_timer - Boolean
|
If the track should show a timer while playing the track |
skipping_enabled - Boolean
|
If the end user is able to skip to a specific challenge |
challenges - [ChallengeInput!]
|
List of challenges for this track |
config - TrackConfigInput
|
The config for this track |
scripts - [TrackScriptInput!]
|
The scripts for this track |
idle_timeout - Int
|
The timeout value in seconds before the underlying sandbox will be detroyed. |
timelimit - Int
|
the time limit value in seconds that the sandbox will be available for the track as a whole. |
lab_config - LabConfigInput
|
lab configuration for the track |
sandboxConfig - String
|
The slug of the sandbox config to use for the track |
sourceTrackID - ID
|
The track the current track has been copied from. |
commitMessage - String
|
Commit message when the track is updated. |
remote_repository - String
|
Remote repository connected to the track |
enhancedLoading - Boolean
|
Enables enhanced loading behavior |
Example
{
"id": "abc123",
"slug": "example-track",
"version": "1",
"revision": "10:15:30Z",
"title": "Example Track",
"teaser": "An introduction to the content of the track",
"description": "A detailed description of the content of the track",
"icon": "https://storage.googleapis.com/instruqt-frontend/img/tracks/default.png",
"level": "beginner",
"tags": ["cloud"],
"owner": "xyz789",
"developers": [UserInput],
"instructors": [InstructorInput],
"private": false,
"published": false,
"maintenance": false,
"show_timer": false,
"skipping_enabled": true,
"challenges": [ChallengeInput],
"config": TrackConfigInput,
"scripts": [TrackScriptInput],
"idle_timeout": 987,
"timelimit": 987,
"lab_config": LabConfigInput,
"sandboxConfig": "xyz789",
"sourceTrackID": 4,
"commitMessage": "abc123",
"remote_repository": "xyz789",
"enhancedLoading": false
}
TrackInsight
Fields
Field Name | Description |
---|---|
page - TrackInsightPage!
|
|
Arguments
|
Example
{"page": TrackInsightPage}
TrackInsightItem
Fields
Field Name | Description |
---|---|
id - ID!
|
|
track - Track!
|
|
currentPeriod - TrackInsightsItemPeriod!
|
|
previousPeriod - TrackInsightsItemPeriod!
|
Example
{
"id": "4",
"track": Track,
"currentPeriod": TrackInsightsItemPeriod,
"previousPeriod": TrackInsightsItemPeriod
}
TrackInsightPage
Fields
Field Name | Description |
---|---|
items - [TrackInsightItem!]!
|
|
totalItems - Int!
|
Example
{"items": [TrackInsightItem], "totalItems": 123}
TrackInsightPageInput
Description
Input types for track
Fields
Input Field | Description |
---|---|
dateRangeFilter - DateRangeFilter
|
Date range filter for plays |
trackIds - [String!]
|
IDs of tracks for which we want to get plays |
customParameterFilters - [CustomParameterFilter!]
|
Filter for custom parameters |
trackAuthorIds - [String!]
|
IDs of track authors as context |
tagIds - [String!]
|
IDs of content tags for context |
trackInviteIds - [String!]
|
track invite IDs for context |
landingPageIds - [String!]
|
Landing page IDs for context |
ordering - Ordering
|
Sorting parameters |
pagination - SkipTakePagination
|
Pagination parameters |
playType - PlayType!
|
Filter for play type |
Example
{
"dateRangeFilter": DateRangeFilter,
"trackIds": ["abc123"],
"customParameterFilters": [CustomParameterFilter],
"trackAuthorIds": ["xyz789"],
"tagIds": ["abc123"],
"trackInviteIds": ["xyz789"],
"landingPageIds": ["xyz789"],
"ordering": Ordering,
"pagination": SkipTakePagination,
"playType": "ALL"
}
TrackInsightsItemPeriod
Example
{
"plays": 987,
"learnersReached": 987,
"timeSpent": 123,
"completionRate": 123.45,
"averageReviewScore": 987.65,
"userCompletionRate": 123.45
}
TrackInstructor
TrackInvite
Description
An invite can be used to invite users outside of an organization to access private tracks
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
title - String!
|
The title of the invite. Will not be shown to end users, but is only for administration purposes |
publicTitle - String
|
The public title of the invite. This title will be shown to end users |
publicDescription - String
|
The public description of the invite. This description will be shown to end users |
tracks - [Track!]!
|
The tracks this invite applies to Use 'trackEdges' instead. |
trackEdges - [TrackInviteTrackEdge!]!
|
The tracks this invite applies to |
authors - [TrackInviteAuthor!]!
|
The authors of the invite |
trackLibrary - TrackLibraryEntryConnection
|
The track library of the invite for the current user No longer supported |
Arguments
|
|
organization - Organization!
|
The organization this invite belongs to No longer supported |
team - Team!
|
The team this invite belongs to |
accessSetting - AccessSetting
|
The access setting of the invite |
inviteLimit - Int
|
The number of times this invite can be used |
inviteCount - Int
|
The number of times this invite has been used name is ambiguous, use 'claimCount' instead. |
claimCount - Int
|
The number of times this invite has been claimed |
inviteTTL - Time
|
The TTL until when this invite can be used name is ambiguous, use 'expiresAt' instead. |
expiresAt - Time
|
The expiry date for this invite |
startsAt - Time
|
The start time for a type:live_event invite. Invites will get status:active 24 hours before. |
playLimit - Int
|
The number of plays the end user is allowed to do |
playTTL - Int
|
The amount of time the track is available to the end user |
created - Time
|
When this invite was created |
last_updated - Time
|
When the invite got claimed Can be obtained through TrackInvite.currentUserClaim or User.claims |
allowAnonymous - Boolean!
|
Whether anyone with the link is able to access the invite anonymously (true ), or is asked to leave their details (false , default). |
allowedEmailAddresses - [String!]!
|
List of email addresses that are allowed to accept invite |
allowedEmailAddressesOnly - Boolean!
|
Whether a specific email addresses must be used to accept invite |
currentUserAllowed - Boolean!
|
Whether the currently logged in user is allowed to accept invite |
currentUserClaim - InviteClaim
|
The invite claim for the current user, if this invite was claimed |
currentUserClaimed - Boolean!
|
Whether the currently logged in user has claimed this invite |
claims - [InviteClaim!]!
|
A list of claims for this invite |
activeUsers - [UserActivity!]!
|
List the currently active users |
plays - [InvitePlay!]!
|
List all the plays using this invite |
type - TrackInviteType
|
Type of invite |
status - TrackInviteStatus
|
The status of the invite. |
daysUntil - Int
|
The number of days until the live event's start. This can be resolved from the startsAt field in the frontend |
enableLearnerSharing - Boolean!
|
Whether learner sharing is enabled |
canClaim - Boolean!
|
Can the current user claim the invite |
runtimeParameters - RuntimeParameters
|
The runtime parameters for the invite |
shareMethod - TrackInviteShareMethod
|
Describes the method used to share the invite |
deletedAt - Time
|
Timestamp of when track invite has been deleted |
emailOwnershipConfirmationRequired - Boolean!
|
Whether the ser needs to confirm their email address before they can claim the invite |
instructorToolsEnabled - Boolean!
|
Whether instructor tools are enabled for this invite |
screenSharingEnabled - Boolean!
|
Whether the screen sharing is enabled for this invite |
chatChannels - [TrackInviteChatChannel!]!
|
List of chat channels related to this invite, contains broadcast and direct channels Experimental feature, may change. |
Arguments
|
|
learnerEvents - [LearnerEvent!]!
|
List learner events for the invite. |
Arguments
|
Example
{
"id": 4,
"title": "xyz789",
"publicTitle": "abc123",
"publicDescription": "xyz789",
"tracks": [Track],
"trackEdges": [TrackInviteTrackEdge],
"authors": [TrackInviteAuthor],
"trackLibrary": TrackLibraryEntryConnection,
"organization": Organization,
"team": Team,
"accessSetting": "anyone",
"inviteLimit": 987,
"inviteCount": 987,
"claimCount": 987,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 987,
"playTTL": 987,
"created": "10:15:30Z",
"last_updated": "10:15:30Z",
"allowAnonymous": false,
"allowedEmailAddresses": ["xyz789"],
"allowedEmailAddressesOnly": false,
"currentUserAllowed": false,
"currentUserClaim": InviteClaim,
"currentUserClaimed": true,
"claims": [InviteClaim],
"activeUsers": [UserActivity],
"plays": [InvitePlay],
"type": "self_paced",
"status": "active",
"daysUntil": 123,
"enableLearnerSharing": true,
"canClaim": false,
"runtimeParameters": RuntimeParameters,
"shareMethod": "link",
"deletedAt": "10:15:30Z",
"emailOwnershipConfirmationRequired": true,
"instructorToolsEnabled": true,
"screenSharingEnabled": false,
"chatChannels": [TrackInviteChatChannel],
"learnerEvents": [LearnerEvent]
}
TrackInviteAuthor
TrackInviteChatChannel
Fields
Field Name | Description |
---|---|
id - ID!
|
|
channelType - ChatChannelType!
|
|
studentUser - User
|
|
messages - [TrackInviteChatMessage!]!
|
|
Arguments
|
|
createdAt - Time!
|
Example
{
"id": "4",
"channelType": "direct",
"studentUser": User,
"messages": [TrackInviteChatMessage],
"createdAt": "10:15:30Z"
}
TrackInviteChatMessage
Fields
Field Name | Description |
---|---|
id - ID!
|
|
sender - ChatSender!
|
|
message - String!
|
|
createdAt - Time!
|
|
readAt - Time
|
|
channel - TrackInviteChatChannel!
|
Example
{
"id": 4,
"sender": ChatSender,
"message": "xyz789",
"createdAt": "10:15:30Z",
"readAt": "10:15:30Z",
"channel": TrackInviteChatChannel
}
TrackInviteChatMessageEvent
Fields
Field Name | Description |
---|---|
chatMessage - TrackInviteChatMessage
|
|
error - EventError
|
Example
{
"chatMessage": TrackInviteChatMessage,
"error": EventError
}
TrackInviteInput
Description
An invite can be used to invite users outside of an organization to access private tracks
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
title - String
|
The title of the invite. Will not be shown to end users, but is only for administration purposes |
publicTitle - String
|
The public title of the invite. This title will be shown to end users |
publicDescription - String
|
The public description of the invite. This description will be shown to end users |
trackIDs - [String!]
|
The IDs of the tracks this invite applies to |
inviteLimit - Int
|
The number of times this invite can be used |
inviteTTL - Time
|
The TTL until when this invite can be used |
expiresAt - Time
|
The expiry date for this invite |
startsAt - Time
|
The start time for a type:live_event invite. Invites will be accessible (status:active ) for new users 24 hours before start. |
playLimit - Int
|
The number of plays the end user is allowed to do |
playTTL - Int
|
The amount of time the track is available to the end user |
allowAnonymous - Boolean
|
Whether anyone with the link should be able to access the invite anonymously. Set to false (default) to gate your content with a form asking for details. |
allowedEmailAddresses - [String!]
|
List of email addresses that are allowed to accept invite |
type - TrackInviteType
|
Type of invite |
enableLearnerSharing - Boolean
|
Whether learner sharing is enabled |
runtimeParameters - RuntimeParametersInput
|
Runtime parameters for the invite |
shareMethod - TrackInviteShareMethod
|
Describes the method used to share the invite |
emailOwnershipConfirmationRequired - Boolean
|
Whether the ser needs to confirm their email address before they can claim the invite |
instructorToolsEnabled - Boolean
|
Whether instructor tools are enabled for this invite |
screenSharingEnabled - Boolean
|
Whether the screen sharing is enabled for this invite |
Example
{
"id": "4",
"title": "abc123",
"publicTitle": "xyz789",
"publicDescription": "xyz789",
"trackIDs": ["xyz789"],
"inviteLimit": 123,
"inviteTTL": "10:15:30Z",
"expiresAt": "10:15:30Z",
"startsAt": "10:15:30Z",
"playLimit": 123,
"playTTL": 987,
"allowAnonymous": false,
"allowedEmailAddresses": ["abc123"],
"type": "self_paced",
"enableLearnerSharing": true,
"runtimeParameters": RuntimeParametersInput,
"shareMethod": "link",
"emailOwnershipConfirmationRequired": false,
"instructorToolsEnabled": true,
"screenSharingEnabled": false
}
TrackInviteStatus
Values
Enum Value | Description |
---|---|
|
Default status. Allows new users to acces the invite link. |
|
If invite.startsAt > 24 hours from now (applies to invite.type: live_event only.) New users are not yet allowed to access the invite link. |
|
After invite.expiresAt has passed. No longer allows new users to access the invite link. |
Example
"active"
TrackInviteTrackEdge
TrackInviteType
Values
Enum Value | Description |
---|---|
|
Used to deliver content to users to complete in their own time. |
|
Used to deliver content for instructor-led workshops. |
Example
"self_paced"
TrackLibraryEntry
Description
TrackLibraryEntry a track owned by a user by accepting a track invite.
Example
{
"playCount": 987,
"viewed_at": "10:15:30Z",
"track": Track
}
TrackLibraryEntryConnection
Fields
Field Name | Description |
---|---|
edges - [TrackLibraryEntryEdge!]!
|
A list of edges. |
nodes - [TrackLibraryEntry!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Identifies the total count of items in the connection. |
Example
{
"edges": [TrackLibraryEntryEdge],
"nodes": [TrackLibraryEntry],
"pageInfo": PageInfo,
"totalCount": 123
}
TrackLibraryEntryEdge
Description
An edge to a TackLibraryEntry with its cursor.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A cursor for use in pagination. |
node - TrackLibraryEntry
|
The entry at the end of this edge. |
Example
{
"cursor": "abc123",
"node": TrackLibraryEntry
}
TrackOrder
Description
TrackOrder defines the order in which to return tracks
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"last_update_ASC"
TrackPlayLimit
Fields
Field Name | Description |
---|---|
track - Track
|
The track the limits apply to, if configured for a track |
rollingMonth - Int!
|
The amount of times a track can be started for a rolling month period |
rollingIPAddressPerHour - Int!
|
The amount of times a track can be started per IP Address for a rolling hour period |
calendarMonth - Int!
|
The amount of times a track can be played for a calendar month |
concurrentPlaysPerIP - Int!
|
The amount of concurrent plays allowed for a track per IP Address |
Example
{
"track": Track,
"rollingMonth": 123,
"rollingIPAddressPerHour": 123,
"calendarMonth": 123,
"concurrentPlaysPerIP": 987
}
TrackPlayLimitInput
Description
Input values for track play limits
Fields
Input Field | Description |
---|---|
rollingMonth - Int
|
The amount of times a track can be started for a rolling month period |
rollingIPAddressPerHour - Int
|
The amount of times a track can be started per IP Address for a rolling hour period |
calendarMonth - Int
|
The amount of times a track can be played for a calendar month |
concurrentPlaysPerIP - Int
|
The amount of times a track can be played concurrently per IP Address |
Example
{
"rollingMonth": 123,
"rollingIPAddressPerHour": 987,
"calendarMonth": 123,
"concurrentPlaysPerIP": 123
}
TrackReview
Description
A student's review of a track.
Fields
Field Name | Description |
---|---|
id - ID!
|
The ID of this track review. |
track - Track!
|
The track this review applies to. |
challenge - Challenge
|
The challenge this review applies to. |
user - User!
|
The user which supplied this review. |
play - Play
|
The play this review applies to. |
created_at - Time!
|
The time the review was created. |
updated_at - Time!
|
The time the review was last updated. |
score - Int!
|
The score the user gave to this track; should be between 1-5. |
content - String!
|
Written feedback. |
Example
{
"id": "4",
"track": Track,
"challenge": Challenge,
"user": User,
"play": Play,
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"score": 987,
"content": "xyz789"
}
TrackReviewConnection
Fields
Field Name | Description |
---|---|
edges - [TrackReviewEdge!]!
|
A list of edges. |
nodes - [TrackReview!]!
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
totalCount - Int!
|
Identifies the total count of items in the connection. |
Example
{
"edges": [TrackReviewEdge],
"nodes": [TrackReview],
"pageInfo": PageInfo,
"totalCount": 987
}
TrackReviewEdge
Description
An edge to a TrackReview with its cursor.
Fields
Field Name | Description |
---|---|
cursor - String!
|
A cursor for use in pagination. |
node - TrackReview
|
The entry at the end of this edge. |
Example
{
"cursor": "xyz789",
"node": TrackReview
}
TrackReviewInput
TrackScript
Description
Track scripts provide the automation hooks for interacting with the infrastructure of the track. There are 2 actions: setup,cleanup
Example
{
"id": 4,
"action": "xyz789",
"contents": "xyz789",
"host": "abc123"
}
TrackScriptInput
Description
Track scripts provide the automation hooks for interacting with the infrastructure of the track. There are 2 actions: setup, cleanup
Example
{
"id": 4,
"track": "abc123",
"host": "xyz789",
"action": "abc123",
"contents": "xyz789"
}
TrackSeries
TrackStatistics
Fields
Field Name | Description |
---|---|
track - Track
|
|
id - ID!
|
Replaced by track
|
title - String
|
Replaced by track
|
slug - String
|
Replaced by track
|
started_total - Int
|
|
completed_total - Int
|
|
restarted_total - Int
|
|
average_review_score - Float
|
|
track_series - [TrackSeries!]!
|
|
challenge_series - [ChallengeSeries!]!
|
|
challenges - [ChallengeStatistics!]!
|
|
happiness - [HappinessCount!]!
|
Example
{
"track": Track,
"id": "4",
"title": "xyz789",
"slug": "xyz789",
"started_total": 123,
"completed_total": 123,
"restarted_total": 987,
"average_review_score": 123.45,
"track_series": [TrackSeries],
"challenge_series": [ChallengeSeries],
"challenges": [ChallengeStatistics],
"happiness": [HappinessCount]
}
TrackStatus
Description
TrackStatus enumerate all track statuses
Values
Enum Value | Description |
---|---|
|
The user has started the track |
|
The infrastructure for the track is being created |
|
The infrastructure has been completed |
|
The track setup has failed |
|
Track was stopped by the user |
|
Track is being cleaned up |
|
Track has been cleaned up |
Example
"started"
TrackStopReason
Description
Possible reasons for stopping a track.
Values
Enum Value | Description |
---|---|
|
The track was stopped because its timeout expired. |
|
The track was stopped by a user action. |
Example
"expired"
TrackTheme
Fields
Field Name | Description |
---|---|
name - String!
|
Name of the lab theme |
Example
{"name": "abc123"}
TrackThemeInput
Description
Input values for track theme
Fields
Input Field | Description |
---|---|
name - String!
|
The the name of the theme |
Example
{"name": "xyz789"}
UnclaimedHosStartSeries
Fields
Field Name | Description |
---|---|
sum - Int!
|
|
items - [UnclaimedHotStartSeriesItem!]!
|
Example
{"sum": 123, "items": [UnclaimedHotStartSeriesItem]}
UnclaimedHotStartSeriesItem
UpdateCustomResourceInput
UrlCondition
Fields
Field Name | Description |
---|---|
urlPart - String!
|
The URL to match against |
condition - ConditionType!
|
rule to use for staring matching |
Example
{"urlPart": "abc123", "condition": "equals"}
User
Description
User
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
profile - UserProfile
|
The user's profile |
details - UserDetails
|
The details last used to claim an invite |
organizations - [UserOrganizationEdge!]!
|
The organizations this user is a member of Replace with teams |
teams - [UserTeamEdge!]!
|
The teams this user is a member of |
is_anonymous - Boolean!
|
Whether the user's account is anonymous |
is_global_admin - Boolean!
|
Whether the user has admin rights No longer used |
segments - [UserSegment!]!
|
The user's segments. |
claims - [InviteClaim!]!
|
The user's invite claims. |
accessibleTracks - [Track!]!
|
accessibleTracks resolves the tracks the user has access to. |
reportItem - UserReportItem
|
reportItem resolves statistics for the resolved user |
Arguments
|
|
supportVerificationHash - String
|
Verification hash to identify the user to the support system |
Example
{
"id": 4,
"profile": UserProfile,
"details": UserDetails,
"organizations": [UserOrganizationEdge],
"teams": [UserTeamEdge],
"is_anonymous": true,
"is_global_admin": false,
"segments": ["instruqt_employee"],
"claims": [InviteClaim],
"accessibleTracks": [Track],
"reportItem": UserReportItem,
"supportVerificationHash": "xyz789"
}
UserActivity
Description
UserActivity the current track and challenge a user is playing.
Example
{
"last_activity": "10:15:30Z",
"track": Track,
"challenge": Challenge,
"participant": Play,
"user": User
}
UserDetails
Example
{
"id": 4,
"user": User,
"team": Team,
"firstName": "abc123",
"lastName": "xyz789",
"email": "xyz789",
"emailConfirmed": false,
"companyName": "abc123",
"phoneNumber": "xyz789",
"jobTitle": "xyz789",
"jobLevel": "xyz789",
"countryCode": "abc123",
"usState": "abc123",
"consent": false
}
UserDetailsInput
Fields
Input Field | Description |
---|---|
firstName - String
|
First name field value of submitted user details |
lastName - String
|
Last name field value of submitted user details |
email - String
|
email field value of submitted user details |
companyName - String
|
Company name field value of submitted user details |
phoneNumber - String
|
Phone number field value of submitted user details |
jobTitle - String
|
Job title field value of submitted user details |
jobLevel - String
|
Job level name field value of submitted user details |
countryCode - String
|
Country code field value of submitted user details |
usState - String
|
US state field value of submitted user details |
consent - Boolean
|
Whether the user has accepted the Consent Notice. |
Example
{
"firstName": "abc123",
"lastName": "abc123",
"email": "abc123",
"companyName": "abc123",
"phoneNumber": "xyz789",
"jobTitle": "xyz789",
"jobLevel": "abc123",
"countryCode": "xyz789",
"usState": "abc123",
"consent": false
}
UserInput
Description
User
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
profile - UserProfileInput
|
The user's profile |
Example
{
"id": "4",
"profile": UserProfileInput
}
UserOrganizationEdge
Description
Represents a user's relationship to an organization
Fields
Field Name | Description |
---|---|
id - ID!
|
ID of this edge; a compound of the user ID and org ID. |
node - Organization
|
The organization |
role - RoleName
|
The user's role in this organization |
Example
{"id": 4, "node": Organization, "role": "owner"}
UserProfile
Description
User Profile
Example
{
"avatar": "abc123",
"display_name": "xyz789",
"email": "xyz789",
"slug": "abc123"
}
UserProfileInput
Description
User Profile
Fields
Input Field | Description |
---|---|
email - String
|
Email address of the user |
Example
{"email": "xyz789"}
UserReportInput
Fields
Input Field | Description |
---|---|
teamSlug - String
|
Slug of the team you're querying the report for. Only required if not called from Team. |
dateRangeFilter - DateRangeFilter
|
Date range filter for plays |
trackIds - [String!]
|
IDs of tracks for which we want to get plays |
trackInviteIds - [String!]
|
IDs of track invites |
landingPageIds - [String!]
|
IDs of landing pages |
tags - [String!]
|
Tags to filter the tracks |
includeAnonymousUsers - Boolean
|
Show/Hide anonymous users in the report |
userIds - [String!]
|
IDs of users |
ordering - Ordering
|
Sorting parameters |
pagination - SkipTakePagination
|
Pagination parameters |
playType - PlayType
|
Filter for play type |
Example
{
"teamSlug": "xyz789",
"dateRangeFilter": DateRangeFilter,
"trackIds": ["abc123"],
"trackInviteIds": ["xyz789"],
"landingPageIds": ["abc123"],
"tags": ["abc123"],
"includeAnonymousUsers": true,
"userIds": ["xyz789"],
"ordering": Ordering,
"pagination": SkipTakePagination,
"playType": "ALL"
}
UserReportItem
Description
UserReportItem represents a row of a user report
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID of the user |
user - User!
|
Unique user other fields relate to |
plays - Int!
|
number of plays a user has started |
playReportItems - [PlayReportItem!]!
|
The play report items for a user report item. |
Arguments
|
|
tracksStarted - Int!
|
Number of tracks started |
tracksCompleted - Int!
|
Number of tracks completed |
completionRate - Float!
|
Completion rate of tracks |
totalChallenges - Int!
|
Number of challenges started |
completedChallenges - Int!
|
Number of challenges completed |
averageProgressPercent - Float!
|
The average progress a user has made in their plays |
timeSpent - Int!
|
Sum of all queries plays time spent |
lastStartedAt - Time!
|
lastStartedAt represents the timestamp the last play was started. |
Example
{
"id": 4,
"user": User,
"plays": 987,
"playReportItems": [PlayReportItem],
"tracksStarted": 123,
"tracksCompleted": 987,
"completionRate": 123.45,
"totalChallenges": 987,
"completedChallenges": 987,
"averageProgressPercent": 123.45,
"timeSpent": 123,
"lastStartedAt": "10:15:30Z"
}
UserReportPage
Description
UserReportPage represents a page of a user report
Fields
Field Name | Description |
---|---|
items - [UserReportItem!]!
|
|
totalItems - Int!
|
Example
{"items": [UserReportItem], "totalItems": 123}
UserSegment
Description
A user can be in one or more of these user segments.
Values
Enum Value | Description |
---|---|
|
Users in this segment have admin rights Not used anymore |
|
Users in this segment are allowed to create content. |
|
Users in this segment can create invites and view content. |
|
Users in this segment are part of an organization but cannot create content. |
|
Users in this segment are not part of any organization. |
Example
"instruqt_employee"
UserTeamEdge
UserType
Values
Enum Value | Description |
---|---|
|
|
|
|
|
|
|
Example
"instruqt"
VersionedTrack
VirtualBrowserCheck
Description
Virtual browser specififc check
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
challenge - Challenge!
|
The challenge ID this check belongs to |
host - String!
|
On which host (name) the script is executed. Must reference a host in the track config. |
browserLocation - Location
|
The url inside the virtual browser must be on in order to pass the check more than one url can be provided, in which case the check will pass if any of the urls are matching The DOM element to check |
element - [HtmlElement!]!
|
|
innerText - [HtmlElement!]!
|
The InnerText of an element to check |
Example
{
"id": "4",
"challenge": Challenge,
"host": "xyz789",
"browserLocation": Location,
"element": [HtmlElement],
"innerText": [HtmlElement]
}
VirtualBrowserCheckInput
Fields
Input Field | Description |
---|---|
challenge - String!
|
|
track - String!
|
|
host - String!
|
|
browserLocation - LocationCheckInput
|
|
element - [HtmlElementInput!]
|
|
innerText - [HtmlElementInput!]
|
Example
{
"challenge": "xyz789",
"track": "abc123",
"host": "abc123",
"browserLocation": LocationCheckInput,
"element": [HtmlElementInput],
"innerText": [HtmlElementInput]
}
VirtualBrowserConfig
VirtualBrowserConfigInput
VirtualMachineConfig
Description
A VirtualMachineConfig stores the details of a VM
Fields
Field Name | Description |
---|---|
id - ID!
|
Unique ID |
allow_external_ingress - [String!]!
|
What port (ranges) to expose for external ingress |
environment - [EnvironmentVariable!]
|
List of key-value pairs that are injected as environment variables |
image - String!
|
GCP Compute image to use |
machine_type - String!
|
Machine type to use. Must be a valid machine type according to https://cloud.google.com/compute/docs/machine-types |
name - String!
|
Name of the vm, will be used as hostname |
pool_size - Int!
|
The pool size of VMs that will be kept as warm standby. If this is 0, pooling is disabled |
preemptible - Boolean!
|
Whether to use preemptible vms. Defaults to false |
shell - String!
|
Which shell to expose in the terminal. Defaults to /bin/sh |
cpus - Int
|
The number of CPUs the machine should have |
memory - Int
|
The amount of memory the machine should have |
nested_virtualization - Boolean!
|
Whether nested virtualization is enabled |
provision_ssl_certificate - Boolean!
|
Whether an ssl certificate should be provisioned |
Example
{
"id": "4",
"allow_external_ingress": ["abc123"],
"environment": [EnvironmentVariable],
"image": "xyz789",
"machine_type": "abc123",
"name": "abc123",
"pool_size": 123,
"preemptible": false,
"shell": "xyz789",
"cpus": 987,
"memory": 987,
"nested_virtualization": false,
"provision_ssl_certificate": true
}
VirtualMachineConfigInput
Description
A VirtualMachineConfig stores the details of a VM
Fields
Input Field | Description |
---|---|
id - ID
|
Unique ID |
track - String
|
ID of the track this config belongs to |
name - String
|
Name of the vm, will be used as hostname |
image - String
|
GCP Compute image to use |
machine_type - String
|
Machine type to use. Must be a valid machine type according to https://cloud.google.com/compute/docs/machine-types |
allow_external_ingress - [String!]
|
What port (ranges) to expose for external ingress |
preemptible - Boolean
|
Whether to use preemptible vms. Defaults to false |
shell - String
|
Which shell to expose in the terminal. Defaults to /bin/sh |
pool_size - Int
|
The pool size of VMs that will be kept as warm standby. If this is 0, pooling is disabled |
environment - [EnvironmentInput!]
|
List of key-value pairs that are injected as environment variables |
cpus - Int
|
The number of CPUs the machine should have |
memory - Int
|
The amount of memory the machine should have |
nested_virtualization - Boolean
|
Whether nested virtualization is enabled |
provision_ssl_certificate - Boolean
|
Whether an ssl certificate should be provisioned |
Example
{
"id": "4",
"track": "abc123",
"name": "abc123",
"image": "xyz789",
"machine_type": "xyz789",
"allow_external_ingress": ["xyz789"],
"preemptible": true,
"shell": "abc123",
"pool_size": 123,
"environment": [EnvironmentInput],
"cpus": 987,
"memory": 987,
"nested_virtualization": false,
"provision_ssl_certificate": false
}
VirtualMachineConfigPreset
Description
A VirtualMachineConfigPreset stores the config for a virtual machine preset.
Example
{
"label": "abc123",
"image": "abc123",
"machine_type": "abc123",
"memory": 123,
"cpus": 123
}
VisibilityStatus
Values
Enum Value | Description |
---|---|
|
Track has not been published |
|
Track is in maintenance |
|
Track is private |
|
Track is public |
Example
"unpublished"
Webhook
Description
Webhook represents an Instruqt Webhook
Fields
Field Name | Description |
---|---|
id - ID!
|
The ID of the Webhook |
name - String!
|
Name of the webhook |
url - String!
|
URL of the webhook |
created_at - Time!
|
The time the webhook was created |
updated_at - Time!
|
The time the webhook was updated |
events - [String!]!
|
The events which trigger the webhook |
custom_headers - [CustomHeader!]!
|
Custom header for the webhook |
Example
{
"id": "4",
"name": "xyz789",
"url": "abc123",
"created_at": "10:15:30Z",
"updated_at": "10:15:30Z",
"events": ["xyz789"],
"custom_headers": [CustomHeader]
}
WebhookInput
Description
Parameter used to create or update a webhook
Fields
Input Field | Description |
---|---|
name - String
|
Name of the webhook |
url - String!
|
URL of the webhook |
events - [String!]
|
The events which trigger the webhook |
custom_headers - [CustomHeaderInput!]
|
Custom header for the webhook |
Example
{
"name": "abc123",
"url": "xyz789",
"events": ["xyz789"],
"custom_headers": [CustomHeaderInput]
}