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

<p class="toc_element">
  <code><a href="gmail_v1.users.history.html">history()</a></code>
</p>
<p class="firstline">Returns the history Resource.</p>

<p class="toc_element">
  <code><a href="gmail_v1.users.labels.html">labels()</a></code>
</p>
<p class="firstline">Returns the labels Resource.</p>

<p class="toc_element">
  <code><a href="gmail_v1.users.messages.html">messages()</a></code>
</p>
<p class="firstline">Returns the messages Resource.</p>

<p class="toc_element">
  <code><a href="gmail_v1.users.settings.html">settings()</a></code>
</p>
<p class="firstline">Returns the settings Resource.</p>

<p class="toc_element">
  <code><a href="gmail_v1.users.threads.html">threads()</a></code>
</p>
<p class="firstline">Returns the threads Resource.</p>

<p class="toc_element">
  <code><a href="#getProfile">getProfile(userId)</a></code></p>
<p class="firstline">Gets the current user's Gmail profile.</p>
<p class="toc_element">
  <code><a href="#stop">stop(userId)</a></code></p>
<p class="firstline">Stop receiving push notifications for the given user mailbox.</p>
<p class="toc_element">
  <code><a href="#watch">watch(userId, body=None)</a></code></p>
<p class="firstline">Set up or update a push notification watch on the given user mailbox.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="getProfile">getProfile(userId)</code>
  <pre>Gets the current user&#x27;s Gmail profile.

Args:
  userId: string, The user&#x27;s email address. The special value me can be used to indicate the authenticated user. (required)

Returns:
  An object of the form:

    { # Profile for a Gmail user.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The user&#x27;s email address.
    &quot;historyId&quot;: &quot;A String&quot;, # The ID of the mailbox&#x27;s current history record.
    &quot;messagesTotal&quot;: 42, # The total number of messages in the mailbox.
    &quot;threadsTotal&quot;: 42, # The total number of threads in the mailbox.
  }</pre>
</div>

<div class="method">
    <code class="details" id="stop">stop(userId)</code>
  <pre>Stop receiving push notifications for the given user mailbox.

Args:
  userId: string, The user&#x27;s email address. The special value me can be used to indicate the authenticated user. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="watch">watch(userId, body=None)</code>
  <pre>Set up or update a push notification watch on the given user mailbox.

Args:
  userId: string, The user&#x27;s email address. The special value me can be used to indicate the authenticated user. (required)
  body: object, The request body.
    The object takes the form of:

{ # Set up or update a new push notification watch on this user&#x27;s mailbox.
    &quot;labelFilterAction&quot;: &quot;A String&quot;, # Filtering behavior of labelIds list specified.
    &quot;labelIds&quot;: [ # List of label_ids to restrict notifications about. By default, if unspecified, all changes are pushed out. If specified then dictates which labels are required for a push notification to be generated.
      &quot;A String&quot;,
    ],
    &quot;topicName&quot;: &quot;A String&quot;, # A fully qualified Google Cloud Pub/Sub API topic name to publish the events to. This topic name **must** already exist in Cloud Pub/Sub and you **must** have already granted gmail &quot;publish&quot; permission on it. For example, &quot;projects/my-project-identifier/topics/my-topic-name&quot; (using the Cloud Pub/Sub &quot;v1&quot; topic naming format).
        # 
        # Note that the &quot;my-project-identifier&quot; portion must exactly match your Google developer project id (the one executing this watch request).
  }


Returns:
  An object of the form:

    { # Push notification watch response.
    &quot;expiration&quot;: &quot;A String&quot;, # When Gmail will stop sending notifications for mailbox updates (epoch millis). Call watch again before this time to renew the watch.
    &quot;historyId&quot;: &quot;A String&quot;, # The ID of the mailbox&#x27;s current history record.
  }</pre>
</div>

</body></html>