For the complete documentation index, see llms.txt. This page is also available as Markdown.

REST API specification

Get user context information

get

Retrieves the user context including role, permissions, leadership status, and experience types. Optionally filter by Canvas account ID.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
accountIdstringOptional

Optional Canvas account ID to filter the user context

Responses
200

User context retrieved successfully

application/json
userIdstringRequired

Internal user ID

Example: 123e4567-e89b-12d3-a456-426614174000
canvasUserIdstringRequired

Canvas user ID (external)

Example: 123e4567-e89b-12d3-a456-426614174000
rolestring · enumRequired

User role within the system

Example: learnerPossible values:
isLeaderbooleanRequired

Indicates whether the user has leadership responsibilities

Example: false
isRootAccountbooleanRequired

Whether the account this context was resolved for is a root account rather than a sub-account

Example: true
canAdministerAccountboolean · nullableRequired

Whether the user may administer the account this context was resolved for. Null when Canvas could not be reached, which is distinct from false: a client must not treat null as a refusal.

Example: true
defaultAccountIdstring · nullableRequired

The account this user should operate in when none is specified: the Career account they administer that sorts first by name, or the domain root for a root admin of a tenant that has Career enabled on the root itself. Always an account under the root account of the requesting domain. Null when they administer no Career account here, or when the lookup failed. Identical across every value of the accountId query parameter.

Example: 85
enrollmentTypesstring[]Optional

List of enrollment types associated with the user

Example: ["TeacherEnrollment","DesignerEnrollment"]
get/api/v1/user/context
GET /api/v1/user/context HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "userId": "123e4567-e89b-12d3-a456-426614174000",
  "canvasUserId": "123e4567-e89b-12d3-a456-426614174000",
  "role": "learner",
  "isLeader": false,
  "isRootAccount": true,
  "canAdministerAccount": true,
  "defaultAccountId": "85",
  "permissions": {
    "can_view_analytics": true,
    "can_manage_courses": false
  },
  "experience": {
    "currentApp": "career_learner",
    "availableApps": [
      "career_learner",
      "academic"
    ],
    "availableRoles": [
      "admin",
      "course_facilitator",
      "learner"
    ],
    "currentRole": "course_facilitator"
  },
  "enrollmentTypes": [
    "TeacherEnrollment",
    "DesignerEnrollment"
  ]
}
post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
skillExtractionIdstring · nullableRequired
Responses
default
application/json
idstringRequired
namestringRequired
proficiencyLevelstring · enumRequiredPossible values:
createdAtstring · date-timeRequired
updatedAtstring · date-timeRequired
post/api/v1/skills
POST /api/v1/skills HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 55

{
  "skills": [
    {
      "name": "text"
    }
  ],
  "skillExtractionId": "text"
}
default
[
  {
    "id": "text",
    "name": "text",
    "proficiencyLevel": "beginner",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "updatedAt": "2026-01-01T00:00:00.000Z"
  }
]
post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Responses
201Success

No content

post/api/v1/skills/resume
POST /api/v1/skills/resume HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
201Success

No content

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Responses
201Success

No content

post/api/v1/skills/taxonomy-source
POST /api/v1/skills/taxonomy-source HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
201Success

No content

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
baseUrlstringRequired

Base URL of the Canvas instance (e.g., "canvas.instructure.com").

courseIdstringRequired

The Canvas ID of the course.

Responses
201Success

No content

post/api/v1/programs/enroll/{baseUrl}/{courseId}
POST /api/v1/programs/enroll/{baseUrl}/{courseId} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
201Success

No content

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
collectionIdstringRequired
Responses
default
application/json
idstringRequired
libraryIdstringRequired
itemTypestring · enumRequiredPossible values:
displayOrdernumberRequired
programIdstring · nullableRequired
programCourseIdstring · nullableRequired
createdAtstring · date-timeRequired
updatedAtstring · date-timeRequired
post/api/v1/collections/{collectionId}/file
POST /api/v1/collections/{collectionId}/file HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default
{
  "id": "text",
  "libraryId": "text",
  "itemType": "course",
  "displayOrder": 1,
  "canvasCourse": {
    "courseId": "text",
    "canvasUrl": "text",
    "courseName": "text",
    "courseImageUrl": "text",
    "moduleCount": 1,
    "moduleItemCount": 1,
    "estimatedDurationMinutes": 1
  },
  "programId": "text",
  "programCourseId": "text",
  "createdAt": "2026-01-01T00:00:00.000Z",
  "updatedAt": "2026-01-01T00:00:00.000Z"
}
get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Responses
200Success

No content

get/api/v1/prism/conversations
GET /api/v1/prism/conversations HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200Success

No content

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
conversationIdstringOptional

Existing conversation ID to append to, omit to create new

messagestringRequired

User message content

canvasAccountIdstringOptional
Responses
201Success

No content

post/api/v1/prism/conversations
POST /api/v1/prism/conversations HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 67

{
  "conversationId": "text",
  "message": "text",
  "canvasAccountId": "text"
}
201Success

No content

delete
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
conversationIdsstring[]Required

Array of conversation IDs to delete

Responses
200Success

No content

delete/api/v1/prism/conversations
DELETE /api/v1/prism/conversations HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 28

{
  "conversationIds": [
    "text"
  ]
}
200Success

No content

Create or append a conversation message with SSE streaming

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
conversationIdstringOptional

Existing conversation ID to append to, omit to create new

messagestringRequired

User message content

canvasAccountIdstringOptional
Responses
200

SSE stream of solver events (DidDecodeIntent, DidSolve, DidVisualize, etc.) followed by a final DidConverse or DidFail event

No content

post/api/v1/prism/conversations/sse
POST /api/v1/prism/conversations/sse HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 67

