Skip to content

API Reference

This reference describes the HTTP surface exposed by Identity Manager (LoopBack). The behaviors and implementations live in the api-models package, loaded as common/models in the API server—see Backend API and api-models. For auth headers, roles, and org context, see Authentication and access control.

Package versions: the api-models npm package carries its own semver (for example 2.x); Identity Manager pins a git submodule commit. When in doubt, trust the deployed API’s Swagger/explorer output over a static copy of this page.


Base URL: /api
Spec version: Swagger 2.0
Consumes: application/json, application/x-www-form-urlencoded, application/xml
Produces: application/json, application/xml, text/javascript


The API exposes 20 resource models. Each supports standard CRUD operations via LoopBack plus custom remote methods.

ResourceDescription
SettingApp settings, error messages, WEPC integration, templates
SystemUserUsers, auth, enrollment, progress, billing, SSO
OrganizationOrganizations, members, courses, cloud config
ProjectProjects (courses), modules, content, invitations, grading
ProjectModuleModules within a project
ProjectModuleGroupModule grouping
ProjectModuleContentContent within modules
FileFile uploads, downloads, management
SeatTransactionsSeat purchases and Stripe integration
SystemUserAccountUser account/seat balances
ProjectAccountProject seat balances
SystemUserInvitationProject invitations
SystemUserDataUser-specific data records
SystemAccessPrincipal-to-role mappings
ProjectStatisticsProject analytics data
SyllabusCourse syllabus
AuthProviderSSO / auth provider configs
AuthProviderConnectionUser-to-provider links
CloudConfigOrganization cloud/domain config
CloudThemeOrganization themes
WorkerBackground jobs and scheduled tasks

Most resources support these standard endpoints (replace {Model} with the plural resource name, e.g. /settings, /SystemUsers, /Projects):

MethodPathDescription
POST/{Model}Create
GET/{Model}Find all (with filter)
GET/{Model}/{id}Find by ID
PUT/{Model}/{id}Update attributes
PATCH/{Model}/{id}Update attributes
DELETE/{Model}/{id}Delete by ID
GET/{Model}/{id}/existsCheck existence
HEAD/{Model}/{id}Check existence
POST/{Model}/{id}/replaceReplace instance
PUT/{Model}Upsert
PATCH/{Model}Upsert
POST/{Model}/replaceOrCreateReplace or create
POST/{Model}/upsertWithWhereUpsert with where
GET/{Model}/findOneFind first match
POST/{Model}/updateUpdate all matching
GET/{Model}/countCount matching
POST/{Model}/change-streamCreate change stream
GET/{Model}/change-streamCreate change stream

Filter parameter: Most GET endpoints accept a filter query parameter as a JSON-encoded string: {"where":{"name":"foo"},"include":"relation","limit":10,"offset":0}


Base path: /settings

MethodPathSummary
GET/settings/statusGet API status
GET/settings/changelogGet API changelog (?complete=true for full)
GET/settings/key/{key}Get settings by key pattern (regex)
GET/settings/getErrorMessagesGet error messages from Webflow (?update=true)
GET/settings/fetchAuthProvider/{id}Fetch auth provider public details
GET/settings/getTemplatesGet project templates across all organizations
GET/settings/viewPermissionsView all app permissions from JSON files
GET/settings/wepc/fetchCORS-enabled fetch from WEPC (?url=...)
GET/settings/wepc/statusCheck WEPC status
GET/settings/downloadTEMPfolderDownload temp folder archive
POST/settings/wepc/createCreate cloud object from Mathematica code
POST/settings/failedEmailsEmail failure webhook (SendGrid)
POST/settings/deleteTestStudentsDelete test student accounts
PropertyTypeRequired
idObjectIDauto
keystringno

Base path: /SystemUsers

