Workbook marking

Proposed marks and feedback for a completed spreadsheet: cells, formulas, charts and layout.

  • Price10 credits (£1.00) per submission
  • Typical time20 s to 4 min
  • Scopemarking:write
  • Runs asA background job
Try it

Run workbook 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.

Send an XLSX or CSV workbook and the questions it answers. EduMark reads every filled cell with its saved value and formula, redraws charts from the data saved in the file and renders the original layout. Point a question at its answer cells with cells (for example Budget!B14:M14) and the formulas' source cells are read too; otherwise EduMark finds the answer. Formulas and macros are never run. The result is a proposal for a named person to review: official_result is always false and requires_review always true.

Requires marking:write. Costs 10 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.

Workbook marking

POST/v1/marking/workbooks

Scope marking:write

Headers

Workbook 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

Workbook marking: request body
FieldDetails
workbookFileReference or WorkbookInlineRequiredThe completed workbook: an uploaded XLSX or CSV file id, or inline base64.
file_idworkbook.file_idstringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.When sending FileReferencePattern ^file_[a-f0-9]{32}$
filenameworkbook.filenamestringRequiredWhen sending WorkbookInlineUp to 200 characters
base64workbook.base64stringRequiredWhen sending WorkbookInlineUp to 27,962,028 characters
mime_typeworkbook.mime_typestring, optionalWhen sending WorkbookInlineUp to 150 characters
questionsarray of WorkbookQuestionRequired1 to 30 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
cellsquestions[].cellsarray of stringWhere the answer is, for example Budget!B2:B12. Leave empty to let EduMark find it.Up to 20 items
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.