<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)</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's Gmail profile.

Args:
  userId: string, The user'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.
    "threadsTotal": 42, # The total number of threads in the mailbox.
    "emailAddress": "A String", # The user's email address.
    "historyId": "A String", # The ID of the mailbox's current history record.
    "messagesTotal": 42, # The total number of messages 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'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)</code>
  <pre>Set up or update a push notification watch on the given user mailbox.

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

{ # Set up or update a new push notification watch on this user's mailbox.
    "labelIds": [ # 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.
      "A String",
    ],
    "topicName": "A String", # 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 "publish" permission on it. For example, "projects/my-project-identifier/topics/my-topic-name" (using the Cloud Pub/Sub "v1" topic naming format).
        # 
        # Note that the "my-project-identifier" portion must exactly match your Google developer project id (the one executing this watch request).
    "labelFilterAction": "A String", # Filtering behavior of labelIds list specified.
  }


Returns:
  An object of the form:

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

</body></html>