Skip to content
zublms
Documentation
Documentation/API reference

BUILD WITH UNDERSTANDING

The API, explained.

Explore the contract behind ZubLMS. Real operations, explicit schemas and a clear path from request to response.

OpenAPI 3.1.045 operationsContract 0.0.0-dev

This is the current browser/session API, not a general API-key service. Machine access and native mobile authentication require a separately qualified contract. Start with authentication.

Find an operation

45 operations

GET/api/v1/activity/configCurrent event destinations and privacy choicesSession requiredPOST/api/v1/activity/eventsRecord an allowlisted activity or video engagement eventSession requiredGET/api/v1/activity/historyRecent company activity and provider submission statusSession requiredPUT/api/v1/activity/preferencesChoose optional analytics and marketing event sharingSession requiredPUT/api/v1/activity/settingsChoose company destinations and allowed event typesSession requiredGET/api/v1/activity/video/{enrolment}/{activity}Resolve authorised video playback and last observed positionSession requiredGET/api/v1/companyRead company settingsSession requiredPUT/api/v1/companyUpdate company settingsSession requiredPOST/api/v1/company/accessChange member access as an organisation ownerSession requiredGET/api/v1/company/auditRead the latest 100 company administration eventsSession requiredGET/api/v1/company/peopleRead company members and role scopesSession requiredGET/api/v1/company/ssoRead redacted SSO setupSession requiredPUT/api/v1/company/ssoSave an encrypted SSO draftSession requiredPOST/api/v1/company/sso/actionsValidate or submit SSO for operator reviewSession requiredGET/api/v1/company/sso/connectionsList company SSO connections without secretsSession requiredGET/api/v1/company/sso/connections/{connection}Read one connection or prepare an unused UUID draftSession requiredPUT/api/v1/company/sso/connections/{connection}Save one encrypted SSO connection and exact domain routesSession requiredPOST/api/v1/company/sso/connections/{connection}/actionsValidate, request activation or block one SSO connectionSession requiredGET/api/v1/enrolments/{id}/certificateDownload current authorised completion evidenceSession requiredGET/api/v1/messagesRead your inbox, sent messages or draftsSession requiredPUT/api/v1/messagesSave your draft with a revision checkSession requiredPUT/api/v1/messages/preferencesChoose whether to receive optional message email alertsSession requiredGET/api/v1/messages/{id}Read a message you sent or receivedSession requiredPOST/api/v1/messages/{id}/readMark your own in-app message as readSession requiredPOST/api/v1/messages/{id}/sendSend the reviewed draft to its selected audienceSession requiredGET/api/v1/reportsRead own recent report requestsSession requiredPOST/api/v1/reports/enrolmentsQueue a scoped enrolment CSVSession requiredGET/api/v1/reports/{id}Read own report request statusSession requiredGET/api/v1/reports/{id}/downloadDownload a current scoped reportSession requiredGET/api/v1/workspaceCurrent authorised native workspaceSession requiredPOST/api/v1/workspace/commandsApply an authenticated native workspace actionSession requiredPOST/auth/backchannel-logoutReceive signed provider session revocationSigned provider tokenGET/auth/callbackComplete browser sign-inSign-in protocolGET/auth/company-ssoStart one explicitly selected or uniquely resolved company SSO connectionSession requiredGET/auth/company-sso/optionsList active sign-in choices for the resolved companySession requiredGET/auth/loginStart browser sign-inSign-in protocolPOST/auth/logoutEnd the browser sessionSession requiredGET/auth/membershipsOrganisations for this sign-inSession requiredGET/auth/profileCurrent encrypted profileSession requiredPUT/auth/profileUpdate your profileSession requiredGET/auth/sessionCurrent browser sessionSession requiredPOST/auth/switchSwitch organisationSession requiredGET/health/liveLiveness probeRuntime endpointGET/health/readyReadiness probeRuntime endpointGET/versionBuild versionRuntime endpoint

Schema library

Complete field definitions from the same contract as the endpoint reference.

