Enrollments: Overview
Introduction
A clear understanding of how enrollments work in your LMS is essential for delivering a seamless learner experience while minimizing administrative overhead.
An enrollment is the relationship between a learner and a piece of content - either a course or an individual module (e.g. lesson, quiz, survey, webinar, SCORM).
There are two core types of enrollment:
- Course enrollment: Links a learner to a specific course.
- Module enrollment: Links a learner to each module within that course.
Whenever a learner enrolls onto a course, the system automatically creates both a course enrollment and the required module enrollments for each module in the course’s curriculum at that point in time.
A learner can only ever have one enrollment record per course or module.
This simplifies progress tracking, prevents duplication, and ensures integrations behave predictably. If a user is unenrolled and later re-enrolled, the same enrollment record is reactivated rather than a new one being created.
Enrollment sources
Enrollments can be created in several ways, depending on your configuration:
- Self-enrollment via the course library or direct link
- Manual enrollment by an admin in the CMS
- Automated enrollment through cohort rules or triggers
- Integration enrollment via marketing sites, third-party systems, or API
No matter the source, the underlying structure and logic are the same.
Course enrollment
A course enrollment record is created whenever a user is enrolled onto a course through any supported channel:
- Learner self-enrollment (e.g. course library)
- Manual admin enrollment
- Integration with an external system (e.g. marketing site checkout)
- API or third-party enrollment
This record includes:
- A unique enrollment ID
- A reference to the User (learner)
- A reference to the Course
- A calculated progress value (0–100), based on the number of completed module enrollments out of the total assigned. E.g. If a user has completed 4 out of 20 modules, their course enrollment shows a calculated progress value of 20%.
- Method of enrollment
- Timestamps (enrolled, started, completed)
These references allow admins to easily traverse between User, Enrollment, and Course records in the CMS.
Module enrollment
When a user is enrolled onto a course, they are automatically enrolled onto all modules that are part of that course’s curriculum at that moment.
Each module enrollment record includes:
- A unique enrollment ID
- A reference to the User (learner)
- A reference to the Module
- Timestamps (enrolled, started, completed)
- A Completed value:
TRUEorFALSE. This binary status is used to calculate the course’s overall progress.
Adding modules after enrollment
If a learner is already enrolled on a course and you make changes to module content (e.g. update lesson text, upload a new video), those updates will automatically be reflected for the learner.
However, if you add a new module to the course curriculum after the learner is enrolled, they will not be automatically enrolled in the new module.
An admin must manually enroll them into it.
This ensures learners only see modules that existed in the curriculum when they enrolled, unless explicitly updated. E.g. If a user has already completed a course and received a certificate, we don't want that course to become incomplete if an admin adds a new module to the course.
Soft deletion
When a learner is unenrolled from a course or module, the enrollment is soft deleted.
- Soft deleted is a TRUE/FALSE field value, separate to the default Strapi Draft/Published state.
- This method ensures the enrollment record remains in the database without being fully deleted. If a user is re-enrolled, their previous progress would be kept.
- If re-enrollment is required, the existing enrollment record is restored.
Soft deletion is used consistently across the platform for course, module, and other enrollment-based records.
Summary of how enrollments work
| Action | Course enrollment | Module enrollments | Notes |
|---|---|---|---|
| Learner enrolls on a course | ✅ Created | ✅ Created for all current modules | Automatic |
| New module added to course after enrollment | ❌ Not updated | ❌ Not created | Must be added manually |
| Learner unenrolled | Soft deleted | Soft deleted | Record not fully removed |
| Content within a module updated | Unchanged | Unchanged | Learner sees updates automatically |