Courses

List and read courses and their outlines; create drafts and update details.

  • Scopescourses:readcourses:write

Data requests act inside the key’s centre as the person who created the key: each needs the scope and that person’s current EduMark permission. See auth and pagination.

List courses

GET/v1/courses

Courses the key's creator can see, newest first. A page can hold fewer than limit courses when some are hidden from them; keep following next_cursor while has_more.

Scope courses:read

Parameters

List courses: parameters
FieldDetails
limitintegerItems per page, 1 to 100.1 to 100Default 25
cursorstring, optionalThe next_cursor from the previous page.Up to 512 characters
updated_sincestring, optional
statusenum, optionalOne of draft, published, archived

Headers

List courses: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Responses

StatusMeaning
200Successful 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.
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.

Create a draft course

POST/v1/courses

Creates an empty draft course in your team. Build and publish it in Course Studio.

Scope courses:write

Headers

Create a draft course: headers
FieldDetails
Idempotency-KeystringRequiredA unique key per new course.
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Create a draft course: request body
FieldDetails
codestringRequiredYour course code. Unique in your team.Up to 80 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._ /-]{0,79}$
titlestringRequiredUp to 300 characters
descriptionstringUp to 20,000 charactersDefault ""

Responses

StatusMeaning
201Successful 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.
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.

Get a course

GET/v1/courses/{course_id}

Scope courses:read

Parameters

Get a course: parameters
FieldDetails
course_idstringRequired

Headers

Get a course: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Responses

StatusMeaning
200Successful 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.
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.

Update a course's details

PATCH/v1/courses/{course_id}

Changes the code, title or description. Learners on a published course are told about important changes, as they are when you edit in EduMark.

Scope courses:write

Parameters

Update a course's details: parameters
FieldDetails
course_idstringRequired

Headers

Update a course's details: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Update a course's details: request body
FieldDetails
codestring, optionalUp to 80 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._ /-]{0,79}$
titlestring, optionalUp to 300 characters
descriptionstring, optionalUp to 20,000 characters

Responses

StatusMeaning
200Successful 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.
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.

Get a course outline

GET/v1/courses/{course_id}/structure

The modules and lessons of the course's published version (or its draft with version=draft). Lesson content is not included.

Scope courses:read

Parameters

Get a course outline: parameters
FieldDetails
course_idstringRequired
versionenumOne of published, draftDefault "published"

Headers

Get a course outline: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Responses

StatusMeaning
200Successful 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.
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.

Archive a course

POST/v1/courses/{course_id}/archive

Takes the course out of use and keeps everything in it. Restore it in EduMark.

Scope courses:write

Parameters

Archive a course: parameters
FieldDetails
course_idstringRequired

Headers

Archive a course: headers
FieldDetails
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Responses

StatusMeaning
200Successful 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.
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.