<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></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="classroom_v1.courses.aliases.html">aliases()</a></code>
</p>
<p class="firstline">Returns the aliases Resource.</p>

<p class="toc_element">
  <code><a href="classroom_v1.courses.announcements.html">announcements()</a></code>
</p>
<p class="firstline">Returns the announcements Resource.</p>

<p class="toc_element">
  <code><a href="classroom_v1.courses.courseWork.html">courseWork()</a></code>
</p>
<p class="firstline">Returns the courseWork Resource.</p>

<p class="toc_element">
  <code><a href="classroom_v1.courses.students.html">students()</a></code>
</p>
<p class="firstline">Returns the students Resource.</p>

<p class="toc_element">
  <code><a href="classroom_v1.courses.teachers.html">teachers()</a></code>
</p>
<p class="firstline">Returns the teachers Resource.</p>

<p class="toc_element">
  <code><a href="classroom_v1.courses.topics.html">topics()</a></code>
</p>
<p class="firstline">Returns the topics Resource.</p>

<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a course.</p>
<p class="toc_element">
  <code><a href="#delete">delete(id, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a course.</p>
<p class="toc_element">
  <code><a href="#get">get(id, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a course.</p>
<p class="toc_element">
  <code><a href="#list">list(studentId=None, pageToken=None, courseStates=None, pageSize=None, teacherId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a list of courses that the requesting user is permitted to view,</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="#patch">patch(id, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates one or more fields in a course.</p>
<p class="toc_element">
  <code><a href="#update">update(id, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a course.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a course.

The user specified in `ownerId` is the owner of the created course
and added as a teacher.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to create
courses or for access errors.
* `NOT_FOUND` if the primary teacher is not a valid user.
* `FAILED_PRECONDITION` if the course owner&#x27;s account is disabled or for
the following request errors:
    * UserGroupsMembershipLimitReached
* `ALREADY_EXISTS` if an alias was specified in the `id` and
already exists.

Args:
  body: object, The request body.
    The object takes the form of:

{ # A Course in Classroom.
    &quot;description&quot;: &quot;A String&quot;, # Optional description.
        # For example, &quot;We&#x27;ll be learning about the structure of living
        # creatures from a combination of textbooks, guest lectures, and lab work.
        # Expect to be excited!&quot;
        # If set, this field must be a valid UTF-8 string and no longer than 30,000
        # characters.
    &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
    &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
        # 
        # Read-only.
    &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
        # course.
        # 
        # This field will only be set for teachers of the course and domain
        # administrators.
        # 
        # Read-only.
      &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
      &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
          #
          # Read-only.
      &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
          #
          # Read-only.
    },
    &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
        # 
        # When
        # creating a course,
        # you may optionally set this identifier to an
        # alias string in the
        # request to create a corresponding alias. The `id` is still assigned by
        # Classroom and cannot be updated after the course is created.
        # 
        # Specifying this field in a course update mask results in an error.
    &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
        # Classroom adds events for course work and announcements in the course.
        # 
        # Read-only.
    &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
        # 
        # When specified as a parameter of a
        # create course request, this
        # field is required.
        # The identifier can be one of the following:
        # 
        # * the numeric identifier for the user
        # * the email address of the user
        # * the string literal `&quot;me&quot;`, indicating the requesting user
        # 
        # This must be set in a create request. Admins can also specify this field
        # in a patch course request to
        # transfer ownership. In other contexts, it is read-only.
    &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
        # 
        # Read-only.
    &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
        # 
        # Read-only.
      { # A set of materials that appears on the &quot;About&quot; page of the course.
          # These materials might include a syllabus, schedule, or other background
          # information relating to the course as a whole.
        &quot;title&quot;: &quot;A String&quot;, # Title for this set.
        &quot;materials&quot;: [ # Materials attached to this set.
          { # A material attached to a course as part of a material set.
            &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
              &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                  #
                  # Read-only.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
              &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                  #
                  # Read-only.
            },
            &quot;link&quot;: { # URL item. # Link atatchment.
              &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                  # This must be a valid UTF-8 string containing between 1 and 2024 characters.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                  #
                  # Read-only.
              &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                  #
                  # Read-only.
            },
            &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                  #
                  # Read-only.
              &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                  #
                  # Read-only.
              &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
              &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                  #
                  # Read-only.
            },
            &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
              &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                  #
                  # Read-only.
              &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                  #
                  # Read-only.
              &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
            },
          },
        ],
      },
    ],
    &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
        # This group does not accept email and can only be used for permissions.
        # 
        # Read-only.
    &quot;name&quot;: &quot;A String&quot;, # Name of the course.
        # For example, &quot;10th Grade Biology&quot;.
        # The name is required. It must be between 1 and 750 characters and a valid
        # UTF-8 string.
    &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
        # For example, &quot;Welcome to 10th Grade Biology.&quot;
        # If set, this field must be a valid UTF-8 string and no longer than 3600
        # characters.
    &quot;section&quot;: &quot;A String&quot;, # Section of the course.
        # For example, &quot;Period 2&quot;.
        # If set, this field must be a valid UTF-8 string and no longer than 2800
        # characters.
    &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
        # This group does not accept email and can only be used for permissions.
        # 
        # Read-only.
    &quot;room&quot;: &quot;A String&quot;, # Optional room location.
        # For example, &quot;301&quot;.
        # If set, this field must be a valid UTF-8 string and no longer than 650
        # characters.
    &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
        # If unspecified, the default state is `PROVISIONED`.
    &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
    &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
  }

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

