Authenticate to the SCORM Cloud v2 API using HTTP Basic auth with your appId and secret key as username and password
Confirm the course exists by GET /v2/courses/{courseId}; if not present, upload the SCORM package first via POST /v2/courses/importJobs/upload
POST /v2/registrations with a JSON body containing courseId, registrationId (caller-defined UUID), and learner object (id and name) to create the registration
Build a launch URL by POST /v2/registrations/{registrationId}/launchLink with redirectOnExitUrl set to your LMS callback URL
Deliver the launch URL to the learner; after they complete the course, call GET /v2/registrations/{registrationId}/results?includeRuntime=true to retrieve registrationCompletion (COMPLETED/INCOMPLETE) and registrationSuccess (PASSED/FAILED/UNKNOWN)
Parse the score.scaled value from the results for grade passback; handle the case where registrationCompletion is COMPLETED but registrationSuccess is UNKNOWN (course has no passing threshold)
Known gotchas
SCORM Cloud results can lag behind the learner's session completion by several seconds due to asynchronous rollup — polling immediately after the redirectOnExitUrl callback fires may return stale INCOMPLETE status; implement a short delay or use the postback/webhook feature instead
The registrationId is caller-supplied and must be unique; reusing a registrationId for the same learner on the same course resets their prior completion data including score — treat it as an immutable identifier
SCORM 1.2 courses report completion as cmi.core.lesson_status while SCORM 2004 uses cmi.completion_status and cmi.success_status; SCORM Cloud normalizes these into registrationCompletion and registrationSuccess but edge cases arise with poorly authored packages that set neither
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp