<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="gmail_v1.html">Gmail API</a> . <a href="gmail_v1.users.html">users</a> . <a href="gmail_v1.users.history.html">history</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(userId, pageToken=None, labelId=None, historyTypes=None, startHistoryId=None, maxResults=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the history of all changes to the given mailbox. History results are</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(userId, pageToken=None, labelId=None, historyTypes=None, startHistoryId=None, maxResults=None, x__xgafv=None)</code>
  <pre>Lists the history of all changes to the given mailbox. History results are
returned in chronological order (increasing `historyId`).

Args:
  userId: string, The user&#x27;s email address. The special value `me`
can be used to indicate the authenticated user. (required)
  pageToken: string, Page token to retrieve a specific page of results in the list.
  labelId: string, Only return messages with a label matching the ID.
  historyTypes: string, History types to be returned by the function (repeated)
  startHistoryId: string, Required. Returns history records after the specified
`startHistoryId`. The supplied `startHistoryId`
should be obtained from the `historyId` of a message, thread, or
previous `list` response. History IDs increase
chronologically but are not contiguous with random gaps in between valid
IDs. Supplying an invalid or out of date `startHistoryId`
typically returns an `HTTP 404` error code. A
`historyId` is typically valid for at least a week, but in some
rare circumstances may be valid for only a few hours. If you receive an
`HTTP 404` error response, your  application should perform a
full sync. If you receive no `nextPageToken` in the response,
there are no updates to retrieve and you can store the returned
`historyId` for a future request.
  maxResults: integer, The maximum number of history records to return.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;history&quot;: [ # List of history records.  Any `messages` contained in the
        # response will typically only have `id` and
        # `threadId` fields populated.
      { # A record of a change to the user&#x27;s mailbox. Each history change may affect
          # multiple messages in multiple ways.
        &quot;messages&quot;: [ # List of messages changed in this history record.  The fields for specific
            # change types, such as `messagesAdded` may duplicate messages in
            # this field.  We recommend using the specific change-type fields instead
            # of this.
          { # An email message.
            &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to
                # a thread, the following criteria must be met:
                # &lt;ol&gt;&lt;li&gt;The requested `threadId` must be specified on the
                # `Message` or `Draft.Message` you supply with your
                # request.&lt;/li&gt;
                # &lt;li&gt;The `References` and `In-Reply-To` headers must
                # be set in compliance with the
                # &lt;a href=&quot;https://tools.ietf.org/html/rfc2822&quot;&gt;RFC 2822&lt;/a&gt; standard.&lt;/li&gt;
                # &lt;li&gt;The `Subject` headers must match.
                # @mutable gmail.users.messages.insert gmail.users.messages.send
                # @mutable gmail.users.drafts.create gmail.users.drafts.update
            &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines
                # ordering in the inbox.  For normal SMTP-received email, this represents the
                # time the message was originally accepted by Google, which is more reliable
                # than the `Date` header. However, for API-migrated mail, it can
                # be configured by client to be based on the `Date` header.
            &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
            &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
            &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
              &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
              &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container
                  # MIME message parts, for example `multipart/*`. For non-
                  # container MIME message part types, such as `text/plain`, this
                  # field is empty. For more information, see
                  # &lt;a href=&quot;http://www.ietf.org/rfc/rfc1521.txt&quot;&gt;RFC 1521&lt;/a&gt;.
                # Object with schema name: MessagePart
              ],
              &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part,
                  # representing the entire message payload, it will contain the standard
                  # RFC 2822 email headers such as `To`, `From`, and
                  # `Subject`.
                {
                  &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For
                      # example, `To`.
                  &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example,
                      # `someuser@example.com`.
                },
              ],
              &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part
                  # represents an attachment.
              &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
              &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for
                  # container MIME message parts.
                &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
                &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be
                    # retrieved in a separate `messages.attachments.get` request.
                    # When not present, the entire content of the message part body is
                    # contained in the data field.
                &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string.
                    # May be empty for MIME container
                    # types that have no message body or when the body data is sent as a
                    # separate attachment. An attachment ID is present if the body data is
                    # contained in a separate attachment.
              },
            },
            &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
            &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
            &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url
                # encoded string. Returned in `messages.get` and
                # `drafts.get` responses when the `format=RAW`
                # parameter is supplied.
                # @mutable gmail.users.messages.insert gmail.users.messages.send
                # @mutable gmail.users.drafts.create gmail.users.drafts.update
            &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
                # @mutable gmail.users.messages.insert gmail.users.messages.modify
              &quot;A String&quot;,
            ],
          },
        ],
        &quot;labelsRemoved&quot;: [ # Labels removed from messages in this history record.
          {
            &quot;message&quot;: { # An email message.
              &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to
                  # a thread, the following criteria must be met:
                  # &lt;ol&gt;&lt;li&gt;The requested `threadId` must be specified on the
                  # `Message` or `Draft.Message` you supply with your
                  # request.&lt;/li&gt;
                  # &lt;li&gt;The `References` and `In-Reply-To` headers must
                  # be set in compliance with the
                  # &lt;a href=&quot;https://tools.ietf.org/html/rfc2822&quot;&gt;RFC 2822&lt;/a&gt; standard.&lt;/li&gt;
                  # &lt;li&gt;The `Subject` headers must match.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines
                  # ordering in the inbox.  For normal SMTP-received email, this represents the
                  # time the message was originally accepted by Google, which is more reliable
                  # than the `Date` header. However, for API-migrated mail, it can
                  # be configured by client to be based on the `Date` header.
              &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
              &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
              &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
                &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
                &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container
                    # MIME message parts, for example `multipart/*`. For non-
                    # container MIME message part types, such as `text/plain`, this
                    # field is empty. For more information, see
                    # &lt;a href=&quot;http://www.ietf.org/rfc/rfc1521.txt&quot;&gt;RFC 1521&lt;/a&gt;.
                  # Object with schema name: MessagePart
                ],
                &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part,
                    # representing the entire message payload, it will contain the standard
                    # RFC 2822 email headers such as `To`, `From`, and
                    # `Subject`.
                  {
                    &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For
                        # example, `To`.
                    &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example,
                        # `someuser@example.com`.
                  },
                ],
                &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part
                    # represents an attachment.
                &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
                &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for
                    # container MIME message parts.
                  &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
                  &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be
                      # retrieved in a separate `messages.attachments.get` request.
                      # When not present, the entire content of the message part body is
                      # contained in the data field.
                  &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string.
                      # May be empty for MIME container
                      # types that have no message body or when the body data is sent as a
                      # separate attachment. An attachment ID is present if the body data is
                      # contained in a separate attachment.
                },
              },
              &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
              &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
              &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url
                  # encoded string. Returned in `messages.get` and
                  # `drafts.get` responses when the `format=RAW`
                  # parameter is supplied.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
                  # @mutable gmail.users.messages.insert gmail.users.messages.modify
                &quot;A String&quot;,
              ],
            },
            &quot;labelIds&quot;: [ # Label IDs removed from the message.
              &quot;A String&quot;,
            ],
          },
        ],
        &quot;messagesAdded&quot;: [ # Messages added to the mailbox in this history record.
          {
            &quot;message&quot;: { # An email message.
              &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to
                  # a thread, the following criteria must be met:
                  # &lt;ol&gt;&lt;li&gt;The requested `threadId` must be specified on the
                  # `Message` or `Draft.Message` you supply with your
                  # request.&lt;/li&gt;
                  # &lt;li&gt;The `References` and `In-Reply-To` headers must
                  # be set in compliance with the
                  # &lt;a href=&quot;https://tools.ietf.org/html/rfc2822&quot;&gt;RFC 2822&lt;/a&gt; standard.&lt;/li&gt;
                  # &lt;li&gt;The `Subject` headers must match.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines
                  # ordering in the inbox.  For normal SMTP-received email, this represents the
                  # time the message was originally accepted by Google, which is more reliable
                  # than the `Date` header. However, for API-migrated mail, it can
                  # be configured by client to be based on the `Date` header.
              &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
              &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
              &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
                &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
                &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container
                    # MIME message parts, for example `multipart/*`. For non-
                    # container MIME message part types, such as `text/plain`, this
                    # field is empty. For more information, see
                    # &lt;a href=&quot;http://www.ietf.org/rfc/rfc1521.txt&quot;&gt;RFC 1521&lt;/a&gt;.
                  # Object with schema name: MessagePart
                ],
                &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part,
                    # representing the entire message payload, it will contain the standard
                    # RFC 2822 email headers such as `To`, `From`, and
                    # `Subject`.
                  {
                    &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For
                        # example, `To`.
                    &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example,
                        # `someuser@example.com`.
                  },
                ],
                &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part
                    # represents an attachment.
                &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
                &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for
                    # container MIME message parts.
                  &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
                  &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be
                      # retrieved in a separate `messages.attachments.get` request.
                      # When not present, the entire content of the message part body is
                      # contained in the data field.
                  &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string.
                      # May be empty for MIME container
                      # types that have no message body or when the body data is sent as a
                      # separate attachment. An attachment ID is present if the body data is
                      # contained in a separate attachment.
                },
              },
              &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
              &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
              &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url
                  # encoded string. Returned in `messages.get` and
                  # `drafts.get` responses when the `format=RAW`
                  # parameter is supplied.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
                  # @mutable gmail.users.messages.insert gmail.users.messages.modify
                &quot;A String&quot;,
              ],
            },
          },
        ],
        &quot;messagesDeleted&quot;: [ # Messages deleted (not Trashed) from the mailbox in this history record.
          {
            &quot;message&quot;: { # An email message.
              &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to
                  # a thread, the following criteria must be met:
                  # &lt;ol&gt;&lt;li&gt;The requested `threadId` must be specified on the
                  # `Message` or `Draft.Message` you supply with your
                  # request.&lt;/li&gt;
                  # &lt;li&gt;The `References` and `In-Reply-To` headers must
                  # be set in compliance with the
                  # &lt;a href=&quot;https://tools.ietf.org/html/rfc2822&quot;&gt;RFC 2822&lt;/a&gt; standard.&lt;/li&gt;
                  # &lt;li&gt;The `Subject` headers must match.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines
                  # ordering in the inbox.  For normal SMTP-received email, this represents the
                  # time the message was originally accepted by Google, which is more reliable
                  # than the `Date` header. However, for API-migrated mail, it can
                  # be configured by client to be based on the `Date` header.
              &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
              &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
              &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
                &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
                &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container
                    # MIME message parts, for example `multipart/*`. For non-
                    # container MIME message part types, such as `text/plain`, this
                    # field is empty. For more information, see
                    # &lt;a href=&quot;http://www.ietf.org/rfc/rfc1521.txt&quot;&gt;RFC 1521&lt;/a&gt;.
                  # Object with schema name: MessagePart
                ],
                &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part,
                    # representing the entire message payload, it will contain the standard
                    # RFC 2822 email headers such as `To`, `From`, and
                    # `Subject`.
                  {
                    &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For
                        # example, `To`.
                    &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example,
                        # `someuser@example.com`.
                  },
                ],
                &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part
                    # represents an attachment.
                &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
                &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for
                    # container MIME message parts.
                  &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
                  &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be
                      # retrieved in a separate `messages.attachments.get` request.
                      # When not present, the entire content of the message part body is
                      # contained in the data field.
                  &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string.
                      # May be empty for MIME container
                      # types that have no message body or when the body data is sent as a
                      # separate attachment. An attachment ID is present if the body data is
                      # contained in a separate attachment.
                },
              },
              &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
              &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
              &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url
                  # encoded string. Returned in `messages.get` and
                  # `drafts.get` responses when the `format=RAW`
                  # parameter is supplied.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
                  # @mutable gmail.users.messages.insert gmail.users.messages.modify
                &quot;A String&quot;,
              ],
            },
          },
        ],
        &quot;labelsAdded&quot;: [ # Labels added to messages in this history record.
          {
            &quot;message&quot;: { # An email message.
              &quot;threadId&quot;: &quot;A String&quot;, # The ID of the thread the message belongs to. To add a message or draft to
                  # a thread, the following criteria must be met:
                  # &lt;ol&gt;&lt;li&gt;The requested `threadId` must be specified on the
                  # `Message` or `Draft.Message` you supply with your
                  # request.&lt;/li&gt;
                  # &lt;li&gt;The `References` and `In-Reply-To` headers must
                  # be set in compliance with the
                  # &lt;a href=&quot;https://tools.ietf.org/html/rfc2822&quot;&gt;RFC 2822&lt;/a&gt; standard.&lt;/li&gt;
                  # &lt;li&gt;The `Subject` headers must match.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;internalDate&quot;: &quot;A String&quot;, # The internal message creation timestamp (epoch ms), which determines
                  # ordering in the inbox.  For normal SMTP-received email, this represents the
                  # time the message was originally accepted by Google, which is more reliable
                  # than the `Date` header. However, for API-migrated mail, it can
                  # be configured by client to be based on the `Date` header.
              &quot;id&quot;: &quot;A String&quot;, # The immutable ID of the message.
              &quot;sizeEstimate&quot;: 42, # Estimated size in bytes of the message.
              &quot;payload&quot;: { # A single MIME message part. # The parsed email structure in the message parts.
                &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the message part.
                &quot;parts&quot;: [ # The child MIME message parts of this part. This only applies to container
                    # MIME message parts, for example `multipart/*`. For non-
                    # container MIME message part types, such as `text/plain`, this
                    # field is empty. For more information, see
                    # &lt;a href=&quot;http://www.ietf.org/rfc/rfc1521.txt&quot;&gt;RFC 1521&lt;/a&gt;.
                  # Object with schema name: MessagePart
                ],
                &quot;headers&quot;: [ # List of headers on this message part. For the top-level message part,
                    # representing the entire message payload, it will contain the standard
                    # RFC 2822 email headers such as `To`, `From`, and
                    # `Subject`.
                  {
                    &quot;name&quot;: &quot;A String&quot;, # The name of the header before the `:` separator. For
                        # example, `To`.
                    &quot;value&quot;: &quot;A String&quot;, # The value of the header after the `:` separator. For example,
                        # `someuser@example.com`.
                  },
                ],
                &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment. Only present if this message part
                    # represents an attachment.
                &quot;partId&quot;: &quot;A String&quot;, # The immutable ID of the message part.
                &quot;body&quot;: { # The body of a single MIME message part. # The message part body for this part, which may be empty for
                    # container MIME message parts.
                  &quot;size&quot;: 42, # Number of bytes for the message part data (encoding notwithstanding).
                  &quot;attachmentId&quot;: &quot;A String&quot;, # When present, contains the ID of an external attachment that can be
                      # retrieved in a separate `messages.attachments.get` request.
                      # When not present, the entire content of the message part body is
                      # contained in the data field.
                  &quot;data&quot;: &quot;A String&quot;, # The body data of a MIME message part as a base64url encoded string.
                      # May be empty for MIME container
                      # types that have no message body or when the body data is sent as a
                      # separate attachment. An attachment ID is present if the body data is
                      # contained in a separate attachment.
                },
              },
              &quot;historyId&quot;: &quot;A String&quot;, # The ID of the last history record that modified this message.
              &quot;snippet&quot;: &quot;A String&quot;, # A short part of the message text.
              &quot;raw&quot;: &quot;A String&quot;, # The entire email message in an RFC 2822 formatted and base64url
                  # encoded string. Returned in `messages.get` and
                  # `drafts.get` responses when the `format=RAW`
                  # parameter is supplied.
                  # @mutable gmail.users.messages.insert gmail.users.messages.send
                  # @mutable gmail.users.drafts.create gmail.users.drafts.update
              &quot;labelIds&quot;: [ # List of IDs of labels applied to this message.
                  # @mutable gmail.users.messages.insert gmail.users.messages.modify
                &quot;A String&quot;,
              ],
            },
            &quot;labelIds&quot;: [ # Label IDs added to the message.
              &quot;A String&quot;,
            ],
          },
        ],
        &quot;id&quot;: &quot;A String&quot;, # The mailbox sequence ID.
      },
    ],
    &quot;historyId&quot;: &quot;A String&quot;, # The ID of the mailbox&#x27;s current history record.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Page token to retrieve the next page of results in the list.
  }</pre>
</div>

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

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

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

</body></html>