Training workflow completion status not updating in training records via LMS integration

We’ve integrated our external LMS with Arena QMS 2022.1 using REST API webhooks to automatically update training completion status. When employees complete training in the LMS, it should trigger a webhook that updates their training records in Arena. However, the training completion status fails to update in Arena’s training management module.

The LMS webhook is firing (we can see it in the LMS logs), but Arena’s training records remain in ‘In Progress’ status even after successful course completion. We’ve configured the LMS webhook integration with what we believe is the correct REST API endpoint configuration, but something isn’t working with the training completion event handling or status synchronization. Here’s our webhook configuration:


Webhook URL: https://arena.company.com/api/training/complete
Method: POST
Auth: Bearer token

I suspect there’s an issue with either the REST API endpoint configuration, how we’re sending the training completion event data, the status synchronization logic, or possibly the authentication token permissions. Has anyone successfully implemented LMS webhook integration with Arena QMS? What’s the correct endpoint configuration and payload format for training completion events?

The endpoint path looks suspicious. In Arena 2022.1, the training completion endpoint is typically ‘/api/v1/training/records/{recordId}/complete’ not just ‘/api/training/complete’. You need to include the specific training record ID in the path. Also, what’s your request payload structure? Arena expects specific field mappings for training completion events.

Based on your symptoms and the discussion, here’s the complete solution for your LMS webhook integration with Arena QMS training management:

LMS Webhook Integration Architecture: Your webhook integration has several configuration issues that need correction. First, fix your REST API endpoint configuration. The correct endpoint for training completion in Arena 2022.1 is: https://arena.company.com/api/v1/training/records/{trainingRecordId}/complete. You must include the version path ‘/v1/’ and the specific training record ID as a path parameter. The generic ‘/api/training/complete’ endpoint you’re using doesn’t exist in Arena’s API structure, which is why your updates aren’t processing even when authentication succeeds.

Webhook Payload Format: Configure your LMS to send the training completion event with this JSON payload structure:

{
  "employeeId": "EMP12345",
  "completionDate": "2025-01-19T14:30:00Z",
  "status": "COMPLETED",
  "score": 95
}

Arena requires the employeeId to match the employee identifier in your Arena user records, completionDate in ISO 8601 format, status field set to ‘COMPLETED’, and score if your training program tracks scores. Missing any required field will cause silent failures where the API accepts the request but doesn’t update the record.

REST API Endpoint Configuration Details: The endpoint requires proper HTTP headers beyond just authentication. Configure your LMS webhook to send: Authorization header with Bearer token, Content-Type header set to ‘application/json’, Accept header set to ‘application/json’, and optionally X-Request-ID header for tracking. The training record ID in the URL path must be the Arena training record ID, not your LMS course ID. You’ll need to maintain a mapping table between LMS course enrollments and Arena training record IDs. When a user enrolls in a course in your LMS, create the corresponding training record in Arena via API and store the Arena record ID for use in completion webhooks.

Authentication and Token Permissions: Your intermittent 401 errors indicate authentication problems. Arena’s Bearer tokens for API access have specific permission scopes and expiration times. Request a dedicated API service account token from Arena with these permissions: ‘training.records.write’, ‘training.status.update’, and ‘user.read’ (to validate employee IDs). Service account tokens typically have longer expiration times than user tokens. Configure your LMS to refresh the Bearer token before each webhook call rather than caching it. Implement token refresh logic: request a new token from Arena’s ‘/api/v1/auth/token’ endpoint using your service account credentials, cache the token with its expiration time, and refresh proactively when the token is within 5 minutes of expiration.

Status Synchronization Logic: Arena’s training record status follows a specific lifecycle. Verify that your training records are in a state that allows completion updates. The record must be in ‘IN_PROGRESS’ or ‘ASSIGNED’ status to accept a completion update. Records in ‘COMPLETED’, ‘EXPIRED’, or ‘CANCELLED’ status will reject completion updates. Also check your training workflow configuration in Arena - navigate to Training Management configuration and verify that ‘Allow external status updates’ is enabled and that the workflow state machine allows transitions from IN_PROGRESS to COMPLETED without required manual approval steps. If manual approval is required, your API update should set the status to ‘PENDING_APPROVAL’ instead of ‘COMPLETED’.

Training Completion Event Handling: Implement proper error handling and retry logic in your LMS webhook configuration. When Arena returns an error response, your LMS should: Log the complete error response including status code and error message, retry the webhook with exponential backoff (retry after 1 minute, then 5 minutes, then 15 minutes), notify training administrators after 3 failed retry attempts, and queue failed updates for manual review. Also implement a reconciliation process that runs daily to compare LMS completion records with Arena training records and identify any mismatches that need correction.

Testing and Validation: Test your corrected integration with these scenarios: successful completion with score, successful completion without score, completion for non-existent employee ID (should return 404), completion for already-completed training (should return 409 conflict), and completion with expired authentication token. Monitor Arena’s API logs to verify that completion events are being received and processed correctly. Set up alerts for any API errors or failed status updates so you can address integration issues quickly.

I implemented this exact integration last year. Beyond the endpoint path issue mentioned above, you need to ensure your webhook payload includes the employee ID mapping, course ID mapping, completion date, and score if applicable. Arena won’t update the status if any required fields are missing from the payload.

Good point - I checked and we’re getting 401 Unauthorized responses intermittently. Sometimes it works, sometimes it fails with auth errors. The Bearer token is valid though, we use it successfully for other API calls. Could this be a permissions issue with the token scope?

First thing to check - are you seeing any responses from Arena’s API endpoint in your LMS webhook logs? Arena should be returning either a 200 success or an error code with details about what failed. That will tell you if the request is even reaching Arena correctly.

Also verify that your Arena training records are in a state that allows external updates. If the training workflow has manual approval steps or is locked for editing, the API update might fail silently. Check the training record workflow configuration to ensure API updates are permitted at the completion stage.