Course runs

Create and manage runs of your courses for cohorts or chosen people, on dates or at their own pace.

  • Scopescourse_runs:readcourse_runs: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 course runs

GET/v1/course-runs

Runs the key's creator can see, newest first. A page can hold fewer than limit runs.

Scope course_runs:read

Parameters

List course runs: 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
course_idstring, optionalUp to 200 characters
statusenum, optionalOne of draft, active, paused, ended, archived

Headers

List course runs: 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 course run

POST/v1/course-runs

Creates a run of a published course for a cohort, chosen people or everyone, on dates or at their own pace. With start: true the run also starts: the answer is 202 and start.status shows progress on GET /course-runs/{id}.

Scope course_runs:write

Headers

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

Request body

Create a course run: request body
FieldDetails
course_idstringRequiredA published course.Up to 200 characters
namestringLeave empty for a suggested name.Up to 300 charactersDefault ""
opens_atstring (date-time), optionalWhen learners can start. Empty opens it when started.
finish_bystring (date-time), optionalTarget finish date. Empty for own pace.
closes_atstring (date-time), optionalWhen access closes. Empty keeps it open.
timezonestring, optionalIANA zone. Defaults to your team's zone.Up to 64 characters
audienceAudience
modeaudience.modeenumnone, everyone in your team, or the selected cohorts and people.One of none, everyone, selectedDefault "none"
cohort_idsaudience.cohort_idsarray of stringUp to 100 items
learner_idsaudience.learner_idsarray of stringUp to 500 items
excluded_learner_idsaudience.excluded_learner_idsarray of stringUp to 500 items
certificatebooleanDefault true
startbooleanStart the run straight away (runs in the background).Default false

Responses

StatusMeaning
201Successful Response
202Created and starting in the background
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 run

GET/v1/course-runs/{run_id}

Scope course_runs:read

Parameters

Get a course run: parameters
FieldDetails
run_idstringRequired

Headers

Get a course run: 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 run

PATCH/v1/course-runs/{run_id}

Changes the name, dates, time zone or certificate setting. Moving the dates of a running run answers 202 while every learner's access is updated.

Scope course_runs:write

Parameters

Update a course run: parameters
FieldDetails
run_idstringRequired

Headers

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

Request body

Update a course run: request body
FieldDetails
namestring, optionalUp to 300 characters
opens_atstring (date-time), optional
finish_bystring (date-time), optional
closes_atstring (date-time), optional
timezonestring, optionalUp to 64 characters
certificateboolean, optional

Responses

StatusMeaning
200Successful Response
202Dates are being applied to every learner in the background
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.

Start a course run

POST/v1/course-runs/{run_id}/start

Gives everyone on the run access and sends their invitations (at the opening time if that is later). Answers 202; poll GET /course-runs/{id} until status is active.

Scope course_runs:write

Parameters

Start a course run: parameters
FieldDetails
run_idstringRequired

Headers

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

Responses

StatusMeaning
200Successful Response
202Starting in the background
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.