ScormCourse
A request or response body; the type column links to the schemas it refers to.
ScormCourse
| Field | Type | Required | Description |
|---|---|---|---|
| id | string (uuid) | yes | — |
| organization_id | string (uuid) | yes | — |
| owner_department_id | string (uuid) | null | yes | Owning department within the organization; null = owned by the organization directly. Scopes which scorm:read/scorm:write grants cover the course, and narrows who may take it: an organization-owned course is open to every member, a department-owned one only to the owning department's role holders. |
| name | string | yes | — |
| description | string | null | yes | — |
| audience | string | yes | Whom the course is for. trainees: everyone its ownership admits — every member for an organization-owned course, the owning department's role holders for a department-owned one — trainers included. trainers: only holders of scorm:read over the course's owner, for modules that teach how to run the training rather than the training itself; the course is absent from everyone else's list and launches. one of "trainees" | "trainers" |
| subjects | array of ScormCourseSubject | yes | The subject matters every completion record is filed under, alphabetically; empty for an untagged course. |
| scorm_version | string | yes | SCORM revision detected from the package's imsmanifest.xml. one of "scorm-1.2" | "scorm-2004" | "unknown" |
| launch_path | string | yes | Zip-entry path (optionally with a query string) of the launch resource. |
| mastery_score | number | null | yes | SCORM 1.2 adlcp:masteryscore (0-100) from the manifest, if declared. |
| package_file_name | string | yes | — |
| package_size_bytes | integer | yes | — |
| package_replaced_at | string (date-time) | null | yes | When the package was last replaced in place through PUT /scorm-courses/{course_id}/package; null while the original upload is served. |
| current_package_version | integer | yes | The package version the course serves to fresh attempts: 1 for the registered upload, one more per replacement. The package fields above describe it; GET /scorm-courses/{course_id}/package-versions lists every version. |
| recertification_required_at | string (date-time) | null | yes | When recertification was last required by a package replacement, for display; null when every completion on record still counts. |
| recertification_required_from_version | integer | null | yes | Completions count from this package version on: a completion of an attempt on an earlier version no longer satisfies scorm_course_complete rules, so certified learners must complete the course again. Null when every version counts. |
| created_by | string | null | yes | — |
| created_at | string (date-time) | yes | — |
| archived_at | string (date-time) | null | yes | An archived course is hidden from learners and takes no new attempts. |
{
"id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
"organization_id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
"owner_department_id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
"name": "string",
"description": "string",
"audience": "trainees",
"subjects": [
{
"id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
"slug": "string",
"name": "string"
}
],
"scorm_version": "scorm-1.2",
"launch_path": "string",
"mastery_score": 0,
"package_file_name": "string",
"package_size_bytes": 0,
"package_replaced_at": "2026-01-01T00:00:00.000Z",
"current_package_version": 0,
"recertification_required_at": "2026-01-01T00:00:00.000Z",
"recertification_required_from_version": 0,
"created_by": "string",
"created_at": "2026-01-01T00:00:00.000Z",
"archived_at": "2026-01-01T00:00:00.000Z"
}