<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="classroom_v1.html">Google Classroom API</a> . <a href="classroom_v1.courses.html">courses</a> . <a href="classroom_v1.courses.courseWork.html">courseWork</a> . <a href="classroom_v1.courses.courseWork.studentSubmissions.html">studentSubmissions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(courseId, courseWorkId, id, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a student submission.</p>
<p class="toc_element">
  <code><a href="#list">list(courseId, courseWorkId, pageSize=None, userId=None, states=None, x__xgafv=None, late=None, pageToken=None)</a></code></p>
<p class="firstline">Returns a list of student submissions that the requester is permitted to</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#modifyAttachments">modifyAttachments(courseId, courseWorkId, id, body, x__xgafv=None)</a></code></p>
<p class="firstline">Modifies attachments of student submission.</p>
<p class="toc_element">
  <code><a href="#patch">patch(courseId, courseWorkId, id, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates one or more fields of a student submission.</p>
<p class="toc_element">
  <code><a href="#reclaim">reclaim(courseId, courseWorkId, id, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Reclaims a student submission on behalf of the student that owns it.</p>
<p class="toc_element">
  <code><a href="#return_">return_(courseId, courseWorkId, id, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a student submission.</p>
<p class="toc_element">
  <code><a href="#turnIn">turnIn(courseId, courseWorkId, id, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Turns in a student submission.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(courseId, courseWorkId, id, x__xgafv=None)</code>
  <pre>Returns a student submission.

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course, course work, or student submission or for
access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course, course work, or student submission
does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  courseWorkId: string, Identifier of the course work. (required)
  id: string, Identifier of the student submission. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Student submission for course work.
      #
      # StudentSubmission items are generated when a CourseWork item is created.
      #
      # StudentSubmissions that have never been accessed (i.e. with `state` = NEW)
      # may not have a creation time or update time.
    "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set.
        # This value must be non-negative. Decimal (i.e. non-integer) values are
        # allowed, but will be rounded to two decimal places.
        #
        # This is only visible to and modifiable by course teachers.
    "updateTime": "A String", # Last update time of this submission.
        # This may be unset if the student has not accessed this item.
        #
        # Read-only.
    "userId": "A String", # Identifier for the student that owns this submission.
        #
        # Read-only.
    "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI.
        #
        # Read-only.
    "courseId": "A String", # Identifier of the course.
        #
        # Read-only.
    "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MULTIPLE_CHOICE_QUESTION.
      "answer": "A String", # Student's select choice.
    },
    "creationTime": "A String", # Creation time of this submission.
        # This may be unset if the student has not accessed this item.
        #
        # Read-only.
    "submissionHistory": [ # The history of the submission (includes state and grade histories).
        #
        # Read-only.
      { # The history of the submission. This currently includes state and grade
          # histories.
        "stateHistory": { # The history of each state this submission has been in. # The state history information of the submission, if present.
          "state": "A String", # The workflow pipeline stage.
          "actorUserId": "A String", # The teacher or student who made the change
          "stateTimestamp": "A String", # When the submission entered this state.
        },
        "gradeHistory": { # The history of each grade on this submission. # The grade history information of the submission, if present.
          "gradeTimestamp": "A String", # When the grade of the submission was changed.
          "maxPoints": 3.14, # The denominator of the grade at this time in the submission grade
              # history.
          "pointsEarned": 3.14, # The numerator of the grade at this time in the submission grade history.
          "actorUserId": "A String", # The teacher who made the grade change.
          "gradeChangeType": "A String", # The type of grade change at this time in the submission grade history.
        },
      },
    ],
    "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
      "answer": "A String", # Student response to a short-answer question.
    },
    "late": True or False, # Whether this submission is late.
        #
        # Read-only.
    "state": "A String", # State of this submission.
        #
        # Read-only.
    "courseWorkId": "A String", # Identifier for the course work this corresponds to.
        #
        # Read-only.
    "courseWorkType": "A String", # Type of course work this submission is for.
        #
        # Read-only.
    "assignedGrade": 3.14, # Optional grade. If unset, no grade was set.
        # This value must be non-negative. Decimal (i.e. non-integer) values are
        # allowed, but will be rounded to two decimal places.
        #
        # This may be modified only by course teachers.
    "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT.
        #
        # Students can modify this content using
        # google.classroom.Work.ModifyAttachments.
      "attachments": [ # Attachments added by the student.
          # Drive files that correspond to materials with a share mode of
          # STUDENT_COPY may not exist yet if the student has not accessed the
          # assignment in Classroom.
          #
          # Some attachment metadata is only populated if the requesting user has
          # permission to access it. Identifier and alternate_link fields are always
          # available, but others (e.g. title) may not be.
        { # Attachment added to student assignment work.
            #
            # When creating attachments, setting the `form` field is not supported.
          "link": { # URL item. # Link attachment.
            "url": "A String", # URL to link to.
                # This must be a valid UTF-8 string containing between 1 and 2024 characters.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL.
                #
                # Read-only.
            "title": "A String", # Title of the target of the URL.
                #
                # Read-only.
          },
          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item.
                #
                # Read-only.
            "alternateLink": "A String", # URL that can be used to access the Drive item.
                #
                # Read-only.
            "id": "A String", # Drive API resource ID.
            "title": "A String", # Title of the Drive item.
                #
                # Read-only.
          },
          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
            "alternateLink": "A String", # URL that can be used to view the YouTube video.
                #
                # Read-only.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                #
                # Read-only.
            "id": "A String", # YouTube API resource ID.
            "title": "A String", # Title of the YouTube video.
                #
                # Read-only.
          },
          "form": { # Google Forms item. # Google Forms attachment.
            "formUrl": "A String", # URL of the form.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form.
                #
                # Read-only.
            "responseUrl": "A String", # URL of the form responses document.
                # Only set if respsonses have been recorded and only when the
                # requesting user is an editor of the form.
                #
                # Read-only.
            "title": "A String", # Title of the Form.
                #
                # Read-only.
          },
        },
      ],
    },
    "id": "A String", # Classroom-assigned Identifier for the student submission.
        # This is unique among submissions for the relevant course work.
        #
        # Read-only.
    "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console
        # project making the request.
        #
        # See google.classroom.Work.CreateCourseWork for more
        # details.
        #
        # Read-only.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(courseId, courseWorkId, pageSize=None, userId=None, states=None, x__xgafv=None, late=None, pageToken=None)</code>
  <pre>Returns a list of student submissions that the requester is permitted to
