Submissions

List and read submitted work, hand in files for a learner, and read the AI marking proposal.

  • Scopessubmissions: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

List submissions: parameters
FieldDetails
assignment_idstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
learner_idstring, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
statusenum, optionalOne of awaiting_marking, approved, released
submitted_sincestring, optionalUp to 40 characters
limitintegerItems per page, 1 to 100.1 to 100Default 25
cursorstring, optionalThe next_cursor from the previous page.Up to 512 characters

Headers

List submissions: 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.

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

Hand in work for a learner: headers
FieldDetails
Idempotency-Keystring, optionalUp to 128 characters
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Hand in work for a learner: request body
FieldDetails
assignment_idstringRequiredUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
learner_idstringRequiredA learner enrolled on the assignment's course.Up to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$
filesarray of SubmissionFileInputRequired1 to 10 items
file_idfiles[].file_idstringRequiredA ready file from POST /v1/files.Pattern ^file_[a-f0-9]{32}$
block_idfiles[].block_idstring, 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

StatusMeaning
202Successful 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 a submission

GET/v1/submissions/{submission_id}

Scope submissions:read

Parameters

Get a submission: parameters
FieldDetails
submission_idstringRequiredUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$

Headers

Get a submission: 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 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

Get the AI marking proposal: parameters
FieldDetails
submission_idstringRequiredUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$

Headers

Get the AI marking proposal: 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.

Check a hand-in request

GET/v1/submissions/requests/{request_id}

Scope submissions:write

Parameters

Check a hand-in request: parameters
FieldDetails
request_idstringRequiredUp to 80 charactersPattern ^subreq_[A-Za-z0-9_]{1,64}$

Headers

Check a hand-in request: 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.