Course runs
Create and manage runs of your courses for cohorts or chosen people, on dates or at their own pace.
- Scopes
course_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
| Field | Details |
|---|---|
limit | integerItems per page, 1 to 100.1 to 100Default 25 |
cursor | string, optionalThe next_cursor from the previous page.Up to 512 characters |
updated_since | string, optional |
course_id | string, optionalUp to 200 characters |
status | enum, optionalOne of draft, active, paused, ended, archived |
Headers
| Field | Details |
|---|---|
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Responses
| Status | Meaning |
|---|---|
| 200 | 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. |
| 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. |
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
| Field | Details |
|---|---|
Idempotency-Key | stringRequiredA unique key per new run. |
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Request body
| Field | Details |
|---|---|
course_id | stringRequiredA published course.Up to 200 characters |
name | stringLeave empty for a suggested name.Up to 300 charactersDefault "" |
opens_at | string (date-time), optionalWhen learners can start. Empty opens it when started. |
finish_by | string (date-time), optionalTarget finish date. Empty for own pace. |
closes_at | string (date-time), optionalWhen access closes. Empty keeps it open. |
timezone | string, optionalIANA zone. Defaults to your team's zone.Up to 64 characters |
audience | Audience |
modeaudience.mode | enumnone, everyone in your team, or the selected cohorts and people.One of none, everyone, selectedDefault "none" |
cohort_idsaudience.cohort_ids | array of stringUp to 100 items |
learner_idsaudience.learner_ids | array of stringUp to 500 items |
excluded_learner_idsaudience.excluded_learner_ids | array of stringUp to 500 items |
certificate | booleanDefault true |
start | booleanStart the run straight away (runs in the background).Default false |
Responses
| Status | Meaning |
|---|---|
| 201 | Successful Response |
| 202 | Created and starting in the background |
| 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. |
| 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. |
Get a course run
GET/v1/course-runs/{run_id}
Scope course_runs:read
Parameters
| Field | Details |
|---|---|
run_id | stringRequired |
Headers
| Field | Details |
|---|---|
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Responses
| Status | Meaning |
|---|---|
| 200 | 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. |
| 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. |
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
| Field | Details |
|---|---|
run_id | stringRequired |
Headers
| Field | Details |
|---|---|
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Request body
| Field | Details |
|---|---|
name | string, optionalUp to 300 characters |
opens_at | string (date-time), optional |
finish_by | string (date-time), optional |
closes_at | string (date-time), optional |
timezone | string, optionalUp to 64 characters |
certificate | boolean, optional |
Responses
| Status | Meaning |
|---|---|
| 200 | Successful Response |
| 202 | Dates are being applied to every learner in the background |
| 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. |
| 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. |
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
| Field | Details |
|---|---|
run_id | stringRequired |
Headers
| Field | Details |
|---|---|
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Responses
| Status | Meaning |
|---|---|
| 200 | Successful Response |
| 202 | Starting in the background |
| 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. |
| 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. |