MethodPathSummary
POST/SystemUsers/loginLogin with email/password
POST/SystemUsers/logoutLogout (invalidate token)
GET/SystemUsers/confirmConfirm email verification
POST/SystemUsers/resetReset password
POST/SystemUsers/registerUser registration
GET/SystemUsers/confirm-signup/{jwt}Confirm signup via JWT
POST/SystemUsers/newDemoUserCreate demo user
GET/SystemUsers/currentUserGet current logged-in user
GET/SystemUsers/firebaseTokenGet Firebase auth token
GET/SystemUsers/{id}/ssoToken/{app}Get SSO token for 3rd party app
GET/SystemUsers/{id}/getUpdatePasswordUrlGet password update URL
POST/SystemUsers/inviteFind or invite a user by email
GET/SystemUsers/emailExists/{email}Check if email exists
MethodPathSummary
GET/SystemUsers/{id}/createTempSessionCreate temporary session
GET/SystemUsers/{id}/userSessionsGet user sessions
GET/SystemUsers/currentSessionGet current session
GET/SystemUsers/{id}/setTempSessionSet temp session
GET/SystemUsers/{id}/geolocationGet user geolocation
GET/SystemUsers/{id}/redirect/{to}Redirect with valid token
MethodPathSummary
POST/SystemUsers/{id}/updateProfileUpdate user profile
POST/SystemUsers/{id}/uploadProfileImageUpload profile image
POST/SystemUsers/{id}/uploadPublicFileUpload a public file
MethodPathSummary
POST/SystemUsers/{id}/enrollToProject/{projectId}Enroll to project
POST/SystemUsers/{id}/saveProgress/{projectId}Save user progress
POST/SystemUsers/{id}/saveProgressGuest/{projectId}Save guest progress
POST/SystemUsers/{id}/saveModuleProgress/{projectId}/{moduleId}Save module progress
GET/SystemUsers/{id}/fetchEnrollmentProgress/{projectId}Get enrollment progress
POST/SystemUsers/{id}/updateEnrollmentCurrentModule/{projectId}Update current module
MethodPathSummary
POST/SystemUsers/{id}/save-answer/{projectId}/{moduleId}Save answers
POST/SystemUsers/{id}/archive-answer/{projectId}/{moduleId}/{contentId}/{questionId}Archive an answer
GET/SystemUsers/{id}/archive-answers/{moduleId}/{questionId}Get archived answers
POST/SystemUsers/{id}/submitModule/{projectId}/{moduleId}/{contentId}Submit assessment module
POST/SystemUsers/{id}/submitSurvey/{projectId}/{moduleId}/{contentId}Submit survey
POST/SystemUsers/{id}/calculateAssessmentResult/{projectId}/{moduleId}/{contentId}Calculate assessment result
GET/SystemUsers/{id}/getModuleRemainingTime/{projectId}/{moduleId}Get remaining time
GET/SystemUsers/{id}/getQuestionResult/{projectId}/{moduleId}/{questionId}/{answerId}Get question result
POST/SystemUsers/{id}/retryQuestion/{projectId}/{moduleId}/{contentId}/{questionId}Retry a question
POST/SystemUsers/{id}/unlock-module-group/{projectId}/{groupId}/{unlock}Unlock module group
MethodPathSummary
POST/SystemUsers/{id}/fetchReportCardData/{projectId}/{moduleId}Fetch report card (user)
POST/SystemUsers/{guestId}/fetchReportCardDataGuest/{projectId}/{moduleId}Fetch report card (guest)
POST/SystemUsers/{id}/save-test-reportSave test report
GET/SystemUsers/{id}/fetchPdfReport/{projectId}/{moduleId}/{contentId}/{cardId}Fetch PDF report
POST/SystemUsers/{id}/fetchPdfReportGuest/{projectId}/{moduleId}/{contentId}/{cardId}Fetch PDF report (guest)
MethodPathSummary
POST/SystemUsers/{id}/upload-project-file/{projectId}/{type}Upload project file
POST/SystemUsers/{id}/delete-project-file/{projectId}Delete project file
MethodPathSummary
POST/SystemUsers/{id}/updateBillingUpdate billing info
POST/SystemUsers/{id}/createStripeOrderSessionCreate Stripe order session
POST/SystemUsers/{id}/createStripeInvoiceSessionForUser/{projectId}Buy course
POST/SystemUsers/{id}/createStripeInvoiceSessionForOrgOrder seats for org
POST/SystemUsers/updateSeatsForUser/{id}Buy seats
POST/SystemUsers/{id}/transferSeatsToProject/{projectId}Transfer seats to project
POST/SystemUsers/{id}/withdrawSeatsFromProject/{projectId}Withdraw seats
GET/SystemUsers/{id}/getPaymentHistoryGet payment history
GET/SystemUsers/{id}/getInvoice/{paymentIntent}Get invoice
MethodPathSummary
GET/SystemUsers/{id}/getProjectInvitation/{projectId}Get invitation status
POST/SystemUsers/{id}/acceptProjectInvitation/{projectId}Accept invitation
MethodPathSummary
GET/SystemUsers/{id}/linkedProjectsGet user’s linked projects
GET/SystemUsers/{id}/projectRolesGet project roles
GET/SystemUsers/{id}/orgRolesGet org roles
GET/SystemUsers/{id}/systemRolesGet system roles
GET/SystemUsers/{id}/organizationsGet organizations
GET/SystemUsers/{id}/projectsGet projects
POST/SystemUsers/{id}/fbAuthToken/{organizationId}Get Firebase token for org
GET/SystemUsers/{id}/checkOrgAccess/{organizationId}Check org access
POST/SystemUsers/{id}/sendSupportMessageSend support message
POST/SystemUsers/deleteBulkBulk delete users
PropertyTypeRequired
idObjectIDauto
firstNamestringyes
lastNamestringno
emailstringyes
billingobjectno
stripeCustomerIdstringno
profileobjectno
companystringno
typestringno
preferencesobjectno
phonestringno
secondaryEmailsstring[]no
v2booleanno
demobooleanno
selfRegistrationbooleanno
invitationobjectno
statusstringno
lastAccessdate-timeno
emailVerifiedbooleanno
createdAtdate-timeyes
updatedAtdate-timeyes

