✦ Summary
For a video lesson, SCORM 1.2 is the safe default. Here is what each standard records, when 2004 or xAPI earns its setup, and how to test a package first.
SCORM 1.2 vs 2004 vs xAPI: the short answer for a video lesson
If you are weighing SCORM 1.2 vs 2004 vs xAPI for a training video, pick SCORM 1.2 unless you already know why you need something else. A video lesson reports one thing that matters to the LMS: did this person finish it. SCORM 1.2 records that, and almost every LMS reads it. SCORM 2004 adds structure a single video does not use. xAPI records much more, but it needs a Learning Record Store and more setup on your side.

This post is for the L&D person who has a finished video and an LMS admin asking "which format?". It covers what each standard records, which LMSs accept which, what a "percent watched" rule really measures, and how to test a package before it goes live.
The comparison at a glance
| SCORM 1.2 | SCORM 2004 | xAPI (and cmi5) | |
|---|---|---|---|
| Released | 2001 | 2004 to 2009 (four editions) | Now an IEEE standard (9274.1.1-2023) |
| Status it records | One field: passed, completed, failed, incomplete, browsed, not attempted | Two fields: completion (completed, incomplete) and success (passed, failed) | Any statement you define: "Priya watched Fire safety", "paused at 2:10" |
| Score | Raw, min, max | Raw, min, max, plus a scaled score | Any result you send |
| Progress | None built in | A progress measure from 0 to 1 | Any detail you send |
| Saved state for resume | 4,096 characters | 64,000 characters (4th edition) | Stored in the LRS |
| Where the data lives | The LMS | The LMS | A Learning Record Store (LRS), inside or outside the LMS |
| Works in most LMSs | Yes | Many, not all | Needs an LRS; cmi5 adds LMS launch rules |
| Right for one video | Yes | Works, adds nothing a video uses | Only if you need detail an LMS cannot hold |
What each standard records for a video
SCORM 1.2
SCORM 1.2 gives the lesson one status field, cmi.core.lesson_status, and a score. A video package sets the status to "incomplete" when the learner opens it and to "completed" when your rule is met. If the package carries a quiz, it sets a score and "passed" or "failed" instead. That is the whole story, and for a video it is enough: the LMS gets a yes or no per learner, with a date.
SCORM 2004
SCORM 2004 splits that one field in two. cmi.completion_status says whether the learner finished; cmi.success_status says whether they passed. It also adds a progress measure, a scaled score, and sequencing rules that can lock module 3 until module 2 is done. Those rules matter for a multi-part course built in an authoring tool. A single video has nothing to sequence.
xAPI and cmi5
xAPI records statements in the form actor, verb, object ("Priya completed Fire safety"). A video player can send one statement per play, pause, seek and finish, so you can see where people drop off. The statements go to a Learning Record Store, and they can come from places that are not an LMS at all: a mobile app, a kiosk, a simulator.
cmi5 is the piece that makes xAPI behave like a course inside an LMS. It defines how the LMS launches the content, authorizes it, and knows when it is done. If your LMS vendor says "we support xAPI", ask whether they mean cmi5 launch or just an LRS you can send data to.
Which LMSs accept which, and why 1.2 is the safe default
Support varies, so check your own LMS before you pick. Two examples, as of September 2026:
- Moodle. Its documentation says SCORM 1.2 is supported and passes ADL's 1.2 conformance tests. SCORM 2004 is not supported natively: some packages appear to work, but bugs against it are closed as "won't fix". xAPI needs third-party plugins.
- TalentLMS. Its help center lists SCORM 1.2, xAPI and cmi5 as the supported protocols for uploaded content.
SCORM 1.2 is the oldest version and the most widely supported. Rustici Software, who run the SCORM Cloud test service, still call it the version every e-learning vendor should be compatible with. For a video that needs a completion record, 1.2 gets you there with the fewest surprises.
What "80% watched" really measures
A percent rule sounds like a measure of attention. It is a measure of where the playhead is.
Here is what the player inside an Interlace SCORM 1.2 package does, read from its source:
- On launch it finds the LMS and sets the status to "incomplete".
- As the video plays, it checks the current time against the video length.
- When the playhead reaches your rule (play starts, 80%, or the end), it sets "completed" and commits.
- Reaching the end also marks it complete, whatever the rule.
So a learner who drags the playhead to 80% is complete. A learner who watched every second with the sound off is complete. Nobody's attention is measured, in any standard. What the rule gives you is a defensible record that the lesson was opened and played through to a point. If you need evidence of understanding, add a knowledge check that sets a score.
Pick the rule by what the video is for:
| Video type | Complete at | Why |
|---|---|---|
| Awareness or announcement | Play starts | You only need proof it reached them |
| Standard training | 80% watched | Allows for a skipped outro or credits |
| Compliance or safety | Fully watched, plus a quiz if you need a score | The strictest record a video player can give |
When you need SCORM 2004 or xAPI
Move off 1.2 when one of these is true, not before:
- Your LMS or its admin asks for it. Some organizations standardize on 2004 for all new content. Ask before you export.
- You are building a multi-part course with rules. Sequencing ("finish the video before the test opens") is a 2004 feature, usually set up in an authoring tool.
- You need data per viewing, not per learner. Drop-off points, rewatch counts, or activity outside the LMS are xAPI territory.
Each has a setup cost. 2004 packages need a player that tracks both statuses correctly, and testing across LMSs takes longer. xAPI needs an LRS, someone to define which statements matter, and reports built on top, because an LRS stores statements and does not decide what they mean. If nobody on your team will read drop-off data, you are paying for data you will not use.
How to export and test a SCORM 1.2 video
In Interlace, open the finished video, click Export, and choose SCORM 1.2 next to MP4 video. A Complete at row appears with Play starts, 80% watched and Fully watched. Under Render on, This device builds the package in your browser; Interlace servers builds it for you and saves it with the video. The download is a zip with the manifest, a small HTML player and the MP4. A package built on Interlace servers also carries the video's caption tracks as VTT files, so the player shows a CC button.

Our export tracks completion only. If you want a scored quiz after the video, the free SCORM packager takes an MP4 and up to ten questions, reports a score, and sets passed or failed against an 80% pass mark.
Then test before your LMS sees it:
- Run it in a simulator. The packager page can pretend to be an LMS: build a package, press Run in the simulator, play the video, and watch each SCORM call arrive with the current
lesson_status. - Run it in a test LMS. SCORM Cloud from Rustici Software is a hosted LMS made for this. Upload the zip, launch it, and check the status it records.
- Run it in your real LMS as a test learner. Launch, play to your rule, close, and read the completion report. For Moodle, the step-by-step guide to adding a video to Moodle with tracking covers the settings that decide whether completion shows up.
For compliance modules, keep the zip you uploaded and a note of the rule you chose. When an auditor asks what "completed" meant in March, that is your answer. The compliance training video generator page covers the rest of that workflow.
Pick 1.2, test it, then decide
Start with SCORM 1.2 and a completion rule that matches the video's job. Test the package in a simulator and as a real learner before rollout. Move to 2004 or xAPI only when your LMS or your reporting needs demand it. To try it on a video you already have, wrap an MP4 in a SCORM 1.2 package with the free packager and run it in the simulator.