Course builds
A complete course, with every lesson and quiz written, from your brief and teaching material.
- Price20 credits (£2.00) per course
- Typical time60 s to 7 min
- Scope
authoring:write - Runs asA background job
Run course builds 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
Aurora plans the course (2 to 6 modules, at most 20 lessons and quizzes), then writes every lesson as varied editor blocks (pages, key terms, tips, tables, worked steps and quick checks) and every quiz as multiple-choice questions. Lessons teach in Aurora's own words from your sources; with only a brief, Aurora uses accurate, mainstream knowledge. The result is portable JSON. Set save_to_lms to also save it as an unpublished draft course in EduMark (the key needs courses:write), ready to review in Course Studio.
Requires authoring:write. Costs 20 credits per course. 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 builds
POST/v1/authoring/course-builds
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 |
|---|---|
brief | stringWhat the course is, who it is for and anything it must cover, for example "GCSE Biology: photosynthesis, four short lessons with a quiz after each module".Up to 6,000 charactersDefault "" |
sources | array of BuildSourceUp to 10 sources to teach from. Lessons are written in Aurora's own words and cite the parts they use.Up to 10 items |
titlesources[].title | string, optionalA short name for this source.Up to 200 characters |
textsources[].text | string, optionalTeaching text (at most 10,000 words).Up to 120,000 characters |
documentsources[].document | FileReference or DocumentInput, optionalA PDF, DOCX or TXT: {"file_id"} from POST /v1/files, or inline base64. |
file_idsources[].document.file_id | stringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.When sending FileReferencePattern ^file_[a-f0-9]{32}$ |
filenamesources[].document.filename | stringRequiredWhen sending DocumentInputUp to 200 characters |
base64sources[].document.base64 | stringRequiredWhen sending DocumentInputUp to 27,962,028 characters |
mime_typesources[].document.mime_type | string, optionalWhen sending DocumentInputUp to 150 characters |
title | string, optionalThe course title. Aurora suggests one when left out.Up to 200 characters |
save_to_lms | booleanAlso save the course as an unpublished draft 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. |