Skip to main content
BakedIn.co
xAPI · Profile · v1 draft

BakedIn xAPI Profile

The verbs, activity types, actor scheme, and extensions used by the BakedIn Learn surface. Conforms to xAPI 1.0.3 and the cmi5 actor-account pattern.

Version
draft
Spec
xAPI 1.0.3
Endpoint
/api/xapi/statements

canonical IRI

Profile identifier

https://bakedin.co/xapi/profile/v1

Statements emitted under this Profile carry it as a category context activity, so a downstream LRS can filter for them bycontextActivities.category[].id.

agent identity

Actor scheme

Pre-authentication, BakedIn issues anonymous per-browser identities as UUIDs persisted in localStorage. Statements identify the learner with the cmi5-styleAgent.account form:

{
  "objectType": "Agent",
  "account": {
    "homePage": "https://bakedin.co",
    "name": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
  }
}

Once authentication ships (Cognito), the same actor scheme holds — account.name may shift from the anonymous UUID to the authenticated user id, and the anonymous-UUID statements get merged into the authenticated row via a server-side migration.

vocabulary

Verb set

All verbs are ADL-canonical IRIs except where a vocabulary gap forced a fallback. No locally-coined verbs.

Event kindVerb IRIActivity type
exercise_completehttp://adlnet.gov/expapi/verbs/completedhttp://adlnet.gov/expapi/activities/assessment
quiz_attempthttp://adlnet.gov/expapi/verbs/attemptedhttp://adlnet.gov/expapi/activities/assessment
section_readhttp://adlnet.gov/expapi/verbs/experiencedhttp://adlnet.gov/expapi/activities/lesson
lesson_openhttp://adlnet.gov/expapi/verbs/launchedhttp://adlnet.gov/expapi/activities/lesson
lesson_completehttp://adlnet.gov/expapi/verbs/completedhttp://adlnet.gov/expapi/activities/lesson

profile-specific

Extensions

One profile-specific extension. XP is the BakedIn gamification dimension that doesn’t map to a core xAPI field.

{
  "result": {
    "score": { "scaled": 1.0 },
    "completion": true,
    "extensions": {
      "https://bakedin.co/xapi/xp": 100
    }
  }
}

example

Statement shape

{
  "id": "f1e2d3c4-b5a6-4789-9012-3456789abcde",
  "actor": {
    "objectType": "Agent",
    "account": {
      "homePage": "https://bakedin.co",
      "name": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
    }
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/completed",
    "display": { "en-US": "completed" }
  },
  "object": {
    "objectType": "Activity",
    "id": "https://bakedin.co/learn/minicourses/nca-genl/1.1",
    "definition": {
      "name": { "en-US": "nca-genl/1.1" },
      "type": "http://adlnet.gov/expapi/activities/assessment"
    }
  },
  "result": {
    "completion": true,
    "score": { "scaled": 0.9 },
    "extensions": {
      "https://bakedin.co/xapi/xp": 100
    }
  },
  "context": {
    "contextActivities": {
      "parent": [{
        "objectType": "Activity",
        "id": "https://bakedin.co/learn/minicourses/nca-genl"
      }],
      "category": [{
        "objectType": "Activity",
        "id": "https://bakedin.co/xapi/profile/v1"
      }]
    }
  },
  "timestamp": "2026-05-23T15:42:11.327Z"
}

query

LRS endpoint

GET /api/xapi/statements returns BakedIn statements in LRS shape. Filterable by ?agent=<uuid>, ?verb=<iri>, ?activity=<iri>.

Returns up to 500 statements newest-first per request. Not a full xAPI LRS — optimized for “ICICLE Tools-SIG drops in and downloads the BakedIn corpus of statements”.

# Get all completed statements for a specific learner
GET /api/xapi/statements
  ?agent=a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d
  &verb=http://adlnet.gov/expapi/verbs/completed
  &limit=50

scope

What this profile does NOT cover (yet)

  • Group statements (cohort/teacher constructs — pre-auth)
  • Voided statements (LRS administrative concern)
  • Statement signing (cryptographic provenance)
  • Attachments (rich-media learner submissions)
  • Substatements (nested LE Process events)

Profile expansion follows IEEE ICICLE Toolkit guidance; tracked in project_icicle_le_strategic.md.

dogfood

Inspect your own statements

If you’ve interacted with any BakedIn lesson in this browser, your anonymous UUID has statements in the LRS. See your activity →