Statements Resource
Description
The Statements endpoint is a lightweight LRS (Learning Record Store) interface that accepts xAPI-style learning activity records from Articulate Rise 360 modules or similar eLearning tools. Each statement is uniquely identified and captures learner activity, including actor, verb, object, result, and context information.
This endpoint supports receiving PUT
operations from training modules and immediately forwards the received statement to the corresponding organization's webhook.
Statements
Each statement represents a single recorded learning interaction tied to a user, a learning object, and an action (e.g., “attempted”, “completed”).
Webhook Forwarding Behavior
When a statement is received:
The system validates the session token, identifying the learner and associated organization.
The organization’s
webhook
URL is retrieved from the organization document.The entire validated statement is forwarded via
POST
to the organization's webhook in the following format:
Example Forwarded Payload:
{
"statementId": "7a64e0f2-1a38-4de6-9f39-142d7e9996cb",
"organizationId": "org123",
"receivedAt": "2025-07-25T14:49:00.000Z",
"statement": {
"id": "7a64e0f2-1a38-4de6-9f39-142d7e9996cb",
"timestamp": "2025-07-25T14:48:00.000Z",
"actor": {
"objectType": "Agent",
"name": "Jane Doe",
"mbox": "mailto:jane.doe@example.com"
},
"verb": {
"id": "https://adlnet.gov/expapi/verbs/attempted",
"display": {
"en-US": "attempted"
}
},
"result": {
"duration": "PT5M33S",
"completion": true,
"success": true
},
"context": {
"registration": "d8b3a3e3-b34a-442f-8b17-dcb44f0f2fae"
},
"object": {
"id": "https://training.example.com/modules/mod123",
"objectType": "Activity",
"definition": {
"type": "http://adlnet.gov/expapi/activities/lesson"
}
}
}
}
The request to the webhook is made using HTTPS POST.
No retries or queueing is done by default—this is a fire-and-forget delivery model unless otherwise configured.
If the webhook fails (e.g., 5xx status or timeout), the statement is still considered accepted. Future reliability features (like retry queues or dead-letter storage) may be added later.
Example
Statement (xAPI-like):
{
"id": "7a64e0f2-1a38-4de6-9f39-142d7e9996cb",
"timestamp": "2025-07-25T14:48:00.000Z",
"actor": {
"objectType": "Agent",
"name": "Jane Doe",
"mbox": "mailto:jane.doe@example.com"
},
"verb": {
"id": "https://adlnet.gov/expapi/verbs/attempted",
"display": {
"en-US": "attempted"
}
},
"result": {
"duration": "PT5M33S",
"completion": true,
"success": true
},
"context": {
"registration": "d8b3a3e3-b34a-442f-8b17-dcb44f0f2fae"
},
"object": {
"id": "https://training.example.com/modules/mod123",
"objectType": "Activity",
"definition": {
"type": "http://adlnet.gov/expapi/activities/lesson"
}
}
}
Submit Statement – (Rise 360 Module)
PUT /statements
Headers:
Authorization: Bearer <Session token>
Content-Type: application/json
Query Parameters:
statementId
string
✅
A unique identifier for the statement
...custom
any
❌
Any other optional tracking params
Example Request:
PUT /statements?statementId=7a64e0f2-1a38-4de6-9f39-142d7e9996cb
{
"id": "7a64e0f2-1a38-4de6-9f39-142d7e9996cb",
"timestamp": "2025-07-25T14:48:00.000Z",
"actor": {
"objectType": "Agent",
"name": "Jane Doe",
"mbox": "mailto:jane.doe@example.com"
},
"verb": {
"id": "https://adlnet.gov/expapi/verbs/attempted",
"display": {
"en-US": "attempted"
}
},
"result": {
"duration": "PT5M33S",
"completion": true,
"success": true
},
"context": {
"registration": "d8b3a3e3-b34a-442f-8b17-dcb44f0f2fae"
},
"object": {
"id": "https://training.example.com/modules/mod123",
"objectType": "Activity",
"definition": {
"type": "http://adlnet.gov/expapi/activities/lesson"
}
}
}
Example Response (200 OK):
{
"success": true,
"message": {
"action": "handled",
"resource": "statement",
"success": true
},
"data": {
"statement": {
// The statement object sent in the request body
},
"organizationId": "example-organization-id", // The organization ID extracted from the session
"message": "Webhook succeeded with status 200"
},
"metadata": null
}
Authentication
This endpoint requires a valid session token generated, validated, and signed by Training Arc.
Header:
Authorization: Bearer <Session token>
The session token identifies the user and maps them to their organization, allowing the server to retrieve the appropriate webhook destination.
Validations
statementId
optional but likely helpful for organization webhook.actor.mbox
oractor.account
optional but likely helpful for org webhook identifying learner.verb.id
must be a valid IRI (e.g., xAPI verb URL).object.id
must be a valid IRI and reference a known module if applicable.timestamp
must be an ISO 8601-compliant date string.duration
(if included) must followISO 8601 duration
format (e.g.,PT10M23S
).
Error Responses
400 Bad Request If required fields are missing or formatted incorrectly.
{
"success": false,
"message": "Invalid xAPI statement format."
}
401 Unauthorized If the session token is missing or invalid.
{
"success": false,
"message": "Unauthorized"
}
403 Forbidden If the session token is signed but belongs to a different org or user.
{
"success": false,
"message": "Invalid token"
}
Last updated