Admin Guidescmi5 Content

cmi5 Content

Who this guide is for: Tenant administrators who upload and manage cmi5 (xAPI) course packages in EmbayLMS.

cmi5 is the modern xAPI-based packaging standard. Unlike SCORM (which runs entirely in the browser), a cmi5 package’s Assignable Units (AUs) report progress as xAPI statements to a Learning Record Store (LRS). EmbayLMS includes a built-in LRS, so cmi5 packages work out of the box — no external LRS to configure.


Uploading a cmi5 package

  1. Open Courses, pick a course, and open the Modules tab.
  2. Click + Add module, give it a title and choose the type cmi5 Package (xAPI).
  3. Upload the package .zip with the module’s Upload button. EmbayLMS checks that the zip is a cmi5 package — a cmi5.xml course structure at the root that declares at least one AU — parses the AUs, and stores them.
  4. Publish the course version.

If the package is not a cmi5 package

The upload is refused before anything is stored and the module says why, so you can fix the export rather than discover the problem when a learner launches it:

MessageWhat it means
This is not a cmi5 package: no cmi5.xml course structure was found at the root of the zip.You uploaded a SCORM, xAPI-only or plain-content zip. Re-export from your authoring tool as cmi5 — or, if the file really is SCORM, change the module type to SCORM Package.
The cmi5.xml in this package could not be read, or it declares no assignable unit (AU).The course structure is present but malformed or empty. Open it in a text editor: it needs a <course> and at least one <au> with a <url>.

A refused upload leaves nothing behind — no asset, no file — so you can simply upload again.

A cmi5 zip uploaded to a SCORM Package module still works: the module is reclassified as cmi5 on upload. Choosing the right type up front is what gives you the checks above.

The package is virus-scanned and its files are served from the same content pipeline as SCORM.

What a cmi5 package contains

PartMeaning
cmi5.xmlThe course structure: the course and its list of AUs
AUAn Assignable Unit — a launchable lesson with its own launch URL and completion rule (moveOn)
moveOnWhen the AU counts as satisfied: Completed, Passed, CompletedOrPassed, CompletedAndPassed, or NotApplicable

How learners take it

  1. On the course player, the learner opens the cmi5 module. EmbayLMS prepares the launch (registration, launch data, a signed session token) and opens the AU in a frame.
  2. The AU tracks the learner and reports xAPI statements (initialized, completed, passed, …) back to the built-in LRS.
  3. Multi-AU packages show a unit picker; a green check marks each satisfied unit.
  4. When the learner exits a unit (the AU’s own Exit button), the frame shows a short This unit is closed — your progress is saved notice. The learner picks another unit or moves on. The AU never reloads the course player inside its frame.
  5. The module completes when every AU meets its moveOn rule. For a single-AU course that’s immediate on completion; for a multi-course package the learner must finish all units (including, e.g., a final quiz that requires both completed and passed).

Completion flows into course progress and certificates exactly like any other module.


Configuration reference

ItemWhereNotes
Module typeCourse editor → ModulesSet to cmi5
PackageUpload on the module.zip containing cmi5.xml
CMI5_TOKEN_SECRETPlatform env (optional)Signs AU session tokens; falls back to NEXTAUTH_SECRET

There is no external LRS to set up — the LRS endpoints (/api/v1/cmi5/…) are built in and authenticate each AU with a per-session token.


Troubleshooting

SymptomCause / fix
Upload refused: not a cmi5 package / could not be readSee If the package is not a cmi5 package above. The check runs on upload; nothing was stored.
Module won’t launch after an older uploadPackages uploaded before 2026-09-10 were not checked on upload. Re-upload the package: the check now runs and tells you what is wrong.
The type picker has no cmi5 Package (xAPI) entryYour session predates the update — sign out and back in.
Learner finishes a unit but the module isn’t completeMulti-AU packages complete only when every unit is satisfied. Check the unit picker for any without a green check — a quiz unit set to CompletedAndPassed needs both a completed and a passed.
The sidebar check appears a few seconds after the learner exits the last unitExpected. Completion is decided on the server from the AU’s statements; the player re-checks as soon as a unit exits (and every 30 seconds while the tab is open), then updates without a reload.
Progress isn’t recordingConfirm the learner is actively enrolled and launched from the course player (the AU needs the session the player provides).
”Unauthorized” in the AUThe session token expired (12h) — reopen the module to get a fresh launch.

Standards note

EmbayLMS supports SCORM 1.1, SCORM 1.2, SCORM 2004, cmi5, and AICC (HACP). See the AICC Content guide for AICC packages.