Skip to content

SCORM error codes explained (101, 201, 301, 401, 403, 405...)

Updated 19 October 2026

Quick answer

A SCORM error code is the LMS's reason for refusing one call from your course. Whatever that call tried to save is missing. Check the SCORM version first: several numbers mean different things in SCORM 1.2 and SCORM 2004.

Drop the zip into Alder (free, nothing is uploaded) and run the course in its test player: every refused call shows up in the log with its code and what it means.

First, which SCORM version is it?

Look at the call next to the code. SCORM 1.2 calls start with “LMS”: LMSInitialize, LMSSetValue, LMSFinish. SCORM 2004 calls don't: Initialize, SetValue, Terminate. Field names help too: cmi.core.lesson_status is SCORM 1.2, and cmi.completion_status is SCORM 2004.

The numbers that mean different things

These codes exist in both versions with different meanings. If you found an explanation online that doesn't fit, it was probably for the other version.

Same code, different meaning (names from the SCORM run-time reference)
CodeSCORM 1.2SCORM 2004
201Invalid argument errorGeneral Argument Error
301Not initializedGeneral Get Failure
401Not implemented errorUndefined Data Model Element
402Invalid set value, element is a keywordUnimplemented Data Model Element
403Element is read onlyData Model Element Value Not Initialized
404Element is write onlyData Model Element Is Read Only
405Incorrect Data TypeData Model Element Is Write Only

SCORM 1.2 error codes

SCORM 1.2: every code
CodeNameWhat it usually means
0No errorThe call worked.
101General ExceptionThe catch-all. Often a call in the wrong order, such as a second LMSInitialize.
201Invalid argument errorA field name or argument the LMS can’t use.
202Element cannot have childrenAsked for _children on a field without any.
203Element not an array. Cannot have count.Asked for _count on a field that isn’t a list.
301Not initializedA call came before LMSInitialize.
401Not implemented errorA valid field this LMS doesn’t support.
402Invalid set value, element is a keywordTried to set a _children or _count field.
403Element is read onlyTried to set a field only the LMS sets.
404Element is write onlyTried to read a field the course can only set.
405Incorrect Data TypeThe value has the wrong format, or is too long.

SCORM 2004 error codes

SCORM 2004 (2nd, 3rd and 4th edition): every code
CodeNameWhat it usually means
0No ErrorThe call worked.
101General ExceptionThe catch-all, when no other code fits.
102General Initialization FailureInitialize failed, reason unknown.
103Already InitializedInitialize was called a second time.
104Content Instance TerminatedInitialize was called after Terminate.
111General Termination FailureTerminate failed, reason unknown.
112Termination Before InitializationTerminate came before Initialize.
113Termination After TerminationTerminate was called a second time.
122Retrieve Data Before InitializationA read came before Initialize.
123Retrieve Data After TerminationA read came after Terminate.
132Store Data Before InitializationA save came before Initialize.
133Store Data After TerminationA save came after Terminate: it is lost.
142Commit Before InitializationCommit came before Initialize.
143Commit After TerminationCommit came after Terminate.
201General Argument ErrorUsually Initialize, Commit or Terminate without the empty "" argument.
301General Get FailureA read failed, no more specific code.
351General Set FailureA save failed, no more specific code.
391General Commit FailureCommit failed, no more specific code.
401Undefined Data Model ElementThe field name isn’t a SCORM 2004 field.
402Unimplemented Data Model ElementA valid field this LMS doesn’t support.
403Data Model Element Value Not InitializedRead a field that has no value yet.
404Data Model Element Is Read OnlyTried to set a field only the LMS sets.
405Data Model Element Is Write OnlyTried to read a field the course can only set.
406Data Model Element Type MismatchThe value has the wrong format.
407Data Model Element Value Out Of RangeA number outside the allowed range.
408Data Model Dependency Not EstablishedSet a field before the one it depends on.

Codes and names from Rustici's SCORM run-time reference; the right-hand column is our summary.

Calls in the wrong order (101, 301, 103 to 143)

A SCORM course opens a session with the LMS (Initialize), sends and reads data, and closes the session (Terminate, or LMSFinish in SCORM 1.2). Anything outside that window is refused. SCORM 2004 has a code for each case. SCORM 1.2 only has 301, for a call before LMSInitialize. For the other mistakes, the catch-all 101 is what's left: Alder's test LMS answers a second LMSInitialize with it.

