Course outlines

A course outline (modules, lessons, quizzes and outcomes) drafted from a brief, your text or a document.

  • Price5 credits (50p) per draft
  • Typical time15 s to 2 min
  • Scopeauthoring:write
  • Runs asA background job
Try it

Run course outlines 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 brief for the course, for example "A six-week introduction to first aid for warehouse staff".
Your own course material (at most 10,000 words). The outline follows it.
The course title. Suggested from your brief when left out.
Who the course is for, for example "New care workers".
What a learner should be able to do after the course.
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.

Send one of prompt, text or document. The result is portable JSON: a title, summary, learning outcomes and modules, each with lessons of kind lesson (with a first draft of the lesson text), quiz or assignment. Set save_to_lms to also create an unpublished draft course in EduMark as the person who created the key (the key needs courses:write); the result then includes lms_draft.course_id. Outlines are drafts for a person to review.

Requires authoring:write. Costs 5 credits per draft. 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 outlines

POST/v1/authoring/course-outlines

Scope authoring:write

Headers

Course outlines: 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 outlines: request body
FieldDetails
promptstring, optionalA brief for the course, for example "A six-week introduction to first aid for warehouse staff".Up to 4,000 characters
textstring, optionalYour own course material (at most 10,000 words). The outline follows it.Up to 120,000 characters
documentFileReference or DocumentInput, optionalA PDF, DOCX or TXT to outline: {"file_id"} from POST /v1/files, or inline base64.
file_iddocument.file_idstringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.When sending FileReferencePattern ^file_[a-f0-9]{32}$
filenamedocument.filenamestringRequiredWhen sending DocumentInputUp to 200 characters
base64document.base64stringRequiredWhen sending DocumentInputUp to 27,962,028 characters
mime_typedocument.mime_typestring, optionalWhen sending DocumentInputUp to 150 characters
titlestring, optionalThe course title. Suggested from your brief when left out.Up to 200 characters
audiencestring, optionalWho the course is for, for example "New care workers".Up to 500 characters
goalstring, optionalWhat a learner should be able to do after the course.Up to 2,000 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.