Returns:
  An object of the form:

    { # A Course in Classroom.
      &quot;description&quot;: &quot;A String&quot;, # Optional description.
          # For example, &quot;We&#x27;ll be learning about the structure of living
          # creatures from a combination of textbooks, guest lectures, and lab work.
          # Expect to be excited!&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 30,000
          # characters.
      &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
          #
          # Read-only.
      &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
          # course.
          #
          # This field will only be set for teachers of the course and domain
          # administrators.
          #
          # Read-only.
        &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
        &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
            #
            # Read-only.
        &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
            #
            # Read-only.
      },
      &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
          #
          # When
          # creating a course,
          # you may optionally set this identifier to an
          # alias string in the
          # request to create a corresponding alias. The `id` is still assigned by
          # Classroom and cannot be updated after the course is created.
          #
          # Specifying this field in a course update mask results in an error.
      &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
          # Classroom adds events for course work and announcements in the course.
          #
          # Read-only.
      &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
          #
          # When specified as a parameter of a
          # create course request, this
          # field is required.
          # The identifier can be one of the following:
          #
          # * the numeric identifier for the user
          # * the email address of the user
          # * the string literal `&quot;me&quot;`, indicating the requesting user
          #
          # This must be set in a create request. Admins can also specify this field
          # in a patch course request to
          # transfer ownership. In other contexts, it is read-only.
      &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
          #
          # Read-only.
      &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
          #
          # Read-only.
        { # A set of materials that appears on the &quot;About&quot; page of the course.
            # These materials might include a syllabus, schedule, or other background
            # information relating to the course as a whole.
          &quot;title&quot;: &quot;A String&quot;, # Title for this set.
          &quot;materials&quot;: [ # Materials attached to this set.
            { # A material attached to a course as part of a material set.
              &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                    #
                    # Read-only.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                    #
                    # Read-only.
              },
              &quot;link&quot;: { # URL item. # Link atatchment.
                &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                    # This must be a valid UTF-8 string containing between 1 and 2024 characters.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                    #
                    # Read-only.
                &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                    #
                    # Read-only.
              },
              &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                    #
                    # Read-only.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                    #
                    # Read-only.
              },
              &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                    #
                    # Read-only.
                &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                    #
                    # Read-only.
                &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
              },
            },
          ],
        },
      ],
      &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;name&quot;: &quot;A String&quot;, # Name of the course.
          # For example, &quot;10th Grade Biology&quot;.
          # The name is required. It must be between 1 and 750 characters and a valid
          # UTF-8 string.
      &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
          # For example, &quot;Welcome to 10th Grade Biology.&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 3600
          # characters.
      &quot;section&quot;: &quot;A String&quot;, # Section of the course.
          # For example, &quot;Period 2&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 2800
          # characters.
      &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;room&quot;: &quot;A String&quot;, # Optional room location.
          # For example, &quot;301&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 650
          # characters.
      &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
          # If unspecified, the default state is `PROVISIONED`.
      &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(id, x__xgafv=None)</code>
  <pre>Deletes a course.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to delete the
