Get learner progress statements
Returns xAPI statements for a learner, showing their progress state for each Mindtickle module they are tracked against.
Prerequisites
- Authentication and setup: A valid access token.
Endpoint
Section titled “Endpoint”GET /services/data/v4.0/xapi/statementsBase URL: the standard REST host for your region. See Base URLs.
Headers: Authorization: Bearer ACCESS_TOKEN.
Query parameters
Section titled “Query parameters”| 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. |
Request
Section titled “Request”This endpoint has no request body.
Request example
Section titled “Request example”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_startedResponse
Section titled “Response”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. |
Response example
Section titled “Response example”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 themboxvalue must be a full mailto IRI such asmailto:user@example.com. - Pagination: When the response includes
more, make another GET request to that exact URL, including the encodedmore_id, and continue untilmoreis absent or empty. Do not re-apply the original query parameters when using the continuation URL. - Best practices: Use
limitto manage payload size and iterate withmorefor full result sets, store processed statement IDs to help deduplicate records during synchronization, and validate timestamps in ISO 8601 format, usingstoredfor 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
verbfilter to broaden the search.