Base path: /Organizations

MethodPathSummary
POST/Organizations/{id}/cloneCourse/{projectId}Clone a course
GET/Organizations/{id}/getTemplatesGet project templates
GET/Organizations/{id}/fetch-org-coursesGet organization courses
GET/Organizations/{id}/fetch-org-membersFetch org members
GET/Organizations/{id}/relatedUsersGet all related users
POST/Organizations/{id}/inviteUsersInvite admin users
POST/Organizations/{id}/deleteAdminUsersDelete admin users
POST/Organizations/{id}/sendInvitationEmail/{userId}Send invitation email
POST/Organizations/{id}/setUserAccess/{userId}/{type}Set user access level
GET/Organizations/{id}/validateEmail/{email}Validate email
POST/Organizations/{id}/updateBillingUpdate billing
POST/Organizations/{id}/updateCloudConfigUpdate cloud config
POST/Organizations/{id}/databins/{databinId}/evaluateEvaluate databin
GET/Organizations/{id}/{componentModel}/filesGet files by type
POST/Organizations/{id}/{componentModel}/uploadFileUpload file
POST/Organizations/{id}/{componentModel}/updateFile/{fileId}Update file
RelationTypeModel
systemUsershasMany (through)SystemUser
projectshasManyProject
fileshasManyFile
cloudConfighasOneCloudConfig
cloudThemeshasManyCloudTheme
PropertyTypeRequired
idObjectIDauto
namestringyes
shortNamestringno
logoobjectno
descriptionstringno
styleDefinitionsstringno
orgTypestringno
websitestringno
allowedEmailsstring[]no

Base path: /Projects