requested course or for access errors.
* `NOT_FOUND` if no course exists with the requested ID.

Args:
  id: string, Identifier of the course to delete.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  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="get">get(id, x__xgafv=None)</code>
  <pre>Returns a course.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or for access errors.
* `NOT_FOUND` if no course exists with the requested ID.

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

Returns:
  An object of the form:

    { # A Course in Classroom.
      &quot;description&quot;: &quot;A String&quot;, # Optional description.
          # For example, &quot;We&#x27;ll be learning about the structure of living
          # creatures from a combination of textbooks, guest lectures, and lab work.
          # Expect to be excited!&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 30,000
          # characters.
      &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
          #
          # Read-only.
      &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
          # course.
          #
          # This field will only be set for teachers of the course and domain
          # administrators.
          #
          # Read-only.
        &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
        &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
            #
            # Read-only.
        &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
            #
            # Read-only.
      },
      &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
          #
          # When
          # creating a course,
          # you may optionally set this identifier to an
          # alias string in the
          # request to create a corresponding alias. The `id` is still assigned by
          # Classroom and cannot be updated after the course is created.
          #
          # Specifying this field in a course update mask results in an error.
      &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
          # Classroom adds events for course work and announcements in the course.
          #
          # Read-only.
      &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
          #
          # When specified as a parameter of a
          # create course request, this
          # field is required.
          # The identifier can be one of the following:
          #
          # * the numeric identifier for the user
          # * the email address of the user
          # * the string literal `&quot;me&quot;`, indicating the requesting user
          #
          # This must be set in a create request. Admins can also specify this field
          # in a patch course request to
          # transfer ownership. In other contexts, it is read-only.
      &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
          #
          # Read-only.
      &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
          #
          # Read-only.
        { # A set of materials that appears on the &quot;About&quot; page of the course.
            # These materials might include a syllabus, schedule, or other background
            # information relating to the course as a whole.
          &quot;title&quot;: &quot;A String&quot;, # Title for this set.
          &quot;materials&quot;: [ # Materials attached to this set.
            { # A material attached to a course as part of a material set.
              &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                    #
                    # Read-only.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                    #
                    # Read-only.
              },
              &quot;link&quot;: { # URL item. # Link atatchment.
                &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                    # This must be a valid UTF-8 string containing between 1 and 2024 characters.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                    #
                    # Read-only.
                &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                    #
                    # Read-only.
              },
              &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                    #
                    # Read-only.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                    #
                    # Read-only.
              },
              &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                    #
                    # Read-only.
                &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                    #
                    # Read-only.
                &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
              },
            },
          ],
        },
      ],
      &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;name&quot;: &quot;A String&quot;, # Name of the course.
          # For example, &quot;10th Grade Biology&quot;.
          # The name is required. It must be between 1 and 750 characters and a valid
          # UTF-8 string.
      &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
          # For example, &quot;Welcome to 10th Grade Biology.&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 3600
          # characters.
      &quot;section&quot;: &quot;A String&quot;, # Section of the course.
          # For example, &quot;Period 2&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 2800
          # characters.
      &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;room&quot;: &quot;A String&quot;, # Optional room location.
          # For example, &quot;301&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 650
          # characters.
      &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
          # If unspecified, the default state is `PROVISIONED`.
      &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(studentId=None, pageToken=None, courseStates=None, pageSize=None, teacherId=None, x__xgafv=None)</code>
  <pre>Returns a list of courses that the requesting user is permitted to view,
restricted to those that match the request. Returned courses are ordered by
creation time, with the most recently created coming first.

This method returns the following error codes:

* `PERMISSION_DENIED` for access errors.
* `INVALID_ARGUMENT` if the query argument is malformed.
* `NOT_FOUND` if any users specified in the query arguments do not exist.

Args:
  studentId: string, Restricts returned courses to those having a 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 `&quot;me&quot;`, indicating the requesting user
  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.
  courseStates: string, Restricts returned courses to those in one of the specified states
