V2 Migration Guide

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 to httpbasic
  • The default resultsFormat has changed to activity
  • 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 in GetRegistration. 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 via createRegistration. 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

Field Change Notes
createDate REMOVED This is available via the replacement for rustici.application.getAppInfo


rustici.application.getAppInfo

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

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

Field Change Notes
name RENAMED description
  • Response Changes:
    • N/A


rustici.application.deleteSecretKey




Course Service

General Changes

  • xAPI statements for registrations can now be obtained at the course level


rustici.course.importCourseAsync

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


rustici.course.getAsyncImportResult

  • Replaced by: GetImportJobStatus

  • Request Changes:

    • N/A
  • Response Changes:

    • Additional information returned


rustici.course.preview

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

Field Change Notes
path REMOVED This is replaced by the standalone call to GetCourseAsset
  • Response Changes:
    • N/A


rustici.course.updateAssets

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 the destination are returned


rustici.course.deleteCourse

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.


rustici.course.deleteFiles

  • Replaced by: DeleteCourseAsset

  • Request Changes:

    • Only one path parameter may be specified per request
  • Response Changes:

    • 204 - No Content is returned instead of a list of results


rustici.course.getAttributes

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


rustici.course.getMetadata

  • Replaced by: GetCourse with includeCourseMetadata=true


rustici.course.getManifest


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


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
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


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

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

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 parameter
    • courseid is not an available filter here, as destinationid is required
  • Response Changes:

    • Returned MIME type is application/zip


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


rustici.invitation.getInvitationInfo


rustici.invitation.getInvitationList

  • Replaced by: GetAllInvitations

  • Request Changes:

    • Additional filters available
  • Response Changes:


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

rustici.lrsaccount.listActivityProviders

rustici.lrsaccount.editActivityProvider

rustici.lrsaccount.deleteActivityProvider




Registration Service

rustici.registration.createRegistration


rustici.registration.exists

  • Replaced by: GetRegistration

  • Request Changes: N/A

  • Response Changes:

    • Note 200 status is returned here rather than 204 as this is a RESTful HEAD request which should mirror the response of the GET


rustici.registration.deleteRegistration


rustici.registration.resetRegistration


rustici.registration.getRegistrationList

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


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
  • 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.


rustici.registration.getRegistrationListResults

Registration Results are no longer separate from the details of a registration.


rustici.registration.launch

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

Field Change Notes
completion RENAMED completionStatus
satisfaction RENAMED successStatus
experienced_duration_tracked RENAMED totalSecondsTracked


rustici.registration.getLaunchInfo


rustici.registration.resetGlobalObjective


rustici.registration.updateLearnerInfo


rustici.registration.getPostbackInfo


rustici.registration.updatePostbackInfo


rustici.deletePostbackInfo


rustici.registration.testRegistrationPostUrl




Reporting Service

rustici.reporting.getAccountInfo

  • Replaced by: GetAccountInfo

  • Request Changes: N/A

  • Response Changes: N/A


rustici.reporting.getReportageAuth


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.