Migrating from SCORM Cloud
This guide helps you migrate from SCORM Cloud to the AllureLMS SCORM API.
Overview
The AllureLMS SCORM API provides similar functionality to SCORM Cloud with some key differences. This guide will help you understand the differences and migrate your integration.
Key Differences
Authentication
SCORM Cloud:
- App ID and Secret Key authentication
- OAuth 2.0 for some operations
AllureLMS SCORM API:
- API Key authentication (simpler)
- Clerk authentication for web users
- Tenant-based isolation
API Structure
SCORM Cloud:
- REST API with app-specific base URLs
- Different endpoints for different operations
AllureLMS SCORM API:
- Unified REST API
- Consistent endpoint structure
- Standard HTTP status codes
Package Management
SCORM Cloud:
- Upload via
uploadService.uploadCourse() - Package processing is asynchronous
AllureLMS SCORM API:
- Upload via
POST /api/v1/packages/upload-url→PUTto storage →POST /api/v1/packages/process - Package processing runs on the process step
- Webhook notifications for completion (where configured)
Migration Steps
Step 1: Set Up AllureLMS SCORM API
- Create Account: Sign up for AllureLMS SCORM API
- Get API Key: Generate an API key from the dashboard
- Get Tenant ID: Note your tenant UUID
Step 2: Update Authentication
Before (SCORM Cloud):
const appId = 'your-app-id';
const secretKey = 'your-secret-key';
After (AllureLMS SCORM API):
const apiKey = 'scorm_live_abc123...';
const tenantId = '550e8400-e29b-41d4-a716-446655440000';
Step 3: Update Package Upload
Before (SCORM Cloud):
const uploadService = new UploadService(appId, secretKey);
const result = await uploadService.uploadCourse(file);
After (AllureLMS SCORM API):
const base = 'https://app.allureconnect.com';
const auth = { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' };
const mint = await fetch(`${base}/api/v1/packages/upload-url`, {
method: 'POST',
headers: auth,
body: JSON.stringify({
tenant_id: tenantId,
uploaded_by: userId,
filename: file.name,
file_size: file.size,
}),
});
if (!mint.ok) {
throw new Error(`Mint failed: ${mint.status} ${await mint.text()}`);
}
const ticket = await mint.json();
const put = await fetch(ticket.presigned_url, {
method: 'PUT',
headers: ticket.required_put_headers,
body: file,
});
if (!put.ok) {
throw new Error(`Storage PUT failed: ${put.status} ${await put.text()}`);
}
const proc = await fetch(`${base}/api/v1/packages/process`, {
method: 'POST',
headers: auth,
body: JSON.stringify({
tenant_id: tenantId,
uploaded_by: userId,
storage_path: ticket.storage_path,
original_filename: file.name,
}),
});
const procText = await proc.text();
if (!proc.ok) {
throw new Error(`Process failed: ${proc.status} ${procText}`);
}
const result = JSON.parse(procText);
Step 4: Update Session Launch
Before (SCORM Cloud):
const registrationService = new RegistrationService(appId, secretKey);
const launchLink = await registrationService.createLaunchLink(registrationId);
After (AllureLMS SCORM API):
const response = await fetch(`https://app.allureconnect.com/api/v1/packages/${packageId}/launch`, {
method: 'POST',
headers: {
'X-API-Key': apiKey,
'Content-Type': 'application/json',
},
body: JSON.stringify({
user_id: userId,
session_id: sessionId,
}),
});
const launch = await response.json();
// Use launch.launch_url in iframe
Step 5: Update CMI Data Access
Before (SCORM Cloud):
const reportingService = new ReportingService(appId, secretKey);
const results = await reportingService.getRegistrationResults(registrationId);
After (AllureLMS SCORM API):
const response = await fetch(`https://app.allureconnect.com/api/v1/sessions/${sessionId}`, {
headers: {
'X-API-Key': apiKey,
},
});
const session = await response.json();
// Access CMI data via session.cmi_data
Step 6: Set Up Webhooks
Before (SCORM Cloud):
- Uses callback URLs for some operations
After (AllureLMS SCORM API):
// Create webhook
const response = await fetch('https://app.allureconnect.com/api/v1/webhooks', {
method: 'POST',
headers: {
'X-API-Key': apiKey,
'Content-Type': 'application/json',
},
body: JSON.stringify({
tenant_id: tenantId,
url: 'https://your-app.com/webhook',
secret: 'webhook-secret',
event_type: 'package.processing.completed',
}),
});
Feature Mapping
| SCORM Cloud Feature | AllureLMS SCORM API Equivalent |
|---|---|
uploadService.uploadCourse() |
Presigned upload: POST /api/v1/packages/upload-url → PUT → POST /api/v1/packages/process |
registrationService.createLaunchLink() |
POST /api/v1/packages/{id}/launch |
reportingService.getRegistrationResults() |
GET /api/v1/sessions/{id} |
courseService.getCourseList() |
GET /api/v1/packages |
| Callback URLs | Webhooks (POST /api/v1/webhooks) |
Data Migration
If you need to migrate existing SCORM Cloud data:
- Export Data: Export package metadata and session data from SCORM Cloud
- Re-upload Packages: Upload packages to AllureLMS SCORM API
- Recreate Sessions: Create new sessions for existing learners (if needed)
- Update References: Update all package and session IDs in your system
Testing Checklist
After migration, test:
- Package uploads work correctly
- Sessions launch successfully
- CMI data is saved and retrieved
- Webhooks are received and processed
- Error handling works as expected
- Rate limiting is respected
- All integrations function properly
Support
For migration assistance:
- Documentation: See API Reference
- Support: Email support@allurelms.com
- Troubleshooting: See Troubleshooting Guide
Last Updated: 2025-01-15