The default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED. (repeated)
  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.
  teacherId: string, Restricts returned courses to those having a teacher 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 `&quot;me&quot;`, indicating the requesting user
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response when listing courses.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token identifying the next page of results to return. If empty, no further
        # results are available.
    &quot;courses&quot;: [ # Courses that match the list request.
      { # A Course in Classroom.
          &quot;description&quot;: &quot;A String&quot;, # Optional description.
              # For example, &quot;We&#x27;ll be learning about the structure of living
              # creatures from a combination of textbooks, guest lectures, and lab work.
              # Expect to be excited!&quot;
              # If set, this field must be a valid UTF-8 string and no longer than 30,000
              # characters.
          &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
              # Specifying this field in a course update mask results in an error.
              #
              # Read-only.
          &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
              #
              # Read-only.
          &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
              # course.
              #
              # This field will only be set for teachers of the course and domain
              # administrators.
              #
              # Read-only.
            &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
            &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
                #
                # Read-only.
            &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
                #
                # Read-only.
          },
          &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
              #
              # When
              # creating a course,
              # you may optionally set this identifier to an
              # alias string in the
              # request to create a corresponding alias. The `id` is still assigned by
              # Classroom and cannot be updated after the course is created.
              #
              # Specifying this field in a course update mask results in an error.
          &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
              # Classroom adds events for course work and announcements in the course.
              #
              # Read-only.
          &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
              #
              # When specified as a parameter of a
              # create course request, this
              # field is required.
              # The identifier can be one of the following:
              #
              # * the numeric identifier for the user
              # * the email address of the user
              # * the string literal `&quot;me&quot;`, indicating the requesting user
              #
              # This must be set in a create request. Admins can also specify this field
              # in a patch course request to
              # transfer ownership. In other contexts, it is read-only.
          &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
              #
              # Read-only.
          &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
              #
              # Read-only.
            { # A set of materials that appears on the &quot;About&quot; page of the course.
                # These materials might include a syllabus, schedule, or other background
                # information relating to the course as a whole.
              &quot;title&quot;: &quot;A String&quot;, # Title for this set.
              &quot;materials&quot;: [ # Materials attached to this set.
                { # A material attached to a course as part of a material set.
                  &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
                    &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                        #
                        # Read-only.
                    &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                        #
                        # Read-only.
                    &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
                    &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                        #
                        # Read-only.
                  },
                  &quot;link&quot;: { # URL item. # Link atatchment.
                    &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                        # This must be a valid UTF-8 string containing between 1 and 2024 characters.
                    &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                        #
                        # Read-only.
                    &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                        #
                        # Read-only.
                  },
                  &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
                    &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                        #
                        # Read-only.
                    &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                        #
                        # Read-only.
                    &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
                    &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                        #
                        # Read-only.
                  },
                  &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
                    &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                        #
                        # Read-only.
                    &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
                    &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                        #
                        # Read-only.
                    &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
                  },
                },
              ],
            },
          ],
          &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
              # This group does not accept email and can only be used for permissions.
              #
              # Read-only.
          &quot;name&quot;: &quot;A String&quot;, # Name of the course.
              # For example, &quot;10th Grade Biology&quot;.
              # The name is required. It must be between 1 and 750 characters and a valid
              # UTF-8 string.
          &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
              # For example, &quot;Welcome to 10th Grade Biology.&quot;
              # If set, this field must be a valid UTF-8 string and no longer than 3600
              # characters.
          &quot;section&quot;: &quot;A String&quot;, # Section of the course.
              # For example, &quot;Period 2&quot;.
              # If set, this field must be a valid UTF-8 string and no longer than 2800
              # characters.
          &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
              # This group does not accept email and can only be used for permissions.
              #
              # Read-only.
          &quot;room&quot;: &quot;A String&quot;, # Optional room location.
              # For example, &quot;301&quot;.
              # If set, this field must be a valid UTF-8 string and no longer than 650
              # characters.
          &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
              # If unspecified, the default state is `PROVISIONED`.
          &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
              # Specifying this field in a course update mask results in an error.
              #
              # Read-only.
          &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
              # Specifying this field in a course update mask results in an error.
              #
              # 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 &#x27;execute()&#x27; 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="patch">patch(id, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates one or more fields in a course.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to modify the