MethodPathSummary
POST/Projects/{id}/content/{moduleId}/publishPublish project content
POST/Projects/{id}/modules/{moduleId}/publishPublish module content
POST/Projects/{id}/modules/{moduleId}/cloneClone a module
POST/Projects/{id}/updateModuleOrderUpdate module order
POST/Projects/{id}/createModuleNestedContent/{moduleId}Create nested content
POST/Projects/{id}/updateModuleNestedContent/{moduleId}/{contentId}/{cardId}Update nested content
POST/Projects/{id}/createCustomViewCreate custom view
GET/Projects/{id}/listPublishedContentVersions/{moduleId}List published versions
POST/Projects/{id}/restoreContentFromPublishedVersion/{moduleId}/{publishedContentId}Restore version
MethodPathSummary
GET/Projects/{id}/fetch-module-data/{moduleId}Fetch module data
GET/Projects/{id}/fetchModuleContent/{moduleId}/{contentId}Fetch module content
GET/Projects/{id}/fetchPollConfig/{moduleId}/{contentId}Fetch poll config
GET/Projects/{id}/fetchPollContent/{moduleId}/{contentId}Fetch poll content
GET/Projects/{id}/fetchPublicModuleData/{moduleId}Public module data
GET/Projects/{id}/fetchPublicPollData/{moduleId}Public poll data
GET/Projects/{id}/fetchPublicNestedPolls/{moduleId}Public nested polls
GET/Projects/{id}/fetchPublicNestedCard/{moduleId}/{cardId}Public nested card
POST/Projects/{id}/saveModuleInstance/{moduleId}Save module instance
POST/Projects/{id}/setModuleRuntime/{moduleId}Set module runtime
POST/Projects/{id}/update-module-status/{moduleId}/{status}Update module status
POST/Projects/{id}/setModuleUserAssignment/{moduleId}/{userId}Set user assignment
MethodPathSummary
POST/Projects/{id}/publish-grades/{moduleId}Publish grades
POST/Projects/{id}/schedule-publish-grades/{moduleId}Schedule grade publish
POST/Projects/{id}/publish-final-gradesPublish final grades
GET/Projects/{id}/grading-schemeGet grading scheme
POST/Projects/{id}/gradeQuestionAnswer/{moduleId}/{questionId}/{userId}Grade a question
POST/Projects/{id}/assign-grader/{moduleId}/{userId}Assign grader
POST/Projects/{id}/override-gradebook/{moduleId}/{userId}Override gradebook
POST/Projects/{id}/calculate-re-grading/{moduleId}/{contentId}/{questionId}Re-grade
POST/Projects/{id}/restore-module-grades/{moduleId}/{historyId}Restore draft grades
POST/Projects/{id}/createQuestionSpecimen/{moduleId}/{contentId}/{questionId}/{userId}Create question specimen
MethodPathSummary
GET/Projects/{id}/fetch-project-statisticsGet project statistics
GET/Projects/{id}/fetch-results-overviewGet results overview
GET/Projects/{id}/fetch-assessment-statistics/{moduleId}Assessment stats
GET/Projects/{id}/fetch-survey-statistics/{moduleId}Survey stats
GET/Projects/{id}/fetch-poll-statistics/{moduleId}Poll stats
GET/Projects/{id}/fetch-module-statistics/{moduleId}Module stats
POST/Projects/{id}/calculate-project-statisticsCalculate statistics
POST/Projects/{id}/calculate-poll-computed-values/{moduleId}Calculate poll values
GET/Projects/{id}/handleAnalyticsProcessingSchedule analytics
POST/Projects/{id}/update-project-statsUpdate project stats
MethodPathSummary
GET/Projects/{id}/fetch-project-membersFetch project members
GET/Projects/{id}/getUsers/{role}Get users by role
GET/Projects/{id}/getStaffDetailsGet staff details
GET/Projects/{id}/usersWithRolesUsers with roles
GET/Projects/{id}/userRolesCurrent user’s roles
POST/Projects/{id}/inviteStudentsInvite students
POST/Projects/{id}/inviteUsersInvite users with roles
POST/Projects/{id}/cloudTaskInvitesInvite via Cloud Tasks
POST/Projects/{id}/resendInvitation/{userId}Resend invitation
POST/Projects/{id}/sendInvitationReminder/{userId}Send reminder
POST/Projects/{id}/scheduledInvitation/{userId}Scheduled invitation
POST/Projects/{id}/retryUserInvitation/{userId}Retry invitation
GET/Projects/{id}/getInvitationsGet all invitations
POST/Projects/{id}/deleteUsersDelete users
POST/Projects/{id}/v2/deleteUsersDelete users (v2)
POST/Projects/{id}/v2/setUserAccess/{userId}/{type}Set user access (v2)
GET/Projects/{id}/v2/validateEmail/{email}Validate email (v2)
POST/Projects/{id}/resetUserEnrollment/{userId}/{moduleId}Reset enrollment
MethodPathSummary
POST/Projects/{id}/fetchReportCardData/{moduleId}Fetch report card data
POST/Projects/{id}/send-participant-report/{moduleId}/{userId}Send participant report
POST/Projects/{id}/scheduleParticipantReports/{moduleId}Schedule reports
GET/Projects/{id}/export-to-word/{moduleId}Export to Word
POST/Projects/{id}/sendBulkEmailSend bulk emails
POST/Projects/{id}/send-scheduled-email/{fn}Send scheduled email
POST/Projects/{id}/module-notification/{moduleId}Module notification
MethodPathSummary
POST/Projects/{id}/file-manager/uploadUpload file
GET/Projects/{id}/file-manager/download/{fileId}Download file
GET/Projects/{id}/file-manager/searchSearch files
POST/Projects/{id}/file-manager/set-file-permissions/{fileId}/{state}Set permissions
GET/Projects/{id}/{componentModel}/filesGet files by type
POST/Projects/{id}/{componentModel}/uploadFileUpload file by type
POST/Projects/{id}/{componentModel}/updateFile/{fileId}Update file
POST/Projects/{id}/copy-files/{targetProjectId}Copy files
GET/Projects/{id}/downloadFileFromSourceDownload from GCP
MethodPathSummary
POST/Projects/{id}/signupCourse signup
GET/Projects/{id}/signup/ssoSSO signup
GET/Projects/{id}/publicInfoPublic course info
POST/Projects/{id}/firestoreAccessFirestore access
POST/Projects/{id}/cloneClone project
POST/Projects/{id}/createShortUrlCreate short URL
POST/Projects/{id}/deleteShortUrlDelete short URL
GET/Projects/{id}/getSeatTransferHistorySeat transfer history
POST/Projects/cleanExpiredTokensClean expired tokens
POST/Projects/{id}/event-actions/{moduleId}/store-to-databinStore to databin
GET/Projects/{id}/migrate-no-submission-enrollments/{moduleId}Migrate enrollments
PropertyTypeRequired
idObjectIDauto
namestringyes
externalIdstringno
archivebooleanno (default: false)
noSequencebooleanno
payableInvitationsbooleanno
seatPricenumberno
shortNamestringno
moduleNumberstringno
styleDefinitionsstringno
sylvaStyleDefinitionsstringno
imagesobjectno
modulesarrayno
semesterstringno
organizationIdObjectIDyes
endDatedate-timeno
createdAtdate-timeyes
updatedAtdate-timeyes