view, factoring in the OAuth scopes of the request.
`-` may be specified as the `course_work_id` to include student
submissions for multiple course work items.

Course students may only view their own work. Course teachers
and domain administrators may view all student submissions.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or course work, or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  courseWorkId: string, Identifier of the student work to request.
This may be set to the string literal `"-"` to request student work for
all course work in the specified course. (required)
  pageSize: integer, Maximum number of items to return. Zero or unspecified indicates that the
server may assign a maximum.

The server may return fewer than the specified number of results.
  userId: string, Optional argument to restrict returned student work to those owned by the
student with the specified identifier. The identifier can be one of the
following:

* the numeric identifier for the user
* the email address of the user
* the string literal `"me"`, indicating the requesting user
  states: string, Requested submission states. If specified, returned student submissions
match one of the specified submission states. (repeated)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  late: string, Requested lateness value. If specified, returned student submissions are
restricted by the requested value.
If unspecified, submissions are returned regardless of `late` value.
  pageToken: string, nextPageToken
value returned from a previous
list call,
indicating that the subsequent page of results should be returned.

The list request
must be otherwise identical to the one that resulted in this token.

Returns:
  An object of the form:

    { # Response when listing student submissions.
    "nextPageToken": "A String", # Token identifying the next page of results to return. If empty, no further
        # results are available.
    "studentSubmissions": [ # Student work that matches the request.
      { # Student submission for course work.
          #
          # StudentSubmission items are generated when a CourseWork item is created.
          #
          # StudentSubmissions that have never been accessed (i.e. with `state` = NEW)
          # may not have a creation time or update time.
        "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set.
            # This value must be non-negative. Decimal (i.e. non-integer) values are
            # allowed, but will be rounded to two decimal places.
            #
            # This is only visible to and modifiable by course teachers.
        "updateTime": "A String", # Last update time of this submission.
            # This may be unset if the student has not accessed this item.
            #
            # Read-only.
        "userId": "A String", # Identifier for the student that owns this submission.
            #
            # Read-only.
        "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI.
            #
            # Read-only.
        "courseId": "A String", # Identifier of the course.
            #
            # Read-only.
        "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MULTIPLE_CHOICE_QUESTION.
          "answer": "A String", # Student's select choice.
        },
        "creationTime": "A String", # Creation time of this submission.
            # This may be unset if the student has not accessed this item.
            #
            # Read-only.
        "submissionHistory": [ # The history of the submission (includes state and grade histories).
            #
            # Read-only.
          { # The history of the submission. This currently includes state and grade
              # histories.
            "stateHistory": { # The history of each state this submission has been in. # The state history information of the submission, if present.
              "state": "A String", # The workflow pipeline stage.
              "actorUserId": "A String", # The teacher or student who made the change
              "stateTimestamp": "A String", # When the submission entered this state.
            },
            "gradeHistory": { # The history of each grade on this submission. # The grade history information of the submission, if present.
              "gradeTimestamp": "A String", # When the grade of the submission was changed.
              "maxPoints": 3.14, # The denominator of the grade at this time in the submission grade
                  # history.
              "pointsEarned": 3.14, # The numerator of the grade at this time in the submission grade history.
              "actorUserId": "A String", # The teacher who made the grade change.
              "gradeChangeType": "A String", # The type of grade change at this time in the submission grade history.
            },
          },
        ],
        "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
          "answer": "A String", # Student response to a short-answer question.
        },
        "late": True or False, # Whether this submission is late.
            #
            # Read-only.
        "state": "A String", # State of this submission.
            #
            # Read-only.
        "courseWorkId": "A String", # Identifier for the course work this corresponds to.
            #
            # Read-only.
        "courseWorkType": "A String", # Type of course work this submission is for.
            #
            # Read-only.
        "assignedGrade": 3.14, # Optional grade. If unset, no grade was set.
            # This value must be non-negative. Decimal (i.e. non-integer) values are
            # allowed, but will be rounded to two decimal places.
            #
            # This may be modified only by course teachers.
        "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT.
            #
            # Students can modify this content using
            # google.classroom.Work.ModifyAttachments.
          "attachments": [ # Attachments added by the student.
              # Drive files that correspond to materials with a share mode of
              # STUDENT_COPY may not exist yet if the student has not accessed the
              # assignment in Classroom.
              #
              # Some attachment metadata is only populated if the requesting user has
              # permission to access it. Identifier and alternate_link fields are always
              # available, but others (e.g. title) may not be.
            { # Attachment added to student assignment work.
                #
                # When creating attachments, setting the `form` field is not supported.
              "link": { # URL item. # Link attachment.
                "url": "A String", # URL to link to.
                    # This must be a valid UTF-8 string containing between 1 and 2024 characters.
                "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL.
                    #
                    # Read-only.
                "title": "A String", # Title of the target of the URL.
                    #
                    # Read-only.
              },
              "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
                "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item.
                    #
                    # Read-only.
                "alternateLink": "A String", # URL that can be used to access the Drive item.
                    #
                    # Read-only.
                "id": "A String", # Drive API resource ID.
                "title": "A String", # Title of the Drive item.
                    #
                    # Read-only.
              },
              "youTubeVideo": { # YouTube video item. # Youtube video attachment.
                "alternateLink": "A String", # URL that can be used to view the YouTube video.
                    #
                    # Read-only.
                "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                    #
                    # Read-only.
                "id": "A String", # YouTube API resource ID.
                "title": "A String", # Title of the YouTube video.
                    #
                    # Read-only.
              },
              "form": { # Google Forms item. # Google Forms attachment.
                "formUrl": "A String", # URL of the form.
                "thumbnailUrl": "A String", # URL of a thumbnail image of the Form.
                    #
                    # Read-only.
                "responseUrl": "A String", # URL of the form responses document.
                    # Only set if respsonses have been recorded and only when the
                    # requesting user is an editor of the form.
                    #
                    # Read-only.
                "title": "A String", # Title of the Form.
                    #
                    # Read-only.
              },
            },
          ],
        },
        "id": "A String", # Classroom-assigned Identifier for the student submission.
            # This is unique among submissions for the relevant course work.
            #
            # Read-only.
        "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console
            # project making the request.
            #
            # See google.classroom.Work.CreateCourseWork for more
            # details.
            #
            # Read-only.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="modifyAttachments">modifyAttachments(courseId, courseWorkId, id, body, x__xgafv=None)</code>
  <pre>Modifies attachments of student submission.

