For Developers

Update Submission

Please note, there is not 100% coverage of the LMS systems when updating the `state` field to `submitted` (specifically). Some LMSs do not allow this property to be set to `submitted` without specifically using the student's credentials (e.g. via the User API endpoint).

PATCH https://ed.link/api/v2/graph/classes/:class_id/assignments/:assignment_id/submissions/:person_id

or

PATCH https://ed.link/api/v2/graph/classes/:class_id/assignments/:assignment_id/submissions/:submission_id

You can update an existing Submission for a given Assignment using either endpoint. They both perform the same action and you are welcome to choose whichever is more convenient, based on the identifier you have available (i.e. person_id or submission_id).

This endpoint can be used to Submit, Reclaim, Grade, and Return Submissions, in addition to simple updating of fields.

Please review our guide on patch requests for more information regarding their use.

Request Parameters

ParameterTypeDescription
class_idstringThe UUID of the desired Class.
assignment_idstringThe UUID of the desired Assignment.
person_idstringThe UUID of the desired Person (Student)
or
submission_idstringThe UUID of the desired Submission.

Request Body

The request body should contain a partial Submission object.

The following fields are allowed: attachments, grader_id, flags, grade_comment, grade_points, grade, rubric_grade, extra_attempts, override_due_date, state, .

The following fields are required: .

Sample Request To Submit Student Work

axios.patch('https://ed.link/api/v2/graph/classes/00000000-0000-0000-0000-000000000000/assignments/00000000-0000-0000-0000-000000000000/submissions/00000000-0000-0000-0000-000000000000', {
    headers: {
        authorization: `Bearer ${integration_access_token}`
    },
    data: {
        attachments: [
            {
                type: 'link',
                url: 'https://www.example.com/my-submission-01'
            }
        ],
        state: 'submitted'
    }
});

Sample Request To Reclaim Submission

axios.patch('https://ed.link/api/v2/graph/classes/00000000-0000-0000-0000-000000000000/assignments/00000000-0000-0000-0000-000000000000/submissions/00000000-0000-0000-0000-000000000000', {
    headers: {
        authorization: `Bearer ${integration_access_token}`
    },
    data: {
        state: 'reclaimed'
    }
});

Sample Request To Grade Submission

axios.patch('https://ed.link/api/v2/graph/classes/00000000-0000-0000-0000-000000000000/assignments/00000000-0000-0000-0000-000000000000/submissions/00000000-0000-0000-0000-000000000000', {
    headers: {
        authorization: `Bearer ${integration_access_token}`
    },
    data: {
        grade_points: 78
    }
});

Sample Request To Return Submission

axios.patch('https://ed.link/api/v2/graph/classes/00000000-0000-0000-0000-000000000000/assignments/00000000-0000-0000-0000-000000000000/submissions/00000000-0000-0000-0000-000000000000', {
    headers: {
        authorization: `Bearer ${integration_access_token}`
    },
    data: {
        state: 'returned'
    }
});

Sample Response

{
    "$request": "00000000-0000-0000-0000-000000000000",
    "$data": {
        "flags": [],
        "grade": "5",
        "grade_points": 5,
        "grade_comment": "https://example.com/my-feedback",
        "attempts": [
            {
                "created_date": "2025-09-08T17:08:51.000Z",
                "attachments": [
                    {
                        "type": "file",
                        "title": "Submission 1.html",
                        "size": 210,
                        "created_date": "2025-09-08T17:08:51.000Z",
                        "url": "https://ed.link/api/v2/my/classes/00000000-0000-0000-0000-000000000000/assignments/00000000-0000-0000-0000-000000000000/submissions/00000000-0000-0000-0000-000000000000/files/00000000-0000-0000-0000-000000000000/download",
                        "description": "",
                        "share_mode": "view",
                        "properties": {
                            "schoology": {
                                "type": "text/html",
                                "filename": "Submission 1.html",
                                "extension": "html",
                                "filesize": 210
                            }
                        },
                        "identifiers": [
                            {
                                "type": "schoology_id",
                                "value": "123456789"
                            }
                        ],
                        "rule_ids": [],
                        "references": {},
                        "id": "00000000-0000-0000-0000-000000000000"
                    }
                ],
                "rule_ids": [],
                "references": {}
            }
        ],
        "created_date": "2025-09-08T17:08:51.000Z",
        "updated_date": "2025-09-10T20:12:07.000Z",
        "state": "returned",
        "person_id": "00000000-0000-0000-0000-000000000000",
        "identifiers": [
            {
                "type": "schoology_id",
                "value": "123456"
            }
        ],
        "rule_ids": [],
        "references": {},
        "id": "00000000-0000-0000-0000-000000000000"
    }
}

Provider Specific Guidelines

Schoology

Schoology only allows students to submit work. Use the User API.

Canvas

The Canvas API only accepts a singular flag. In the case multiple flags were sent as part of a request for grading/updating a Canvas submission, we will pass only one flag to be chosen based on the following order of importance (with first being the most important): excused, missing, late.

Canvas also requires you to "publish" the parent Assignment before you can modify student submissions (i.e. submit or grade them), by modifying that Assignment's state to "open".

Supported Providers

  • aeries
  • aspen
  • blackbaud
  • blackboard
  • brightspace
  • canvas
  • classgather
  • clever
  • google
  • illuminate
  • microsoft
  • moodle
  • oneroster
  • powerschool
  • schoology
  • lti
  • skyward
  • veracross
  • qmlativ
  • infinitecampus
  • rapididentity
  • sapphire
  • genesis
  • rediker
  • renweb
  • synergy
  • managebac
  • tyler
  • banner
  • frontline
  • ascender