Docs

SCORM packages

Host a SCORM package and play it as-is — no conversion. An uploaded package becomes a course (type: "scorm") with the normal share, embed, and tracking machinery: learners play the original package exactly as it was authored, and completion, score, and time land on the same tracking objects as any other course.

How it works

Hosting a package is a three-step flow:

  1. Request a signed upload URL and PUT the package zip to it.
  2. Create the course from the upload — validation and extraction run asynchronously.
  3. Poll the status endpoint until the package is ready (or failed with a reason).

Once ready, deliver it like any course: the share link plays it for learners, or issue an embed URL with POST /embed/scorm. Each embed learner arrives with your identifier, so playback is attributed and billed per tenant exactly like course embeds. Learner results come back through the standard Tracking API.

Supported packages

  • SCORM 1.2 and SCORM 2004 (3rd/4th Edition), single-SCO or simple multi-SCO.
  • Packages that rely on SCORM 2004 sequencing rules (activity trees, rollup rules, global objectives) are rejected at upload with a clear reason rather than played incorrectly. Standard exports from tools like Articulate Rise and Storyline are fine — their default sequencing boilerplate is supported.
  • Uploads are zip files, up to 200 MB per package by default.

What a SCORM course doesn't do

A hosted package is never editable: it can't be opened in a builder, translated, or re-exported as SCORM. The original zip is always downloadable byte-for-byte instead.

Request an upload URL Add-on

Returns a signed URL and an upload hash. PUT the zip bytes to the URL with Content-Type: application/zip, then pass the hash to the create endpoint. The signed URL expires after one hour.

POST/v1/headless/scorm-package/upload

Parameter metadata is unavailable for this endpoint, but request examples are still shown.

Create a hosted SCORM course Add-on

Creates the course from an uploaded package. The response returns immediately with the new courseId and a package status of uploaded — manifest validation and content extraction run in the background, typically completing in under a minute. The course title comes from the package manifest once processing finishes.

POST/v1/headless/scorm-package

Parameter metadata is unavailable for this endpoint, but request examples are still shown.

Get processing status Add-on

Poll this endpoint after creating the course. status moves through:

  • uploaded → queued for processing.
  • processing → validating and extracting.
  • ready → playable; launch describes the package's SCOs.
  • failed → rejected or errored; error is a human-readable reason and errorCode a machine code.

Rejection codes:

  • no_manifest — the zip has no imsmanifest.xml.
  • unsupported_version — not SCORM 1.2 or 2004.
  • no_launchable_sco — no launchable SCO resource, or its launch file is missing from the zip.
  • sequencing_present — the package uses SCORM 2004 sequencing rules, which aren't supported.
  • not_zip, zip_bomb, too_many_files, unsafe_paths — the archive itself is invalid or unsafe.

A rejection is terminal: fix the package in your authoring tool and upload it again (which creates a new course), or convert it into an editable course with the Generate API instead.

GET/v1/headless/scorm-package/{courseId}

Parameter metadata is unavailable for this endpoint, but request examples are still shown.

Download the original package Add-on

Returns a short-lived download URL for the original uploaded zip, byte-for-byte. This is the replacement for SCORM export on hosted packages.

GET/v1/headless/scorm-package/{courseId}/download

Parameter metadata is unavailable for this endpoint, but request examples are still shown.

Issue a SCORM embed URL Add-on

Issues a signed embed URL for a hosted SCORM course, following the same pattern as POST /embed/course. With action: "view" (the default) the learner plays the package; their progress is recorded against the identifier you pass. With action: "edit" the embed shows a read-only package overview for the uploader — there is no builder for SCORM courses.

A learner who leaves mid-package resumes where they left off on their next launch (suspend data and location persist per learner).

POST/v1/headless/embed/scorm

Parameter metadata is unavailable for this endpoint, but request examples are still shown.