Attachments may only be added to student submissions belonging to course
work objects with a `workType` of `ASSIGNMENT`.

This request must be made by the Developer Console project of the
[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to
create the corresponding course work item.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or course work, if the user is not permitted to modify
attachments on the requested student submission, or for
access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course, course work, or student submission
does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  courseWorkId: string, Identifier of the course work. (required)
  id: string, Identifier of the student submission. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request to modify the attachments of a student submission.
    "addAttachments": [ # Attachments to add.
        # A student submission may not have more than 20 attachments.
        # 
        # Form attachments are not supported.
      { # Attachment added to student assignment work.
          #
          # When creating attachments, setting the `form` field is not supported.
        "link": { # URL item. # Link attachment.
          "url": "A String", # URL to link to.
              # This must be a valid UTF-8 string containing between 1 and 2024 characters.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL.
              #
              # Read-only.
          "title": "A String", # Title of the target of the URL.
              #
              # Read-only.
        },
        "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item.
              #
              # Read-only.
          "alternateLink": "A String", # URL that can be used to access the Drive item.
              #
              # Read-only.
          "id": "A String", # Drive API resource ID.
          "title": "A String", # Title of the Drive item.
              #
              # Read-only.
        },
        "youTubeVideo": { # YouTube video item. # Youtube video attachment.
          "alternateLink": "A String", # URL that can be used to view the YouTube video.
              #
              # Read-only.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
              #
              # Read-only.
          "id": "A String", # YouTube API resource ID.
          "title": "A String", # Title of the YouTube video.
              #
              # Read-only.
        },
        "form": { # Google Forms item. # Google Forms attachment.
          "formUrl": "A String", # URL of the form.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the Form.
              #
              # Read-only.
          "responseUrl": "A String", # URL of the form responses document.
              # Only set if respsonses have been recorded and only when the
              # requesting user is an editor of the form.
              #
              # Read-only.
          "title": "A String", # Title of the Form.
              #
              # Read-only.
        },
      },
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Student submission for course work.
      #
      # StudentSubmission items are generated when a CourseWork item is created.
      #
      # StudentSubmissions that have never been accessed (i.e. with `state` = NEW)
      # may not have a creation time or update time.
    "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set.
        # This value must be non-negative. Decimal (i.e. non-integer) values are
        # allowed, but will be rounded to two decimal places.
        #
        # This is only visible to and modifiable by course teachers.
    "updateTime": "A String", # Last update time of this submission.
        # This may be unset if the student has not accessed this item.
        #
        # Read-only.
    "userId": "A String", # Identifier for the student that owns this submission.
        #
        # Read-only.
    "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI.
        #
        # Read-only.
    "courseId": "A String", # Identifier of the course.
        #
        # Read-only.
    "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MULTIPLE_CHOICE_QUESTION.
      "answer": "A String", # Student's select choice.
    },
    "creationTime": "A String", # Creation time of this submission.
        # This may be unset if the student has not accessed this item.
        #
        # Read-only.
    "submissionHistory": [ # The history of the submission (includes state and grade histories).
        #
        # Read-only.
      { # The history of the submission. This currently includes state and grade
          # histories.
        "stateHistory": { # The history of each state this submission has been in. # The state history information of the submission, if present.
          "state": "A String", # The workflow pipeline stage.
          "actorUserId": "A String", # The teacher or student who made the change
          "stateTimestamp": "A String", # When the submission entered this state.
        },
        "gradeHistory": { # The history of each grade on this submission. # The grade history information of the submission, if present.
          "gradeTimestamp": "A String", # When the grade of the submission was changed.
          "maxPoints": 3.14, # The denominator of the grade at this time in the submission grade
              # history.
          "pointsEarned": 3.14, # The numerator of the grade at this time in the submission grade history.
          "actorUserId": "A String", # The teacher who made the grade change.
          "gradeChangeType": "A String", # The type of grade change at this time in the submission grade history.
        },
      },
    ],
    "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
      "answer": "A String", # Student response to a short-answer question.
    },
    "late": True or False, # Whether this submission is late.
        #
        # Read-only.
    "state": "A String", # State of this submission.
        #
        # Read-only.
    "courseWorkId": "A String", # Identifier for the course work this corresponds to.
        #
        # Read-only.
    "courseWorkType": "A String", # Type of course work this submission is for.
        #
        # Read-only.
    "assignedGrade": 3.14, # Optional grade. If unset, no grade was set.
        # This value must be non-negative. Decimal (i.e. non-integer) values are
        # allowed, but will be rounded to two decimal places.
        #
        # This may be modified only by course teachers.
    "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT.
        #
        # Students can modify this content using
        # google.classroom.Work.ModifyAttachments.
      "attachments": [ # Attachments added by the student.
          # Drive files that correspond to materials with a share mode of
          # STUDENT_COPY may not exist yet if the student has not accessed the
          # assignment in Classroom.
          #
          # Some attachment metadata is only populated if the requesting user has
          # permission to access it. Identifier and alternate_link fields are always
          # available, but others (e.g. title) may not be.
        { # Attachment added to student assignment work.
            #
            # When creating attachments, setting the `form` field is not supported.
          "link": { # URL item. # Link attachment.
            "url": "A String", # URL to link to.
                # This must be a valid UTF-8 string containing between 1 and 2024 characters.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL.
                #
                # Read-only.
            "title": "A String", # Title of the target of the URL.
                #
                # Read-only.
          },
          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item.
                #
                # Read-only.
            "alternateLink": "A String", # URL that can be used to access the Drive item.
                #
                # Read-only.
            "id": "A String", # Drive API resource ID.
            "title": "A String", # Title of the Drive item.
                #
                # Read-only.
          },
          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
            "alternateLink": "A String", # URL that can be used to view the YouTube video.
                #
                # Read-only.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                #
                # Read-only.
            "id": "A String", # YouTube API resource ID.
            "title": "A String", # Title of the YouTube video.
                #
                # Read-only.
          },
          "form": { # Google Forms item. # Google Forms attachment.
            "formUrl": "A String", # URL of the form.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form.
                #
                # Read-only.
            "responseUrl": "A String", # URL of the form responses document.
                # Only set if respsonses have been recorded and only when the
                # requesting user is an editor of the form.
                #
                # Read-only.
            "title": "A String", # Title of the Form.
                #
                # Read-only.
          },
        },
      ],
    },
    "id": "A String", # Classroom-assigned Identifier for the student submission.
        # This is unique among submissions for the relevant course work.
        #
        # Read-only.
    "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console
        # project making the request.
        #
        # See google.classroom.Work.CreateCourseWork for more
        # details.
        #
        # Read-only.
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(courseId, courseWorkId, id, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates one or more fields of a student submission.

See google.classroom.v1.StudentSubmission for details
of which fields may be updated and who may change them.

This request must be made by the Developer Console project of the
[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to
create the corresponding course work item.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting developer project did not create
the corresponding course work, if the user is not permitted to make the
requested modification to the student submission, or for
access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course, course work, or student submission
does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  courseWorkId: string, Identifier of the course work. (required)
  id: string, Identifier of the student submission. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Student submission for course work.
    # 
    # StudentSubmission items are generated when a CourseWork item is created.
    # 
    # StudentSubmissions that have never been accessed (i.e. with `state` = NEW)
    # may not have a creation time or update time.
  "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set.
      # This value must be non-negative. Decimal (i.e. non-integer) values are
      # allowed, but will be rounded to two decimal places.
      # 
      # This is only visible to and modifiable by course teachers.
  "updateTime": "A String", # Last update time of this submission.
      # This may be unset if the student has not accessed this item.
      # 
      # Read-only.
  "userId": "A String", # Identifier for the student that owns this submission.
      # 
      # Read-only.
  "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI.
      # 
      # Read-only.
  "courseId": "A String", # Identifier of the course.
      # 
      # Read-only.
  "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MULTIPLE_CHOICE_QUESTION.
    "answer": "A String", # Student's select choice.
  },
  "creationTime": "A String", # Creation time of this submission.
      # This may be unset if the student has not accessed this item.
      # 
      # Read-only.
  "submissionHistory": [ # The history of the submission (includes state and grade histories).
      # 
      # Read-only.
    { # The history of the submission. This currently includes state and grade
        # histories.
      "stateHistory": { # The history of each state this submission has been in. # The state history information of the submission, if present.
        "state": "A String", # The workflow pipeline stage.
        "actorUserId": "A String", # The teacher or student who made the change
        "stateTimestamp": "A String", # When the submission entered this state.
      },
      "gradeHistory": { # The history of each grade on this submission. # The grade history information of the submission, if present.
        "gradeTimestamp": "A String", # When the grade of the submission was changed.
        "maxPoints": 3.14, # The denominator of the grade at this time in the submission grade
            # history.
        "pointsEarned": 3.14, # The numerator of the grade at this time in the submission grade history.
        "actorUserId": "A String", # The teacher who made the grade change.
        "gradeChangeType": "A String", # The type of grade change at this time in the submission grade history.
      },
    },
  ],
  "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
    "answer": "A String", # Student response to a short-answer question.
  },
  "late": True or False, # Whether this submission is late.
      # 
      # Read-only.
  "state": "A String", # State of this submission.
      # 
      # Read-only.
  "courseWorkId": "A String", # Identifier for the course work this corresponds to.
      # 
      # Read-only.
  "courseWorkType": "A String", # Type of course work this submission is for.
      # 
      # Read-only.
  "assignedGrade": 3.14, # Optional grade. If unset, no grade was set.
      # This value must be non-negative. Decimal (i.e. non-integer) values are
      # allowed, but will be rounded to two decimal places.
      # 
      # This may be modified only by course teachers.
  "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT.
      # 
      # Students can modify this content using
      # google.classroom.Work.ModifyAttachments.
    "attachments": [ # Attachments added by the student.
        # Drive files that correspond to materials with a share mode of
        # STUDENT_COPY may not exist yet if the student has not accessed the
        # assignment in Classroom.
        #
        # Some attachment metadata is only populated if the requesting user has
        # permission to access it. Identifier and alternate_link fields are always
        # available, but others (e.g. title) may not be.
      { # Attachment added to student assignment work.
          #
          # When creating attachments, setting the `form` field is not supported.
        "link": { # URL item. # Link attachment.
          "url": "A String", # URL to link to.
              # This must be a valid UTF-8 string containing between 1 and 2024 characters.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL.
              #
              # Read-only.
          "title": "A String", # Title of the target of the URL.
              #
              # Read-only.
        },
        "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item.
              #
              # Read-only.
          "alternateLink": "A String", # URL that can be used to access the Drive item.
              #
              # Read-only.
          "id": "A String", # Drive API resource ID.
          "title": "A String", # Title of the Drive item.
              #
              # Read-only.
        },
        "youTubeVideo": { # YouTube video item. # Youtube video attachment.
          "alternateLink": "A String", # URL that can be used to view the YouTube video.
              #
              # Read-only.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
              #
              # Read-only.
          "id": "A String", # YouTube API resource ID.
          "title": "A String", # Title of the YouTube video.
              #
              # Read-only.
        },
        "form": { # Google Forms item. # Google Forms attachment.
          "formUrl": "A String", # URL of the form.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the Form.
              #
              # Read-only.
          "responseUrl": "A String", # URL of the form responses document.
              # Only set if respsonses have been recorded and only when the
              # requesting user is an editor of the form.
              #
              # Read-only.
          "title": "A String", # Title of the Form.
              #
              # Read-only.
        },
      },
    ],
  },
  "id": "A String", # Classroom-assigned Identifier for the student submission.
      # This is unique among submissions for the relevant course work.
      # 
      # Read-only.
  "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console
      # project making the request.
      # 
      # See google.classroom.Work.CreateCourseWork for more
      # details.
      # 
      # Read-only.
}

  updateMask: string, Mask that identifies which fields on the student submission to update.