{
  "conversationId": "text",
  "message": "text",
  "canvasAccountId": "text"
}
200

SSE stream of solver events (DidDecodeIntent, DidSolve, DidVisualize, etc.) followed by a final DidConverse or DidFail event

No content

get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired
Responses
200Success

No content

get/api/v1/prism/conversations/{id}
GET /api/v1/prism/conversations/{id} HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200Success

No content

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired
Header parameters
x-request-idstringRequired
Body
queryIdstringRequired

ID of the query to regenerate

errorstringRequired

Error message from failed query execution

canvasAccountIdstringOptional
Responses
201Success

No content

post/api/v1/prism/conversations/{id}/regenerate
POST /api/v1/prism/conversations/{id}/regenerate HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
x-request-id: text
Content-Type: application/json
Accept: */*
Content-Length: 58

{
  "queryId": "text",
  "error": "text",
  "canvasAccountId": "text"
}
201Success

No content

get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
idstring[]Required

Array of query UUIDs to retrieve

Example: ["uuid-1","uuid-2","uuid-3"]
Responses
200Success

No content

get/api/v1/prism/queries
GET /api/v1/prism/queries?id=uuid-1 HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200Success

No content

get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired
Responses
200Success

No content

get/api/v1/prism/queries/{id}/settings
GET /api/v1/prism/queries/{id}/settings HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200Success

No content

put
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
idstringRequired
Body
parametersobjectOptional

User specific query parameter values

titlestringOptional

User specific title for the query

styleobjectOptional

User specific style object for the query

Responses
200Success

No content

put/api/v1/prism/queries/{id}/settings
PUT /api/v1/prism/queries/{id}/settings HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 43

{
  "parameters": {},
  "title": "text",
  "style": {}
}
200Success

No content

get
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
accountIdstringRequired
Responses
200Success

No content

get/api/v1/prism/widget-library
GET /api/v1/prism/widget-library?accountId=text HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
200Success

No content

put
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
queryIdstringRequired

Query id which needs to be added to widget library

Responses
200Success

No content

put/api/v1/prism/widget-library/add
PUT /api/v1/prism/widget-library/add HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 18

{
  "queryId": "text"
}
200Success

No content

post
Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
queryIdstringRequired

Query id which needs to be removed from widget library

Responses
201Success

No content

post/api/v1/prism/widget-library/remove
POST /api/v1/prism/widget-library/remove HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 18

{
  "queryId": "text"
}
201Success

No content

get
Responses
200Success

No content

get/api/v1/hris/sync-status
GET /api/v1/hris/sync-status HTTP/1.1
Accept: */*
200Success

No content

post
Responses
201Success

No content

post/api/v1/hris/create-stackone-connect-session
POST /api/v1/hris/create-stackone-connect-session HTTP/1.1
Accept: */*
201Success

No content

post
Responses
201Success

No content

post/api/v1/hris/trigger-sync
POST /api/v1/hris/trigger-sync HTTP/1.1
Accept: */*
201Success

No content

delete
Responses
204Success

No content

delete/api/v1/hris/account
DELETE /api/v1/hris/account HTTP/1.1
Accept: */*
204Success

No content

post
Responses
201Success

No content

post/api/v1/import
POST /api/v1/import HTTP/1.1
Accept: */*
201Success

No content

get
Query parameters
accountIdstringRequired
Responses
200Success

No content

get/api/v1/import/org-chart
GET /api/v1/import/org-chart?accountId=text HTTP/1.1
Accept: */*
200Success

No content

Get navigation items

get

Retrieves fully-formed navigation items based on user context, experience type, and Canvas data. Journey fetches Canvas tabs, applies permissions, and builds complete navigation with all metadata server-side.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
accountIdstringOptional

Canvas account ID for Learning Provider admin/instructor context

Example: 123
userIdstringOptional

Canvas user ID for Learner app context

Example: 456
courseIdstringOptional

Canvas course ID for course-specific navigation (future)

Example: 789
experienceTypestring · enumRequired

Experience type determining navigation structure

Example: career_learning_providerPossible values:
basePathstringOptional

Client routing base path for URL generation (e.g., "/career" for production)

Example: /career
rolestringOptional

Optional role override for intra-app switching (e.g., admin, course_facilitator). When provided, overrides the auto-determined role for navigation template selection.

Example: admin
Responses
200

Navigation items retrieved successfully

application/json
degradedbooleanOptional

True when at least one upstream call failed and the items below were built from fallback data, so the navigation may be incomplete. Lets clients distinguish a genuinely empty or partial navigation from one degraded by an upstream outage. Absent or false means the response is complete.

Example: false
get/api/v1/navigation/items
GET /api/v1/navigation/items?experienceType=career_learning_provider&features=[object+Object] HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "items": [
    {
      "id": "home",
      "type": "local",
      "title": "Home"
    },
    {
      "id": "inbox",
      "type": "route",
      "title": "Inbox",
      "route": "/conversations"
    },
    {
      "id": "learn",
      "type": "parent",
      "title": "Learn",
      "subNavigationItems": [
        {
          "id": "program-123",
          "type": "local",
          "title": "Leadership Program"
        },
        {
          "id": "course-456",
          "type": "local",
          "title": "Standalone Course",
          "isActiveIdentifier": "/courses/456"
        }
      ]
    },
    {
      "id": "external-tool-1",
      "type": "external",
      "title": "External Tool",
      "route": "https://external.example.com/tool",
      "canvasTabId": "context_external_tool_123",
      "canvasTabType": "external"
    },
    {
      "id": "report_bug",
      "type": "click",
      "title": "Report a Bug",
      "isBottomItem": true
    }
  ],
  "degraded": false
}

Last updated

Was this helpful?