The Activity Upload API lets an external system create learning activities in Activate LMS programmatically: create a new activity (a SCORM package or a course/container), or add a language version to an existing activity. It is used for integrations such as iGIL and Istak.
The API is reached through the Activate LMS Frontend API. All calls are multipart/form-data POST requests.
Base URL (production): https://api2.activatelms.com
Authentication
Every request includes two fields that identify and authenticate the caller:
| Field | Description |
|---|---|
key | The API security key issued to your tenant by Activate LMS. |
origin | The origin of your calling system, e.g. https://skoli.istak.is. A full URL is recommended; a bare host name (skoli.istak.is) is also accepted. |
The key + origin pair is validated against your tenant's configuration. An invalid pair returns 401 Unauthorized.
There is no separate token exchange — the key and origin are sent with each request. Always call the API over HTTPS so the key is never exposed in transit.
Endpoint: Create a new activity
POST /api/activityupload/new
Content-Type: multipart/form-data
Form fields
| Field | Type | Required | Description |
|---|---|---|---|
key | string | Yes | Your API security key. |
origin | string | Yes | Your system's origin. |
activityType | string | Yes | "scorm" or "course" — see Activity types below. |
name | string | Yes | The activity name. Also used as the title of the first language version. |
userName | string | Yes | Username of the uploading user. This user becomes the activity owner. |
organisationIds | string | No | Comma-separated list of organisation (department) IDs the activity belongs to. Omit, leave empty, or send -1 to make it available to all organisations. |
parentActivityId | integer | No | Place the new activity under this parent course. The parent must be a course that belongs to your tenant — a SCORM activity cannot contain other activities. Omit, or send 0 or -1, to create the activity at the top level. |
file | binary | Conditional | The SCORM .zip package. Required when activityType is "scorm"; ignored for "course". |
Activity types
activityType | Meaning |
|---|---|
"scorm" | A SCORM e-learning package (a .zip containing imsmanifest.xml). This is leaf content — it cannot contain other activities. |
"course" | A course — a container with no file of its own. Used to group SCORM activities (and other courses) into a hierarchy. |
A typical workflow: first create a "course", then create "scorm" activities with parentActivityId set to the course's activityId. Only a course can be a parent; a SCORM activity is always a leaf.
Behaviour
- The first language version is created automatically in your tenant's default language. You do not send a language for this endpoint.
- For a SCORM activity, the package is unpacked, its
imsmanifest.xmlis parsed, and the content files are stored. The description is taken from the SCORM manifest when present. - Maximum upload size: 500 MB.
Example — create a course
curl -X POST https://api2.activatelms.com/api/activityupload/new \
-F "key=YOUR-API-KEY" \
-F "origin=https://skoli.istak.is" \
-F "activityType=course" \
-F "name=HSE Training 2026" \
-F "userName=jon.jonsson"
Example — upload a SCORM activity into that course
curl -X POST https://api2.activatelms.com/api/activityupload/new \
-F "key=YOUR-API-KEY" \
-F "origin=https://skoli.istak.is" \
-F "activityType=scorm" \
-F "name=HSE Presentation - Fossvogsbru" \
-F "userName=jon.jonsson" \
-F "organisationIds=81,27293" \
-F "parentActivityId=12345" \
-F "file=@hse-presentation.zip"
Success response — 201 Created
{ "activityId": 12346 }
Endpoint: Add a language version
POST /api/activityupload/addlanguage
Content-Type: multipart/form-data
Adds an additional language version to an activity that already exists. Only the language version is created — the activity itself is not modified.
Form fields
| Field | Type | Required | Description |
|---|---|---|---|
key | string | Yes | Your API security key. |
origin | string | Yes | Your system's origin URL. |
activityId | integer | Yes | The existing activity to add a language version to. Must belong to your tenant. |
languageId | string | Yes | The language culture code for this version, e.g. da-DK, is-IS, en-GB. Must be a language enabled in Activate LMS. |
name | string | Yes | The title for this language version. |
file | binary | Conditional | The SCORM .zip package for this language. Required when the target activity is a SCORM activity; not needed for a course/container. |
Example
curl -X POST https://api2.activatelms.com/api/activityupload/addlanguage \
-F "key=YOUR-API-KEY" \
-F "origin=https://skoli.istak.is" \
-F "activityId=12345" \
-F "languageId=is-IS" \
-F "name=HSE kynning - Fossvogsbru" \
-F "file=@hse-presentation-is.zip"
Success response — 201 Created
{ "activityId": 12345 }
(activityId is the same activity — a language version was added to it.)
Error responses
On failure the response body is:
{ "errorMessage": "<description>" }
| HTTP status | Meaning | Examples |
|---|---|---|
400 Bad Request | Invalid or missing input | activityType not "scorm" or "course"; missing file for a SCORM activity; SCORM package has no imsmanifest.xml; parentActivityId not a course; parentActivityId or activityId not found in your tenant; userName not found. |
401 Unauthorized | Authentication failed | key or origin not recognised. |
500 Internal Server Error | Unexpected server error | Contact Activate LMS support with the timestamp. |
SCORM package requirements
- The package must be a
.zipfile containing a validimsmanifest.xmlat the root. - SCORM 1.2 and SCORM 2004 are supported.
- The manifest supplies the activity description, launch URL, and (for SCORM 2004) passing-score and completion-threshold values where present.
- Maximum package size: 500 MB.
Notes and recommendations
- Idempotency: The API does not deduplicate. If you POST the same package twice you get two separate activities. Wait for the
201response before retrying — do not retry blindly on a timeout. - One activity, multiple languages: Create the activity once with
/new, then call/addlanguageonce per additional language. Each language version has its own SCORM package. - Organisations: Use real department IDs from your Activate LMS configuration.
-1or an empty value means "all organisations". - Owner: The
userNameyou send becomes the activity owner and must be an existing Activate LMS user in your tenant.
Support
Contact your Activate LMS representative for:
- Your API security key and the registered origin URL.
- The list of valid organisation (department) IDs and language codes for your tenant.