<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="oauth2_v1.html">Google OAuth2 API</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="oauth2_v1.userinfo.html">userinfo()</a></code>
</p>
<p class="firstline">Returns the userinfo Resource.</p>

<p class="toc_element">
  <code><a href="#getCertForOpenIdConnect">getCertForOpenIdConnect()</a></code></p>
<p class="firstline">A description of how to use this function</p>
<p class="toc_element">
  <code><a href="#getCertForOpenIdConnectRaw">getCertForOpenIdConnectRaw()</a></code></p>
<p class="firstline">A description of how to use this function</p>
<p class="toc_element">
  <code><a href="#getRobotJwk">getRobotJwk(robotEmail)</a></code></p>
<p class="firstline">A description of how to use this function</p>
<p class="toc_element">
  <code><a href="#getRobotMetadataRaw">getRobotMetadataRaw(robotEmail)</a></code></p>
<p class="firstline">A description of how to use this function</p>
<p class="toc_element">
  <code><a href="#getRobotMetadataX509">getRobotMetadataX509(robotEmail)</a></code></p>
<p class="firstline">A description of how to use this function</p>
<p class="toc_element">
  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
<p class="toc_element">
  <code><a href="#tokeninfo">tokeninfo(access_token=None, id_token=None)</a></code></p>
<p class="firstline">Get token info</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="getCertForOpenIdConnect">getCertForOpenIdConnect()</code>
  <pre>A description of how to use this function

Args:

Returns:
  An object of the form:

    {
    "a_key": "A String",
  }</pre>
</div>

<div class="method">
    <code class="details" id="getCertForOpenIdConnectRaw">getCertForOpenIdConnectRaw()</code>
  <pre>A description of how to use this function

Args:

Returns:
  An object of the form:

    {
    "keyvalues": [
      {
        "keyid": "A String",
        "modulus": "A String",
        "exponent": "A String",
        "algorithm": "RSA",
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="getRobotJwk">getRobotJwk(robotEmail)</code>
  <pre>A description of how to use this function

Args:
  robotEmail: string, The email of robot account. (required)

Returns:
  An object of the form:

    {
    "keys": [
      {
        "use": "sig",
        "e": "A String",
        "kty": "RSA",
        "alg": "RS256",
        "n": "A String",
        "kid": "A String",
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="getRobotMetadataRaw">getRobotMetadataRaw(robotEmail)</code>
  <pre>A description of how to use this function

Args:
  robotEmail: string, The email of robot account. (required)

Returns:
  An object of the form:

    {
    "keyvalues": [
      {
        "keyid": "A String",
        "modulus": "A String",
        "exponent": "A String",
        "algorithm": "RSA",
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="getRobotMetadataX509">getRobotMetadataX509(robotEmail)</code>
  <pre>A description of how to use this function

Args:
  robotEmail: string, The email of robot account. (required)

Returns:
  An object of the form:

    {
    "a_key": "A String",
  }</pre>
</div>

<div class="method">
    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
  <pre>Create a BatchHttpRequest object based on the discovery document.

        Args:
          callback: callable, A callback to be called for each response, of the
            form callback(id, response, exception). The first parameter is the
            request id, and the second is the deserialized response object. The
            third is an apiclient.errors.HttpError exception object if an HTTP
            error occurred while processing the request, or None if no error
            occurred.

        Returns:
          A BatchHttpRequest object based on the discovery document.
        </pre>
</div>

<div class="method">
    <code class="details" id="tokeninfo">tokeninfo(access_token=None, id_token=None)</code>
  <pre>Get token info

Args:
  access_token: string, The oauth2 access token
  id_token: string, The ID token

Returns:
  An object of the form:

    {
    "issued_to": "A String", # To whom was the token issued to. In general the same as audience.
    "nonce": "A String", # Nonce of the id token.
    "user_id": "A String", # The obfuscated user id.
    "email_verified": True or False, # Boolean flag which is true if the email address is verified. Present only if the email scope is present in the request.
    "expires_in": 42, # The expiry time of the token, as number of seconds left until expiry.
    "access_type": "A String", # The access type granted with this token. It can be offline or online.
    "audience": "A String", # Who is the intended audience for this token. In general the same as issued_to.
    "issued_at": 42, # The issue time of the token, as number of seconds.
    "scope": "A String", # The space separated list of scopes granted to this token.
    "verified_email": True or False, # Boolean flag which is true if the email address is verified. Present only if the email scope is present in the request.
    "email": "A String", # The email address of the user. Present only if the email scope is present in the request.
    "issuer": "A String", # Who issued the token.
  }</pre>
</div>

</body></html>