# xAPI statement reference

> Every xAPI statement devlin.ai sends, when it sends it, how each one is organized, and the full default set for one simulation attempt.

- Plans: Core, Team, Enterprise
- Canonical: https://docs.devlin.ai/reference/xapi-statements

devlin.ai builds every xAPI statement on its servers. The LMS's LRS (through an LMS package) and a workspace LRS receive the same statements, with the same statement IDs. The statements follow xAPI 1.0.3. What the workspace can turn on or off is in [xAPI reporting settings](https://docs.devlin.ai/integrations/xapi-reporting), and how packages send them is in [LMS packages: SCORM and xAPI reporting](https://docs.devlin.ai/publish-and-embed/lms-packages-scorm-and-xapi).

## When each statement is sent

| When | Verb | About | Setting |
|---|---|---|---|
| The learner sends their first message (a journey: the journey opens) | **initialized** | The simulation, coach or journey | Always |
| A simulation's result is ready, or a coach session ends: once for each learner message | **responded** | The simulation or coach | **One statement per learner message** (off by default) |
| A simulation's result is ready, once for each rubric criterion | **scored** | The criterion | **Rubric criteria** (on by default) |
| A simulation's result is ready, when the evaluation has a pass mark | **passed** or **failed** | The simulation | Always |
| A simulation's result is ready, with no pass or fail (feedback-only, evaluation off or not completed) | **completed** | The simulation | Always |
| A coach session ends, after the learner practised | **completed** | The coach | Always |
| A journey finishes: each knowledge check, then the journey | **passed**, **failed** or **completed** | The check, then the journey | Always |
| The learner leaves, or has no **Try Again** left | **terminated** | The simulation, coach or journey | Always |
| A reviewer changes a rating after the statements were sent (workspace LRS only) | **voided**, then the corrected set | The earlier statements | Always |

A **Try Again** in the same launch is a new attempt with its own statements. **terminated** is sent once per launch.

## How a statement is organized

