Recording marking

Proposed marks and feedback for a spoken or filmed answer, from its transcript, still frames and delivery.

  • Price30 credits (£3.00) per submission
  • Typical time60 s to 15 min
  • Scopemarking:write
  • Runs asA background job
Try it

Run recording marking in the sandbox

No key and nothing to pay. The sandbox returns a realistic example in a couple of seconds; no AI runs and no data is kept.

  1. Queued202 and a job id, straight away
  2. ProcessingPoll, stream or wait for a webhook
  3. SucceededResult and files on the job
Every AI request runs as a background job, so nothing times out.

Upload the recording with POST /v1/files first and pass its file_id. EduMark transcribes the speech, samples still frames after scene changes and measures pauses and pace, then marks each question against your guide. The AI cannot hear pronunciation or sound quality, or see motion between frames: anything that depends on those comes back with proposed_marks: null and a reason. The result is a proposal for a named person to review: official_result is always false and requires_review always true. The transcript is included.

Requires marking:write. Costs 30 credits per submission. Send a unique Idempotency-Key; reuse it with the identical body when retrying. Returns 202 with a job: poll GET /jobs/{job_id}, stream GET /jobs/{job_id}/events, or use a signed webhook.

Recording marking

POST/v1/marking/recordings

Scope marking:write

Headers

Recording marking: headers
FieldDetails
Idempotency-KeystringRequiredA unique key per new operation; reuse it with the identical body when retrying.
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Recording marking: request body
FieldDetails
recordingFileReferenceRequiredAn uploaded recording (POST /v1/files): MP4, MOV, WEBM, M4A, MP3, WAV or OGG, up to 500 MiB and 60 minutes.
file_idrecording.file_idstringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.Pattern ^file_[a-f0-9]{32}$
questionsarray of MarkedQuestionRequiredWhat the recording answers. Each is marked against the whole recording.1 to 20 items
idquestions[].idstringRequiredUp to 100 charactersPattern ^[A-Za-z0-9_.-]+$
question_textquestions[].question_textstringRequiredUp to 12,000 characters
max_marksquestions[].max_marksintegerRequired1 to 1,000
marking_guidequestions[].marking_guidestring, optionalWhat a good answer contains and how marks are awarded. Draft one with POST /v1/marking/guides.Up to 16,000 characters
criteriaquestions[].criteriaarray of CriterionOptional rubric. Criterion maxima must add up to max_marks.Up to 12 items
idquestions[].criteria[].idstringRequiredUp to 60 charactersPattern ^[A-Za-z0-9_.-]+$
titlequestions[].criteria[].titlestringRequiredUp to 300 characters
descriptionquestions[].criteria[].descriptionstring, optionalUp to 4,000 characters
max_marksquestions[].criteria[].max_marksintegerRequired1 to 1,000
context_textstring, optionalAssignment-wide marking rules or the task brief.Up to 60,000 characters
feedbackFeedbackPreferences, optionalHow feedback is written. Each field is optional; unset fields use your team's Assessment & feedback settings.
tonefeedback.toneenum, optionalprofessional_balanced, supportive_developmental, direct_concise or custom.One of professional_balanced, supportive_developmental, direct_concise, custom
custom_tonefeedback.custom_tonestring, optionalDescribes the tone when tone is custom.Up to 500 characters
lengthfeedback.lengthenum, optionalbrief, standard or detailed.One of brief, standard, detailed
addressfeedback.addressenum, optionaldirect ('you') or third_person ('the learner').One of direct, third_person
instructionsfeedback.instructionsstring, optionalExtra writing instructions. They shape wording only, never marks.Up to 2,000 characters

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.
402Request 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.