Skip to content
Dark mode

Get learner progress statements

Returns xAPI statements for a learner, showing their progress state for each Mindtickle module they are tracked against.

Prerequisites

  1. Authentication and setup: A valid access token.
GET /services/data/v4.0/xapi/statements

Base URL: the standard REST host for your region. See Base URLs.

Headers: Authorization: Bearer ACCESS_TOKEN.

Parameter Type Required Description
agent string Required The Mindtickle learner, the xAPI agent, whose records you want to retrieve. Pass a URL-encoded JSON object whose mbox value is a full mailto IRI. See Notes.
verb string Optional Filters by module status. Values: not_started when the learner has not begun the module, in_progress when the learner has started but not completed it, and completed when the learner has completed it.
limit integer Optional Maximum number of statements to return in the current page. Use it to break large data sets into smaller chunks, then use the more URL in the response to fetch the next page.

This endpoint has no request body.

GET https://api.prod-us.mindtickle.com/services/data/v4.0/xapi/statements?agent=%7B%22mbox%22%3A%22mailto%3Aalex.fry%40example.com%22%7D&limit=2&verb=not_started

The API returns a JSON object with statement results and a continuation cursor if more data is available.

Field Type Description
statements array A list of xAPI statement objects representing individual learner activities.
statements[].id string The unique identifier for this specific learning record.
statements[].actor object The Mindtickle learner performing the action, including their name in name and email address or username in mbox.
statements[].verb object The status update or action recorded for the learner. The display field shows the current progress state: not_started, in_progress, or completed.
statements[].object object The Mindtickle activity being tracked, including the module ID in id, the module name in definition.name, and the module type in definition.type, for example ILT, course, or quick update.
statements[].timestamp string The exact date and time the learner reached this progress state, in ISO 8601 format.
statements[].stored string The date and time this record was saved in Mindtickle, in ISO 8601 format.
more string A continuation URL with more_id. Provided when there are more results than the current page limit. To fetch the next set of records, make a GET request to this exact URL without modification.

This standalone example illustrates statement fields for two learners. It is independent of the single-learner request above. Email addresses are fictional, and CONTINUATION_URL is a placeholder.

{
"statements": [
{
"id": "123456789abcd101_123456789012345102",
"actor": {
"name": "Alex Fry",
"mbox": "mailto:alex.fry@example.com"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/not_started",
"display": { "en-US": "not_started" }
},
"object": {
"id": "123456789012345102",
"definition": {
"name": { "en-US": "SESSION WITHIN EVENT" },
"type": "http://adlnet.gov/expapi/activities/ilt"
}
},
"timestamp": "2025-07-31T08:37:12.572Z",
"stored": "2025-07-31T08:37:12.572Z"
},
{
"id": "123456789abcd101_123456789012345103",
"actor": {
"name": "Anna Cruz",
"mbox": "mailto:anna.cruz@example.com"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/not_started",
"display": { "en-US": "not_started" }
},
"object": {
"id": "123456789012345103",
"definition": {
"name": { "en-US": "SESSION_EVENT" },
"type": "http://adlnet.gov/expapi/activities/ilt"
}
},
"timestamp": "2025-07-31T08:37:12.573Z",
"stored": "2025-07-31T08:37:12.573Z"
}
],
"more": "CONTINUATION_URL"
}
  • Agent parameter encoding: Always URL-encode the agent JSON. For example, agent={"mbox":"mailto:alex.fry@example.com"} becomes %7B%22mbox%22%3A%22mailto%3Aalex.fry%40example.com%22%7D. Incorrect encoding is a common source of 4xx errors, and the mbox value must be a full mailto IRI such as mailto:user@example.com.
  • Pagination: When the response includes more, make another GET request to that exact URL, including the encoded more_id, and continue until more is absent or empty. Do not re-apply the original query parameters when using the continuation URL.
  • Best practices: Use limit to manage payload size and iterate with more for full result sets, store processed statement IDs to help deduplicate records during synchronization, and validate timestamps in ISO 8601 format, using stored for ordering when reconstructing event timelines.
  • Synchronization: Do not use a saved statement ID as a continuation cursor or assume a stable result order. Confirm incremental retrieval requirements with Mindtickle Support before implementing synchronization.
  • Compatibility: Validate the response against your target LRS before importing it, including the composite statement IDs and numeric activity IDs illustrated above.
  • Troubleshooting: If no results are returned, confirm the agent is correctly URL-encoded and exists in the tenant, and try removing the verb filter to broaden the search.