Documentation
xAPI INTEGRATION

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%”.

Actor
Who did it. Identified by email (mbox), OpenID, or account object. Usually the learner.
Verb
What they did. A URI and display name — e.g. completed, passed, answered, scored.
Object
What they interacted with. Usually an Activity IRI — the game, level, or quiz.

A Complete Statement

Statements can carry optional result, context, and timestamp fields:

json
{
  "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.

VerbURIWhen to use
attemptedhttp://adlnet.gov/expapi/verbs/attemptedPlayer started a game or level
completedhttp://adlnet.gov/expapi/verbs/completedReached the end (regardless of pass/fail)
passedhttp://adlnet.gov/expapi/verbs/passedScore met or exceeded the pass threshold
failedhttp://adlnet.gov/expapi/verbs/failedScore below the pass threshold
answeredhttp://adlnet.gov/expapi/verbs/answeredResponded to a question or prompt
scoredhttp://adlnet.gov/expapi/verbs/scoredReceived a score without completing
progressedhttp://adlnet.gov/expapi/verbs/progressedAdvanced through content (e.g. reached checkpoint)
interactedhttp://adlnet.gov/expapi/verbs/interactedInteracted with a game element
terminatedhttp://adlnet.gov/expapi/verbs/terminatedClosed or quit the game session

Activity Types

The definition.type field categorises your activity for reporting tools.

Type URIUse for
http://adlnet.gov/expapi/activities/courseThe overall game or course
http://adlnet.gov/expapi/activities/moduleA chapter or world
http://adlnet.gov/expapi/activities/lessonA level or stage
http://adlnet.gov/expapi/activities/assessmentA quiz or test
http://adlnet.gov/expapi/activities/questionAn individual question
http://adlnet.gov/expapi/activities/interactionA single interactive element

Identifying Learners

Actors can be identified three ways. The edu.games LRS supports all three:

json
// 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.

Sending Statements →Tracking Progress →
AuthenticationSending Statements