<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.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="#create">create(body, 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, pageSize=None, courseStates=None, teacherId=None, pageToken=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, 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, 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, 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'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. (required)
    The object takes the form of:

{ # A Course in Classroom.
  "updateTime": "A String", # Time of the most recent update to this course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "room": "A String", # Optional room location.
      # For example, "301".
      # If set, this field must be a valid UTF-8 string and no longer than 650
      # characters.
  "name": "A String", # Name of the course.
      # For example, "10th Grade Biology".
      # The name is required. It must be between 1 and 750 characters and a valid
      # UTF-8 string.
  "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
      # 
      # Read-only.
  "enrollmentCode": "A String", # Enrollment code to use when joining this course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "section": "A String", # Section of the course.
      # For example, "Period 2".
      # If set, this field must be a valid UTF-8 string and no longer than 2800
      # characters.
  "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
      # 
      # Read-only.
  "courseGroupEmail": "A String", # 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.
  "creationTime": "A String", # Creation time of the course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "teacherGroupEmail": "A String", # 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.
  "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
      # 
      # Read-only.
    { # A set of materials that appears on the "About" page of the course.
        # These materials might include a syllabus, schedule, or other background
        # information relating to the course as a whole.
      "materials": [ # Materials attached to this set.
        { # A material attached to a course as part of a material set.
          "link": { # URL item. # Link atatchment.
            "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.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                #
                # Read-only.
            "alternateLink": "A String", # URL that can be used to view 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.
          },
        },
      ],
      "title": "A String", # Title for this set.
    },
  ],
  "teacherFolder": { # 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.
    "alternateLink": "A String", # URL that can be used to access the Drive folder.
        #
        # Read-only.
    "id": "A String", # Drive API resource ID.
    "title": "A String", # Title of the Drive folder.
        #
        # Read-only.
  },
  "ownerId": "A String", # 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 `"me"`, indicating the requesting user
      # 
      # This must be set in a create request. Specifying this field in a course
      # update mask results in an `INVALID_ARGUMENT` error.
  "courseState": "A String", # State of the course.
      # If unspecified, the default state is `PROVISIONED`.
  "id": "A String", # 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.
  "descriptionHeading": "A String", # Optional heading for the description.
      # For example, "Welcome to 10th Grade Biology."
      # If set, this field must be a valid UTF-8 string and no longer than 3600
      # characters.
  "description": "A String", # Optional description.
      # For example, "We'll be learning about the structure of living
      # creatures from a combination of textbooks, guest lectures, and lab work.
      # Expect to be excited!"
      # If set, this field must be a valid UTF-8 string and no longer than 30,000
      # characters.
}

  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.
    "updateTime": "A String", # Time of the most recent update to this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "room": "A String", # Optional room location.
        # For example, "301".
        # If set, this field must be a valid UTF-8 string and no longer than 650
        # characters.
    "name": "A String", # Name of the course.
        # For example, "10th Grade Biology".
        # The name is required. It must be between 1 and 750 characters and a valid
        # UTF-8 string.
    "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
        #
        # Read-only.
    "enrollmentCode": "A String", # Enrollment code to use when joining this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "section": "A String", # Section of the course.
        # For example, "Period 2".
        # If set, this field must be a valid UTF-8 string and no longer than 2800
        # characters.
    "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
        #
        # Read-only.
    "courseGroupEmail": "A String", # 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.
    "creationTime": "A String", # Creation time of the course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "teacherGroupEmail": "A String", # 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.
    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
        #
        # Read-only.
      { # A set of materials that appears on the "About" page of the course.
          # These materials might include a syllabus, schedule, or other background
          # information relating to the course as a whole.
        "materials": [ # Materials attached to this set.
          { # A material attached to a course as part of a material set.
            "link": { # URL item. # Link atatchment.
              "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.
              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              "alternateLink": "A String", # URL that can be used to view 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.
            },
          },
        ],
        "title": "A String", # Title for this set.
      },
    ],
    "teacherFolder": { # 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.
      "alternateLink": "A String", # URL that can be used to access the Drive folder.
          #
          # Read-only.
      "id": "A String", # Drive API resource ID.
      "title": "A String", # Title of the Drive folder.
          #
          # Read-only.
    },
    "ownerId": "A String", # 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 `"me"`, indicating the requesting user
        #
        # This must be set in a create request. Specifying this field in a course
        # update mask results in an `INVALID_ARGUMENT` error.
    "courseState": "A String", # State of the course.
        # If unspecified, the default state is `PROVISIONED`.
    "id": "A String", # 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.
    "descriptionHeading": "A String", # Optional heading for the description.
        # For example, "Welcome to 10th Grade Biology."
        # If set, this field must be a valid UTF-8 string and no longer than 3600
        # characters.
    "description": "A String", # Optional description.
        # For example, "We'll be learning about the structure of living
        # creatures from a combination of textbooks, guest lectures, and lab work.
        # Expect to be excited!"
        # If set, this field must be a valid UTF-8 string and no longer than 30,000
        # characters.
  }</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.
    "updateTime": "A String", # Time of the most recent update to this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "room": "A String", # Optional room location.
        # For example, "301".
        # If set, this field must be a valid UTF-8 string and no longer than 650
        # characters.
    "name": "A String", # Name of the course.
        # For example, "10th Grade Biology".
        # The name is required. It must be between 1 and 750 characters and a valid
        # UTF-8 string.
    "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
        #
        # Read-only.
    "enrollmentCode": "A String", # Enrollment code to use when joining this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "section": "A String", # Section of the course.
        # For example, "Period 2".
        # If set, this field must be a valid UTF-8 string and no longer than 2800
        # characters.
    "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
        #
        # Read-only.
    "courseGroupEmail": "A String", # 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.
    "creationTime": "A String", # Creation time of the course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "teacherGroupEmail": "A String", # 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.
    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
        #
        # Read-only.
      { # A set of materials that appears on the "About" page of the course.
          # These materials might include a syllabus, schedule, or other background
          # information relating to the course as a whole.
        "materials": [ # Materials attached to this set.
          { # A material attached to a course as part of a material set.
            "link": { # URL item. # Link atatchment.
              "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.
              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              "alternateLink": "A String", # URL that can be used to view 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.
            },
          },
        ],
        "title": "A String", # Title for this set.
      },
    ],
    "teacherFolder": { # 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.
      "alternateLink": "A String", # URL that can be used to access the Drive folder.
          #
          # Read-only.
      "id": "A String", # Drive API resource ID.
      "title": "A String", # Title of the Drive folder.
          #
          # Read-only.
    },
    "ownerId": "A String", # 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 `"me"`, indicating the requesting user
        #
        # This must be set in a create request. Specifying this field in a course
        # update mask results in an `INVALID_ARGUMENT` error.
    "courseState": "A String", # State of the course.
        # If unspecified, the default state is `PROVISIONED`.
    "id": "A String", # 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.
    "descriptionHeading": "A String", # Optional heading for the description.
        # For example, "Welcome to 10th Grade Biology."
        # If set, this field must be a valid UTF-8 string and no longer than 3600
        # characters.
    "description": "A String", # Optional description.
        # For example, "We'll be learning about the structure of living
        # creatures from a combination of textbooks, guest lectures, and lab work.
        # Expect to be excited!"
        # If set, this field must be a valid UTF-8 string and no longer than 30,000
        # characters.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(studentId=None, pageSize=None, courseStates=None, teacherId=None, pageToken=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.

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 `"me"`, indicating the requesting user
  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.
  courseStates: string, Restricts returned courses to those in one of the specified states
