<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.announcements.html">announcements</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 an announcement.</p>
<p class="toc_element">
  <code><a href="#delete">delete(courseId, id, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an announcement.</p>
<p class="toc_element">
  <code><a href="#get">get(courseId, id, x__xgafv=None)</a></code></p>
<p class="firstline">Returns an announcement.</p>
<p class="toc_element">
  <code><a href="#list">list(courseId, orderBy=None, pageSize=None, announcementStates=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a list of announcements 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="#modifyAssignees">modifyAssignees(courseId, id, body, x__xgafv=None)</a></code></p>
<p class="firstline">Modifies assignee mode and options of an announcement.</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 an announcement.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(courseId, body, x__xgafv=None)</code>
  <pre>Creates an announcement.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course, create announcements in the requested course, share a
Drive attachment, or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course does not exist.
* `FAILED_PRECONDITION` for the following request error:
    * AttachmentNotVisible

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:

{ # Announcement created by a teacher for students of the course
  "updateTime": "A String", # Timestamp of the most recent change to this announcement.
      # 
      # Read-only.
  "scheduledTime": "A String", # Optional timestamp when this announcement is scheduled to be published.
  "creatorUserId": "A String", # Identifier for the user that created the announcement.
      # 
      # Read-only.
  "courseId": "A String", # Identifier of the course.
      # 
      # Read-only.
  "text": "A String", # Description of this announcement.
      # The text must be a valid UTF-8 string containing no more
      # than 30,000 characters.
  "alternateLink": "A String", # Absolute link to this announcement in the Classroom web UI.
      # This is only populated if `state` is `PUBLISHED`.
      # 
      # Read-only.
  "creationTime": "A String", # Timestamp when this announcement was created.
      # 
      # Read-only.
  "assigneeMode": "A String", # Assignee mode of the announcement.
      # If unspecified, the default value is `ALL_STUDENTS`.
  "state": "A String", # Status of this announcement.
      # If unspecified, the default state is `DRAFT`.
  "materials": [ # Additional materials.
      # 
      # Announcements must have no more than 20 material items.
    { # Material attached to course work.
        #
        # When creating attachments, setting the `form` field is not supported.
      "youtubeVideo": { # YouTube video item. # YouTube video material.
        "alternateLink": "A String", # URL that can be used to view the YouTube video.
            #
            # Read-only.
        "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
            #
            # Read-only.
        "id": "A String", # YouTube API resource ID.
        "title": "A String", # Title of the YouTube video.
            #
            # Read-only.
      },
      "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
        "driveFile": { # Representation of a Google Drive file. # Drive file details.
          "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.
        },
        "shareMode": "A String", # Mechanism by which students access the Drive item.
      },
      "link": { # URL item. # Link material. On creation, will be upgraded to a more appropriate type
          # if possible, and this will be reflected in the response.
        "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.
      },
      "form": { # Google Forms item. # Google Forms material.
        "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.
      },
    },
  ],
  "individualStudentsOptions": { # Assignee details about a coursework/announcement. # Identifiers of students with access to the announcement.
      # This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
      # If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students
      # specified in this field will be able to see the announcement.
      # This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
    "studentIds": [ # Identifiers for the students that have access to the
        # coursework/announcement.
      "A String",
    ],
  },
  "id": "A String", # Classroom-assigned identifier of this announcement, unique per course.
      # 
      # Read-only.
}

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

Returns:
  An object of the form:

    { # Announcement created by a teacher for students of the course
    "updateTime": "A String", # Timestamp of the most recent change to this announcement.
        #
        # Read-only.
    "scheduledTime": "A String", # Optional timestamp when this announcement is scheduled to be published.
    "creatorUserId": "A String", # Identifier for the user that created the announcement.
        #
        # Read-only.
    "courseId": "A String", # Identifier of the course.
        #
        # Read-only.
    "text": "A String", # Description of this announcement.
        # The text must be a valid UTF-8 string containing no more
        # than 30,000 characters.
    "alternateLink": "A String", # Absolute link to this announcement in the Classroom web UI.
        # This is only populated if `state` is `PUBLISHED`.
        #
        # Read-only.
    "creationTime": "A String", # Timestamp when this announcement was created.
        #
        # Read-only.
    "assigneeMode": "A String", # Assignee mode of the announcement.
        # If unspecified, the default value is `ALL_STUDENTS`.
    "state": "A String", # Status of this announcement.
        # If unspecified, the default state is `DRAFT`.
    "materials": [ # Additional materials.
        #
        # Announcements must have no more than 20 material items.
      { # Material attached to course work.
          #
          # When creating attachments, setting the `form` field is not supported.
        "youtubeVideo": { # YouTube video item. # YouTube video material.
          "alternateLink": "A String", # URL that can be used to view the YouTube video.
              #
              # Read-only.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
              #
              # Read-only.
          "id": "A String", # YouTube API resource ID.
          "title": "A String", # Title of the YouTube video.
              #
              # Read-only.
        },
        "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
          "driveFile": { # Representation of a Google Drive file. # Drive file details.
            "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.
          },
          "shareMode": "A String", # Mechanism by which students access the Drive item.
        },
        "link": { # URL item. # Link material. On creation, will be upgraded to a more appropriate type
            # if possible, and this will be reflected in the response.
          "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.
        },
        "form": { # Google Forms item. # Google Forms material.
          "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.
        },
      },
    ],
    "individualStudentsOptions": { # Assignee details about a coursework/announcement. # Identifiers of students with access to the announcement.
        # This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
        # If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students
        # specified in this field will be able to see the announcement.
        # This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
      "studentIds": [ # Identifiers for the students that have access to the
          # coursework/announcement.
        "A String",
      ],
    },
    "id": "A String", # Classroom-assigned identifier of this announcement, unique per course.
        #
        # Read-only.
  }</pre>
