<html><body>
<style>

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

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

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

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

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

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

pre {
  margin-top: 0.5em;
}

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

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

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

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

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

</style>

<h1><a href="classroom_v1.html">Google Classroom API</a> . <a href="classroom_v1.courses.html">courses</a> . <a href="classroom_v1.courses.topics.html">topics</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(courseId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a topic.</p>
<p class="toc_element">
  <code><a href="#delete">delete(courseId, id, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a topic.</p>
<p class="toc_element">
  <code><a href="#get">get(courseId, id, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a topic.</p>
<p class="toc_element">
  <code><a href="#list">list(courseId, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of topics that the requester 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(courseId, id, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates one or more fields of a topic.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(courseId, body, x__xgafv=None)</code>
  <pre>Creates a topic.

This method returns the following error codes:

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

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

{ # Topic created by a teacher for the course
    "courseId": "A String", # Identifier of the course.
        # 
        # Read-only.
    "topicId": "A String", # Unique identifier for the topic.
        # 
        # Read-only.
    "updateTime": "A String", # The time the topic was last updated by the system.
        # 
        # Read-only.
    "name": "A String", # The name of the topic, generated by the user.
        # Leading and trailing whitespaces, if any, will be trimmed. Also, multiple
        # consecutive whitespaces will be collapsed into one inside the name. The
        # result must be a non-empty string. Topic names are case sensitive, and must
        # be no longer than 100 characters.
  }

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

Returns:
  An object of the form:

    { # Topic created by a teacher for the course
      "courseId": "A String", # Identifier of the course.
          #
          # Read-only.
      "topicId": "A String", # Unique identifier for the topic.
          #
          # Read-only.
      "updateTime": "A String", # The time the topic was last updated by the system.
          #
          # Read-only.
      "name": "A String", # The name of the topic, generated by the user.
          # Leading and trailing whitespaces, if any, will be trimmed. Also, multiple
          # consecutive whitespaces will be collapsed into one inside the name. The
          # result must be a non-empty string. Topic names are case sensitive, and must
          # be no longer than 100 characters.
    }</pre>
</div>

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

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not allowed to delete the
requested topic or for access errors.
* `FAILED_PRECONDITION` if the requested topic has already been
deleted.
* `NOT_FOUND` if no course or topic exists with the requested ID.

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

This method returns the following error codes:

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

Args:
  courseId: string, Identifier of the course. (required)
  id: string, Identifier of the topic. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Topic created by a teacher for the course
      "courseId": "A String", # Identifier of the course.
          #
          # Read-only.
      "topicId": "A String", # Unique identifier for the topic.
          #
          # Read-only.
      "updateTime": "A String", # The time the topic was last updated by the system.
          #
          # Read-only.
      "name": "A String", # The name of the topic, generated by the user.
          # Leading and trailing whitespaces, if any, will be trimmed. Also, multiple
          # consecutive whitespaces will be collapsed into one inside the name. The
          # result must be a non-empty string. Topic names are case sensitive, and must
          # be no longer than 100 characters.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(courseId, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns the list of topics that the requester is permitted to view.

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.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course does not exist.

Args:
  courseId: string, Identifier of the course.
This identifier can be either the Classroom-assigned identifier or an
alias. (required)
  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.
  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 topics.
    "nextPageToken": "A String", # Token identifying the next page of results to return. If empty, no further
        # results are available.
    "topic": [ # Topic items that match the request.
      { # Topic created by a teacher for the course
          "courseId": "A String", # Identifier of the course.
              #
              # Read-only.
          "topicId": "A String", # Unique identifier for the topic.
              #
              # Read-only.
          "updateTime": "A String", # The time the topic was last updated by the system.
              #
              # Read-only.
          "name": "A String", # The name of the topic, generated by the user.
              # Leading and trailing whitespaces, if any, will be trimmed. Also, multiple
              # consecutive whitespaces will be collapsed into one inside the name. The
              # result must be a non-empty string. Topic names are case sensitive, and must
              # be no longer than 100 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(courseId, id, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates one or more fields of a topic.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting developer project did not create
the corresponding topic or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course or topic does not exist

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

{ # Topic created by a teacher for the course
    "courseId": "A String", # Identifier of the course.
        # 
        # Read-only.
    "topicId": "A String", # Unique identifier for the topic.
        # 
        # Read-only.
    "updateTime": "A String", # The time the topic was last updated by the system.
        # 
        # Read-only.
    "name": "A String", # The name of the topic, generated by the user.
        # Leading and trailing whitespaces, if any, will be trimmed. Also, multiple
        # consecutive whitespaces will be collapsed into one inside the name. The
        # result must be a non-empty string. Topic names are case sensitive, and must
        # be no longer than 100 characters.
  }

  updateMask: string, Mask that identifies which fields on the topic to update.
This field is required to do an update. The update fails if invalid
fields are specified. If a field supports empty values, it can be cleared
by specifying it in the update mask and not in the Topic object. If a
field that does not support empty values is included in the update mask and
not set in the Topic object, an `INVALID_ARGUMENT` error will be
returned.

The following fields may be specified:

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

Returns:
  An object of the form:

    { # Topic created by a teacher for the course
      "courseId": "A String", # Identifier of the course.
          #
          # Read-only.
      "topicId": "A String", # Unique identifier for the topic.
          #
          # Read-only.
      "updateTime": "A String", # The time the topic was last updated by the system.
          #
          # Read-only.
      "name": "A String", # The name of the topic, generated by the user.
          # Leading and trailing whitespaces, if any, will be trimmed. Also, multiple
          # consecutive whitespaces will be collapsed into one inside the name. The
          # result must be a non-empty string. Topic names are case sensitive, and must
          # be no longer than 100 characters.
    }</pre>
</div>

</body></html>