The role field in project access accepts: student, owner, projectadmin, contentmanager, lecturer, teachingassistant, reviewer, grader


Base path: /Files

MethodPathSummary
GET/Files/{id}/downloadDownload file (?type=stream|cdnUrl|cdnRedirect)
GET/Files/{componentModel}/filesGet files by type/subfolder
POST/Files/{componentModel}/uploadFileUpload file
POST/Files/{componentModel}/updateFile/{fileId}Update file
POST/Files/{id}/uploadFileAddon/{fileExt}Upload addon format
POST/Files/parseBulkImportCSVParse bulk import CSV
PropertyTypeRequired
idObjectIDauto
namestringno
datatypestringno
sizenumberno
sourcestringyes
publicUrlstringno
statusnumberno
projectIdObjectIDno
componentIdObjectIDno
organizationIdObjectIDno
systemuserIdObjectIDno
componentModelstringno
containerstringno
createdAtdate-timeyes
updatedAtdate-timeyes

Base path: /SeatTransactions

MethodPathSummary
POST/SeatTransactions/stripeSeatsOrderfulfilmentStripe webhook for seat fulfilment
GET/SeatTransactions/createInvoiceCreate PDF invoice
PropertyTypeRequired
idObjectIDauto
systemuserIdObjectIDyes
typestringyes
quantitynumberyes
user_emailstringno
projectIdObjectIDno
stripeSessionIdstringno
stripeInvoiceIdstringno
stripeInvoiceAmountnumberno
stripeInvoiceCurrencynumberno
createdAtdate-timeyes
updatedAtdate-timeyes

