Analytics

Progress, course completion, learners needing attention and every governed analytics measure.

  • Scopeanalytics:read

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 analytics measures

GET/v1/analytics/metrics

Every named measure you can ask for, with what it counts and how it can be grouped.

Scope analytics:read

Headers

List analytics measures: 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.
422Request rejected. Inspect error.code and request_id; failed work is not billed.
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 measure

GET/v1/analytics/metrics/{metric_id}

One measure for a period (default: the last 30 days), optionally grouped.

Scope analytics:read

Parameters

Get a measure: parameters
FieldDetails
metric_idstringRequiredUp to 80 charactersPattern ^[a-z][a-z0-9_]{1,79}$
start_datestring, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$
end_datestring, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$
group_byenum, optionalOne of none, week, month, cohort, unit, assignment, level, marker, course, criterion, reason
course_idstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
cohortstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
assignment_idstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$

Headers

Get a measure: 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.

Get progress at a glance

GET/v1/analytics/progress

Hand-ins, on-time rate, work not started, work waiting to be marked, average score and pass rate for a period (default: the last 30 days).

Scope analytics:read

Parameters

Get progress at a glance: parameters
FieldDetails
start_datestring, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$
end_datestring, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$
course_idstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
cohortstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$

Headers

Get progress at a glance: 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.

Get course completion

GET/v1/analytics/completion

The share of learner course enrolments that are complete, now, grouped by course (or cohort).

Scope analytics:read

Parameters

Get course completion: parameters
FieldDetails
group_byenumOne of none, course, cohortDefault "course"
course_idstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$

Headers

Get course completion: 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.

List learners needing attention

GET/v1/analytics/at-risk

Learners whose latest engagement check says they are at risk or need help now, with the reasons (overdue work, work not started, falling behind the course plan…).

Scope analytics:read

Parameters

List learners needing attention: parameters
FieldDetails
course_idstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
cohortstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
limitinteger1 to 100Default 50
cursorstring, optionalUp to 12 charactersPattern ^\d{1,9}$

Headers

List learners needing attention: 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.