In the MyLK platform we need to decide how to store data gathered from the different platforms providing learning content that we are tracking.

Because we had to be compliant with LMS as providers of “formal” content, we chose to use xAPI who is able to store many more data than SCORM.
So each time we are in dialog with an LMS we communicate using xAPI, which means that the platform should be able to send xAPI data to MyLK. When we track a provider of “unformal” content hosted on a platform that is not an LMS (as YouTube or Wikipedia) the plugin installed by MyLK will also use xAPI to store data in the MyLK platform. That means that we only store xAPI data in MyLK in terms of learning activity tracking whatever the platform is.

TinCanAPI / xAPI is a technical specification that aims at facilitating the documentation and communication of learning experiences. It allows us to communicate statement objects to a LRS (Learning Record Store). The exchange format is JSON. Using xAPI  implies that Mylk will need a LRS. The xAPI data model is the “Statement” object : the principals properties of the Statement object are : “Actor”, “Verb”, “Object”, “Result”, and “Context”.

The Experience API (xAPI), also known as the Tin Can API, is an e-learning software specification that allows learning content and learning systems to speak to each other in a manner that records and tracks all types of learning experiences. Learning experiences are recorded in a Learning Record Store (LRS).

The exchange format is JSON. The xAPI data model is the “Statement” object : the principals properties of the Statement object are : “Actor”, “Verb”, “Object”, “Result”, and “Context”.



A data structure showing evidence for any sort of experience or event which is to be tracked in xAPI as a Learning Record. A set of several Statements, each representing an event in time, may be used to track complete details about a learning experience. Requirements :

  • Statement and other object SHOULD NOT include properties with a value of an empty object.
  • Statement MUST use each property no more than one time
  • If Object is an Activity:
  • A Statement MUST use “actor”, “verb”, and “object”. The others properties are optional.
  • A Statement MAY use its properties in any order.

Statements are information about a tracked learning experience. Typically, the information represented in the Statement has already happened. Statements are expected to be permanent. The only way to undo a Statement within this specification is to void it. Voiding does not destroy a Statement, rather indicates the evidence in the Statement is to be disregarded.



The Actor defines who performed the action. The Actor of a Statement can be an Agent or a Group.

  • If Agent (persona or system):
    • An Agent MUST be identified by one of the four types of Inverse Functional Identifiers (mbox/mbox_sha1sum/openid/account – A user account on an existing system e.g. an LMS or intranet-)
    • An Agent MUST NOT include more than one Inverse Functional Identifier;
    • An Agent SHOULD NOT use Inverse Functional Identifiers that are also used as a Group identifier.


Property Type Description Required
Object Type string Agent. This property is optional except when the Agent is used as a Statement’s object. Optional
Name string Full name of the Agent. Optional
IFI mbox or mbox_sha1sum or openid or account Required


  • If Group:


Property Type Description Required
Object Type string Agent. This property is optional except when the Agent is used. Optional
Name string Name of the group Optional
Member Array of Agent Objects The members of this Group. This is an unordered list. Required
IFI Required if not anonymous group



The Verb defines the action between an Actor and an Activity. The xAPI does not specify any particular Verbs except for “voided”


Property Type Description Required
id IRI Corresponds to a Verb definition. Each Verb definition corresponds to the meaning of a Verb, not the word. Required
display Language Map The human readable representation of the Verb in one or more languages Optional



The Object defines the thing that was acted on. The Object of a Statement can be an Activity (“Jeff wrote an essay about hiking.”), Agent/Group (“Nellie interviewed Jeff”) , SubStatement, or Statement Reference (“Nellie commented on ‘Jeff wrote an essay about hiking.”).


Property Type Description Required
Object Type string MUST be Activity when present Optional
id IRI An identifier for a single unique Activity Required
definition Object Object with Name, description, type (IRI), interaction (object),extensions (object) Optional


  • If Object is an Agent/Group:

Statements that specify an Agent or Group as an Object MUST specify an “objectType” property.

  • If Object is a Statement:

There are two possibilities for using a Statement as an Object. First, an Object can take on the form of a Statement that already exists by using a Statement Reference. A common use case for Statement References is grading or commenting on an experience that could be tracked as an independent event. The special case of voiding a Statement would also use a Statement Reference. Second, an Object can be a brand new Statement by using a SubStatement.

  • Statement references : is a pointer to another pre-existing Statement


Property Type Description Required
Object Type string In this case, MUST be StatementRef. Required
id UUID The UUID of a Statement. Required


  • Substatement reference: One interesting use of SubStatements is in creating Statements of intention. For example, using SubStatements we can create Statements of the form ” ( )” to indicate that we’ve planned to take some action. A SubStatement MUST specify an “objectType” property with the value SubStatement. He MUST be validated as a Statement in addition to other SubStatement requirements (MUST NOT have the “id”, “stored”, “version” or “authority” properties and MUST NOT contain a SubStatement of its own).

Other properties

  • Result

An optional property that represents a measured outcome related to the Statement in which it is included.


Property Type Description Required
Score Object Outcome of a graded Activity achieved by an Agent. Must be scaled (Decimal number between -1 and 1, inclusive), may have a raw, max and min Optional
Success Boolean Indicates whether or not the attempt on the Activity was successful. Optional
Completion Boolean Indicates whether or not the Activity was completed. Optional
Response String A response appropriately formatted for the given Activity. Optional
Duration Duration Period of time over which the Statement occurred. MUST be expressed using the format for Duration in ISO 8601:2004 Optional
Extensions Object A map of other properties as needed. Optional


  • Context

Context that gives the Statement more meaning. Examples: a team the Actor is working with, altitude at which a scenario was attempted in a flight simulator.

  • Timestamp

Timestamp of when the events described within this Statement occurred. Set by the LRS if not provided. The “timestamp” property is of type Timestamp. It is formatted according to the normal format of ISO 8601 and corresponds to the time of when the events described within this Statement occurred. If it is not included in the Statement when it is submitted to the LRS, the LRS populates it with the same value it would use with Stored.

  • Authority

Agent or Group who is asserting this Statement is true. Verified by the LRS based on authentication. Set by LRS if not provided or if a strong trust relationship between the Learning Record Provider and LRS has not been established.


To stay compatible with industry standards we are going to store all these data into an LRS (Learning Record Store). This will be the subject of a forthcoming article.