requested course or for access errors.
* `NOT_FOUND` if no course exists with the requested ID.
* `INVALID_ARGUMENT` if invalid fields are specified in the update mask or
if no update mask is supplied.
* `FAILED_PRECONDITION` for the following request errors:
    * CourseNotModifiable

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

{ # A Course in Classroom.
    &quot;description&quot;: &quot;A String&quot;, # Optional description.
        # For example, &quot;We&#x27;ll be learning about the structure of living
        # creatures from a combination of textbooks, guest lectures, and lab work.
        # Expect to be excited!&quot;
        # If set, this field must be a valid UTF-8 string and no longer than 30,000
        # characters.
    &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
    &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
        # 
        # Read-only.
    &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
        # course.
        # 
        # This field will only be set for teachers of the course and domain
        # administrators.
        # 
        # Read-only.
      &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
      &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
          #
          # Read-only.
      &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
          #
          # Read-only.
    },
    &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
        # 
        # When
        # creating a course,
        # you may optionally set this identifier to an
        # alias string in the
        # request to create a corresponding alias. The `id` is still assigned by
        # Classroom and cannot be updated after the course is created.
        # 
        # Specifying this field in a course update mask results in an error.
    &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
        # Classroom adds events for course work and announcements in the course.
        # 
        # Read-only.
    &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
        # 
        # When specified as a parameter of a
        # create course request, this
        # field is required.
        # The identifier can be one of the following:
        # 
        # * the numeric identifier for the user
        # * the email address of the user
        # * the string literal `&quot;me&quot;`, indicating the requesting user
        # 
        # This must be set in a create request. Admins can also specify this field
        # in a patch course request to
        # transfer ownership. In other contexts, it is read-only.
    &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
        # 
        # Read-only.
    &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
        # 
        # Read-only.
      { # A set of materials that appears on the &quot;About&quot; page of the course.
          # These materials might include a syllabus, schedule, or other background
          # information relating to the course as a whole.
        &quot;title&quot;: &quot;A String&quot;, # Title for this set.
        &quot;materials&quot;: [ # Materials attached to this set.
          { # A material attached to a course as part of a material set.
            &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
              &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                  #
                  # Read-only.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
              &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                  #
                  # Read-only.
            },
            &quot;link&quot;: { # URL item. # Link atatchment.
              &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                  # This must be a valid UTF-8 string containing between 1 and 2024 characters.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                  #
                  # Read-only.
              &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                  #
                  # Read-only.
            },
            &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                  #
                  # Read-only.
              &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                  #
                  # Read-only.
              &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
              &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                  #
                  # Read-only.
            },
            &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
              &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                  #
                  # Read-only.
              &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                  #
                  # Read-only.
              &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
            },
          },
        ],
      },
    ],
    &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
        # This group does not accept email and can only be used for permissions.
        # 
        # Read-only.
    &quot;name&quot;: &quot;A String&quot;, # Name of the course.
        # For example, &quot;10th Grade Biology&quot;.
        # The name is required. It must be between 1 and 750 characters and a valid
        # UTF-8 string.
    &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
        # For example, &quot;Welcome to 10th Grade Biology.&quot;
        # If set, this field must be a valid UTF-8 string and no longer than 3600
        # characters.
    &quot;section&quot;: &quot;A String&quot;, # Section of the course.
        # For example, &quot;Period 2&quot;.
        # If set, this field must be a valid UTF-8 string and no longer than 2800
        # characters.
    &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
        # This group does not accept email and can only be used for permissions.
        # 
        # Read-only.
    &quot;room&quot;: &quot;A String&quot;, # Optional room location.
        # For example, &quot;301&quot;.
        # If set, this field must be a valid UTF-8 string and no longer than 650
        # characters.
    &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
        # If unspecified, the default state is `PROVISIONED`.
    &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
    &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
  }

  updateMask: string, Mask that identifies which fields on the course to update.
This field is required to do an update. The update will fail if invalid
fields are specified. The following fields are valid:

* `name`
* `section`
* `descriptionHeading`
* `description`
* `room`
* `courseState`
* `ownerId`

Note: patches to ownerId are treated as being effective immediately, but in
practice it may take some time for the ownership transfer of all affected
resources to complete.

