Course imports
A web page or a course file (Moodle, Common Cartridge, Blackboard, SCORM, PDF, Word, GIFT and more) organised into a course you can review.
- Price20 credits (£2.00) per import (web page, PDF, Word, SCORM or zip)
- Typical time20 s to 10 min
- Scope
authoring:write - Runs asA background job
Run course imports in the sandbox
No key and nothing to pay. The sandbox returns a realistic example in a couple of seconds; no AI runs and no data is kept.
- Queued202 and a job id, straight away
- ProcessingPoll, stream or wait for a webhook
- SucceededResult and files on the job
Import from a public web page (url) or from a course file you uploaded with POST /v1/files (file).
Web pages. EduMark fetches the page safely, follows related lesson pages on the same site, removes menus, adverts and anything unsafe, and organises the teaching content into modules and lessons. The source wording is kept: nothing is invented.
Course files. EduMark reads Moodle backups (.mbz), IMS Common Cartridge and Canvas exports, Blackboard exports, SCORM 1.2 and 2004 packages, IMS content packages, xAPI and cmi5 packages, H5P activities, PDF and Word documents, and GIFT, Aiken, QTI or Moodle XML question files, with the same importers as the EduMark course library. Lessons, quizzes with their questions and answers, and assignments come across as they are, with no AI. The receipt says what was kept, changed or left out. Upload the file first: POST /v1/files, PUT the bytes, then POST /v1/files/{id}/complete and wait for ready. Course files can be up to 2 GiB.
The result is portable JSON. Set save_to_lms to also create an unpublished draft course in EduMark (the key needs courses:write); a saved course keeps its pictures, files and playable SCORM, xAPI and H5P packages.
Requires authoring:write. Costs 20 credits per import (web page, PDF, Word, SCORM or zip). Send a unique Idempotency-Key; reuse it with the identical body when retrying. Returns 202 with a job: poll GET /jobs/{job_id}, stream GET /jobs/{job_id}/events, or use a signed webhook.
Course imports
POST/v1/authoring/course-imports
Scope authoring:write
Headers
| Field | Details |
|---|---|
Idempotency-Key | stringRequiredA unique key per new operation; reuse it with the identical body when retrying. |
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Request body
| Field | Details |
|---|---|
url | string, optionalA public HTTPS page to import, for example a lesson or a course contents page. Related lesson pages on the same site are followed (up to 20 pages). Send url or file, not both.Up to 2,048 charactersPattern ^https:// |
file | FileReference, optionalA course file uploaded with POST /v1/files (status ready): a Moodle backup (.mbz), IMS Common Cartridge or Canvas export (.imscc or .zip), Blackboard export, SCORM 1.2 or 2004, IMS content package, xAPI or cmi5, or H5P zip; a PDF or Word document; or a GIFT, Aiken, QTI or Moodle XML question file. Course files can be up to 2 GiB. Send url or file, not both. |
file_idfile.file_id | stringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.Pattern ^file_[a-f0-9]{32}$ |
course_focus | string, optionalWhat the course should concentrate on (web pages only).Up to 500 characters |
intended_audience | string, optionalWho the course is for (web pages only).Up to 500 characters |
desired_outcomes | string, optionalWhat learners should be able to do afterwards (web pages only).Up to 500 characters |
title | string, optionalThe course title. Taken from the page or file when left out.Up to 200 characters |
save_to_lms | booleanAlso create an unpublished draft course in EduMark (needs the courses:write permission) and return its id.Default false |
Responses
| Status | Meaning |
|---|---|
| 202 | Successful Response |
| 400 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 401 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 402 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 403 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 404 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 409 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 410 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 413 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 415 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 422 | Validation Error |
| 429 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 503 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
Files and errors
Product errors
COURSE_IMPORT_SOURCE_REQUIREDHTTP 422. Send either a url or a file to import, not both.COURSE_IMPORT_FILE_UNSUPPORTEDHTTP 422. Course imports take Moodle backups (.mbz), Common Cartridge (.imscc), Blackboard, SCORM, IMS content package, xAPI/cmi5 and H5P zips, PDF and Word documents, and GIFT, Aiken, QTI or Moodle XML question files.API_FILE_NOT_READYHTTP 409. The file is still being checked. Retry when its status is ready.PACKAGE_UNRECOGNISEDOn the finished job. We couldn't recognise this file as a course package.PACKAGE_EMPTYOn the finished job. We read the package but found nothing we could turn into lessons, quizzes or assignments.COURSE_CONTENT_NOT_FOUNDOn the finished job. We could not find any readable text in this document.