> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hawkings.education/llms.txt
> Use this file to discover all available pages before exploring further.

# The Submission object

> A student's response to an assignment, plus its grade.

```json Example theme={null}
{
  "id": "sub_01HX9N5AB3...",
  "object": "submission",
  "assignment_id": "asg_01HX9...",
  "student_id": "usr_01HX9...",
  "content": { "text": "Lorentz invariance means that the laws of physics..." },
  "files": [
    { "id": "fil_01HX9...", "name": "essay.pdf", "size": 124300, "url": "https://..." }
  ],
  "grade_ai": 8.5,
  "grade_manual": null,
  "final_grade": null,
  "grading_rationale": "## Clarity (4/4)\nThe student opens with...",
  "grading_breakdown": [
    { "criterion": "clarity",  "score": 4, "max": 4 },
    { "criterion": "accuracy", "score": 3, "max": 4 },
    { "criterion": "sources",  "score": 1.5, "max": 2 }
  ],
  "grader_comments": null,
  "human_review_status": "pending",
  "ai_status": "ready",
  "evaluated_at": "2026-05-10T12:34:56Z",
  "uploaded_at": "2026-05-10T12:30:00Z"
}
```

## Attributes

<ResponseField name="id" type="string">Prefix `sub_`.</ResponseField>

<ResponseField name="assignment_id" type="string" />

<ResponseField name="student_id" type="string" />

<ResponseField name="content" type="SubmissionContent">
  {`{ text?, audio_url?, code? }`}
</ResponseField>

<ResponseField name="files" type="File[]" />

<ResponseField name="grade_ai" type="number | null" />

<ResponseField name="grade_manual" type="number | null" />

<ResponseField name="final_grade" type="number | null">
  Convenience field: `grade_manual ?? grade_ai`. Null while
  `human_review_status === "pending"` if the assignment requires review.
</ResponseField>

<ResponseField name="grading_rationale" type="string | null">Markdown.</ResponseField>

<ResponseField name="grading_breakdown" type="object[]" />

<ResponseField name="grader_comments" type="string | null">Markdown, human-written.</ResponseField>
<ResponseField name="human_review_status" type="enum">`pending` | `reviewed` | `off`.</ResponseField>
<ResponseField name="ai_status" type="enum">`pending` | `ready` | `error`.</ResponseField>

<ResponseField name="evaluated_at" type="string | null" />

<ResponseField name="uploaded_at" type="string" />
