No error
1.2 and 2004The last call succeeded.
in practice Nothing is wrong. Worth knowing because some debugging output prints it constantly and it looks alarming.
The runtime hands the course a number and nothing else. Every code is here for both SCORM 1.2 and 2004, with what it means and, more usefully, what a developer actually did to provoke it. The same number means different things in the two versions, which is where 301 catches people.
Free · No account · Your files never upload
The last call succeeded.
in practice Nothing is wrong. Worth knowing because some debugging output prints it constantly and it looks alarming.
Something failed and the runtime will not say what.
in practice Almost always the API could not be found, or the session ended underneath the course. Check the course is launched by the LMS rather than opened directly, and that it is not inside a second frame the API search cannot climb out of.
Initialize failed for a reason the runtime will not name.
in practice Usually the LMS session had already expired, or the learner opened the same course twice and the second window took the session.
Initialize was called when the session was already open.
in practice The course called Initialize twice, often because a second copy of the runtime script loaded on a later page.
The session was already closed.
in practice Something called Terminate early, and later code carried on as though the session were open.
Terminate failed.
in practice Commonly the browser was closing and the request never completed. This is why a final Commit before Terminate matters.
Terminate was called before Initialize.
in practice An exit trigger fired on a page that loaded before the runtime did.
Terminate was called twice.
in practice Both an exit button and the browser unload handler called it.
GetValue was called before the session opened.
in practice A script read the learner name at page load, before the runtime had connected.
GetValue was called after the session closed.
in practice Code running after exit, often a timer that was never cleared.
SetValue was called before the session opened.
in practice The same as 122, from the writing side.
SetValue was called after the session closed.
in practice A save that fired during unload, after Terminate had already run. The data is lost.
Commit was called before the session opened.
in practice An autosave timer started before the runtime connected.
Commit was called after the session closed.
in practice An autosave timer that was not stopped on exit.
The value or element name was not acceptable.
in practice In 1.2 this covers a great deal. Usually a data model element that does not exist, or a value in the wrong format, such as a time that is not HHHH:MM:SS.SS.
An argument was not acceptable.
in practice Often an empty string passed where the specification requires a value.
You asked for the children of something that has none.
in practice Reading _children on an element that is not a collection.
You asked for the count of something that is not a list.
in practice Reading _count on a plain element.
The session was never opened.
in practice LMSInitialize was not called, or it failed and the course carried on regardless. The commonest error in 1.2 by a distance.
GetValue failed for an unnamed reason.
in practice Usually a network problem between the course and the LMS.
SetValue failed for an unnamed reason.
in practice Frequently the value was too long for the LMS to store. Check suspend data length first.
Commit failed for an unnamed reason.
in practice The save request did not reach the server. Data since the last successful commit is gone.
The LMS does not support that element.
in practice Optional parts of the 1.2 data model that many systems never implemented, such as the interactions collection.
That element does not exist in the data model.
in practice Nearly always a typo, or a 1.2 element name used against a 2004 runtime. cmi.core.score.raw is 1.2; cmi.score.raw is 2004.
You tried to write to a keyword.
in practice Setting _children or _count, which are read-only by definition.
The LMS knows the element and does not support it.
in practice Common with the more optional parts of the 2004 model.
That element cannot be written to.
in practice Writing to cmi.core.student_name or cmi.core.student_id, which the LMS supplies.
The value was read before anything set it.
in practice Reading a score or a location on the very first attempt.
That element cannot be read.
in practice Reading cmi.core.exit or cmi.core.session_time, which are write-only.
That element cannot be written to.
in practice Writing cmi.learner_name or cmi.learner_id.
The value was the wrong shape.
in practice A score sent as text, a status set to something outside the allowed vocabulary, or a time not in the required format.
That element cannot be read.
in practice Reading cmi.exit or cmi.session_time.
The value was the wrong type.
in practice A number sent where the model wants a vocabulary token, or the reverse.
The value is outside what the element allows.
in practice A scaled score outside minus one to one. That range catches people: cmi.score.scaled is not a percentage.
Something else has to be set first.
in practice Setting an interaction's result before its type, or a score before the score range.
The same number means different things in the two versions of SCORM, and 301 is the one that catches people: in 1.2 it means the session was never initialized, and in 2004 it means a read failed. Check which version your package declares before acting on a code.
Every SCORM runtime error code, for both 1.2 and 2004, with what it means and what usually causes it. Search by number or by a few words.
The specification tells you what the runtime objected to. It does not tell you what a developer actually did to provoke it, which is nearly always one of two or three things. A 101 is almost always the API not being found, which is almost always a course opened directly rather than launched by the LMS, or one buried in a frame the API search cannot climb out of. That is the sentence you need, and it is not in the standard.
The same number means different things in the two versions. In SCORM 1.2, 301 means the session was never initialized, which is the commonest error in 1.2 by a distance. In SCORM 2004, 301 means a read failed. Acting on the wrong reading sends you looking in entirely the wrong place, so check which version your package declares first.
It covers the runtime codes defined by the standard. If a number came from your LMS itself, about an import or a playback problem, it will not be here: platforms have their own codes for those and they are not part of SCORM.