The default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED. (repeated)
  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 `"me"`, 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.
  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.
    "nextPageToken": "A String", # Token identifying the next page of results to return. If empty, no further
        # results are available.
    "courses": [ # Courses that match the list request.
      { # A Course in Classroom.
        "updateTime": "A String", # Time of the most recent update to this course.
            # Specifying this field in a course update mask results in an error.
            #
            # Read-only.
        "room": "A String", # Optional room location.
            # For example, "301".
            # If set, this field must be a valid UTF-8 string and no longer than 650
            # characters.
        "name": "A String", # Name of the course.
            # For example, "10th Grade Biology".
            # The name is required. It must be between 1 and 750 characters and a valid
            # UTF-8 string.
        "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
            #
            # Read-only.
        "enrollmentCode": "A String", # Enrollment code to use when joining this course.
            # Specifying this field in a course update mask results in an error.
            #
            # Read-only.
        "section": "A String", # Section of the course.
            # For example, "Period 2".
            # If set, this field must be a valid UTF-8 string and no longer than 2800
            # characters.
        "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
            #
            # Read-only.
        "courseGroupEmail": "A String", # 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.
        "creationTime": "A String", # Creation time of the course.
            # Specifying this field in a course update mask results in an error.
            #
            # Read-only.
        "teacherGroupEmail": "A String", # 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.
        "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
            #
            # Read-only.
          { # A set of materials that appears on the "About" page of the course.
              # These materials might include a syllabus, schedule, or other background
              # information relating to the course as a whole.
            "materials": [ # Materials attached to this set.
              { # A material attached to a course as part of a material set.
                "link": { # URL item. # Link atatchment.
                  "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.
                  "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                      #
                      # Read-only.
                  "alternateLink": "A String", # URL that can be used to view 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.
                },
              },
            ],
            "title": "A String", # Title for this set.
          },
        ],
        "teacherFolder": { # 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.
          "alternateLink": "A String", # URL that can be used to access the Drive folder.
              #
              # Read-only.
          "id": "A String", # Drive API resource ID.
          "title": "A String", # Title of the Drive folder.
              #
              # Read-only.
        },
        "ownerId": "A String", # 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 `"me"`, indicating the requesting user
            #
            # This must be set in a create request. Specifying this field in a course
            # update mask results in an `INVALID_ARGUMENT` error.
        "courseState": "A String", # State of the course.
            # If unspecified, the default state is `PROVISIONED`.
        "id": "A String", # 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.
        "descriptionHeading": "A String", # Optional heading for the description.
            # For example, "Welcome to 10th Grade Biology."
            # If set, this field must be a valid UTF-8 string and no longer than 3600
            # characters.
        "description": "A String", # Optional description.
            # For example, "We'll be learning about the structure of living
            # creatures from a combination of textbooks, guest lectures, and lab work.
            # Expect to be excited!"
            # If set, this field must be a valid UTF-8 string and no longer than 30,000
            # characters.
      },
    ],
  }</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="patch">patch(id, body, 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. (required)
    The object takes the form of:

{ # A Course in Classroom.
  "updateTime": "A String", # Time of the most recent update to this course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "room": "A String", # Optional room location.
      # For example, "301".
      # If set, this field must be a valid UTF-8 string and no longer than 650
      # characters.
  "name": "A String", # Name of the course.
      # For example, "10th Grade Biology".
      # The name is required. It must be between 1 and 750 characters and a valid
      # UTF-8 string.
  "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
      # 
      # Read-only.
  "enrollmentCode": "A String", # Enrollment code to use when joining this course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "section": "A String", # Section of the course.
      # For example, "Period 2".
      # If set, this field must be a valid UTF-8 string and no longer than 2800
      # characters.
  "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
      # 
      # Read-only.
  "courseGroupEmail": "A String", # 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.
  "creationTime": "A String", # Creation time of the course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "teacherGroupEmail": "A String", # 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.
  "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
      # 
      # Read-only.
    { # A set of materials that appears on the "About" page of the course.
        # These materials might include a syllabus, schedule, or other background
        # information relating to the course as a whole.
      "materials": [ # Materials attached to this set.
        { # A material attached to a course as part of a material set.
          "link": { # URL item. # Link atatchment.
            "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.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                #
                # Read-only.
            "alternateLink": "A String", # URL that can be used to view 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.
          },
        },
      ],
      "title": "A String", # Title for this set.
    },
  ],
  "teacherFolder": { # 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.
    "alternateLink": "A String", # URL that can be used to access the Drive folder.
        #
        # Read-only.
    "id": "A String", # Drive API resource ID.
    "title": "A String", # Title of the Drive folder.
        #
        # Read-only.
  },
  "ownerId": "A String", # 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 `"me"`, indicating the requesting user
      # 
      # This must be set in a create request. Specifying this field in a course
      # update mask results in an `INVALID_ARGUMENT` error.
  "courseState": "A String", # State of the course.
      # If unspecified, the default state is `PROVISIONED`.
  "id": "A String", # 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.
  "descriptionHeading": "A String", # Optional heading for the description.
      # For example, "Welcome to 10th Grade Biology."
      # If set, this field must be a valid UTF-8 string and no longer than 3600
      # characters.
  "description": "A String", # Optional description.
      # For example, "We'll be learning about the structure of living
      # creatures from a combination of textbooks, guest lectures, and lab work.
      # Expect to be excited!"
      # If set, this field must be a valid UTF-8 string and no longer than 30,000
      # characters.
}

  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`

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

`updateMask=<field1>,<field2>,...`
  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.
    "updateTime": "A String", # Time of the most recent update to this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "room": "A String", # Optional room location.
        # For example, "301".
        # If set, this field must be a valid UTF-8 string and no longer than 650
        # characters.
    "name": "A String", # Name of the course.
        # For example, "10th Grade Biology".
        # The name is required. It must be between 1 and 750 characters and a valid
        # UTF-8 string.
    "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
        #
        # Read-only.
    "enrollmentCode": "A String", # Enrollment code to use when joining this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "section": "A String", # Section of the course.
        # For example, "Period 2".
        # If set, this field must be a valid UTF-8 string and no longer than 2800
        # characters.
    "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
        #
        # Read-only.
    "courseGroupEmail": "A String", # 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.
    "creationTime": "A String", # Creation time of the course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "teacherGroupEmail": "A String", # 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.
    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
        #
        # Read-only.
      { # A set of materials that appears on the "About" page of the course.
          # These materials might include a syllabus, schedule, or other background
          # information relating to the course as a whole.
        "materials": [ # Materials attached to this set.
          { # A material attached to a course as part of a material set.
            "link": { # URL item. # Link atatchment.
              "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.
              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              "alternateLink": "A String", # URL that can be used to view 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.
            },
          },
        ],
        "title": "A String", # Title for this set.
      },
    ],
    "teacherFolder": { # 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.
      "alternateLink": "A String", # URL that can be used to access the Drive folder.
          #
          # Read-only.
      "id": "A String", # Drive API resource ID.
      "title": "A String", # Title of the Drive folder.
          #
          # Read-only.
    },
    "ownerId": "A String", # 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 `"me"`, indicating the requesting user
        #
        # This must be set in a create request. Specifying this field in a course
        # update mask results in an `INVALID_ARGUMENT` error.
    "courseState": "A String", # State of the course.
        # If unspecified, the default state is `PROVISIONED`.
    "id": "A String", # 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.
    "descriptionHeading": "A String", # Optional heading for the description.
        # For example, "Welcome to 10th Grade Biology."
        # If set, this field must be a valid UTF-8 string and no longer than 3600
        # characters.
    "description": "A String", # Optional description.
        # For example, "We'll be learning about the structure of living
        # creatures from a combination of textbooks, guest lectures, and lab work.
        # Expect to be excited!"
        # If set, this field must be a valid UTF-8 string and no longer than 30,000
        # characters.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(id, body, 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. (required)
    The object takes the form of:

{ # A Course in Classroom.
  "updateTime": "A String", # Time of the most recent update to this course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "room": "A String", # Optional room location.
      # For example, "301".
      # If set, this field must be a valid UTF-8 string and no longer than 650
      # characters.
  "name": "A String", # Name of the course.
      # For example, "10th Grade Biology".
      # The name is required. It must be between 1 and 750 characters and a valid
      # UTF-8 string.
  "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
      # 
      # Read-only.
  "enrollmentCode": "A String", # Enrollment code to use when joining this course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "section": "A String", # Section of the course.
      # For example, "Period 2".
      # If set, this field must be a valid UTF-8 string and no longer than 2800
      # characters.
  "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
      # 
      # Read-only.
  "courseGroupEmail": "A String", # 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.
  "creationTime": "A String", # Creation time of the course.
      # Specifying this field in a course update mask results in an error.
      # 
      # Read-only.
  "teacherGroupEmail": "A String", # 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.
  "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
      # 
      # Read-only.
    { # A set of materials that appears on the "About" page of the course.
        # These materials might include a syllabus, schedule, or other background
        # information relating to the course as a whole.
      "materials": [ # Materials attached to this set.
        { # A material attached to a course as part of a material set.
          "link": { # URL item. # Link atatchment.
            "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.
            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                #
                # Read-only.
            "alternateLink": "A String", # URL that can be used to view 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.
          },
        },
      ],
      "title": "A String", # Title for this set.
    },
  ],
  "teacherFolder": { # 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.
    "alternateLink": "A String", # URL that can be used to access the Drive folder.
        #
        # Read-only.
    "id": "A String", # Drive API resource ID.
    "title": "A String", # Title of the Drive folder.
        #
        # Read-only.
  },
  "ownerId": "A String", # 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 `"me"`, indicating the requesting user
      # 
      # This must be set in a create request. Specifying this field in a course
      # update mask results in an `INVALID_ARGUMENT` error.
  "courseState": "A String", # State of the course.
      # If unspecified, the default state is `PROVISIONED`.
  "id": "A String", # 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.
  "descriptionHeading": "A String", # Optional heading for the description.
      # For example, "Welcome to 10th Grade Biology."
      # If set, this field must be a valid UTF-8 string and no longer than 3600
      # characters.
  "description": "A String", # Optional description.
      # For example, "We'll be learning about the structure of living
      # creatures from a combination of textbooks, guest lectures, and lab work.
      # Expect to be excited!"
      # If set, this field must be a valid UTF-8 string and no longer than 30,000
      # characters.
}

  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.
    "updateTime": "A String", # Time of the most recent update to this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "room": "A String", # Optional room location.
        # For example, "301".
        # If set, this field must be a valid UTF-8 string and no longer than 650
        # characters.
    "name": "A String", # Name of the course.
        # For example, "10th Grade Biology".
        # The name is required. It must be between 1 and 750 characters and a valid
        # UTF-8 string.
    "alternateLink": "A String", # Absolute link to this course in the Classroom web UI.
        #
        # Read-only.
    "enrollmentCode": "A String", # Enrollment code to use when joining this course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "section": "A String", # Section of the course.
        # For example, "Period 2".
        # If set, this field must be a valid UTF-8 string and no longer than 2800
        # characters.
    "guardiansEnabled": True or False, # Whether or not guardian notifications are enabled for this course.
        #
        # Read-only.
    "courseGroupEmail": "A String", # 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.
    "creationTime": "A String", # Creation time of the course.
        # Specifying this field in a course update mask results in an error.
        #
        # Read-only.
    "teacherGroupEmail": "A String", # 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.
    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course.
        #
        # Read-only.
      { # A set of materials that appears on the "About" page of the course.
          # These materials might include a syllabus, schedule, or other background
          # information relating to the course as a whole.
        "materials": [ # Materials attached to this set.
          { # A material attached to a course as part of a material set.
            "link": { # URL item. # Link atatchment.
              "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.
              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              "alternateLink": "A String", # URL that can be used to view 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.
            },
          },
        ],
        "title": "A String", # Title for this set.
      },
    ],
    "teacherFolder": { # 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.
      "alternateLink": "A String", # URL that can be used to access the Drive folder.
          #
          # Read-only.
      "id": "A String", # Drive API resource ID.
      "title": "A String", # Title of the Drive folder.
          #
          # Read-only.
    },
    "ownerId": "A String", # 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 `"me"`, indicating the requesting user
        #
        # This must be set in a create request. Specifying this field in a course
        # update mask results in an `INVALID_ARGUMENT` error.
    "courseState": "A String", # State of the course.
        # If unspecified, the default state is `PROVISIONED`.
    "id": "A String", # 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.
    "descriptionHeading": "A String", # Optional heading for the description.
        # For example, "Welcome to 10th Grade Biology."
        # If set, this field must be a valid UTF-8 string and no longer than 3600
        # characters.
    "description": "A String", # Optional description.
        # For example, "We'll be learning about the structure of living
        # creatures from a combination of textbooks, guest lectures, and lab work.
        # Expect to be excited!"
        # If set, this field must be a valid UTF-8 string and no longer than 30,000
        # characters.
  }</pre>
</div>

</body></html>