Skip to Content

Sending xAPI statements to your LRS

Beedeez can send xAPI statements to a Learning Record Store. The scope is narrow: this channel completes the launch of your content from your LMS, and it is not a standalone analytics feed. This article explains where the connection is configured, what Beedeez sends, when it sends it, and what never leaves the platform.

On this page

Sending xAPI statements to your LRS

Beedeez can send xAPI statements to a Learning Record Store. The scope is narrow: this channel completes the launch of your content from your LMS, and it is not a standalone analytics feed. This article explains where the connection is configured, what Beedeez sends, when it sends it, and what never leaves the platform.

⚠️ Prerequisites: an LRS that is reachable and accepts statements at a URL protected by a login and a secret, and launch from your LMS already in place. Without that second condition, no learner is eligible and a correctly filled LRS block receives nothing.

Where the connection is configured

Open Integrations > LMS and go to the LRS block. It contains three fields and one option:

  • URL: the address of your LRS.
  • Login: the access identifier.
  • Secret: the matching secret.
  • X API only: an option saved in your configuration.

Sending is enabled as soon as URL and Login are filled. The Secret is not checked before the call is made: if it is missing or wrong, your LRS rejects the statement and Beedeez displays no message.

The X API only option does not change what the platform sends to your LRS. The two conditions described below apply whether it is enabled or not.

What makes a statement leave

Two conditions must be met at the same time.

  1. The content carries an external identifier. This is the case for a capsule that came in through an LMS or an external source, and never for a capsule created inside Beedeez.
  2. The learner holds an account attached to your LMS, meaning an account created or matched during an LMS launch.

A capsule created in Beedeez, or a learner who never came through your LMS, produces nothing, whatever LRS you have configured. Check these two points first when an LRS stays empty.

What Beedeez sends

Statements are built from the learner’s activity on the capsule and are sent when that activity is recorded, including after an offline session is synchronised.

  • The first time a capsule is synchronised for a learner, Beedeez sends a statement with the verb http://adlnet.gov/expapi/verbs/launched, timestamped with the start of the activity.
  • Each time the learner’s activity on that capsule is recorded again, Beedeez sends a statement with the verb http://adlnet.gov/expapi/verbs/terminated, timestamped with the learner’s last activity.

Both statements share the same structure:

  • Actor: an Agent whose account.name carries the learner identifier known to your LMS, and whose name is the learner’s alias.
  • Object: an Activity whose id is https://www.beedeez.com/adl/activities/ followed by the external identifier of the capsule, attached to a parent activity of type course built from the external course identifier.
  • Result, on the terminated statement only: the raw score, the same score scaled between 0 and 1, its minimum, its maximum, success, completion, and the accumulated duration in ISO 8601 format.

Two points to take into account when you build your reports:

⚠️ The cmi5 progress extension is always 100. It carries the same value in every statement and does not describe real progress. Do not base any analysis on it.

⚠️ The actor home page is identical everywhere. Every statement carries the same account.homePage value, which is not derived from your configuration and is the same across all Beedeez accounts. Identify learners on account.name, never on the home page.

Because a terminated statement is sent each time the activity is recorded, your LRS receives several statements for the same learner and the same capsule. Deduplicate on the actor, the activity and the timestamp, or keep the most recent statement.

What is not sent

  • Only two verbs leave: launched and terminated. No initialized, no interacted, no answered.
  • No fine-grained statement. Nothing per notion, per quiz question or per card.
  • Nothing outside capsules. Only a capsule carrying an external identifier produces statements.
  • No replay. The call is direct, with no queue and no dedicated retry. If your LRS is unavailable, the statements sent during that period are lost, and the failure appears only in the server logs.
  • No control screen. Beedeez offers no counter, no history and no connection test for the LRS.

Checking that it works

  1. Have a capsule that carries an external identifier played by a learner account that came in through your LMS, and go through to the end.
  2. Look for the statement in your LRS, not in Beedeez.
  3. Check the actor first. An LRS accepts a malformed actor without raising an error, which makes the data unusable later on.

How the LRS sits next to SCORM and LMS launch

These options do not compete with each other. SCORM and LMS launch determine how the content is played and how the learner arrives. The LRS records, in addition, what your LMS already receives. You therefore cannot use the LRS on its own.

Going further


Discutez avec nous