Presence checks
At random moments the course asks for a small proof: a drawn code, a sum, a question on the content, a tap on the right shape. The server sets the deadline: asking late doesn't buy more time.
xAPI LRS · training with legal value
Learning doesn't trust the browser. It records every event in a tamper-evident hash chain, recomputes time and coverage with its own clock and checks that a real person is on the other side. So the certificate stands up to an inspector.
The browser only sends raw events: page opened, video playing, tab in the foreground. The server recomputes time, coverage and outcomes with its own clock, and records the reason behind every verdict. A tampered client can lie, but it can't convince the server.
Every feature answers the same question: if someone challenges a certificate tomorrow, what evidence do we have?
At random moments the course asks for a small proof: a drawn code, a sum, a question on the content, a tap on the right shape. The server sets the deadline: asking late doesn't buy more time.
Coverage is the union of the parts watched at an allowed speed, with a position consistent with elapsed time. Skipping ahead and fast playback don't count.
Every event carries the fingerprint of the previous one. Tables are append-only and the integrity check re-verifies links, course definition and verdicts. Try it: change an event.
Every day the chain heads become a Merkle tree and its root gets an RFC 3161 timestamp from a third-party authority. Rewriting history is no longer enough: the root lives outside Learning.
One address per organisation and data separated at every layer, from the token to the database. An organisation never sees another one's data.
Your server requests a single-use ticket with a signed API key; the user gets in with one click, without another password.
Minimum time per page, video coverage, maximum speed, check frequency: organisation defaults, adjustable per unit and frozen in the published version.
Auditors browse the full timeline of every enrolment, run the integrity check and recompute the verdict with the same engine that issued it. Corrections don't delete: they void, with a reason and an author.
A published course never changes: structure, rules and questions are frozen in the version, with their fingerprint. Years later you still know which rules every learner was judged by.
At the heart of Learning is a Learning Record Store: every action is an xAPI statement, using ADL verbs wherever they exist. Your data isn't locked into a proprietary format.
{ "id": "0192f7c4-5b1e-7a3d-9c2f-4e8b1d6a0f37", "actor": { "account": { "name": "u-7f3a…" } }, "verb": { "id": "http://adlnet.gov/expapi/verbs/experienced" }, "object": { "id": "https://learning.codelevel39.it/xapi/units/…" }, "context": { "registration": "7f3a…", "extensions": { // player state "…/ext/page": 4, "…/ext/visible": true } }, "timestamp": "2026-10-17T10:02:11.482Z"}
Volunteers, civil protection, public administration: people to train and qualify, with evidence to keep.
Mandatory training and compliance: know who followed what, for how long and under which rules.
Courses sold to clients who demand proof of completion: give them an audit trail they can verify themselves.
Already have a portal? Learning plugs into it: SSO with signed tickets and xAPI statements, no need to recreate users.
Tell us who you need to train and what evidence you need: we'll show you Learning on your own case.
help@codelevel39.it · we reply within one business day