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
webhookURL is retrieved from the organization document.The entire validated statement is forwarded via
POSTto 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/jsonQuery 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
statementIdoptional but likely helpful for organization webhook.actor.mboxoractor.accountoptional but likely helpful for org webhook identifying learner.verb.idmust be a valid IRI (e.g., xAPI verb URL).object.idmust be a valid IRI and reference a known module if applicable.timestampmust be an ISO 8601-compliant date string.duration(if included) must followISO 8601 durationformat (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