When set in a query parameter, this field should be specified as

`updateMask=&lt;field1&gt;,&lt;field2&gt;,...`
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Course in Classroom.
      &quot;description&quot;: &quot;A String&quot;, # Optional description.
          # For example, &quot;We&#x27;ll be learning about the structure of living
          # creatures from a combination of textbooks, guest lectures, and lab work.
          # Expect to be excited!&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 30,000
          # characters.
      &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
          #
          # Read-only.
      &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
          # course.
          #
          # This field will only be set for teachers of the course and domain
          # administrators.
          #
          # Read-only.
        &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
        &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
            #
            # Read-only.
        &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
            #
            # Read-only.
      },
      &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
          #
          # When
          # creating a course,
          # you may optionally set this identifier to an
          # alias string in the
          # request to create a corresponding alias. The `id` is still assigned by
          # Classroom and cannot be updated after the course is created.
          #
          # Specifying this field in a course update mask results in an error.
      &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
          # Classroom adds events for course work and announcements in the course.
          #
          # Read-only.
      &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
          #
          # When specified as a parameter of a
          # create course request, this
          # field is required.
          # The identifier can be one of the following:
          #
          # * the numeric identifier for the user
          # * the email address of the user
          # * the string literal `&quot;me&quot;`, indicating the requesting user
          #
          # This must be set in a create request. Admins can also specify this field
          # in a patch course request to
          # transfer ownership. In other contexts, it is read-only.
      &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
          #
          # Read-only.
      &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
          #
          # Read-only.
        { # A set of materials that appears on the &quot;About&quot; page of the course.
            # These materials might include a syllabus, schedule, or other background
            # information relating to the course as a whole.
          &quot;title&quot;: &quot;A String&quot;, # Title for this set.
          &quot;materials&quot;: [ # Materials attached to this set.
            { # A material attached to a course as part of a material set.
              &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                    #
                    # Read-only.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                    #
                    # Read-only.
              },
              &quot;link&quot;: { # URL item. # Link atatchment.
                &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                    # This must be a valid UTF-8 string containing between 1 and 2024 characters.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                    #
                    # Read-only.
                &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                    #
                    # Read-only.
              },
              &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                    #
                    # Read-only.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                    #
                    # Read-only.
              },
              &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                    #
                    # Read-only.
                &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                    #
                    # Read-only.
                &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
              },
            },
          ],
        },
      ],
      &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;name&quot;: &quot;A String&quot;, # Name of the course.
          # For example, &quot;10th Grade Biology&quot;.
          # The name is required. It must be between 1 and 750 characters and a valid
          # UTF-8 string.
      &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
          # For example, &quot;Welcome to 10th Grade Biology.&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 3600
          # characters.
      &quot;section&quot;: &quot;A String&quot;, # Section of the course.
          # For example, &quot;Period 2&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 2800
          # characters.
      &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;room&quot;: &quot;A String&quot;, # Optional room location.
          # For example, &quot;301&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 650
          # characters.
      &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
          # If unspecified, the default state is `PROVISIONED`.
      &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(id, body=None, x__xgafv=None)</code>
  <pre>Updates a course.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to modify the
requested course or for access errors.
* `NOT_FOUND` if no course exists with the requested ID.
* `FAILED_PRECONDITION` for the following request errors:
    * CourseNotModifiable

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

