Caliper Real-time Events

Standardized Integration with Caliper

Caliper is a standard that enables the collection, storage, and transport of data about learning. As a learning analytics framework, Caliper provides a common-gauge rail for disparate applications to use and share data from student interactions with learning software and administrative systems.

We have chosen Caliper as one of the primary communication standards for real-time events since many universities and other educational organizations prefer to use tools that require Caliper compliant activity tracking events.

Caliper Learning Analytics Ecosystem

Since the Caliper standard is widely accepted by the educational organizations, we can use this to generate events that could be used by adaptive learning engines and thus provide a rich user experience.


Sensor API

Sensor API defines the basic learning events as well as standardizes and simplifies the gathering of learning metrics across the learning environments. These are used for marshaling and transmitting event data from instrumented applications to target endpoints for storage, analysis, and use.

There is a sensor API library for python that we can use in our routers for generating and propagating events. At present, the Sensor API can only Write/Post data to repository endpoints and does not support reading data from a data repository.


See Sensor API for more information.

The Information Model

Caliper specifications use an information model consisting of rules and relationships to define the learning activities. This model uses Metric Profile (“profile”) as the upper layer. A Metric Profile describes either a learning activity or an activity that facilitates learning e.g. grading.

While there are many profiles provided by caliper specifications, we are interested in the following:

  • Assessment Profile - for summative assessments

  • Assignable Profile - for formative assessments

  • Grading Profile - for scorable activities

  • Reading Profile - for text-based activities

  • Media Profile - for the audio, image, and video-based activities

The Caliper Event

A Caliper event is a generic type that describes the relationship between an actor and an object that was created due to an action undertaken by the actor.

A Caliper event essentially consists of the following: Actor, Action, and Object.


The Agent who initiated an Event, typically a Person. A Caliper agent is a generic type that represents an Entity. The actor value must be expressed either as an object or as a string corresponding to the actor’s IRI.

The Agent can have many fields like name, dateCreated, dateModified but to keep the payload size minimal we will only use id and type which are the required fields.

Id is a valid IRI string capable of returning a representation of the resource. Keeping the learner’s privacy in mind, we can send an Open edX anonymized unique identifier of the learner (Anonymized User ID).

Type specifies the type of the agent. It’s mostly “Person” but can also be “Organization” or “SoftwareApplication”. We can use the generic “Agent” if no suitable type is available.


      "id": "<anonymized-user-id>",
      "type": "Person",
      "dateCreated": "2018-08-01T06:00:00.000Z",
      "dateModified": "2018-09-02T11:30:00.000Z"


The action or predicate binds the actor or subject to the object. An action is basically a verb in the past tense e.g. “Graded”, “Viewed”, “NavigatedTo”. The action range is limited to the set of actions described in the specification and may be further constrained by the chosen event type. Only one action can be specified per event.


  • “NavigationEvent” supports “NavigatedTo” only.

  • “MediaEvent” supports a number of actions including “Started”, “Ended”, “Paused”, “Resumed”, “Restarted”, and “ForwardedTo”.


An object is an Entity that an Agent interacts with that becomes the focus, target, or object of interaction. The object value must be expressed either as an object or as a string corresponding to the object’s IRI. If the entity is expressed as an object, both the id and type properties must be specified.

Id value is a string that must be expressed as an IRI and should be capable of returning a representation of the resource assuming authorization to access the resource is granted.

Type value is the string representing the type of object upon which action has taken place by some actor. For a generic entity set the type value to the term “Entity”. If a subtype of entity is created, set the type to the Term corresponding to the subtype utilized, e.g. “Person”.

An extensions property is also defined so that implementers can add custom attributes not described by the model. We can use this to pass some extra information from edX events that are not required by the Caliper specified event field. Optional properties can be ignored when describing an entity.


"object": {
      "id": "block-v1:org+course+run+type@video+block@<video_id>",
      "type": "VideoObject",
      "dateCreated": "2018-11-15T10:15:00.000Z",
      "startedAtTime": "2018-11-15T10:15:00.000Z",
      "endedAtTime": "2018-11-15T10:55:12.000Z",
      "duration": "PT40M12S"


JSON-LD documents require inclusion of a context, denoted by the @context keyword, a property employed to map document terms to IRIs. Inclusion of a JSON-LD context provides an economical way for Caliper to communicate document semantics to services interested in consuming Caliper event data.

We can provide context in events in the following way:

      "@context": "",
      "id": "urn:uuid:3a648e68-f00d-4c08-aa59-8738e1884f2c",
      "type": "Event",

Open edX events

Currently, the Open edX system supports and maintains events that are sent to tracking logs, as described in Tracking Log Events.

Prioritized List of Events

For this first iteration, we will focus primarily on the following events:

Event Field Mapping

Please see the Open edX Caliper Events document for a detailed view of the mapping between the above Open edX events and their equivalent Open edX Caliper formats.