This field is required to do an update. The update fails if invalid
fields are specified.

The following fields may be specified by teachers:

* `draft_grade`
* `assigned_grade`
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Student submission for course work.
      #
      # StudentSubmission items are generated when a CourseWork item is created.
      #
      # StudentSubmissions that have never been accessed (i.e. with `state` = NEW)
      # may not have a creation time or update time.
    "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set.
        # This value must be non-negative. Decimal (i.e. non-integer) values are
        # allowed, but will be rounded to two decimal places.
        #
        # This is only visible to and modifiable by course teachers.
    "updateTime": "A String", # Last update time of this submission.
        # This may be unset if the student has not accessed this item.
        #
        # Read-only.
    "userId": "A String", # Identifier for the student that owns this submission.
        #
        # Read-only.
    "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI.
        #
        # Read-only.
    "courseId": "A String", # Identifier of the course.
        #
        # Read-only.
    "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MULTIPLE_CHOICE_QUESTION.
      "answer": "A String", # Student's select choice.
    },
    "creationTime": "A String", # Creation time of this submission.
        # This may be unset if the student has not accessed this item.
        #
        # Read-only.
    "submissionHistory": [ # The history of the submission (includes state and grade histories).
        #
        # Read-only.
      { # The history of the submission. This currently includes state and grade
          # histories.
        "stateHistory": { # The history of each state this submission has been in. # The state history information of the submission, if present.
          "state": "A String", # The workflow pipeline stage.
          "actorUserId": "A String", # The teacher or student who made the change
          "stateTimestamp": "A String", # When the submission entered this state.
        },
        "gradeHistory": { # The history of each grade on this submission. # The grade history information of the submission, if present.
          "gradeTimestamp": "A String", # When the grade of the submission was changed.
          "maxPoints": 3.14, # The denominator of the grade at this time in the submission grade
              # history.
          "pointsEarned": 3.14, # The numerator of the grade at this time in the submission grade history.
          "actorUserId": "A String", # The teacher who made the grade change.
          "gradeChangeType": "A String", # The type of grade change at this time in the submission grade history.
        },
      },
    ],
    "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
      "answer": "A String", # Student response to a short-answer question.
    },
    "late": True or False, # Whether this submission is late.
        #
        # Read-only.
    "state": "A String", # State of this submission.
        #
        # Read-only.
    "courseWorkId": "A String", # Identifier for the course work this corresponds to.
        #
        # Read-only.
    "courseWorkType": "A String", # Type of course work this submission is for.
        #
        # Read-only.
    "assignedGrade": 3.14, # Optional grade. If unset, no grade was set.
        # This value must be non-negative. Decimal (i.e. non-integer) values are
        # allowed, but will be rounded to two decimal places.
        #
        # This may be modified only by course teachers.
    "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT.
        #
        # Students can modify this content using
        # google.classroom.Work.ModifyAttachments.
      "attachments": [ # Attachments added by the student.
          # Drive files that correspond to materials with a share mode of
          # STUDENT_COPY may not exist yet if the student has not accessed the
          # assignment in Classroom.
          #
          # Some attachment metadata is only populated if the requesting user has
          # permission to access it. Identifier and alternate_link fields are always
          # available, but others (e.g. title) may not be.
        { # Attachment added to student assignment work.
            #
            # When creating attachments, setting the `form` field is not supported.
          "link": { # URL item. # Link attachment.
            "url": "A String", # URL to link to.
                # This must be a valid UTF-8 string containing between 1 and 2024 characters.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL.
                #
                # Read-only.
            "title": "A String", # Title of the target of the URL.
                #
                # Read-only.
          },
          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item.
                #
                # Read-only.
            "alternateLink": "A String", # URL that can be used to access the Drive item.
                #
                # Read-only.
            "id": "A String", # Drive API resource ID.
            "title": "A String", # Title of the Drive item.
                #
                # Read-only.
          },
          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
            "alternateLink": "A String", # URL that can be used to view the YouTube video.
                #
                # Read-only.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                #
                # Read-only.
            "id": "A String", # YouTube API resource ID.
            "title": "A String", # Title of the YouTube video.
                #
                # Read-only.
          },
          "form": { # Google Forms item. # Google Forms attachment.
            "formUrl": "A String", # URL of the form.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form.
                #
                # Read-only.
            "responseUrl": "A String", # URL of the form responses document.
                # Only set if respsonses have been recorded and only when the
                # requesting user is an editor of the form.
                #
                # Read-only.
            "title": "A String", # Title of the Form.
                #
                # Read-only.
          },
        },
      ],
    },
    "id": "A String", # Classroom-assigned Identifier for the student submission.
        # This is unique among submissions for the relevant course work.
        #
        # Read-only.
    "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console
        # project making the request.
        #
        # See google.classroom.Work.CreateCourseWork for more
        # details.
        #
        # Read-only.
  }</pre>