{ # A Course in Classroom.
    &quot;description&quot;: &quot;A String&quot;, # Optional description.
        # For example, &quot;We&#x27;ll be learning about the structure of living
        # creatures from a combination of textbooks, guest lectures, and lab work.
        # Expect to be excited!&quot;
        # If set, this field must be a valid UTF-8 string and no longer than 30,000
        # characters.
    &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
    &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
        # 
        # Read-only.
    &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
        # course.
        # 
        # This field will only be set for teachers of the course and domain
        # administrators.
        # 
        # Read-only.
      &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
      &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
          #
          # Read-only.
      &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
          #
          # Read-only.
    },
    &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
        # 
        # When
        # creating a course,
        # you may optionally set this identifier to an
        # alias string in the
        # request to create a corresponding alias. The `id` is still assigned by
        # Classroom and cannot be updated after the course is created.
        # 
        # Specifying this field in a course update mask results in an error.
    &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
        # Classroom adds events for course work and announcements in the course.
        # 
        # Read-only.
    &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
        # 
        # When specified as a parameter of a
        # create course request, this
        # field is required.
        # The identifier can be one of the following:
        # 
        # * the numeric identifier for the user
        # * the email address of the user
        # * the string literal `&quot;me&quot;`, indicating the requesting user
        # 
        # This must be set in a create request. Admins can also specify this field
        # in a patch course request to
        # transfer ownership. In other contexts, it is read-only.
    &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
        # 
        # Read-only.
    &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
        # 
        # Read-only.
      { # A set of materials that appears on the &quot;About&quot; page of the course.
          # These materials might include a syllabus, schedule, or other background
          # information relating to the course as a whole.
        &quot;title&quot;: &quot;A String&quot;, # Title for this set.
        &quot;materials&quot;: [ # Materials attached to this set.
          { # A material attached to a course as part of a material set.
            &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
              &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                  #
                  # Read-only.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
              &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                  #
                  # Read-only.
            },
            &quot;link&quot;: { # URL item. # Link atatchment.
              &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                  # This must be a valid UTF-8 string containing between 1 and 2024 characters.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                  #
                  # Read-only.
              &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                  #
                  # Read-only.
            },
            &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                  #
                  # Read-only.
              &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                  #
                  # Read-only.
              &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
              &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                  #
                  # Read-only.
            },
            &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
              &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                  #
                  # Read-only.
              &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
              &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                  #
                  # Read-only.
              &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
            },
          },
        ],
      },
    ],
    &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
        # This group does not accept email and can only be used for permissions.
        # 
        # Read-only.
    &quot;name&quot;: &quot;A String&quot;, # Name of the course.
        # For example, &quot;10th Grade Biology&quot;.
        # The name is required. It must be between 1 and 750 characters and a valid
        # UTF-8 string.
    &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
        # For example, &quot;Welcome to 10th Grade Biology.&quot;
        # If set, this field must be a valid UTF-8 string and no longer than 3600
        # characters.
    &quot;section&quot;: &quot;A String&quot;, # Section of the course.
        # For example, &quot;Period 2&quot;.
        # If set, this field must be a valid UTF-8 string and no longer than 2800
        # characters.
    &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
        # This group does not accept email and can only be used for permissions.
        # 
        # Read-only.
    &quot;room&quot;: &quot;A String&quot;, # Optional room location.
        # For example, &quot;301&quot;.
        # If set, this field must be a valid UTF-8 string and no longer than 650
        # characters.
    &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
        # If unspecified, the default state is `PROVISIONED`.
    &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
    &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
        # Specifying this field in a course update mask results in an error.
        # 
        # Read-only.
  }

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

