xAPI Overview
xAPI (Experience API, also called Tin Can API) is the open standard for tracking learning experiences. The edu.games LRS is fully xAPI 1.0.3 compliant — anything a spec-conformant client sends will be stored and queryable.
Publishing a game on edu.games? This page explains xAPI in general. The statement shapes your game must emit — exact verbs, objective IRIs, launch-context security, session semantics, and the telemetry side channel — are defined by the Emission Profile. Games that follow more of it unlock more Learning Intelligence presets for their buyers.
The Actor–Verb–Object Model
Every xAPI statement is a structured sentence: Actor did Verb to Object. For example: “Student Jane completed Level 1 with a score of 85%”.
A Complete Statement
Statements can carry optional result, context, and timestamp fields:
{
"id": "7b9e1a2c-3d4f-5e6a-7b8c-9d0e1f2a3b4c",
"actor": {
"objectType": "Agent",
"name": "Jane Smith",
"mbox": "mailto:jane@school.edu"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/passed",
"display": { "en-US": "passed" }
},
"object": {
"objectType": "Activity",
"id": "https://mygame.com/levels/1",
"definition": {
"name": { "en-US": "Level 1: Introduction" },
"description": { "en-US": "First level of the algebra game" },
"type": "http://adlnet.gov/expapi/activities/level"
}
},
"result": {
"score": { "raw": 85, "min": 0, "max": 100, "scaled": 0.85 },
"success": true,
"completion": true,
"duration": "PT4M30S"
},
"context": {
"registration": "a1b2c3d4-e5f6-...",
"contextActivities": {
"parent": [{ "id": "https://mygame.com", "objectType": "Activity" }]
}
},
"timestamp": "2026-06-27T10:30:00.000Z"
}Common Verbs
Use standard ADL verbs where possible — they are understood by all conformant LRS systems and reporting tools.
| Verb | URI | When to use |
|---|---|---|
| attempted | http://adlnet.gov/expapi/verbs/attempted | Player started a game or level |
| completed | http://adlnet.gov/expapi/verbs/completed | Reached the end (regardless of pass/fail) |
| passed | http://adlnet.gov/expapi/verbs/passed | Score met or exceeded the pass threshold |
| failed | http://adlnet.gov/expapi/verbs/failed | Score below the pass threshold |
| answered | http://adlnet.gov/expapi/verbs/answered | Responded to a question or prompt |
| scored | http://adlnet.gov/expapi/verbs/scored | Received a score without completing |
| progressed | http://adlnet.gov/expapi/verbs/progressed | Advanced through content (e.g. reached checkpoint) |
| interacted | http://adlnet.gov/expapi/verbs/interacted | Interacted with a game element |
| terminated | http://adlnet.gov/expapi/verbs/terminated | Closed or quit the game session |
Activity Types
The definition.type field categorises your activity for reporting tools.
| Type URI | Use for |
|---|---|
| http://adlnet.gov/expapi/activities/course | The overall game or course |
| http://adlnet.gov/expapi/activities/module | A chapter or world |
| http://adlnet.gov/expapi/activities/lesson | A level or stage |
| http://adlnet.gov/expapi/activities/assessment | A quiz or test |
| http://adlnet.gov/expapi/activities/question | An individual question |
| http://adlnet.gov/expapi/activities/interaction | A single interactive element |
Identifying Learners
Actors can be identified three ways. The edu.games LRS supports all three:
// 1. Email (mbox) — most common
{ "objectType": "Agent", "mbox": "mailto:student@school.edu", "name": "Jane Smith" }
// 2. OpenID
{ "objectType": "Agent", "openid": "https://accounts.google.com/o/openid2/..." }
// 3. Account — best for pseudonymous tracking (no email exposed)
{
"objectType": "Agent",
"account": {
"homePage": "https://edu.games",
"name": "user_abc123"
}
}For privacy-conscious deployments, use the account form with an opaque ID — you never send the learner’s email to the LRS.