</div>

<div class="method">
    <code class="details" id="reclaim">reclaim(courseId, courseWorkId, id, body=None, x__xgafv=None)</code>
  <pre>Reclaims a student submission on behalf of the student that owns it.

Reclaiming a student submission transfers ownership of attached Drive
files to the student and updates the submission state.

Only the student that owns the requested student submission may call this
method, and only for a student submission that has been turned in.

This request must be made by the Developer Console project of the
[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to
create the corresponding course work item.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or course work, unsubmit the requested student submission,
or for access errors.
* `FAILED_PRECONDITION` if the student submission has not been turned in.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course, course work, or student submission
does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  courseWorkId: string, Identifier of the course work. (required)
  id: string, Identifier of the student submission. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to reclaim a student submission.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="return_">return_(courseId, courseWorkId, id, body=None, x__xgafv=None)</code>
  <pre>Returns a student submission.

Returning a student submission transfers ownership of attached Drive
files to the student and may also update the submission state.
Unlike the Classroom application, returning a student submission does not
set assignedGrade to the draftGrade value.

Only a teacher of the course that contains the requested student submission
may call this method.

This request must be made by the Developer Console project of the
[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to
create the corresponding course work item.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or course work, return the requested student submission,
or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course, course work, or student submission
does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  courseWorkId: string, Identifier of the course work. (required)
  id: string, Identifier of the student submission. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to return a student submission.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="turnIn">turnIn(courseId, courseWorkId, id, body=None, x__xgafv=None)</code>
  <pre>Turns in a student submission.

Turning in a student submission transfers ownership of attached Drive
files to the teacher and may also update the submission state.

This may only be called by the student that owns the specified student
submission.

This request must be made by the Developer Console project of the
[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to
create the corresponding course work item.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or course work, turn in the requested student submission,
or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course, course work, or student submission
does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  courseWorkId: string, Identifier of the course work. (required)
  id: string, Identifier of the student submission. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to turn in a student submission.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

</body></html>