</div>

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

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

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting developer project did not create
the corresponding announcement, if the requesting user is not permitted
to delete the requested course or for access errors.
* `FAILED_PRECONDITION` if the requested announcement has already been
deleted.
* `NOT_FOUND` if no course 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 announcement to delete.
This identifier is a Classroom-assigned identifier. (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 an announcement.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or announcement, or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course or announcement 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 announcement. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Announcement created by a teacher for students of the course
    "updateTime": "A String", # Timestamp of the most recent change to this announcement.
        #
        # Read-only.
    "scheduledTime": "A String", # Optional timestamp when this announcement is scheduled to be published.
    "creatorUserId": "A String", # Identifier for the user that created the announcement.
        #
        # Read-only.
    "courseId": "A String", # Identifier of the course.
        #
        # Read-only.
    "text": "A String", # Description of this announcement.
        # The text must be a valid UTF-8 string containing no more
        # than 30,000 characters.
    "alternateLink": "A String", # Absolute link to this announcement in the Classroom web UI.
        # This is only populated if `state` is `PUBLISHED`.
        #
        # Read-only.
    "creationTime": "A String", # Timestamp when this announcement was created.
        #
        # Read-only.
    "assigneeMode": "A String", # Assignee mode of the announcement.
        # If unspecified, the default value is `ALL_STUDENTS`.
    "state": "A String", # Status of this announcement.
        # If unspecified, the default state is `DRAFT`.
    "materials": [ # Additional materials.
        #
        # Announcements must have no more than 20 material items.
      { # Material attached to course work.
          #
          # When creating attachments, setting the `form` field is not supported.
        "youtubeVideo": { # YouTube video item. # YouTube video material.
          "alternateLink": "A String", # URL that can be used to view the YouTube video.
              #
              # Read-only.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
              #
              # Read-only.
          "id": "A String", # YouTube API resource ID.
          "title": "A String", # Title of the YouTube video.
              #
              # Read-only.
        },
        "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
          "driveFile": { # Representation of a Google Drive file. # Drive file details.
            "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.
          },
          "shareMode": "A String", # Mechanism by which students access the Drive item.
        },
        "link": { # URL item. # Link material. On creation, will be upgraded to a more appropriate type
            # if possible, and this will be reflected in the response.
          "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.
        },
        "form": { # Google Forms item. # Google Forms material.
          "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.
        },
      },
    ],
    "individualStudentsOptions": { # Assignee details about a coursework/announcement. # Identifiers of students with access to the announcement.
        # This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
        # If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students
        # specified in this field will be able to see the announcement.
        # This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
      "studentIds": [ # Identifiers for the students that have access to the
          # coursework/announcement.
        "A String",
      ],
    },
    "id": "A String", # Classroom-assigned identifier of this announcement, unique per course.
        #
        # Read-only.
  }</pre>
