Upgrading from V1 to V2
If you’re starting to consider upgrading your application’s integration with SCORM Cloud to use our REST api, this document will be your guide.
The V2 API in many ways is a stark departure from the V1 API. Many of these changes are obvious and easy to digest (moving from XML to JSON for instance). However, close attention should be paid.
One of the goals we had in the release of our V2 API was aligning the semantics and functionality of the core of our API with Rustici Engine’s API. For that reason there are some smaller changes that may be less than obvious. For instance: setting defaults may have changed for some things. Postbacks come to mind initially, but keep an eye out in this document for others.
General Changes
Course Versions and Registration Instances
You’ll notice that versions of courses and instances of registrations now can be accessed individually. One important thing to note here is that whenever you get a course or registration and don’t specify an instance, the most recent instance or version is returned.
Postbacks
- The default
authType
has changed tohttpbasic
- The default
resultsFormat
has changed toactivity
- The POSTed payload will now be in JSON, unless otherwise specified
While postback settings can still be configured in the call to
CreateRegistration
, you won’t see them as part of the detail inGetRegistration
. Instead, you’ll read/update all settings for a registration via GetRegistrationConfiguration and SetRegistrationConfiguration respectively. In those calls they’ll also have different property names than they do when set viacreateRegistration
. Here’s the mapping:url
->ApiRollupRegistrationPostBackUrl
authType
->ApiRollupRegistrationAuthType
userName
->ApiRollupRegistrationAuthUser
password
->ApiRollupRegistrationAuthPassword
resultsFormat
->ApiRollupRegistrationFormat
legacy
->ApiRollupRegistrationIsJson
Because of the new configuration system, postback settings can now be configured at several different levels of the application. Meaning if all of your registrations will post to the same
url
, you can set this once at a lower level (course, dispatch, or application) and have that apply to all of the registrations within.
Other
- Application Service is now ApplicationManagement Service
- LRS Account Service is now Xapi Service
- The Tagging Service has been removed. Each resource has its own endpoints for tagging now.
Application Service
General Changes
- “Secret Keys” are now referred to as “Credentials”, and are given their own endpoints (no longer returned as part of the application detail)
rustici.application.getAppList
Replaced by: GetApplicationList
Request Changes:
- N/A
Response Changes:
Field | Change | Notes |
---|---|---|
createDate |
REMOVED | This is available via the replacement for rustici.application.getAppInfo |
rustici.application.getAppInfo
Replaced by: GetApplicationInfo
Request Changes:
Field | Change | Notes |
---|---|---|
includeCourseCount |
ADDED | Optionally return the course count for an application |
includeRegistrationCount |
ADDED | Optionally return the registration count for an application |
- Response Changes:
Field | Change | Notes |
---|---|---|
allowDeleteAPI |
RENAMED | allowDelete |
allowUpdateAPI |
REMOVED | Removed as this had semantic overlap with allowDelete |
secretKeys |
REMOVED | Secret keys are now listed via the GetCredentials method |
courseCount |
ADDED | Optional value added to return total course count for an application |
registrationCount |
ADDED | Optional value added to return total registration count for an application |
rustici.application.createApplication
Replaced by: CreateApplication
Request Changes:
- N/A
Response Changes:
- The list of credentials is no longer returned as part of the response, you’ll need to make a second call to GetCredentials
rustici.application.updateApplication
Replaced by: UpdateApplication
Request Changes:
- N/A
Response Changes:
204 - No Content
is returned instead of an application object
rustici.application.addSecretKey
Replaced by: CreateCredential
Request Changes
Field | Change | Notes |
---|---|---|
description |
RENAMED | name |
active |
ADDED | Credentials can now be created in either active or inactive state |
- Response Changes
- Only the created credential will be returned
rustici.application.updateSecretKey
Replaced by: UpdateCredential
Request Changes:
Field | Change | Notes |
---|---|---|
name |
RENAMED | description |
- Response Changes:
- N/A
rustici.application.deleteSecretKey
Replaced by: DeleteCredential
Request Changes:
- N/A
- N/A
Response Changes:
- N/A
Course Service
General Changes
- xAPI statements for registrations can now be obtained at the course level
rustici.course.importCourseAsync
Replaced by: CreateUploadAndImportCourseJob
Request Changes:
Field | Change | Notes |
---|---|---|
redirecturl |
REMOVED | No longer supported - this is easily implemented by the caller |
email |
REMOVED | Account event tracking is being moved into OAuth mechanism |
itemid |
REMOVED | Individual SCO import is no longer supported |
- Response Changes:
- Job token is always returned, since
redirecturl
is no longer an option
- Job token is always returned, since
rustici.course.getAsyncImportResult
Replaced by: GetImportJobStatus
Request Changes:
- N/A
Response Changes:
- Additional information returned
rustici.course.preview
Replaced by: BuildCoursePreviewLaunchLink
Request Changes:
Field | Change | Notes |
---|---|---|
versionid |
REMOVED | Use BuildCoursePreviewLaunchLinkWithVersion |
redirecturl |
RENAMED | redirectOnExitUrl |
- Response Changes:
- The results is no longer an automatic redirect. Instead a link is returned which points to the preview
rustici.course.properties
This method is no longer available in the V2 API. The extensible configuration system in the V2 API has replaced the concept of course properties. We’ve found that there are relatively few common configuration options that people rely on. This means the most sensible option is to select the configuration options that are most important to your users, and implement a simple UI around those, if needed.
rustici.course.exists
No longer available. For most workflows there are now different approaches to this call. For instance the mayCreateNewVersion
flag on imports is a control you can use to fail import requests if that courseId
already exists (and creating a new version isn’t intended). For other use cases a simple call to GetCourse should do the trick.
rustici.course.getAssets
Replaced by: GetCourseAsset for individual course assets - OR - GetCourseZip for full zip download
Request Changes:
Field | Change | Notes |
---|---|---|
path |
REMOVED | This is replaced by the standalone call to GetCourseAsset |
- Response Changes:
- N/A
rustici.course.updateAssets
Replaced by: UploadCourseAssetFile
Request Changes:
Field | Change | Notes |
---|---|---|
file |
ADDED | The course asset file provided on the request as POST form data |
destination |
ADDED | The relative path destination within the course structure |
updateAssetPolicy |
ADDED | Allows configuring behavior of the request based on the conditional existence of the resource targeted |
- Response Changes:
- The
filename
and thedestination
are returned
- The
rustici.course.deleteCourse
Replaced by: DeleteCourse
Request Changes:
Field | Change | Notes |
---|---|---|
email |
REMOVED | Account event tracking is being moved into OAuth mechanism |
- Response Changes:
- N/A
rustici.course.getFileStructure
Replaced by: GetCourseFileList
Request Changes:
- N/A
Response Changes:
- The response is no longer an XML object representing the file structure. Instead, it is now a flat list of objects with fully formed
path
strings which match the expectations of the other asset methods requiring a path.
- The response is no longer an XML object representing the file structure. Instead, it is now a flat list of objects with fully formed
rustici.course.deleteFiles
Replaced by: DeleteCourseAsset
Request Changes:
- Only one
path
parameter may be specified per request
- Only one
Response Changes:
204 - No Content
is returned instead of a list of results
rustici.course.getAttributes
Replaced by: GetCourseConfiguration or GetCourseVersionConfiguration
Request Changes:
Field | Change | Notes |
---|---|---|
versionid |
REMOVED | Refer to GetCourseVersionConfiguration |
- Response Changes:
- The configuration system has had a complete overhaul. Most setting names have changed, and additional settings are available. See the Configuration Overview for more information
rustici.course.updateAttributes
Replaced by: SetCourseConfiguration or SetCourseVersionConfiguration
Request Changes:
- The configuration system has had a complete overhaul. Most setting names have changed, and additional settings are available. See the Configuration Overview for more information
Response Changes:
- N/A
rustici.course.getMetadata
- Replaced by: GetCourse with
includeCourseMetadata=true
rustici.course.getManifest
- Replaced by: GetCourseAsset
rustici.course.getCourseList
Replaced by: GetCourses
Request Changes:
- Large expansion of sorting and filtering options available
Response Changes:
- Course objects return much higher level of detail
rustici.course.getCourseDetail
Replaced by: GetCourse and GetCourseVersions
Request Changes:
- N/A
Response Changes:
- Course versions are no longer returned as part of the course detail. Course versions have their own endpoints in the V2 API
rustici.course.importCourse
Not supported. All synchronous imports have been deprecated and replaced by the async job system.
Debug Service
rustici.debug.ping
No direct replacement as all V2 API calls require authentication. See PingAppId for the use case equivalent.
rustici.debug.authPing
- Replaced by: PingAppId
rustici.debug.getTime
Server time is now returned via the PingAppId
Dispatch Service
rustici.dispatch.getDestinationList
Replaced by: GetDestinations
Request Changes:
- Additional sorting and filtering mechanisms are available
Field | Change | Notes |
---|---|---|
page |
CHANGED | Paging is now handled by the more pagination token |
- Response Changes:
Field | Change | Notes |
---|---|---|
createdBy |
CHANGED | Now returned as the email parameter instead of a name |
more |
ADDED | Replaces the page parameter for pagination |
rustici.dispatch.getDestinationInfo
Replaced by: GetDestination
Request Changes:
- N/A
Response Changes:
- Additional fields returned
- Additional fields returned
Field | Change | Notes |
---|---|---|
createdBy |
CHANGED | Now returned as the email parameter instead of a name |
rustici.dispatch.createDestination
Replaced by: CreateDestinations
Request Changes:
- Multiple destinations may be created at the same time
Field | Change | Notes |
---|---|---|
id |
ADDED | Destination ID now supplied by the caller |
notes |
ADDED | Notes may now be specified |
- Response Changes:
204 - No Content
is returned instead of the destination ID
rustici.dispatch.updateDestination
Replaced by: SetDestination
Request Changes:
- This call will now create the destination if it doesn’t exist
Response Changes: N/A
rustici.dispatch.deleteDestination
Replaced by: DeleteDestination
Request Changes: N/A
Response Changes: N/A
rustici.dispatch.getDispatchList
Replaced by: GetDispatches
Request Changes:
- Additional sorting and filtering mechanisms are available
Field | Change | Notes |
---|---|---|
destinationid |
REMOVED | Use GetDestinationDispatches |
page |
CHANGED | Paging is now handled by the more pagination token |
- Response Changes:
- Postback information no longer returned
Field | Change | Notes |
---|---|---|
createdBy |
CHANGED | Now returned as the email parameter instead of a name |
more |
ADDED | Replaces the page parameter for pagination |
rustici.dispatch.getDispatchInfo
Replaced by: GetDispatch
Request Changes:
Field | Change | Notes |
---|---|---|
registrationid |
REMOVED | REVIEW |
- Response Changes:
- Postback information no longer returned
rustici.dispatch.createDispatch
Replaced by: CreateDispatches
Request Changes:
- Multiple dispatches can be created at the same time across multiple destinations
Field | Change | Notes |
---|---|---|
id |
ADDED | Destination ID now supplied by the caller |
- Response Changes: N/A
rustici.dispatch.updateDispatches
Replaced by: UpdateDispatch
Request Changes:
Field | Change | Notes |
---|---|---|
addTags |
REMOVED | Use PutDispatchTags |
removeTags |
REMOVED | Use DeleteDispatchTags |
open |
REMOVED | REVIEW |
registrationcount |
REMOVED | REVIEW |
- Response Changes: N/A
rustici.dispatch.downloadDispatches
Replaced by: GetDestinationDispatchZip
Request Changes:
destinationid
is a required parametercourseid
is not an available filter here, asdestinationid
is required
Response Changes:
- Returned MIME type is
application/zip
- Returned MIME type is
rustici.dispatch.deleteDispatches
Replaced by: DeleteDispatches
Request Changes:
- Additional filters have been added
Response Changes:
204 - No Content
is returned, along with a header signaling how many dispatches were deleted
Invitation Service
The V2 Invitation Service has split out the concept of public and private invitations into separate endpoints.
Additionally UserInvitations
have been given their own endpoints. This allows to see the connection between an invitation and the person who was invited.
rustici.invitation.createInvitation
Synchronous invitation jobs have been deprecated in favor of the async job system.
rustici.invitation.createInvitationAsync
Replaced by:
Request Changes:
- The list of relevant parameters has been split between the two replacement calls. See their documentation for that information
Response Differences:
- The relevant response fields have been split between the two replacement calls. See their documentation for that information
rustici.invitation.getInvitationStatus
Replaced by: GetPrivateInvitationJobStatus
Request Changes: N/A
Response Changes:
- Additional information about the job is returned
rustici.invitation.getInvitationInfo
Replaced by:
Request Changes:
- The list of relevant parameters has been split between the two replacement calls. See their documentation for that information
Response Changes:
- The relevant response fields have been split between the two replacement calls. See their documentation for that information
rustici.invitation.getInvitationList
Replaced by: GetAllInvitations
Request Changes:
- Additional filters available
Response Changes:
- Information specific to either public or private invitations is missing now from this overview response. For lists of those types of invitations see GetPublicInvitations or GetPrivateInvitations
rustici.invitation.changeStatus
Replaced by:
Request Changes:
- The list of relevant parameters has been split between the two replacement calls. See their documentation for that information
Response Changes:
- The relevant response fields have been split between the two replacement calls. See their documentation for that information
LRS Service
General Changes
Activity Providers have been renamed as Credentials
rustici.lrsaccount.createActivityProvider
- Replaced by: CreateXapiCredential
rustici.lrsaccount.listActivityProviders
- Replaced by: GetXapiCredentials
rustici.lrsaccount.editActivityProvider
- Replaced by: SetXapiCredential
rustici.lrsaccount.deleteActivityProvider
- Replaced by: DeleteXapiCredential
Registration Service
rustici.registration.createRegistration
Replaced by: CreateRegistration
Request Changes: N/A
Response Changes: N/A
rustici.registration.exists
Replaced by: GetRegistration
Request Changes: N/A
Response Changes:
- Note
200
status is returned here rather than204
as this is a RESTful HEAD request which should mirror the response of the GET
- Note
rustici.registration.deleteRegistration
Replaced by: DeleteRegistration
Request Changes: N/A
Response Changes: N/A
rustici.registration.resetRegistration
Replaced by: DeleteRegistrationProgress
Request Changes: N/A
Response Changes: N/A
rustici.registration.getRegistrationList
Replaced by:
Request Changes:
Field | Change | Notes |
---|---|---|
after |
CHANGED | Renamed to since and is now inclusive |
- Response Changes:
- The list is now paginated. Additional results exist if the
more
token is returned - Instances are no longer returned as part of the registration. Use GetRegistrationInstances to obtain instance information
- The list is now paginated. Additional results exist if the
rustici.registration.getRegistrationDetail
Replaced by:
Request Changes:
- This method has boolean flags for additional information, which make it a replacement as well for
rustici.registration.getRegistrationResult
- This method has boolean flags for additional information, which make it a replacement as well for
Response Changes: N/A
- Instances are no longer returned as part of the registration. Use GetRegistrationInstanceProgress instead for details of particular instances
- Full registration details may now be pulled when optional query flags are passed in the request
rustici.registration.getRegistrationResult
Registration Results are no longer separate from the details of a registration.
- Replaced by: GetRegistrationProgress
rustici.registration.getRegistrationListResults
Registration Results are no longer separate from the details of a registration.
- Replaced by: GetRegistrations
rustici.registration.launch
Replaced by: BuildRegistrationLaunchLink
Request Changes:
Field | Change | Notes |
---|---|---|
redirecturl |
RENAMED | redirectOnExitUrl |
cssurl |
RENAMED | cssUrl |
disableTracking |
CHANGED | Renamed to tracking and logic inverted |
expiry |
ADDED | Defines length of validity of the returned link |
- Response Changes:
- The response is no longer an automatic redirect to the launch. Now a link is returned, and following that link will result in a launch
rustici.registration.getLaunchHistory
Replaced by: GetRegistrationLaunchHistory
Request Changes: N/A
Response Changes:
Field | Change | Notes |
---|---|---|
completion |
RENAMED | completionStatus |
satisfaction |
RENAMED | successStatus |
experienced_duration_tracked |
RENAMED | totalSecondsTracked |
rustici.registration.getLaunchInfo
- Replaced by: GetRegistrationLaunchHistory
rustici.registration.resetGlobalObjective
Replaced by: DeleteRegistrationGlobalData
Request Changes: N/A
Response Changes: N/A
rustici.registration.updateLearnerInfo
Replaced by: UpdateLearnerInfo
Request Changes: N/A
Response Changes: N/A
rustici.registration.getPostbackInfo
Replaced by: GetRegistrationConfiguration
Request Changes: N/A
Response Changes:
- The postbacks settings are now returned along with the full list of configuration settings. Additionally the names have changed for the settings. See: Configuration Settings Reference
rustici.registration.updatePostbackInfo
Replaced by: SetRegistrationConfiguration
Request Changes:
- The request object is now a generic setting list. See: Configuration Settings Reference
Response Changes: N/A
rustici.deletePostbackInfo
Replaced by: DeleteRegistrationConfigurationSetting
Request Changes:
- Each setting should be cleared individually
Response Changes: N/A
rustici.registration.testRegistrationPostUrl
Replaced by: TestRegistrationPostback
Request Changes: N/A
Response Changes: N/A
Reporting Service
rustici.reporting.getAccountInfo
Replaced by: GetAccountInfo
Request Changes: N/A
Response Changes: N/A
rustici.reporting.getReportageAuth
Replaced by: GetReportageAuthToken
Request Changes: N/A
Response Changes: N/A
rustici.reporting.launchReport
Replaced by: GetReportageLink
Request Changes: N/A
Response Changes:
- The response is no longer an automatic redirect. Instead the link to the report will be returned.
Tagging Service
All tagging methods have been moved into the resources that are available for tagging. The following resources have tagging enabled:
- Course Service
- Dispatch Service
- Invitation Service
- Learner Service
- Registration Service
The semantics of tagging across all methods in the above mentioned services are identical.