Submissions
List and read submitted work, hand in files for a learner, and read the AI marking proposal.
- Scopes
submissions:readsubmissions: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 submissions
GET/v1/submissions
Submitted work in the key's team, newest first, that the key's creator can see in EduMark. Filter by assignment_id, learner_id or status.
Scope submissions:read
Parameters
| Field | Details |
|---|---|
assignment_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
learner_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
status | enum, optionalOne of awaiting_marking, approved, released |
submitted_since | string, optionalUp to 40 characters |
limit | integerItems per page, 1 to 100.1 to 100Default 25 |
cursor | string, optionalThe next_cursor from the previous page.Up to 512 characters |
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. |
Hand in work for a learner
POST/v1/submissions
Hands in files for a learner enrolled on the assignment's course, as staff can in EduMark. The usual rules apply: the assignment must be open (or the learner must have an extension or resubmission), and every file is checked for malware. Integrity checks and marking then run as for any submission. Returns 202 with a request; poll GET /v1/submissions/requests/{id} until submitted. Upload files first with POST /v1/files. Send an Idempotency-Key.
Scope submissions:write
Headers
| Field | Details |
|---|---|
Idempotency-Key | string, optionalUp to 128 characters |
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Request body
| Field | Details |
|---|---|
assignment_id | stringRequiredUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
learner_id | stringRequiredA learner enrolled on the assignment's course.Up to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
files | array of SubmissionFileInputRequired1 to 10 items |
file_idfiles[].file_id | stringRequiredA ready file from POST /v1/files.Pattern ^file_[a-f0-9]{32}$ |
block_idfiles[].block_id | string, optionalWhich upload box this file belongs to. Needed only when the assignment has more than one.Up to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
Responses
| Status | Meaning |
|---|---|
| 202 | 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 a submission
GET/v1/submissions/{submission_id}
Scope submissions:read
Parameters
| Field | Details |
|---|---|
submission_id | stringRequiredUp 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 the AI marking proposal
GET/v1/submissions/{submission_id}/proposal
The AI's proposed marks and feedback for a submission, when AI marking is on for the assignment. This is a proposal for a person to review, never a result: official_result is always false. Approved, released marks are in GET /v1/results.
Scope submissions:read
Parameters
| Field | Details |
|---|---|
submission_id | stringRequiredUp 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. |
Check a hand-in request
GET/v1/submissions/requests/{request_id}
Scope submissions:write
Parameters
| Field | Details |
|---|---|
request_id | stringRequiredUp to 80 charactersPattern ^subreq_[A-Za-z0-9_]{1,64}$ |
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. |