- `id`: a statement ID built from the attempt, so sending the same statement twice never duplicates it.
- `actor`: the learner as the LMS launched them, when the workspace keeps the LMS learner. Otherwise an account under `https://devlin.ai/learners/` followed by the workspace ID, named by the learner identifier or an anonymous ID. See [Learner identity from the LMS](https://docs.devlin.ai/publish-and-embed/lms-packages-scorm-and-xapi#learner-identity-from-the-lms).
- `verb`: a standard ADL verb: `http://adlnet.gov/expapi/verbs/initialized`, `http://adlnet.gov/expapi/verbs/scored`, `http://adlnet.gov/expapi/verbs/passed`, `http://adlnet.gov/expapi/verbs/failed`, `http://adlnet.gov/expapi/verbs/completed`, `http://adlnet.gov/expapi/verbs/responded`, `http://adlnet.gov/expapi/verbs/terminated`, `http://adlnet.gov/expapi/verbs/voided`.
- `object`: the activity the statement is about, with its type and name.
- `result`: on **scored**, **passed**, **failed**, **completed** and **responded**. Scores are `raw`, `min`, `max` and `scaled`. A simulation's score is a percentage. A criterion's score is its points out of the points possible.
- `context.registration`: the LMS launch's registration. Every statement of one journey run, including its simulations', shares the journey's.
- `context.contextActivities`: `parent` is the journey for a simulation or coach inside one, and the simulation for a criterion. `grouping` holds the LMS course, when the LMS names one, and the journey for a criterion inside one. `other` holds the skills a criterion counts toward.
- `context.extensions` and `result.extensions`: see [Extensions](#extensions).
- `timestamp`: when it happened in devlin.ai.

## Activity IDs

Activity IDs do not depend on the address the package was downloaded from, so one filter finds a simulation's attempts standalone and inside a journey.

| Activity | Type | ID |
|---|---|---|
| Simulation | `http://adlnet.gov/expapi/activities/simulation` | `https://devlin.ai/xapi/activities/simulation/` + embed key |
| Rubric criterion | `https://devlin.ai/xapi/activity-types/rubric-criterion` | The simulation's ID + `/criterion/` + criterion ID |
| Coach | `https://devlin.ai/xapi/activity-types/coach` | `https://devlin.ai/xapi/activities/coach/` + embed key |
| Journey | `http://adlnet.gov/expapi/activities/course` | `https://devlin.ai/xapi/activities/journey/` + journey key |
| Knowledge check | `http://adlnet.gov/expapi/activities/assessment` | The journey's ID + `/check/` + block ID |
| Skill | `https://devlin.ai/xapi/activity-types/skill` | `https://devlin.ai/xapi/activities/skill/` + workspace ID + `/` + skill ID |

## Extensions

| Extension | Where | Value |
|---|---|---|
| `https://devlin.ai/xapi/extensions/scorecard` | result of a journey's **passed**, **failed** or **completed** | The journey's scorecard: `pass-threshold`, `default-weights` and each scored item's `type`, `ref`, `weight-pct` and `score-pct`. `default-weights` is true when the designer set no scorecard, so every scored item counts equally and the pass mark is 70. |
| `https://devlin.ai/xapi/extensions/attempt-number` | context | Which run of the simulation or coach this is for the learner, counting from one. |
| `https://devlin.ai/xapi/extensions/session-id` | context | The attempt ID. The same ID is in the transcript link. |
| `https://devlin.ai/xapi/extensions/mode` | context | `text`, `voice` or `avatar`. |
| `https://devlin.ai/xapi/extensions/language` | context | The language code the attempt ran in. |
| `https://devlin.ai/xapi/extensions/learner-fields` | context | The start-screen answers for the learner fields the workspace picked, as field key and value. Absent when none are picked. |
| `https://devlin.ai/xapi/extensions/workspace` | context | The workspace ID. |
| `https://devlin.ai/xapi/extensions/profile` | context | The statement profile, `default-v2` unless the workspace has an agreed custom profile. |
| `https://devlin.ai/xapi/extensions/simulation-version` | context | The published version of the simulation, when known. |
| `https://devlin.ai/xapi/extensions/turn-index` | context of **responded** | The message's position in the conversation. |
| `https://devlin.ai/xapi/extensions/in-response-to` | context of **responded** | The character's line the learner answered. |
| `https://devlin.ai/xapi/extensions/criteria` | result of **passed**, **failed** or **completed** | Every criterion as `id`, `name`, `rating`, `points`, `possible` and `rationale`. Sent when **Rubric criteria** is on. |
| `https://devlin.ai/xapi/extensions/deductions` | result of **passed**, **failed** or **completed** | Each deduction applied, as `id`, `name`, `points` and `rationale`. Absent when none applied. |
| `https://devlin.ai/xapi/extensions/transcript-url` | result | The link that opens the attempt in devlin.ai. Sent when **Link to the transcript** is on. |
| `https://devlin.ai/xapi/extensions/transcript` | result | The whole conversation as `Learner:` and `Character:` lines. Sent when **Full transcript text** is on. |
| `https://devlin.ai/xapi/extensions/turn-count` | result | How many messages the learner sent. |
| `https://devlin.ai/xapi/extensions/feedback` | result | The evaluation's overall written feedback. |
| `https://devlin.ai/xapi/extensions/rating` | result of **scored** | The rating the criterion was given. |
| `https://devlin.ai/xapi/extensions/rationale` | result of **scored** | Why the criterion got that rating. It can quote the learner. |
| `https://devlin.ai/xapi/extensions/stop-label` | result of **scored** | The label of the rating scale level, when the criterion uses one. |

## The default set for one simulation attempt

Every statement one attempt sends with the workspace's settings at their defaults: a simulation launched on its own from an LMS, with an evaluation that passed and two rubric criteria. **initialized** is sent at the first message, the three result statements when the evaluation finishes, and **terminated** when the learner leaves. The values are examples.

```json
[
  {
    "id": "fad34c65-82de-5e57-8411-900175062d05",
    "actor": {
      "objectType": "Agent",
      "name": "Ana Lee",
      "mbox": "mailto:ana.lee@example.com"
    },
    "verb": {
      "id": "http://adlnet.gov/expapi/verbs/initialized",
      "display": {
        "en-US": "initialized"
      }
    },
    "object": {
      "objectType": "Activity",
      "id": "https://devlin.ai/xapi/activities/simulation/k7q2",
      "definition": {
        "type": "http://adlnet.gov/expapi/activities/simulation",
        "name": {
          "en-US": "Late check-in guest"
        }
      }
    },
    "context": {
      "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
      "extensions": {
        "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
        "https://devlin.ai/xapi/extensions/attempt-number": 2,
        "https://devlin.ai/xapi/extensions/mode": "voice",
        "https://devlin.ai/xapi/extensions/language": "en",
        "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
        "https://devlin.ai/xapi/extensions/profile": "default-v2",
        "https://devlin.ai/xapi/extensions/simulation-version": 7
      }
    },
    "timestamp": "2026-11-04T09:12:03.120Z"
  },
  {
    "id": "cdbeba50-2d64-561a-9b67-fbefc2489e68",
    "actor": {
      "objectType": "Agent",
      "name": "Ana Lee",
      "mbox": "mailto:ana.lee@example.com"
    },
    "verb": {
      "id": "http://adlnet.gov/expapi/verbs/scored",
      "display": {
        "en-US": "scored"
      }
    },
    "object": {
      "objectType": "Activity",
      "id": "https://devlin.ai/xapi/activities/simulation/k7q2/criterion/uses-guest-name",
      "definition": {
        "type": "https://devlin.ai/xapi/activity-types/rubric-criterion",
        "name": {
          "en-US": "Uses the guest's name"
        }
      }
    },
    "result": {
      "score": {
        "raw": 2,
        "min": 0,
        "max": 4,
        "scaled": 0.5
      },
      "extensions": {
        "https://devlin.ai/xapi/extensions/rating": "partial",
        "https://devlin.ai/xapi/extensions/rationale": "Used the name once, at the greeting only."
      }
    },
    "context": {
      "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
      "contextActivities": {
        "parent": [
          {
            "objectType": "Activity",
            "id": "https://devlin.ai/xapi/activities/simulation/k7q2",
            "definition": {
              "type": "http://adlnet.gov/expapi/activities/simulation"
            }
          }
        ],
        "other": [
          {
            "objectType": "Activity",
            "id": "https://devlin.ai/xapi/activities/skill/3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13/personalisation",
            "definition": {
              "type": "https://devlin.ai/xapi/activity-types/skill"
            }
          },
          {
            "objectType": "Activity",
            "id": "https://devlin.ai/xapi/activities/skill/3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13/guest-rapport",
            "definition": {
              "type": "https://devlin.ai/xapi/activity-types/skill"
            }
          }
        ]
      },
      "extensions": {
        "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
        "https://devlin.ai/xapi/extensions/attempt-number": 2,
        "https://devlin.ai/xapi/extensions/mode": "voice",
        "https://devlin.ai/xapi/extensions/language": "en",
        "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
        "https://devlin.ai/xapi/extensions/profile": "default-v2",
        "https://devlin.ai/xapi/extensions/simulation-version": 7
      }
    },
    "timestamp": "2026-11-04T09:18:44.120Z"
  },
  {
    "id": "c5195b24-4859-56b3-a6a9-48312e417b22",
    "actor": {
      "objectType": "Agent",
      "name": "Ana Lee",
      "mbox": "mailto:ana.lee@example.com"
    },
    "verb": {
      "id": "http://adlnet.gov/expapi/verbs/scored",
      "display": {
        "en-US": "scored"
      }
    },
    "object": {
      "objectType": "Activity",
      "id": "https://devlin.ai/xapi/activities/simulation/k7q2/criterion/offers-upgrade",
      "definition": {
        "type": "https://devlin.ai/xapi/activity-types/rubric-criterion",
        "name": {
          "en-US": "Offers an upgrade"
        }
      }
    },
    "result": {
      "score": {
        "raw": 4,
        "min": 0,
        "max": 4,
        "scaled": 1
      },
      "extensions": {
        "https://devlin.ai/xapi/extensions/rating": "met",
        "https://devlin.ai/xapi/extensions/rationale": "Offered the suite upgrade before closing.",
        "https://devlin.ai/xapi/extensions/stop-label": "Strong"
      }
    },
    "context": {
      "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
      "contextActivities": {
        "parent": [
          {
            "objectType": "Activity",
            "id": "https://devlin.ai/xapi/activities/simulation/k7q2",
            "definition": {
              "type": "http://adlnet.gov/expapi/activities/simulation"
            }
          }
        ]
      },
      "extensions": {
        "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
        "https://devlin.ai/xapi/extensions/attempt-number": 2,
        "https://devlin.ai/xapi/extensions/mode": "voice",
        "https://devlin.ai/xapi/extensions/language": "en",
        "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
        "https://devlin.ai/xapi/extensions/profile": "default-v2",
        "https://devlin.ai/xapi/extensions/simulation-version": 7
      }
    },
    "timestamp": "2026-11-04T09:18:44.120Z"
  },
  {
    "id": "ea24457c-5a65-5949-a7f9-d6903bd747eb",
    "actor": {
      "objectType": "Agent",
      "name": "Ana Lee",
      "mbox": "mailto:ana.lee@example.com"
    },
    "verb": {
      "id": "http://adlnet.gov/expapi/verbs/passed",
      "display": {
        "en-US": "passed"
      }
    },
    "object": {
      "objectType": "Activity",
      "id": "https://devlin.ai/xapi/activities/simulation/k7q2",
      "definition": {
        "type": "http://adlnet.gov/expapi/activities/simulation",
        "name": {
          "en-US": "Late check-in guest"
        }
      }
    },
    "result": {
      "score": {
        "raw": 78,
        "min": 0,
        "max": 100,
        "scaled": 0.78
      },
      "success": true,
      "completion": true,
      "duration": "PT6M41S",
      "extensions": {
        "https://devlin.ai/xapi/extensions/criteria": [
          {
            "id": "uses-guest-name",
            "name": "Uses the guest's name",
            "rating": "partial",
            "points": 2,
            "possible": 4,
            "rationale": "Used the name once, at the greeting only."
          },
          {
            "id": "offers-upgrade",
            "name": "Offers an upgrade",
            "rating": "met",
            "points": 4,
            "possible": 4,
            "rationale": "Offered the suite upgrade before closing."
          }
        ],
        "https://devlin.ai/xapi/extensions/transcript-url": "https://devlin.ai/dashboard/attempts/c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
        "https://devlin.ai/xapi/extensions/turn-count": 2,
        "https://devlin.ai/xapi/extensions/feedback": "Warm tone throughout; offer the upgrade earlier."
      }
    },
    "context": {
      "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
      "extensions": {
        "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
        "https://devlin.ai/xapi/extensions/attempt-number": 2,
        "https://devlin.ai/xapi/extensions/mode": "voice",
        "https://devlin.ai/xapi/extensions/language": "en",
        "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
        "https://devlin.ai/xapi/extensions/profile": "default-v2",
        "https://devlin.ai/xapi/extensions/simulation-version": 7
      }
    },
    "timestamp": "2026-11-04T09:18:44.120Z"
  },
  {
    "id": "f338a5d9-21ef-52ea-9285-6bb722c9a56c",
    "actor": {
      "objectType": "Agent",
      "name": "Ana Lee",
      "mbox": "mailto:ana.lee@example.com"
    },
    "verb": {
      "id": "http://adlnet.gov/expapi/verbs/terminated",
      "display": {
        "en-US": "terminated"
      }
    },
    "object": {
      "objectType": "Activity",
      "id": "https://devlin.ai/xapi/activities/simulation/k7q2",
      "definition": {
        "type": "http://adlnet.gov/expapi/activities/simulation",
        "name": {
          "en-US": "Late check-in guest"
        }
      }
    },
    "result": {
      "duration": "PT6M41S"
    },
    "context": {
      "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
      "extensions": {
        "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
        "https://devlin.ai/xapi/extensions/attempt-number": 2,
        "https://devlin.ai/xapi/extensions/mode": "voice",
        "https://devlin.ai/xapi/extensions/language": "en",
        "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
        "https://devlin.ai/xapi/extensions/profile": "default-v2",
        "https://devlin.ai/xapi/extensions/simulation-version": 7
      }
    },
    "timestamp": "2026-11-04T09:18:44.120Z"
  }
]
```

## Other statements

### One statement per learner message

With **One statement per learner message** on, each learner message adds a **responded** statement:

```json
{
  "id": "b5cdb4cf-2b08-5045-b0a5-9c5b8d02d10f",
  "actor": {
    "objectType": "Agent",
    "name": "Ana Lee",
    "mbox": "mailto:ana.lee@example.com"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/responded",
    "display": {
      "en-US": "responded"
    }
  },
  "object": {
    "objectType": "Activity",
    "id": "https://devlin.ai/xapi/activities/simulation/k7q2",
    "definition": {
      "type": "http://adlnet.gov/expapi/activities/simulation",
      "name": {
        "en-US": "Late check-in guest"
      }
    }
  },
  "result": {
    "response": "I'm so sorry for the wait, Mr Chen. Let me sort this now."
  },
  "context": {
    "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
    "contextActivities": {
      "parent": [
        {
          "objectType": "Activity",
          "id": "https://devlin.ai/xapi/activities/journey/j9x1",
          "definition": {
            "type": "http://adlnet.gov/expapi/activities/course"
          }
        }
      ],
      "grouping": [
        {
          "objectType": "Activity",
          "id": "https://lms.example.com/course/412"
        }
      ]
    },
    "extensions": {
      "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
      "https://devlin.ai/xapi/extensions/attempt-number": 2,
      "https://devlin.ai/xapi/extensions/mode": "voice",
      "https://devlin.ai/xapi/extensions/language": "en",
      "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
      "https://devlin.ai/xapi/extensions/profile": "default-v2",
      "https://devlin.ai/xapi/extensions/simulation-version": 7,
      "https://devlin.ai/xapi/extensions/turn-index": 3,
      "https://devlin.ai/xapi/extensions/in-response-to": "I've been standing here twenty minutes."
    }
  },
  "timestamp": "2026-11-04T09:13:30.004Z"
}
```

### A simulation inside a journey

Inside a journey, the simulation's statements name the journey as `parent` and carry the journey run's registration. With an LMS course ID, `grouping` holds it:

```json
{
  "id": "ea24457c-5a65-5949-a7f9-d6903bd747eb",
  "actor": {
    "objectType": "Agent",
    "name": "Ana Lee",
    "mbox": "mailto:ana.lee@example.com"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/passed",
    "display": {
      "en-US": "passed"
    }
  },
  "object": {
    "objectType": "Activity",
    "id": "https://devlin.ai/xapi/activities/simulation/k7q2",
    "definition": {
      "type": "http://adlnet.gov/expapi/activities/simulation",
      "name": {
        "en-US": "Late check-in guest"
      }
    }
  },
  "result": {
    "score": {
      "raw": 78,
      "min": 0,
      "max": 100,
      "scaled": 0.78
    },
    "success": true,
    "completion": true,
    "duration": "PT6M41S",
    "extensions": {
      "https://devlin.ai/xapi/extensions/criteria": [
        {
          "id": "uses-guest-name",
          "name": "Uses the guest's name",
          "rating": "partial",
          "points": 2,
          "possible": 4,
          "rationale": "Used the name once, at the greeting only."
        },
        {
          "id": "offers-upgrade",
          "name": "Offers an upgrade",
          "rating": "met",
          "points": 4,
          "possible": 4,
          "rationale": "Offered the suite upgrade before closing."
        }
      ],
      "https://devlin.ai/xapi/extensions/transcript-url": "https://devlin.ai/dashboard/attempts/c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
      "https://devlin.ai/xapi/extensions/turn-count": 2,
      "https://devlin.ai/xapi/extensions/feedback": "Warm tone throughout; offer the upgrade earlier."
    }
  },
  "context": {
    "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
    "contextActivities": {
      "parent": [
        {
          "objectType": "Activity",
          "id": "https://devlin.ai/xapi/activities/journey/j9x1",
          "definition": {
            "type": "http://adlnet.gov/expapi/activities/course"
          }
        }
      ],
      "grouping": [
        {
          "objectType": "Activity",
          "id": "https://lms.example.com/course/412"
        }
      ]
    },
    "extensions": {
      "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
      "https://devlin.ai/xapi/extensions/attempt-number": 2,
      "https://devlin.ai/xapi/extensions/mode": "voice",
      "https://devlin.ai/xapi/extensions/language": "en",
      "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
      "https://devlin.ai/xapi/extensions/profile": "default-v2",
      "https://devlin.ai/xapi/extensions/simulation-version": 7
    }
  },
  "timestamp": "2026-11-04T09:18:44.120Z"
}
```

### A coach

A coach has no score. When the session ends, **completed** carries the session time, the number of learner messages and, when **Link to the transcript** is on, the transcript link:

```json
{
  "id": "37c8b05f-88b6-55cb-9c22-3348e6561762",
  "actor": {
    "objectType": "Agent",
    "name": "Ana Lee",
    "mbox": "mailto:ana.lee@example.com"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/completed",
    "display": {
      "en-US": "completed"
    }
  },
  "object": {
    "objectType": "Activity",
    "id": "https://devlin.ai/xapi/activities/coach/c3m8",
    "definition": {
      "type": "https://devlin.ai/xapi/activity-types/coach",
      "name": {
        "en-US": "Difficult guest coach"
      }
    }
  },
  "result": {
    "completion": true,
    "duration": "PT6M41S",
    "extensions": {
      "https://devlin.ai/xapi/extensions/transcript-url": "https://devlin.ai/dashboard/attempts/c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
      "https://devlin.ai/xapi/extensions/turn-count": 2
    }
  },
  "context": {
    "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
    "contextActivities": {
      "grouping": [
        {
          "objectType": "Activity",
          "id": "https://lms.example.com/course/412"
        }
      ]
    },
    "extensions": {
      "https://devlin.ai/xapi/extensions/session-id": "c41f8d2e-1a3b-4c5d-8e9f-0a1b2c3d4e5f",
      "https://devlin.ai/xapi/extensions/attempt-number": 2,
      "https://devlin.ai/xapi/extensions/mode": "text",
      "https://devlin.ai/xapi/extensions/language": "en",
      "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
      "https://devlin.ai/xapi/extensions/profile": "default-v2"
    }
  },
  "timestamp": "2026-11-04T09:18:44.120Z"
}
```

### A journey's result

```json
{
  "id": "0169bb0d-8c07-5795-896f-45505ce9b55d",
  "actor": {
    "objectType": "Agent",
    "name": "Ana Lee",
    "mbox": "mailto:ana.lee@example.com"
  },
  "verb": {
    "id": "http://adlnet.gov/expapi/verbs/passed",
    "display": {
      "en-US": "passed"
    }
  },
  "object": {
    "objectType": "Activity",
    "id": "https://devlin.ai/xapi/activities/journey/j9x1",
    "definition": {
      "type": "http://adlnet.gov/expapi/activities/course",
      "name": {
        "en-US": "Front office essentials"
      }
    }
  },
  "result": {
    "score": {
      "raw": 82,
      "min": 0,
      "max": 100,
      "scaled": 0.82
    },
    "success": true,
    "completion": true,
    "duration": "PT25M",
    "extensions": {
      "https://devlin.ai/xapi/extensions/scorecard": {
        "pass-threshold": 70,
        "default-weights": false,
        "components": [
          {
            "type": "sim",
            "ref": "k7q2",
            "weight-pct": 50,
            "score-pct": 78
          },
          {
            "type": "check",
            "ref": "b12",
            "weight-pct": 50,
            "score-pct": 86
          }
        ]
      }
    }
  },
  "context": {
    "registration": "0b6c2f4a-9d8e-4f1b-a3c5-7e6d5c4b3a21",
    "contextActivities": {
      "grouping": [
        {
          "objectType": "Activity",
          "id": "https://lms.example.com/course/412"
        }
      ]
    },
    "extensions": {
      "https://devlin.ai/xapi/extensions/workspace": "3e2a9c1d-5b7f-4e8a-9d21-6f0c4b8e7a13",
      "https://devlin.ai/xapi/extensions/profile": "default-v2"
    }
  },
  "timestamp": "2026-11-04T09:25:00.000Z"
}
```