Alder's call log for a SCORM 1.2 course: LMSInitialize returned true, then a second LMSInitialize returned false with error 101, General Exception, LMS was already initialized.
A second LMSInitialize, refused with 101 (Alder's SCORM 1.2 probe package).

SAP documents “LMSInitialize Error: General Exception” in SuccessFactors when a learner relaunches a course partway through an assessment or goes back a screen, and puts it down to the order of the course's calls (SAP KBA 2811320). Its advice is to send it back to whoever built the course.

  1. Look for custom code first

    Storyline, Rise and Captivate make these calls for you. A second Initialize, or a save after the session closed, usually comes from a web object, custom JavaScript or a hand-built page making its own calls.

  2. Republish, unchanged

    If there is no custom code, republish for an LMS and upload the zip exactly as the tool made it. Don't add or swap files inside it.

  3. Check the new zip in Alder

    Alder flags a course that starts its session more than once (RUNTIME-002) and one that sends data after it finished (RUNTIME-005).

    Alder's call log row for a SCORM 2004 course, after the session closed: the course told the LMS it is completed, and the LMS rejected it with error 133, Store Data After Termination.
    SCORM 2004 gives the same kind of mistake its own number: 133 for a save after Terminate.

The LMS refused a value (405 in 1.2; 406, 407, 351 in 2004)

The call was in the right place, but the LMS didn't accept the value. Find the field name next to the code; it tells you which case you have:

  • cmi.suspend_data, 405 in SCORM 1.2: the saved progress is too long. We tested this on SCORM Cloud: it refused every save over 4,096 characters with 405. See the suspend_data limit.
  • Question answers, 405 in SCORM 1.2: on SCORM Cloud, a Storyline quiz course's long-text answers were refused, then sent again as short letter codes, which were accepted. The answers were still recorded.
  • An id with spaces, 406 in SCORM 2004: SCORM Cloud refused a question objective id containing spaces in our test. That one save is lost.
  • cmi.score.scaled, 406 or 407: the scaled score must be a number from -1 to 1. Captivate users report 406 errors from a scaled score sent as “NaN” (not a number). See score not recording.
  • 351, General Set Failure: the LMS refused a save without a more specific reason. The LMS's detail text (GetDiagnostic, often shown in its debug log) says more.

Read-only and write-only fields (403, 404, 405)

Some fields are set only by the LMS: the learner's name, entry, credit, the mastery score and total_time. Trying to set one gives 403 in SCORM 1.2 (“Element is read only”) and 404 in SCORM 2004. For time, the course sets session_time and the LMS adds it to total_time.

Others can be set but never read back, such as exit and session_time. Reading one gives 404 in SCORM 1.2 and 405 in SCORM 2004. Both mistakes usually come from custom code.

403 in SCORM 2004: usually nothing to fix

In SCORM 2004, 403 means the course read a field that has no value yet. On a first launch that is normal: there is no saved progress or bookmark to read. We saw it on SCORM Cloud for values the course had never set, such as the scaled score, and Captivate users report the same for cmi.suspend_data and cmi.location. If a returning learner gets it for their saved progress, that progress wasn't saved last time: see resume not working.

Find the failing call before you upload (free)

  1. Run the course in Alder

    Open Alder, drop the zip and click “Launch the course”. Take the path where the error appears.

  2. Open the technical log

    A refused save is marked Problem and a refused read Worth a look, with the code, its name and the exact field and value. A harmless 2004 403 stays marked Normal.

  3. Press “I’m done”

    Refused saves become a finding (RUNTIME-011) under “What we found”.

    Alder's Worth checking card: the LMS refused some of what the course sent, so it wasn't recorded. SetValue error 133, Store Data After Termination. How to fix it: check the element name, the value format and the call order against the SCORM data model.
    RUNTIME-011 for the SCORM 2004 probe's save after Terminate.

Alder's test LMS is more lenient than SCORM Cloud in places: in our tests it accepted Storyline's long-text answers and 2004 ids with spaces. If your LMS refuses a call that Alder accepts, believe your LMS.

Why a course gets an error code

Each call a course makes returns a result, “true” or “false” for a save. After a failure the course can ask the LMS for the code (GetLastError), its name (GetErrorString) and more detail (GetDiagnostic). The pop-ups and log lines people paste, such as “LMSInitialize Error: General Exception”, are that code shown by the course or the LMS.

Still not working?