AI Essay Marking

Upload student essays — typed or handwritten — and get rubric-based scores with detailed per-criterion feedback in seconds.

What it does

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.

Highlights

  • Handwritten or typed — accepts image, PDF, DOCX, TXT, or inline text strings.
  • Three rubric input modes — pre-structured JSON, free-form rubric document the AI normalizes, or a model answer the AI derives criteria from.
  • Per-criterion scoring — thesis, evidence, organization, mechanics, or anything else you define.
  • Evidence quotes — every score is justified with short quotes from the essay.
  • Highlights — character offsets for issues like unsupported claims, grammar errors, weak structure.
  • Word-count guardrails — packages cap max words per essay, essays exceeding the limit are not charged.
  • Manual override — adjust any criterion score, overall recomputes automatically.
  • Separate quota dimension — essays_included on your package, billed per essay (not per word or token).

Quick start (cURL)

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?"

Example response

{
  "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." }
        ]
      }
    }
  ]
}

Rubric format

{
  "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.

Add-on feature

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.

Contact sales →