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
  • Scopeauthoring:write
  • Runs asA background job
Try it

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.

A 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.
What the course should concentrate on (web pages only).
Who the course is for (web pages only).
What learners should be able to do afterwards (web pages only).
The course title. Taken from the page or file when left out.
Also create an unpublished draft course in EduMark (needs the courses:write permission) and return its id.
  1. Queued202 and a job id, straight away
  2. ProcessingPoll, stream or wait for a webhook
  3. SucceededResult and files on the job
Every AI request runs as a background job, so nothing times out.

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

Course imports: headers
FieldDetails
Idempotency-KeystringRequiredA unique key per new operation; reuse it with the identical body when retrying.
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Course imports: request body
FieldDetails
urlstring, 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://
fileFileReference, 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_idstringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.Pattern ^file_[a-f0-9]{32}$
course_focusstring, optionalWhat the course should concentrate on (web pages only).Up to 500 characters
intended_audiencestring, optionalWho the course is for (web pages only).Up to 500 characters
desired_outcomesstring, optionalWhat learners should be able to do afterwards (web pages only).Up to 500 characters
titlestring, optionalThe course title. Taken from the page or file when left out.Up to 200 characters
save_to_lmsbooleanAlso create an unpublished draft course in EduMark (needs the courses:write permission) and return its id.Default false

Responses

StatusMeaning
202Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
402Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request 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.