Analytics
Progress, course completion, learners needing attention and every governed analytics measure.
- Scope
analytics: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
| 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 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 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 measure
GET/v1/analytics/metrics/{metric_id}
One measure for a period (default: the last 30 days), optionally grouped.
Scope analytics:read
Parameters
| Field | Details |
|---|---|
metric_id | stringRequiredUp to 80 charactersPattern ^[a-z][a-z0-9_]{1,79}$ |
start_date | string, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$ |
end_date | string, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$ |
group_by | enum, optionalOne of none, week, month, cohort, unit, assignment, level, marker, course, criterion, reason |
course_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
cohort | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
assignment_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
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. |
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
| Field | Details |
|---|---|
start_date | string, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$ |
end_date | string, optionalPattern ^\d{4}-\d{2}-\d{2}(T[0-9:.+\-Z]{2,40})?$ |
course_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
cohort | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
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. |
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
| Field | Details |
|---|---|
group_by | enumOne of none, course, cohortDefault "course" |
course_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
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. |
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
| Field | Details |
|---|---|
course_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
cohort | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
limit | integer1 to 100Default 50 |
cursor | string, optionalUp to 12 charactersPattern ^\d{1,9}$ |
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. |