Answer feedback
Warm, specific feedback on up to 20 learners' own-words answers, without marks.
- Price1 credit (10p) per answer
- Typical time10 s to 2 min
- Scope
learning:write - Runs asA background job
Run answer feedback 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.
- Queued202 and a job id, straight away
- ProcessingPoll, stream or wait for a webhook
- SucceededResult and files on the job
For each answer: a verdict (confident, nearly_there or keep_going), a short message and next_step, the key points covered (with the learner's exact words as evidence) and missing, any issues with a correction, an optional follow_up_question and a model_answer. Give expected answers or source_text to judge against your material; otherwise answers are judged against accepted knowledge of the topic. This is formative feedback: no marks are proposed and official_result is always false.
Requires learning:write. Costs 1 credit per answer. 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.
Answer feedback
POST/v1/answers/feedback
Scope learning:write
Headers
| Field | Details |
|---|---|
Idempotency-Key | stringRequiredA unique key per new operation; reuse it with the identical body when retrying. |
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Request body
| Field | Details |
|---|---|
items | array of AnswerItemRequiredUp to 20 answers to check.1 to 20 items |
iditems[].id | string, optionalYour id for this answer, echoed back. Defaults to its position ("1", "2", …).Up to 100 charactersPattern ^[A-Za-z0-9_.:-]+$ |
questionitems[].question | stringRequiredThe question the learner answered.Up to 4,000 characters |
answeritems[].answer | stringRequiredThe learner's answer, in their own words.Up to 12,000 characters |
expecteditems[].expected | string, optionalA model answer or the points you expect. Feedback is then judged against it.Up to 6,000 characters |
topic | string, optionalWhat the questions are about.Up to 200 characters |
source_text | string, optionalTeaching text the answers should agree with (at most 10,000 words).Up to 120,000 characters |
standard | enumHow strictly to judge. beginner: the main idea in everyday words is enough. intermediate: correct in substance. expert: accurate and precise, with the right terms.One of beginner, intermediate, expertDefault "intermediate" |
language | enumThe language to write feedback in.One of English, Welsh, Irish, Gaelic, French, Spanish, German, Italian, Portuguese, Dutch, Polish, Arabic, Urdu, Hindi, Punjabi, Bengali, Chinese, Mandarin, Cantonese, Japanese, Korean, Russian, Turkish, Greek, Swedish, Norwegian, Danish, Finnish, Romanian, Hungarian, Czech, Ukrainian, Farsi, Persian, Hebrew, Swahili, Somali, Tamil, Gujarati, Vietnamese, Thai, Indonesian, Malay, Tagalog, LatinDefault "English" |
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. |
| 402 | 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. |
Files and errors
Product errors
ANSWER_IDS_NOT_UNIQUEHTTP 422. Give every answer a different id, or leave the ids out.INPUT_TOO_LARGEHTTP 422. Questions, answers and expected answers together support at most 10,000 words.MODEL_RESULT_INVALIDOn the finished job. The generated material did not pass EduMark's checks. No charge was applied.PROCESSING_UNAVAILABLEOn the finished job. Processing could not complete safely. No complete result was issued.