LMS
Das LMS verwaltet Schulungen für Mitarbeitende und (mit dazu lizensierter Academy-Lizenz) für Endkunden. Inhalte sind hierarchisch: Kurs → Lektion → Lerneinheit / Quiz. Zusätzlich gibt es Bezahl-Funktionen über Vouchers und Charges.
Resources
| Resource | Pfad | Permission-Präfix | Sequenz |
|---|---|---|---|
| Kurse | /api/v1/courses | course | CRS- |
| Lektionen | /api/v1/lessons | lesson | LSN- |
| Lerneinheiten | /api/v1/learning_units | learning_unit | — |
| Quiz-Versuche | /api/v1/quiz_attempts | quiz_attempt | — |
| Anmeldungen | /api/v1/enrollments | enrollment | — |
| Fortschritt | /api/v1/student_progress | student_progress | — |
| Charges (Bezahlung) | /api/v1/course_charges | course_charge | — |
| Vouchers | /api/v1/course_vouchers | course_voucher | — |
| Cross-Tenant-Shares | /api/v1/course_shares | course_share | — |
Quiz-Fragen, Antworten und Materialien liegen als typisierte Felder
direkt am lesson bzw. learning_unit-Datensatz.
Schemas
Course
Schema for validating course entities in the Academy/LMS module
title
Course title
description
Course description
category
Course category
lessons
Array of lesson IDs
isPublished
Whether the course is published and visible to students
duration
Course duration in minutes
level
Course difficulty level
beginnerintermediateadvanced authorId
ID of the course author/instructor
maxEnrollments
Maximum number of students that can enroll
prerequisites
Array of prerequisite course IDs
certificateTemplateId
ID of the certificate template for completion
price
Course price (0 for free courses)
tags
Course tags for categorization and search
isSystemCourse
System-managed course that bypasses module licensing
targetAudience
Target audience for this course (e.g. technicians, sales, new employees)
gradingEnabled
Whether grading/gradebook is enabled for this course
passingScore
Minimum score percentage required to pass the course
certificateMode
How certificates are issued: auto on completion, manual by instructor, or none
automanualnone completionMode
How course completion is determined
all_unitspercentagemanual completionPercent
Percentage of units required for completion (if completionMode=percentage)
courseType
Course type for special handling (e.g. uvv_training links to fleet module)
generaluvv_trainingonboardingcompliance coverImageFileId
File ID of the course cover image
contentVersion
Monotonic content version. Bumped via `POST /courses/:id/publish-version` when the author releases a substantive content change so in-flight enrollees can see "course was updated since you started" prompts.
contentVersionPublishedAt
When the current contentVersion was published.
Keine Felder passen zum Filter.
Lesson
Schema for validating lesson entities in the Academy/LMS module
courseId
ID of the course this lesson belongs to
title
Lesson title
content
Lesson content in markdown format
order
Order of lesson in the course
duration
Lesson duration in minutes
videoUrl
URL of lesson video
type
Type of lesson content
videotextquizinteractive isPreview
Whether lesson can be accessed without enrollment
unitCount
Cached count of learning units in this section
completionMode
Whether units must be completed in order (sequential) or freely
sequentialfree isLocked
Whether this section is locked until the previous section is completed
requiredModule
Module ID required to view this lesson (for onboarding filtering)
Keine Felder passen zum Filter.
Learning-Unit
Schema for individual learning units within a course section
lessonId
ID of the parent lesson/section (Lektion)
courseId
ID of the parent course (denormalized)
title
Learning unit title
type
Type of learning unit content
videotextquizexamfile_uploadltih5p order
Position within the parent section
isPreview
Whether unit can be accessed without enrollment
isPublished
Whether the unit is visible to students
content
TipTap JSON content for text units
videoUrl
URL of the video
videoProvider
Video hosting provider
uploadyoutubevimeoexternal videoDurationSecs
Total video duration in seconds
questionPoolId
ID of the question pool to draw from
questionCount
Number of questions to draw randomly from pool
timeLimitSecs
Time limit in seconds (0 = no limit)
passingScore
Minimum score percentage to pass (0-100)
maxAttempts
Maximum number of attempts (null = unlimited)
shuffleQuestions
Whether to shuffle question order
shuffleOptions
Whether to shuffle answer options
showCorrectAfter
Whether to show correct answers after submission
isGraded
Whether this unit counts toward gradebook/certificate (default: true for exam, false for quiz)
isRequiredForCompletion
Whether this unit must be completed for course completion (default: true for exam, false for quiz)
embeddedQuestions
Inline quiz questions (alternative to question pool)
_id
question
type
multiple_choicemultiple_responsetrue_falsefill_blankdropdown_blankmatchingorderingshort_text points
explanation
mediaUrl
orderItems
difficulty
easymediumhard gradingRubric
aiPrompt
tags
gradingMethod
How to calculate final grade from multiple attempts (default: highest)
highestaveragefirstlast availableFrom
Quiz opens at this time (ISO 8601)
availableUntil
Quiz closes at this time (ISO 8601)
lateSubmissionPolicy
What happens if submitted after availableUntil (default: none)
noneallow_with_penalty lateSubmissionPenalty
Percentage deducted for late submission (e.g., 20 = -20%)
reviewOptions
Granular review options per time window. Overrides showCorrectAfter when set.
immediatelyAfter
afterClose
attemptCooldownMins
Minimum minutes to wait between attempts
attemptPenaltyPercent
Percentage deducted per subsequent attempt (e.g., 10 = attempt 2 loses 10%, attempt 3 loses 20%)
uploadInstructions
Instructions for file upload assignment
allowedFileTypes
Allowed MIME types for uploads
maxFileSizeMb
Maximum file size in MB
ltiToolId
ID of the registered LTI tool (lti_tools collection)
ltiCustomParams
Custom parameters for this unit (merged with tool-level defaults)
ltiOpenInNewTab
Open the tool in a new tab instead of an inline iframe
ltiPassingScore
Minimum AGS score (0–100) required to auto-complete this unit
h5pFileId
ID of the uploaded .h5p file in files collection
h5pContentPath
URL path to the extracted H5P content (set by worker after extraction)
h5pPassingScore
Minimum xAPI score (0–100) required to auto-complete this unit
requirements
Completion requirements for this unit
minScore
videoMinPercent
textMinTimeSecs
textScrollPercent
fileUploadRequired
manualApprovalRequired
aiReviewEnabled
Whether AI review is enabled for file upload submissions
aiReviewPrompt
Custom AI prompt for reviewing file submissions
aiReviewRubric
Grading rubric for AI review of file submissions
Keine Felder passen zum Filter.
Quiz-Attempt
Schema for a student quiz or exam attempt
learningUnitId
ID of the quiz/exam learning unit
courseId
ID of the parent course (denormalized)
lessonId
ID of the parent lesson/section (denormalized)
enrollmentId
ID of the student enrollment
userId
ID of the student
attemptNumber
Sequential attempt number for this student and unit
status
Current state of the attempt
in_progresssubmittedgradedpending_ai_reviewtimed_out startedAt
When the attempt was started
submittedAt
When the attempt was submitted
timeLimitSecs
Time limit snapshot from unit at start of attempt
score
Raw score as percentage (0-100) after grading
adjustedScore
Score after applying attempt penalty and/or late submission penalty
isPassed
Whether the attempt meets the passing score threshold
gradingMethod
Snapshot from unit: how to calculate final grade from multiple attempts
highestaveragefirstlast reviewOptions
Snapshot of review options from unit at start of attempt
attemptPenaltyPercent
Snapshot from unit: percentage deducted per subsequent attempt
lateSubmission
Whether this attempt was submitted after availableUntil
lateSubmissionPenalty
Late submission penalty applied (percentage)
showCorrectAfter
Snapshot from unit: whether to show correct answers after submission
answers
Student answers for each question
questionId
questionSnapshot
Full question text and options at time of attempt
isCorrect
pointsAwarded
gradedManually
instructorNote
pendingAiGrading
aiFeedback
aiPointsAwarded
aiConfidence
aiGradedAt
Keine Felder passen zum Filter.
Enrollment
Schema for validating student enrollment entities in the Academy/LMS module
courseId
ID of the course the student is enrolled in
userId
ID of the enrolled student
status
Current enrollment status. pending_payment is set for Stripe-direct charges before the PaymentIntent succeeds (ADR 0066b Phase 3).
activecompleteddroppedsuspendedpending_payment enrolledAt
Date and time when the student enrolled
completedAt
Date and time when the course was completed
progress
Course completion progress as percentage
lastAccessedAt
Last time the student accessed the course
certificateIssued
Whether a certificate has been issued for completion
certificateIssuedAt
Date and time when the certificate was issued
gradebookEntryId
ID of the associated gradebook entry
currentLessonId
ID of the last lesson/section the student visited
currentUnitId
ID of the last learning unit the student visited
consumerTenantId
Tenant the learner belongs to, when different from the course owner. Null for MSP-internal enrollments.
pricingSnapshot
Frozen pricing at enrollment time (set on cross-tenant enrollments).
enrolledCourseVersion
Course.contentVersion at the moment of enrollment. The frontend compares with the current course version and warns the learner if the course was updated mid-flight.
Keine Felder passen zum Filter.
Progress
Schema for validating student progress tracking in the Academy/LMS module
enrollmentId
ID of the enrollment record
lessonId
ID of the lesson
userId
ID of the student
courseId
ID of the course
status
Current lesson progress status
not_startedin_progresscompleted progress
Lesson completion progress as percentage
timeSpent
Time spent on this lesson in minutes
startedAt
Date and time when the lesson was started
completedAt
Date and time when the lesson was completed
quizScore
Quiz score for quiz-type lessons (percentage)
attempts
Number of attempts made on this lesson
Keine Felder passen zum Filter.
Charge
Billing record for one cross-tenant enrollment in a paid shared course
enrollmentId
courseId
consumerTenantId
Customer-tenant the learner belongs to (the bill recipient).
consumerUserId
User in the customer-tenant who triggered the enrollment.
grossAmountCents
Gross charge in EUR cents (or `currency` cents) — what the customer owes.
netAmountCents
Net of VAT.
taxAmountCents
VAT amount.
taxRatePercent
currency
mspNetAmountCents
What the MSP keeps after Codemeta platform fee.
codemetaPlatformFeeCents
Codemeta platform fee deducted from the charge.
codemetaPlatformFeePercent
Percentage of gross taken as platform fee at charge creation time.
status
pendinginvoicedpaidrefundedfailed billingMode
wholesale: aggregated into customer wholesale invoice. direct_stripe: paid in real-time via Stripe Connect.
wholesaledirect_stripe occurredAt
When the charge became applicable (= enrollment creation time).
invoicedAt
invoiceId
Wholesale invoice the charge has been bundled into.
paidAt
refundedAt
refundReason
stripePaymentIntentId
stripeChargeId
stripeRefundId
stripeAccountId
MSP Stripe Connect account that received the destination charge.
notes
Keine Felder passen zum Filter.
Voucher
Single-use or limited-use voucher granting course access (ADR 0066b Phase 4)
code
Voucher code (uppercased ASCII alnum + dash/underscore).
consumerTenantId
discountMode
freefixed_off_centspercent_off discountValue
For fixed_off_cents: cents to subtract. For percent_off: 0..100. Ignored for free.
maxRedemptions
Total times the code may be redeemed across all users.
redemptions
redeemedBy
validFrom
validUntil
status
activedepletedexpiredrevoked notes
Keine Felder passen zum Filter.
Custom-Endpoints (/api/v1/lms-player/...)
Der Lerner-Player bündelt eine Sicht zum Durchgehen eines Kurses:
| Operation | Hinweis |
|---|---|
GET /api/v1/lms-player/courses/<courseId>/state | Aktueller Stand des Lernenden |
POST /api/v1/lms-player/lessons/<id>/complete | Lektion abgeschlossen markieren |
POST /api/v1/lms-player/quizzes/<id>/submit | Quiz-Antworten einreichen, Ergebnis |
GET /api/v1/lms-player/certificates/<courseId> | Zertifikat (PDF) holen |
Cross-Tenant-Sharing
Analog zur KB-Cross-Tenant-Funktion gibt es course_shares. MSPs teilen
Kurse mit Customer-Tenants. Customer-Tenants brauchen eine eigene
Academy-Lizenz, um geteilte Kurse zu sehen.
Verwandt
- Konventionen
- HR & Payroll — Pflicht-Schulungen, Zertifikatsnachweise
- Wissensdatenbank — Kurse können auf KB-Artikel verweisen