Assignment drafts

An assignment brief turned into a reviewable EduMark assignment: tasks, marks and marking criteria.

  • Price5 credits (50p) per draft
  • Typical time20 s to 3 min
  • Scopeauthoring:write
  • Runs asA background job
Try it

Run assignment drafts 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.

The assignment brief as text (at most 10,000 words): the tasks or questions, marks and any marking criteria.
Extra guidance, such as the qualification's grading criteria. Used as context, never as wording to copy.
The assignment title. Taken from the brief when left out.
Also create an unpublished assignment draft in the Assignment Studio (needs the assignments:write permission) and return its id.
  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 the brief as a document or as brief_text. EduMark reads it the way the Assignment Studio's "Create with AI" does: tasks and questions, marks, marking criteria and where each came from in the brief. Missing information stays missing and is flagged for review; nothing is invented. The result has a short summary and the full assessment. Set save_to_lms to also create an unpublished draft in the Assignment Studio (the key needs assignments:write), ready for staff to check and publish.

Requires authoring:write. Costs 5 credits per draft. 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.

Assignment drafts

POST/v1/authoring/assignments

Scope authoring:write

Headers

Assignment drafts: 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

Assignment drafts: request body
FieldDetails
documentFileReference or DocumentInput, optionalThe assignment brief as a PDF, DOCX or TXT: {"file_id"} from POST /v1/files, or inline base64.
file_iddocument.file_idstringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.When sending FileReferencePattern ^file_[a-f0-9]{32}$
filenamedocument.filenamestringRequiredWhen sending DocumentInputUp to 200 characters
base64document.base64stringRequiredWhen sending DocumentInputUp to 27,962,028 characters
mime_typedocument.mime_typestring, optionalWhen sending DocumentInputUp to 150 characters
brief_textstring, optionalThe assignment brief as text (at most 10,000 words): the tasks or questions, marks and any marking criteria.Up to 120,000 characters
context_textstring, optionalExtra guidance, such as the qualification's grading criteria. Used as context, never as wording to copy.Up to 60,000 characters
titlestring, optionalThe assignment title. Taken from the brief when left out.Up to 200 characters
save_to_lmsbooleanAlso create an unpublished assignment draft in the Assignment Studio (needs the assignments:write permission) and return its id.Default false

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.