</div>

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

Course students may only view `PUBLISHED` announcements. Course teachers
and domain administrators may view all announcements.

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)
  orderBy: string, Optional sort ordering for results. A comma-separated list of fields with
an optional sort direction keyword. Supported field is `updateTime`.
Supported direction keywords are `asc` and `desc`.
If not specified, `updateTime desc` is the default behavior.
Examples: `updateTime asc`, `updateTime`
  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.
  announcementStates: string, Restriction on the `state` of announcements returned.
If this argument is left unspecified, the default value is `PUBLISHED`. (repeated)
  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 course work.
    "nextPageToken": "A String", # Token identifying the next page of results to return. If empty, no further
        # results are available.
    "announcements": [ # Announcement items that match the request.
      { # Announcement created by a teacher for students of the course
        "updateTime": "A String", # Timestamp of the most recent change to this announcement.
            #
            # Read-only.
        "scheduledTime": "A String", # Optional timestamp when this announcement is scheduled to be published.
        "creatorUserId": "A String", # Identifier for the user that created the announcement.
            #
            # Read-only.
        "courseId": "A String", # Identifier of the course.
            #
            # Read-only.
        "text": "A String", # Description of this announcement.
            # The text must be a valid UTF-8 string containing no more
            # than 30,000 characters.
        "alternateLink": "A String", # Absolute link to this announcement in the Classroom web UI.
            # This is only populated if `state` is `PUBLISHED`.
            #
            # Read-only.
        "creationTime": "A String", # Timestamp when this announcement was created.
            #
            # Read-only.
        "assigneeMode": "A String", # Assignee mode of the announcement.
            # If unspecified, the default value is `ALL_STUDENTS`.
        "state": "A String", # Status of this announcement.
            # If unspecified, the default state is `DRAFT`.
        "materials": [ # Additional materials.
            #
            # Announcements must have no more than 20 material items.
          { # Material attached to course work.
              #
              # When creating attachments, setting the `form` field is not supported.
            "youtubeVideo": { # YouTube video item. # YouTube video material.
              "alternateLink": "A String", # URL that can be used to view the YouTube video.
                  #
                  # Read-only.
              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
                  #
                  # Read-only.
              "id": "A String", # YouTube API resource ID.
              "title": "A String", # Title of the YouTube video.
                  #
                  # Read-only.
            },
            "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
              "driveFile": { # Representation of a Google Drive file. # Drive file details.
                "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.
              },
              "shareMode": "A String", # Mechanism by which students access the Drive item.
            },
            "link": { # URL item. # Link material. On creation, will be upgraded to a more appropriate type
                # if possible, and this will be reflected in the response.
              "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.
            },
            "form": { # Google Forms item. # Google Forms material.
              "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.
            },
          },
        ],
        "individualStudentsOptions": { # Assignee details about a coursework/announcement. # Identifiers of students with access to the announcement.
            # This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
            # If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students
            # specified in this field will be able to see the announcement.
            # This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
          "studentIds": [ # Identifiers for the students that have access to the
              # coursework/announcement.
            "A String",
          ],
        },
        "id": "A String", # Classroom-assigned identifier of this announcement, unique per course.
            #
            # Read-only.
      },
    ],
  }</pre>
</div>

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

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

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

<div class="method">
    <code class="details" id="modifyAssignees">modifyAssignees(courseId, id, body, x__xgafv=None)</code>
  <pre>Modifies assignee mode and options of an announcement.

Only a teacher of the course that contains the announcement may
call this method.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting user is not permitted to access the
requested course or course work or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `NOT_FOUND` if the requested course or course work 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 announcement. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request to modify assignee mode and options of an announcement.
    "assigneeMode": "A String", # Mode of the announcement describing whether it will be accessible by all
        # students or specified individual students.
    "modifyIndividualStudentsOptions": { # Contains fields to add or remove students from a course work or announcement # Set which students can view or cannot view the announcement.
        # Must be specified only when `assigneeMode` is `INDIVIDUAL_STUDENTS`.
        # where the `assigneeMode` is set to `INDIVIDUAL_STUDENTS`.
      "addStudentIds": [ # Ids of students to be added as having access to this
          # coursework/announcement.
        "A String",
      ],
      "removeStudentIds": [ # Ids of students to be removed from having access to this
          # coursework/announcement.
        "A String",
      ],
    },
  }

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