Returns:
  An object of the form:

    { # A Course in Classroom.
      &quot;description&quot;: &quot;A String&quot;, # Optional description.
          # For example, &quot;We&#x27;ll be learning about the structure of living
          # creatures from a combination of textbooks, guest lectures, and lab work.
          # Expect to be excited!&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 30,000
          # characters.
      &quot;updateTime&quot;: &quot;A String&quot;, # Time of the most recent update to this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;alternateLink&quot;: &quot;A String&quot;, # Absolute link to this course in the Classroom web UI.
          #
          # Read-only.
      &quot;teacherFolder&quot;: { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the
          # course.
          #
          # This field will only be set for teachers of the course and domain
          # administrators.
          #
          # Read-only.
        &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
        &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive folder.
            #
            # Read-only.
        &quot;title&quot;: &quot;A String&quot;, # Title of the Drive folder.
            #
            # Read-only.
      },
      &quot;id&quot;: &quot;A String&quot;, # Identifier for this course assigned by Classroom.
          #
          # When
          # creating a course,
          # you may optionally set this identifier to an
          # alias string in the
          # request to create a corresponding alias. The `id` is still assigned by
          # Classroom and cannot be updated after the course is created.
          #
          # Specifying this field in a course update mask results in an error.
      &quot;calendarId&quot;: &quot;A String&quot;, # The Calendar ID for a calendar that all course members can see, to which
          # Classroom adds events for course work and announcements in the course.
          #
          # Read-only.
      &quot;ownerId&quot;: &quot;A String&quot;, # The identifier of the owner of a course.
          #
          # When specified as a parameter of a
          # create course request, this
          # field is required.
          # The identifier can be one of the following:
          #
          # * the numeric identifier for the user
          # * the email address of the user
          # * the string literal `&quot;me&quot;`, indicating the requesting user
          #
          # This must be set in a create request. Admins can also specify this field
          # in a patch course request to
          # transfer ownership. In other contexts, it is read-only.
      &quot;guardiansEnabled&quot;: True or False, # Whether or not guardian notifications are enabled for this course.
          #
          # Read-only.
      &quot;courseMaterialSets&quot;: [ # Sets of materials that appear on the &quot;about&quot; page of this course.
          #
          # Read-only.
        { # A set of materials that appears on the &quot;About&quot; page of the course.
            # These materials might include a syllabus, schedule, or other background
            # information relating to the course as a whole.
          &quot;title&quot;: &quot;A String&quot;, # Title for this set.
          &quot;materials&quot;: [ # Materials attached to this set.
            { # A material attached to a course as part of a material set.
              &quot;youTubeVideo&quot;: { # YouTube video item. # Youtube video attachment.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to view the YouTube video.
                    #
                    # Read-only.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the YouTube video.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # YouTube API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the YouTube video.
                    #
                    # Read-only.
              },
              &quot;link&quot;: { # URL item. # Link atatchment.
                &quot;url&quot;: &quot;A String&quot;, # URL to link to.
                    # This must be a valid UTF-8 string containing between 1 and 2024 characters.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the target URL.
                    #
                    # Read-only.
                &quot;title&quot;: &quot;A String&quot;, # Title of the target of the URL.
                    #
                    # Read-only.
              },
              &quot;driveFile&quot;: { # Representation of a Google Drive file. # Google Drive file attachment.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Drive item.
                    #
                    # Read-only.
                &quot;alternateLink&quot;: &quot;A String&quot;, # URL that can be used to access the Drive item.
                    #
                    # Read-only.
                &quot;id&quot;: &quot;A String&quot;, # Drive API resource ID.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Drive item.
                    #
                    # Read-only.
              },
              &quot;form&quot;: { # Google Forms item. # Google Forms attachment.
                &quot;title&quot;: &quot;A String&quot;, # Title of the Form.
                    #
                    # Read-only.
                &quot;responseUrl&quot;: &quot;A String&quot;, # 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.
                &quot;thumbnailUrl&quot;: &quot;A String&quot;, # URL of a thumbnail image of the Form.
                    #
                    # Read-only.
                &quot;formUrl&quot;: &quot;A String&quot;, # URL of the form.
              },
            },
          ],
        },
      ],
      &quot;courseGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all members of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;name&quot;: &quot;A String&quot;, # Name of the course.
          # For example, &quot;10th Grade Biology&quot;.
          # The name is required. It must be between 1 and 750 characters and a valid
          # UTF-8 string.
      &quot;descriptionHeading&quot;: &quot;A String&quot;, # Optional heading for the description.
          # For example, &quot;Welcome to 10th Grade Biology.&quot;
          # If set, this field must be a valid UTF-8 string and no longer than 3600
          # characters.
      &quot;section&quot;: &quot;A String&quot;, # Section of the course.
          # For example, &quot;Period 2&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 2800
          # characters.
      &quot;teacherGroupEmail&quot;: &quot;A String&quot;, # The email address of a Google group containing all teachers of the course.
          # This group does not accept email and can only be used for permissions.
          #
          # Read-only.
      &quot;room&quot;: &quot;A String&quot;, # Optional room location.
          # For example, &quot;301&quot;.
          # If set, this field must be a valid UTF-8 string and no longer than 650
          # characters.
      &quot;courseState&quot;: &quot;A String&quot;, # State of the course.
          # If unspecified, the default state is `PROVISIONED`.
      &quot;enrollmentCode&quot;: &quot;A String&quot;, # Enrollment code to use when joining this course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
      &quot;creationTime&quot;: &quot;A String&quot;, # Creation time of the course.
          # Specifying this field in a course update mask results in an error.
          #
          # Read-only.
    }</pre>
</div>

</body></html>