AccessChange
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/AccessChange.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "action": {
      "enum": [
        "grant",
        "revoke",
        "suspend"
      ],
      "type": "string"
    },
    "bindingId": {
      "type": "string"
    },
    "commandId": {
      "format": "uuid",
      "type": "string"
    },
    "role": {
      "enum": [
        "owner",
        "administrator",
        "author",
        "learner",
        "unit_manager",
        ""
      ],
      "type": "string"
    },
    "unitId": {
      "type": "string"
    },
    "userId": {
      "format": "uuid",
      "type": "string"
    },
    "version": {
      "format": "int64",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "commandId",
    "userId",
    "version",
    "action",
    "role",
    "unitId",
    "bindingId"
  ],
  "type": "object"
}
Audit
{
  "additionalProperties": false,
  "properties": {
    "action": {
      "type": "string"
    },
    "actor": {
      "type": "string"
    },
    "at": {
      "type": "string"
    },
    "resource": {
      "type": "string"
    }
  },
  "required": [
    "action",
    "actor",
    "resource",
    "at"
  ],
  "type": "object"
}
Binding
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string"
    },
    "role": {
      "type": "string"
    },
    "unit": {
      "type": "string"
    },
    "unitId": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "role",
    "unitId",
    "unit"
  ],
  "type": "object"
}
Capability
{
  "additionalProperties": false,
  "properties": {
    "configured": {
      "type": "boolean"
    },
    "provider": {
      "type": "string"
    },
    "purpose": {
      "type": "string"
    }
  },
  "required": [
    "provider",
    "configured",
    "purpose"
  ],
  "type": "object"
}
Caption
{
  "additionalProperties": false,
  "properties": {
    "label": {
      "type": "string"
    },
    "language": {
      "type": "string"
    },
    "url": {
      "type": "string"
    }
  },
  "required": [
    "url",
    "language",
    "label"
  ],
  "type": "object"
}
Channel
{
  "additionalProperties": false,
  "properties": {
    "available": {
      "type": "boolean"
    },
    "detail": {
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "available",
    "detail"
  ],
  "type": "object"
}
Command
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Command.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "action": {
      "enum": [
        "save",
        "publish",
        "assign",
        "progress",
        "save_resource",
        "archive_resource",
        "bookmark_resource",
        "bookmark_course"
      ],
      "type": "string"
    },
    "answer": {
      "format": "int64",
      "type": "integer"
    },
    "bookmarked": {
      "type": "boolean"
    },
    "commandId": {
      "format": "uuid",
      "type": "string"
    },
    "course": {
      "$ref": "#/components/schemas/Course"
    },
    "courseId": {
      "type": "string"
    },
    "dueAt": {
      "type": "string"
    },
    "enrolmentId": {
      "type": "string"
    },
    "lessonId": {
      "type": "string"
    },
    "resource": {
      "$ref": "#/components/schemas/Resource"
    },
    "resourceId": {
      "type": "string"
    },
    "revision": {
      "format": "int64",
      "minimum": 0,
      "type": "integer"
    },
    "userIds": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "type": [
        "array",
        "null"
      ]
    }
  },
  "required": [
    "action",
    "commandId"
  ],
  "type": "object"
}
Company
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Company.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "accent": {
      "enum": [
        "violet",
        "mint",
        "blue",
        "peach",
        "rose",
        "sand"
      ],
      "type": "string"
    },
    "logo": {
      "maxLength": 350000,
      "type": "string"
    },
    "name": {
      "maxLength": 160,
      "minLength": 1,
      "type": "string"
    },
    "revision": {
      "format": "int64",
      "minimum": 0,
      "type": "integer"
    },
    "supportEmail": {
      "maxLength": 254,
      "type": "string"
    },
    "supportUrl": {
      "maxLength": 2048,
      "type": "string"
    },
    "timezone": {
      "maxLength": 80,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "name",
    "timezone",
    "logo",
    "accent",
    "supportEmail",
    "supportUrl",
    "revision"
  ],
  "type": "object"
}
Course
{
  "additionalProperties": false,
  "properties": {
    "category": {
      "maxLength": 60,
      "type": "string"
    },
    "colour": {
      "enum": [
        "violet",
        "peach",
        "mint",
        "blue",
        "rose",
        "sand"
      ],
      "type": "string"
    },
    "description": {
      "maxLength": 600,
      "type": "string"
    },
    "duration": {
      "format": "int64",
      "maximum": 600,
      "minimum": 1,
      "type": "integer"
    },
    "id": {
      "type": "string"
    },
    "lessons": {
      "items": {
        "$ref": "#/components/schemas/Lesson"
      },
      "maxItems": 100,
      "type": [
        "array",
        "null"
      ]
    },
    "modules": {
      "items": {
        "$ref": "#/components/schemas/Module"
      },
      "maxItems": 30,
      "type": [
        "array",
        "null"
      ]
    },
    "revision": {
      "format": "int64",
      "minimum": 0,
      "type": "integer"
    },
    "status": {
      "enum": [
        "draft",
        "published"
      ],
      "type": "string"
    },
    "title": {
      "maxLength": 160,
      "type": "string"
    },
    "versionId": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "title",
    "description",
    "category",
    "colour",
    "duration",
    "revision",
    "versionId",
    "status",
    "lessons"
  ],
  "type": "object"
}
Delivery
{
  "additionalProperties": false,
  "properties": {
    "channel": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "read": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    },
    "state": {
      "type": "string"
    },
    "userId": {
      "type": "string"
    }
  },
  "required": [
    "userId",
    "name",
    "channel",
    "state",
    "reason",
    "read"
  ],
  "type": "object"
}
Destination
{
  "additionalProperties": false,
  "properties": {
    "enabled": {
      "type": "boolean"
    },
    "events": {
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "type": [
        "array",
        "null"
      ]
    },
    "provider": {
      "enum": [
        "mixpanel",
        "ga4",
        "klaviyo",
        "meta"
      ],
      "type": "string"
    }
  },
  "required": [
    "provider",
    "enabled",
    "events"
  ],
  "type": "object"
}
Draft
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Draft.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "body": {
      "maxLength": 8000,
      "minLength": 1,
      "type": "string"
    },
    "channels": {
      "items": {
        "type": "string"
      },
      "maxItems": 2,
      "minItems": 1,
      "type": [
        "array",
        "null"
      ]
    },
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "recipients": {
      "items": {
        "type": "string"
      },
      "maxItems": 100,
      "minItems": 1,
      "type": [
        "array",
        "null"
      ]
    },
    "revision": {
      "format": "int64",
      "minimum": 0,
      "type": "integer"
    },
    "subject": {
      "maxLength": 160,
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "id",
    "revision",
    "subject",
    "body",
    "recipients",
    "channels"
  ],
  "type": "object"
}
Enrolment
{
  "additionalProperties": false,
  "properties": {
    "category": {
      "type": "string"
    },
    "certificateState": {
      "type": "string"
    },
    "colour": {
      "type": "string"
    },
    "completed": {
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "contentAvailable": {
      "type": "boolean"
    },
    "courseId": {
      "type": "string"
    },
    "dueAt": {
      "type": "string"
    },
    "duration": {
      "format": "int64",
      "type": "integer"
    },
    "id": {
      "type": "string"
    },
    "lessons": {
      "items": {
        "$ref": "#/components/schemas/Lesson"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "modules": {
      "items": {
        "$ref": "#/components/schemas/Module"
      },
      "maxItems": 30,
      "type": [
        "array",
        "null"
      ]
    },
    "state": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "userId": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "userId",
    "courseId",
    "title",
    "state",
    "dueAt",
    "completed",
    "lessons",
    "category",
    "colour",
    "duration",
    "contentAvailable",
    "certificateState"
  ],
  "type": "object"
}
ErrorDetail
{
  "additionalProperties": false,
  "properties": {
    "location": {
      "description": "Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'",
      "type": "string"
    },
    "message": {
      "description": "Error message text",
      "type": "string"
    },
    "value": {
      "description": "The value at the given location"
    }
  },
  "type": "object"
}
ErrorModel
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/ErrorModel.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "detail": {
      "description": "A human-readable explanation specific to this occurrence of the problem.",
      "examples": [
        "Property foo is required but is missing."
      ],
      "type": "string"
    },
    "errors": {
      "description": "Optional list of individual error details",
      "items": {
        "$ref": "#/components/schemas/ErrorDetail"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "instance": {
      "description": "A URI reference that identifies the specific occurrence of the problem.",
      "examples": [
        "https://example.com/error-log/abc123"
      ],
      "format": "uri",
      "type": "string"
    },
    "status": {
      "description": "HTTP status code",
      "examples": [
        400
      ],
      "format": "int64",
      "type": "integer"
    },
    "title": {
      "description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
      "examples": [
        "Bad Request"
      ],
      "type": "string"
    },
    "type": {
      "default": "about:blank",
      "description": "A URI reference to human-readable documentation for the error.",
      "examples": [
        "https://example.com/errors/example"
      ],
      "format": "uri",
      "type": "string"
    }
  },
  "type": "object"
}
Event
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Event.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "activityId": {
      "type": "string"
    },
    "duration": {
      "format": "double",
      "maximum": 86400,
      "minimum": 0,
      "type": "number"
    },
    "enrolmentId": {
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "name": {
      "maxLength": 40,
      "type": "string"
    },
    "page": {
      "maxLength": 40,
      "type": "string"
    },
    "playbackId": {
      "type": "string"
    },
    "position": {
      "format": "double",
      "maximum": 86400,
      "minimum": 0,
      "type": "number"
    },
    "rate": {
      "format": "double",
      "maximum": 4,
      "minimum": 0,
      "type": "number"
    },
    "sequence": {
      "format": "int64",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "id",
    "name",
    "page"
  ],
  "type": "object"
}
Info
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Info.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "build_time": {
      "type": "string"
    },
    "commit": {
      "type": "string"
    },
    "version": {
      "type": "string"
    }
  },
  "required": [
    "version",
    "commit",
    "build_time"
  ],
  "type": "object"
}
Lesson
{
  "additionalProperties": false,
  "properties": {
    "answer": {
      "format": "int64",
      "type": "integer"
    },
    "body": {
      "maxLength": 20000,
      "type": "string"
    },
    "bodyFormat": {
      "enum": [
        "plain",
        "html"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "kind": {
      "enum": [
        "text",
        "quiz",
        "video"
      ],
      "type": "string"
    },
    "moduleId": {
      "type": "string"
    },
    "options": {
      "items": {
        "type": "string"
      },
      "maxItems": 4,
      "type": [
        "array",
        "null"
      ]
    },
    "title": {
      "maxLength": 160,
      "type": "string"
    },
    "video": {
      "$ref": "#/components/schemas/Video"
    }
  },
  "required": [
    "id",
    "title",
    "kind",
    "body"
  ],
  "type": "object"
}
LiveOutputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/LiveOutputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "status": {
      "description": "Process is alive",
      "enum": [
        "ok"
      ],
      "type": "string"
    }
  },
  "required": [
    "status"
  ],
  "type": "object"
}
Member
{
  "additionalProperties": false,
  "properties": {
    "bindings": {
      "items": {
        "$ref": "#/components/schemas/Binding"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "suspended": {
      "type": "boolean"
    },
    "version": {
      "format": "int64",
      "type": "integer"
    }
  },
  "required": [
    "id",
    "name",
    "suspended",
    "version",
    "bindings"
  ],
  "type": "object"
}
MembershipBody
{
  "additionalProperties": false,
  "properties": {
    "current": {
      "description": "True when this session is already bound here",
      "type": "boolean"
    },
    "name": {
      "description": "Organisation name",
      "type": "string"
    },
    "organisation_id": {
      "description": "Organisation the signed-in subject can enter",
      "type": "string"
    }
  },
  "required": [
    "organisation_id",
    "name",
    "current"
  ],
  "type": "object"
}
MembershipsOutputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/MembershipsOutputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "memberships": {
      "items": {
        "$ref": "#/components/schemas/MembershipBody"
      },
      "type": [
        "array",
        "null"
      ]
    }
  },
  "required": [
    "memberships"
  ],
  "type": "object"
}
Message
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Message.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "body": {
      "type": "string"
    },
    "channels": {
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "createdAt": {
      "type": "string"
    },
    "deliveries": {
      "items": {
        "$ref": "#/components/schemas/Delivery"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "id": {
      "type": "string"
    },
    "read": {
      "type": "boolean"
    },
    "recipientIds": {
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "revision": {
      "format": "int64",
      "type": "integer"
    },
    "sender": {
      "type": "string"
    },
    "senderId": {
      "type": "string"
    },
    "sentAt": {
      "type": "string"
    },
    "state": {
      "type": "string"
    },
    "subject": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "subject",
    "body",
    "sender",
    "senderId",
    "revision",
    "state",
    "createdAt",
    "sentAt",
    "read",
    "channels"
  ],
  "type": "object"
}
MessagePreferenceInputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/MessagePreferenceInputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "email": {
      "type": "boolean"
    }
  },
  "required": [
    "email"
  ],
  "type": "object"
}
MessageSendInputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/MessageSendInputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "revision": {
      "format": "int64",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "revision"
  ],
  "type": "object"
}
Module
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "summary": {
      "maxLength": 1200,
      "type": "string"
    },
    "title": {
      "maxLength": 160,
      "type": "string"
    }
  },
  "required": [
    "id",
    "title",
    "summary"
  ],
  "type": "object"
}
Page
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Page.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "canSend": {
      "type": "boolean"
    },
    "channels": {
      "items": {
        "$ref": "#/components/schemas/Channel"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "emailOptIn": {
      "type": "boolean"
    },
    "items": {
      "items": {
        "$ref": "#/components/schemas/Message"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "next": {
      "type": "string"
    }
  },
  "required": [
    "items",
    "next",
    "canSend",
    "channels",
    "emailOptIn"
  ],
  "type": "object"
}
People
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/People.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "canManage": {
      "type": "boolean"
    },
    "members": {
      "items": {
        "$ref": "#/components/schemas/Member"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "next": {
      "type": "string"
    },
    "selfId": {
      "type": "string"
    },
    "units": {
      "items": {
        "$ref": "#/components/schemas/Unit"
      },
      "type": [
        "array",
        "null"
      ]
    }
  },
  "required": [
    "members",
    "units",
    "next",
    "canManage",
    "selfId"
  ],
  "type": "object"
}
Person
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "unit": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "unit"
  ],
  "type": "object"
}
Playback
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Playback.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "captions": {
      "items": {
        "$ref": "#/components/schemas/Caption"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "expiresAt": {
      "type": "string"
    },
    "position": {
      "format": "double",
      "type": "number"
    },
    "url": {
      "type": "string"
    },
    "video": {
      "$ref": "#/components/schemas/Video"
    },
    "watchedSeconds": {
      "format": "double",
      "type": "number"
    }
  },
  "required": [
    "video",
    "position",
    "watchedSeconds"
  ],
  "type": "object"
}
Preference
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Preference.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "analytics": {
      "type": "boolean"
    },
    "marketing": {
      "type": "boolean"
    }
  },
  "required": [
    "analytics",
    "marketing"
  ],
  "type": "object"
}
ProfileDetails
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/ProfileDetails.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "address": {
      "maxLength": 1000,
      "type": "string"
    },
    "email": {
      "maxLength": 254,
      "type": "string"
    },
    "name": {
      "maxLength": 160,
      "minLength": 1,
      "type": "string"
    },
    "phone": {
      "maxLength": 60,
      "type": "string"
    }
  },
  "required": [
    "name",
    "email",
    "phone",
    "address"
  ],
  "type": "object"
}
ProfileOutputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/ProfileOutputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "address": {
      "description": "Postal address",
      "type": "string"
    },
    "email": {
      "description": "Contact email",
      "type": "string"
    },
    "name": {
      "description": "Display name",
      "type": "string"
    },
    "phone": {
      "description": "Telephone number",
      "type": "string"
    }
  },
  "required": [
    "name",
    "email",
    "phone",
    "address"
  ],
  "type": "object"
}
ReadyOutputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/ReadyOutputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "status": {
      "description": "Process may receive traffic",
      "enum": [
        "ready"
      ],
      "type": "string"
    }
  },
  "required": [
    "status"
  ],
  "type": "object"
}
Receipt
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "occurredAt": {
      "type": "string"
    },
    "page": {
      "type": "string"
    },
    "provider": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    },
    "state": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "page",
    "occurredAt",
    "provider",
    "state",
    "reason"
  ],
  "type": "object"
}
ReportCreateInputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/ReportCreateInputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "requestId": {
      "format": "uuid",
      "type": "string"
    }
  },
  "required": [
    "requestId"
  ],
  "type": "object"
}
ReportHistoryItem
{
  "additionalProperties": false,
  "properties": {
    "createdAt": {
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "state": {
      "enum": [
        "queued",
        "ready",
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "state",
    "createdAt"
  ],
  "type": "object"
}
ReportStatus
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/ReportStatus.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "state": {
      "enum": [
        "queued",
        "ready",
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "state"
  ],
  "type": "object"
}
Resource
{
  "additionalProperties": false,
  "properties": {
    "body": {
      "maxLength": 30000,
      "type": "string"
    },
    "bookmarked": {
      "type": "boolean"
    },
    "category": {
      "maxLength": 60,
      "type": "string"
    },
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "kind": {
      "enum": [
        "guide",
        "checklist",
        "template",
        "policy"
      ],
      "type": "string"
    },
    "revision": {
      "format": "int64",
      "minimum": 0,
      "type": "integer"
    },
    "summary": {
      "maxLength": 600,
      "type": "string"
    },
    "title": {
      "maxLength": 160,
      "type": "string"
    }
  },
  "required": [
    "id",
    "title",
    "summary",
    "category",
    "kind",
    "body",
    "revision",
    "bookmarked"
  ],
  "type": "object"
}
SSOAction
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/SSOAction.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "action": {
      "enum": [
        "check",
        "publish",
        "disable"
      ],
      "type": "string"
    },
    "revision": {
      "format": "int64",
      "type": "integer"
    }
  },
  "required": [
    "revision",
    "action"
  ],
  "type": "object"
}
SSOChange
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/SSOChange.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "config": {
      "$ref": "#/components/schemas/SSOConfig"
    },
    "domains": {
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "type": [
        "array",
        "null"
      ]
    },
    "revision": {
      "format": "int64",
      "type": "integer"
    }
  },
  "required": [
    "revision",
    "config"
  ],
  "type": "object"
}
SSOChoice
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "protocol": {
      "type": "string"
    },
    "signInUrl": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "protocol",
    "signInUrl"
  ],
  "type": "object"
}
SSOChoices
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/SSOChoices.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "company": {
      "type": "string"
    },
    "connections": {
      "items": {
        "$ref": "#/components/schemas/SSOChoice"
      },
      "type": [
        "array",
        "null"
      ]
    }
  },
  "required": [
    "company",
    "connections"
  ],
  "type": "object"
}
SSOConfig
{
  "additionalProperties": false,
  "properties": {
    "certificate": {
      "maxLength": 12000,
      "type": "string"
    },
    "clientId": {
      "maxLength": 254,
      "type": "string"
    },
    "clientSecret": {
      "maxLength": 4096,
      "type": "string"
    },
    "issuer": {
      "maxLength": 2048,
      "type": "string"
    },
    "jwksUrl": {
      "maxLength": 2048,
      "type": "string"
    },
    "name": {
      "maxLength": 100,
      "minLength": 1,
      "type": "string"
    },
    "protocol": {
      "enum": [
        "saml",
        "oidc"
      ],
      "type": "string"
    },
    "ssoUrl": {
      "maxLength": 2048,
      "type": "string"
    },
    "tokenUrl": {
      "maxLength": 2048,
      "type": "string"
    }
  },
  "required": [
    "protocol",
    "name",
    "issuer",
    "ssoUrl",
    "tokenUrl",
    "jwksUrl",
    "certificate",
    "clientId"
  ],
  "type": "object"
}
SSOConnections
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/SSOConnections.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "canManage": {
      "type": "boolean"
    },
    "connections": {
      "items": {
        "$ref": "#/components/schemas/SSOSummary"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "limit": {
      "format": "int64",
      "type": "integer"
    }
  },
  "required": [
    "connections",
    "canManage",
    "limit"
  ],
  "type": "object"
}
SSOSummary
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "lastSignIn": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "protocol": {
      "type": "string"
    },
    "revision": {
      "format": "int64",
      "type": "integer"
    },
    "status": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "protocol",
    "status",
    "revision",
    "lastSignIn"
  ],
  "type": "object"
}
SSOView
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/SSOView.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "callbackUrl": {
      "type": "string"
    },
    "canManage": {
      "type": "boolean"
    },
    "checkedRevision": {
      "format": "int64",
      "type": "integer"
    },
    "config": {
      "$ref": "#/components/schemas/SSOConfig"
    },
    "domains": {
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "type": [
        "array",
        "null"
      ]
    },
    "entityId": {
      "type": "string"
    },
    "hasSecret": {
      "type": "boolean"
    },
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "lastSignIn": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "publishedRevision": {
      "format": "int64",
      "type": "integer"
    },
    "revision": {
      "format": "int64",
      "type": "integer"
    },
    "signInUrl": {
      "type": "string"
    },
    "status": {
      "type": "string"
    }
  },
  "required": [
    "publishedRevision",
    "id",
    "domains",
    "canManage",
    "config",
    "hasSecret",
    "revision",
    "checkedRevision",
    "status",
    "message",
    "callbackUrl",
    "entityId",
    "signInUrl",
    "lastSignIn"
  ],
  "type": "object"
}
SessionOutputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/SessionOutputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "organisation_id": {
      "description": "Organisation bound to this session",
      "type": "string"
    },
    "user_id": {
      "description": "Local user bound to this session",
      "type": "string"
    }
  },
  "required": [
    "organisation_id",
    "user_id"
  ],
  "type": "object"
}
Settings
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/Settings.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "destinations": {
      "items": {
        "$ref": "#/components/schemas/Destination"
      },
      "maxItems": 4,
      "type": [
        "array",
        "null"
      ]
    },
    "revision": {
      "format": "int64",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "revision",
    "destinations"
  ],
  "type": "object"
}
State
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/State.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "accent": {
      "type": "string"
    },
    "canAdmin": {
      "type": "boolean"
    },
    "courses": {
      "items": {
        "$ref": "#/components/schemas/Course"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "drafts": {
      "items": {
        "$ref": "#/components/schemas/Course"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "enrolments": {
      "items": {
        "$ref": "#/components/schemas/Enrolment"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "limited": {
      "type": "boolean"
    },
    "logo": {
      "type": "string"
    },
    "organisation": {
      "type": "string"
    },
    "people": {
      "items": {
        "$ref": "#/components/schemas/Person"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "resources": {
      "items": {
        "$ref": "#/components/schemas/Resource"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "roles": {
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "savedCourseIds": {
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "supportEmail": {
      "type": "string"
    },
    "supportUrl": {
      "type": "string"
    },
    "timezone": {
      "type": "string"
    },
    "user": {
      "$ref": "#/components/schemas/Person"
    }
  },
  "required": [
    "resources",
    "savedCourseIds",
    "canAdmin",
    "logo",
    "accent",
    "supportEmail",
    "supportUrl",
    "timezone",
    "drafts",
    "limited",
    "organisation",
    "user",
    "roles",
    "courses",
    "people",
    "enrolments"
  ],
  "type": "object"
}
SwitchInputBody
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/SwitchInputBody.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "organisation_id": {
      "description": "Organisation to enter",
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "organisation_id"
  ],
  "type": "object"
}
Unit
{
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name"
  ],
  "type": "object"
}
Video
{
  "additionalProperties": false,
  "properties": {
    "captionsReviewed": {
      "type": "boolean"
    },
    "hash": {
      "maxLength": 64,
      "type": "string"
    },
    "id": {
      "maxLength": 32,
      "type": "string"
    },
    "provider": {
      "enum": [
        "youtube",
        "vimeo",
        "vimeo_api"
      ],
      "type": "string"
    }
  },
  "required": [
    "provider",
    "id",
    "captionsReviewed"
  ],
  "type": "object"
}
View
{
  "additionalProperties": false,
  "properties": {
    "$schema": {
      "description": "A URL to the JSON Schema for this object.",
      "examples": [
        "https://example.com/schemas/View.json"
      ],
      "format": "uri",
      "readOnly": true,
      "type": "string"
    },
    "canManage": {
      "type": "boolean"
    },
    "capabilities": {
      "items": {
        "$ref": "#/components/schemas/Capability"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "events": {
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "organisationId": {
      "type": "string"
    },
    "preferences": {
      "$ref": "#/components/schemas/Preference"
    },
    "settings": {
      "$ref": "#/components/schemas/Settings"
    },
    "vimeoApi": {
      "type": "boolean"
    }
  },
  "required": [
    "organisationId",
    "preferences",
    "settings",
    "capabilities",
    "canManage",
    "vimeoApi",
    "events"
  ],
  "type": "object"
}

Using the contract

Examples use relative URLs on your authorised LMS origin. There is no live request runner on this page. You can inspect the API without sending credentials or changing company data.

The reference is built directly from the committed Go-generated OpenAPI file. It documents registered HTTP operations, not every internal module or future integration. Runtime probes may be restricted by your installation’s proxy.

Documentation reviewed 3 November 2026 · Current implementation snapshot

Need account help? Contact your company administrator. Planning a rollout? Talk to us.