Upload student essays — typed or handwritten — and get rubric-based scores with detailed per-criterion feedback in seconds.
Send one or more student essays plus a rubric. The AI extracts the essay text (OCR for handwritten/scanned papers, native parse for typed Word/PDF/TXT), grades each criterion against your rubric, and returns per-criterion scores, written feedback, evidence quotes from the essay, and an overall comment.
curl -X POST https://aiquestions.intrazero.com/api/v1/grading/essays \
-H "Authorization: Bearer $API_KEY" \
-F "essays[]=@alice.pdf" \
-F "essays[]=@bob.pdf" \
-F 'rubric_json={"criteria":[
{"key":"thesis","label":"Thesis","max_score":5},
{"key":"evidence","label":"Evidence","max_score":10}
]}' \
-F "essay_prompt=Should social media be regulated?"
{
"job_id": "uuid",
"mode": "essay",
"status": "completed",
"essays_charged": 2,
"submissions": [
{
"student_name": "Alice",
"essay": {
"word_count": 487,
"overall_score": 13,
"max_overall_score": 15,
"criteria": [
{ "key": "thesis", "score": 4, "max_score": 5,
"feedback": "Clear thesis but lacks specificity." },
{ "key": "evidence", "score": 9, "max_score": 10,
"feedback": "Strong examples in paragraphs 2 and 4." }
],
"overall_feedback": "Solid argument with minor gaps...",
"highlights": [
{ "start": 412, "end": 458, "kind": "unsupported_claim",
"note": "This claim needs a citation." }
]
}
}
]
}
{
"name": "Argumentative essay rubric",
"criteria": [
{ "key": "thesis", "label": "Thesis statement", "max_score": 5 },
{ "key": "evidence", "label": "Use of evidence", "max_score": 10 },
{ "key": "organization", "label": "Organization", "max_score": 5 },
{ "key": "mechanics", "label": "Grammar & mechanics","max_score": 5 }
]
}
Or skip JSON entirely and upload a free-form rubric document — the AI normalizes it for you. Or pass a model exemplar essay and the AI derives criteria automatically.
Essay marking is a separately-priced add-on. Your package needs essay_marking_enabled = true with essays_included > 0, or an entity-level extra_essays pool.