Base path: /Worker

Background processing and scheduled tasks. No CRUD — only remote methods.

MethodPathSummary
POST/Worker/processWebhookAnalyticsProcess webhook analytics
POST/Worker/scheduled-cleanupRun scheduled cleanup
POST/Worker/cleanupExpiredTokensClean expired tokens
POST/Worker/cleanupOrphanProjectsClean orphan Firestore projects

Base path: /ProjectModules

PropertyTypeRequired
idObjectIDauto
namestringyes
descriptionstringno
groupIdObjectIDno
externalIdstringno
typestringno
draftstringno
contentarrayno
publishedbooleanno (default: false)
publishedContentobjectno
projectIdObjectIDyes
ownerIdObjectIDyes
createdAtdate-timeyes
updatedAtdate-timeyes

Base path: /ProjectModuleGroups

PropertyTypeRequired
idObjectIDauto
namestringyes
externalIdstringno
projectIdObjectIDno
createdAtdate-timeyes
updatedAtdate-timeyes

Base path: /ProjectModuleContents

PropertyTypeRequired
idObjectIDauto
projectIdObjectIDyes
moduleIdObjectIDyes
ownerIdObjectIDno
publishedByObjectIDno
globalAssetsarrayno
configobjectno
dataarrayno
hashstringno (default: “0”)
createdAtdate-timeyes
updatedAtdate-timeyes

PropertyTypeRequired
idObjectIDauto
systemuserIdObjectIDyes
seatsnumberyes
PropertyTypeRequired
idObjectIDauto
projectIdObjectIDyes
seatsnumberyes
PropertyTypeRequired
idObjectIDauto
systemuserIdObjectIDyes
projectIdObjectIDno
acceptedbooleanno
payablebooleanno
paidbooleanno
pricenumberno
invoiceIdstringno
PropertyTypeRequired
idObjectIDauto
entityIdObjectIDyes
typestringyes
assessmentIdstringno
lectureIdstringno
projectIdObjectIDno

Maps principals (users, apps) to roles.

PropertyTypeRequired
idObjectIDauto
roleIdstringno
principalTypestringno
principalIdObjectIDno
PropertyTypeRequired
idObjectIDauto
typestringyes
dataobjectyes
statusstringno
projectIdObjectIDyes
ownerIdObjectIDno
PropertyTypeRequired
idObjectIDauto
namestringyes
projectIdObjectIDyes
descriptionstringno
websitestringno
teachingStaffarrayno
learningObjectivesarrayno
requirementsarrayno
assessmentarrayno
gradingPolicystringno
gradingSchemestringno
schedulearrayno
PropertyTypeRequired
idObjectIDauto
labelstringyes
strategystringyes
PropertyTypeRequired
idObjectIDauto
systemuserIdObjectIDyes
emailstringyes
authproviderIdObjectIDyes
PropertyTypeRequired
idObjectIDauto
domainstringyes
organizationIdObjectIDyes
allowedAuthProvidersarrayno
auth_providerstringno
optionsobjectno
themeobjectno
cssstringno
PropertyTypeRequired
idObjectIDauto
organizationIdObjectIDyes
labelstringno
dataobjectno

Most endpoints require an access token obtained via POST /SystemUsers/login. Pass the token as the Authorization header or access_token query parameter.

Authorization: <token>

Public endpoints (no auth required):

  • GET /settings/status
  • GET /settings/fetchAuthProvider/{id}
  • GET /Projects/{id}/publicInfo
  • GET /Projects/{id}/fetchPublicPollData/{moduleId}
  • GET /Projects/{id}/fetchPublicModuleData/{moduleId}
  • POST /Projects/{id}/signup
  • POST /SystemUsers/register
  • GET /SystemUsers/confirm