Returns:
  An object of the form:

    { # Announcement created by a teacher for students of the course
    "updateTime": "A String", # Timestamp of the most recent change to this announcement.
        #
        # Read-only.
    "scheduledTime": "A String", # Optional timestamp when this announcement is scheduled to be published.
    "creatorUserId": "A String", # Identifier for the user that created the announcement.
        #
        # Read-only.
    "courseId": "A String", # Identifier of the course.
        #
        # Read-only.
    "text": "A String", # Description of this announcement.
        # The text must be a valid UTF-8 string containing no more
        # than 30,000 characters.
    "alternateLink": "A String", # Absolute link to this announcement in the Classroom web UI.
        # This is only populated if `state` is `PUBLISHED`.
        #
        # Read-only.
    "creationTime": "A String", # Timestamp when this announcement was created.
        #
        # Read-only.
    "assigneeMode": "A String", # Assignee mode of the announcement.
        # If unspecified, the default value is `ALL_STUDENTS`.
    "state": "A String", # Status of this announcement.
        # If unspecified, the default state is `DRAFT`.
    "materials": [ # Additional materials.
        #
        # Announcements must have no more than 20 material items.
      { # Material attached to course work.
          #
          # When creating attachments, setting the `form` field is not supported.
        "youtubeVideo": { # YouTube video item. # YouTube video material.
          "alternateLink": "A String", # URL that can be used to view the YouTube video.
              #
              # Read-only.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
              #
              # Read-only.
          "id": "A String", # YouTube API resource ID.
          "title": "A String", # Title of the YouTube video.
              #
              # Read-only.
        },
        "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
          "driveFile": { # Representation of a Google Drive file. # Drive file details.
            "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.
          },
          "shareMode": "A String", # Mechanism by which students access the Drive item.
        },
        "link": { # URL item. # Link material. On creation, will be upgraded to a more appropriate type
            # if possible, and this will be reflected in the response.
          "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.
        },
        "form": { # Google Forms item. # Google Forms material.
          "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.
        },
      },
    ],
    "individualStudentsOptions": { # Assignee details about a coursework/announcement. # Identifiers of students with access to the announcement.
        # This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
        # If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students
        # specified in this field will be able to see the announcement.
        # This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
      "studentIds": [ # Identifiers for the students that have access to the
          # coursework/announcement.
        "A String",
      ],
    },
    "id": "A String", # Classroom-assigned identifier of this announcement, unique per course.
        #
        # Read-only.
  }</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 an announcement.

This method returns the following error codes:

* `PERMISSION_DENIED` if the requesting developer project did not create
the corresponding announcement or for access errors.
* `INVALID_ARGUMENT` if the request is malformed.
* `FAILED_PRECONDITION` if the requested announcement has already been
deleted.
* `NOT_FOUND` if the requested course or announcement 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 announcement. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Announcement created by a teacher for students of the course
  "updateTime": "A String", # Timestamp of the most recent change to this announcement.
      # 
      # Read-only.
  "scheduledTime": "A String", # Optional timestamp when this announcement is scheduled to be published.
  "creatorUserId": "A String", # Identifier for the user that created the announcement.
      # 
      # Read-only.
  "courseId": "A String", # Identifier of the course.
      # 
      # Read-only.
  "text": "A String", # Description of this announcement.
      # The text must be a valid UTF-8 string containing no more
      # than 30,000 characters.
  "alternateLink": "A String", # Absolute link to this announcement in the Classroom web UI.
      # This is only populated if `state` is `PUBLISHED`.
      # 
      # Read-only.
  "creationTime": "A String", # Timestamp when this announcement was created.
      # 
      # Read-only.
  "assigneeMode": "A String", # Assignee mode of the announcement.
      # If unspecified, the default value is `ALL_STUDENTS`.
  "state": "A String", # Status of this announcement.
      # If unspecified, the default state is `DRAFT`.
  "materials": [ # Additional materials.
      # 
      # Announcements must have no more than 20 material items.
    { # Material attached to course work.
        #
        # When creating attachments, setting the `form` field is not supported.
      "youtubeVideo": { # YouTube video item. # YouTube video material.
        "alternateLink": "A String", # URL that can be used to view the YouTube video.
            #
            # Read-only.
        "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
            #
            # Read-only.
        "id": "A String", # YouTube API resource ID.
        "title": "A String", # Title of the YouTube video.
            #
            # Read-only.
      },
      "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
        "driveFile": { # Representation of a Google Drive file. # Drive file details.
          "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.
        },
        "shareMode": "A String", # Mechanism by which students access the Drive item.
      },
      "link": { # URL item. # Link material. On creation, will be upgraded to a more appropriate type
          # if possible, and this will be reflected in the response.
        "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.
      },
      "form": { # Google Forms item. # Google Forms material.
        "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.
      },
    },
  ],
  "individualStudentsOptions": { # Assignee details about a coursework/announcement. # Identifiers of students with access to the announcement.
      # This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
      # If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students
      # specified in this field will be able to see the announcement.
      # This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
    "studentIds": [ # Identifiers for the students that have access to the
        # coursework/announcement.
      "A String",
    ],
  },
  "id": "A String", # Classroom-assigned identifier of this announcement, unique per course.
      # 
      # Read-only.
}

  updateMask: string, Mask that identifies which fields on the announcement 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 Announcement object. If
a field that does not support empty values is included in the update mask
and not set in the Announcement object, an `INVALID_ARGUMENT` error will be
returned.

The following fields may be specified by teachers:

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

Returns:
  An object of the form:

    { # Announcement created by a teacher for students of the course
    "updateTime": "A String", # Timestamp of the most recent change to this announcement.
        #
        # Read-only.
    "scheduledTime": "A String", # Optional timestamp when this announcement is scheduled to be published.
    "creatorUserId": "A String", # Identifier for the user that created the announcement.
        #
        # Read-only.
    "courseId": "A String", # Identifier of the course.
        #
        # Read-only.
    "text": "A String", # Description of this announcement.
        # The text must be a valid UTF-8 string containing no more
        # than 30,000 characters.
    "alternateLink": "A String", # Absolute link to this announcement in the Classroom web UI.
        # This is only populated if `state` is `PUBLISHED`.
        #
        # Read-only.
    "creationTime": "A String", # Timestamp when this announcement was created.
        #
        # Read-only.
    "assigneeMode": "A String", # Assignee mode of the announcement.
        # If unspecified, the default value is `ALL_STUDENTS`.
    "state": "A String", # Status of this announcement.
        # If unspecified, the default state is `DRAFT`.
    "materials": [ # Additional materials.
        #
        # Announcements must have no more than 20 material items.
      { # Material attached to course work.
          #
          # When creating attachments, setting the `form` field is not supported.
        "youtubeVideo": { # YouTube video item. # YouTube video material.
          "alternateLink": "A String", # URL that can be used to view the YouTube video.
              #
              # Read-only.
          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video.
              #
              # Read-only.
          "id": "A String", # YouTube API resource ID.
          "title": "A String", # Title of the YouTube video.
              #
              # Read-only.
        },
        "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
          "driveFile": { # Representation of a Google Drive file. # Drive file details.
            "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.
          },
          "shareMode": "A String", # Mechanism by which students access the Drive item.
        },
        "link": { # URL item. # Link material. On creation, will be upgraded to a more appropriate type
            # if possible, and this will be reflected in the response.
          "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.
        },
        "form": { # Google Forms item. # Google Forms material.
          "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.
        },
      },
    ],
    "individualStudentsOptions": { # Assignee details about a coursework/announcement. # Identifiers of students with access to the announcement.
        # This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
        # If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students
        # specified in this field will be able to see the announcement.
        # This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.
      "studentIds": [ # Identifiers for the students that have access to the
          # coursework/announcement.
        "A String",
      ],
    },
    "id": "A String", # Classroom-assigned identifier of this announcement, unique per course.
        #
        # Read-only.
  }</pre>
</div>

</body></html>