<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="identitytoolkit_v3.html">Google Identity Toolkit API</a> . <a href="identitytoolkit_v3.relyingparty.html">relyingparty</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#createAuthUri">createAuthUri(body=None)</a></code></p>
<p class="firstline">Creates the URI used by the IdP to authenticate the user.</p>
<p class="toc_element">
  <code><a href="#deleteAccount">deleteAccount(body=None)</a></code></p>
<p class="firstline">Delete user account.</p>
<p class="toc_element">
  <code><a href="#downloadAccount">downloadAccount(body=None)</a></code></p>
<p class="firstline">Batch download user accounts.</p>
<p class="toc_element">
  <code><a href="#downloadAccount_next">downloadAccount_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="#emailLinkSignin">emailLinkSignin(body=None)</a></code></p>
<p class="firstline">Reset password for a user.</p>
<p class="toc_element">
  <code><a href="#getAccountInfo">getAccountInfo(body=None)</a></code></p>
<p class="firstline">Returns the account info.</p>
<p class="toc_element">
  <code><a href="#getOobConfirmationCode">getOobConfirmationCode(body=None)</a></code></p>
<p class="firstline">Get a code for user action confirmation.</p>
<p class="toc_element">
  <code><a href="#getProjectConfig">getProjectConfig(delegatedProjectNumber=None, projectNumber=None)</a></code></p>
<p class="firstline">Get project configuration.</p>
<p class="toc_element">
  <code><a href="#getPublicKeys">getPublicKeys()</a></code></p>
<p class="firstline">Get token signing public key.</p>
<p class="toc_element">
  <code><a href="#getRecaptchaParam">getRecaptchaParam()</a></code></p>
<p class="firstline">Get recaptcha secure param.</p>
<p class="toc_element">
  <code><a href="#resetPassword">resetPassword(body=None)</a></code></p>
<p class="firstline">Reset password for a user.</p>
<p class="toc_element">
  <code><a href="#sendVerificationCode">sendVerificationCode(body=None)</a></code></p>
<p class="firstline">Send SMS verification code.</p>
<p class="toc_element">
  <code><a href="#setAccountInfo">setAccountInfo(body=None)</a></code></p>
<p class="firstline">Set account info for a user.</p>
<p class="toc_element">
  <code><a href="#setProjectConfig">setProjectConfig(body=None)</a></code></p>
<p class="firstline">Set project configuration.</p>
<p class="toc_element">
  <code><a href="#signOutUser">signOutUser(body=None)</a></code></p>
<p class="firstline">Sign out user.</p>
<p class="toc_element">
  <code><a href="#signupNewUser">signupNewUser(body=None)</a></code></p>
<p class="firstline">Signup new user.</p>
<p class="toc_element">
  <code><a href="#uploadAccount">uploadAccount(body=None)</a></code></p>
<p class="firstline">Batch upload existing user accounts.</p>
<p class="toc_element">
  <code><a href="#verifyAssertion">verifyAssertion(body=None)</a></code></p>
<p class="firstline">Verifies the assertion returned by the IdP.</p>
<p class="toc_element">
  <code><a href="#verifyCustomToken">verifyCustomToken(body=None)</a></code></p>
<p class="firstline">Verifies the developer asserted ID token.</p>
<p class="toc_element">
  <code><a href="#verifyPassword">verifyPassword(body=None)</a></code></p>
<p class="firstline">Verifies the user entered password.</p>
<p class="toc_element">
  <code><a href="#verifyPhoneNumber">verifyPhoneNumber(body=None)</a></code></p>
<p class="firstline">Verifies ownership of a phone number and creates/updates the user account accordingly.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="createAuthUri">createAuthUri(body=None)</code>
  <pre>Creates the URI used by the IdP to authenticate the user.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to get the IDP authentication URL.
  &quot;appId&quot;: &quot;A String&quot;, # The app ID of the mobile app, base64(CERT_SHA1):PACKAGE_NAME for Android, BUNDLE_ID for iOS.
  &quot;authFlowType&quot;: &quot;A String&quot;, # Explicitly specify the auth flow type. Currently only support &quot;CODE_FLOW&quot; type. The field is only used for Google provider.
  &quot;clientId&quot;: &quot;A String&quot;, # The relying party OAuth client ID.
  &quot;context&quot;: &quot;A String&quot;, # The opaque value used by the client to maintain context info between the authentication request and the IDP callback.
  &quot;continueUri&quot;: &quot;A String&quot;, # The URI to which the IDP redirects the user after the federated login flow.
  &quot;customParameter&quot;: { # The query parameter that client can customize by themselves in auth url. The following parameters are reserved for server so that they cannot be customized by clients: client_id, response_type, scope, redirect_uri, state, oauth_token.
    &quot;a_key&quot;: &quot;A String&quot;, # The customized query parameter.
  },
  &quot;hostedDomain&quot;: &quot;A String&quot;, # The hosted domain to restrict sign-in to accounts at that domain for Google Apps hosted accounts.
  &quot;identifier&quot;: &quot;A String&quot;, # The email or federated ID of the user.
  &quot;oauthConsumerKey&quot;: &quot;A String&quot;, # The developer&#x27;s consumer key for OpenId OAuth Extension
  &quot;oauthScope&quot;: &quot;A String&quot;, # Additional oauth scopes, beyond the basid user profile, that the user would be prompted to grant
  &quot;openidRealm&quot;: &quot;A String&quot;, # Optional realm for OpenID protocol. The sub string &quot;scheme://domain:port&quot; of the param &quot;continueUri&quot; is used if this is not set.
  &quot;otaApp&quot;: &quot;A String&quot;, # The native app package for OTA installation.
  &quot;providerId&quot;: &quot;A String&quot;, # The IdP ID. For white listed IdPs it&#x27;s a short domain name e.g. google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it&#x27;s the OP identifier.
  &quot;sessionId&quot;: &quot;A String&quot;, # The session_id passed by client.
  &quot;tenantId&quot;: &quot;A String&quot;, # For multi-tenant use cases, in order to construct sign-in URL with the correct IDP parameters, Firebear needs to know which Tenant to retrieve IDP configs from.
  &quot;tenantProjectNumber&quot;: &quot;A String&quot;, # Tenant project number to be used for idp discovery.
}


Returns:
  An object of the form:

    { # Response of creating the IDP authentication URL.
  &quot;allProviders&quot;: [ # all providers the user has once used to do federated login
    &quot;A String&quot;,
  ],
  &quot;authUri&quot;: &quot;A String&quot;, # The URI used by the IDP to authenticate the user.
  &quot;captchaRequired&quot;: True or False, # True if captcha is required.
  &quot;forExistingProvider&quot;: True or False, # True if the authUri is for user&#x27;s existing provider.
  &quot;kind&quot;: &quot;identitytoolkit#CreateAuthUriResponse&quot;, # The fixed string identitytoolkit#CreateAuthUriResponse&quot;.
  &quot;providerId&quot;: &quot;A String&quot;, # The provider ID of the auth URI.
  &quot;registered&quot;: True or False, # Whether the user is registered if the identifier is an email.
  &quot;sessionId&quot;: &quot;A String&quot;, # Session ID which should be passed in the following verifyAssertion request.
  &quot;signinMethods&quot;: [ # All sign-in methods this user has used.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="deleteAccount">deleteAccount(body=None)</code>
  <pre>Delete user account.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to delete account.
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token or STS id token of the authenticated user.
  &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
}


Returns:
  An object of the form:

    { # Respone of deleting account.
  &quot;kind&quot;: &quot;identitytoolkit#DeleteAccountResponse&quot;, # The fixed string &quot;identitytoolkit#DeleteAccountResponse&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="downloadAccount">downloadAccount(body=None)</code>
  <pre>Batch download user accounts.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to download user account in batch.
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;maxResults&quot;: 42, # The max number of results to return in the response.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The token for the next page. This should be taken from the previous response.
  &quot;targetProjectId&quot;: &quot;A String&quot;, # Specify which project (field value is actually project id) to operate. Only used when provided credential.
}


Returns:
  An object of the form:

    { # Response of downloading accounts in batch.
  &quot;kind&quot;: &quot;identitytoolkit#DownloadAccountResponse&quot;, # The fixed string &quot;identitytoolkit#DownloadAccountResponse&quot;.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The next page token. To be used in a subsequent request to return the next page of results.
  &quot;users&quot;: [ # The user accounts data.
    { # Template for an individual account info.
      &quot;createdAt&quot;: &quot;A String&quot;, # User creation timestamp.
      &quot;customAttributes&quot;: &quot;A String&quot;, # The custom attributes to be set in the user&#x27;s id token.
      &quot;customAuth&quot;: True or False, # Whether the user is authenticated by the developer.
      &quot;disabled&quot;: True or False, # Whether the user is disabled.
      &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
      &quot;email&quot;: &quot;A String&quot;, # The email of the user.
      &quot;emailVerified&quot;: True or False, # Whether the email has been verified.
      &quot;lastLoginAt&quot;: &quot;A String&quot;, # last login timestamp.
      &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
      &quot;passwordHash&quot;: &quot;A String&quot;, # The user&#x27;s hashed password.
      &quot;passwordUpdatedAt&quot;: 3.14, # The timestamp when the password was last updated.
      &quot;phoneNumber&quot;: &quot;A String&quot;, # User&#x27;s phone number.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The URL of the user profile photo.
      &quot;providerUserInfo&quot;: [ # The IDP of the user.
        {
          &quot;displayName&quot;: &quot;A String&quot;, # The user&#x27;s display name at the IDP.
          &quot;email&quot;: &quot;A String&quot;, # User&#x27;s email at IDP.
          &quot;federatedId&quot;: &quot;A String&quot;, # User&#x27;s identifier at IDP.
          &quot;phoneNumber&quot;: &quot;A String&quot;, # User&#x27;s phone number.
          &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo url at the IDP.
          &quot;providerId&quot;: &quot;A String&quot;, # The IdP ID. For white listed IdPs it&#x27;s a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it&#x27;s the OP identifier.
          &quot;rawId&quot;: &quot;A String&quot;, # User&#x27;s raw identifier directly returned from IDP.
          &quot;screenName&quot;: &quot;A String&quot;, # User&#x27;s screen name at Twitter or login name at Github.
        },
      ],
      &quot;rawPassword&quot;: &quot;A String&quot;, # The user&#x27;s plain text password.
      &quot;salt&quot;: &quot;A String&quot;, # The user&#x27;s password salt.
      &quot;screenName&quot;: &quot;A String&quot;, # User&#x27;s screen name at Twitter or login name at Github.
      &quot;validSince&quot;: &quot;A String&quot;, # Timestamp in seconds for valid login token.
      &quot;version&quot;: 42, # Version of the user&#x27;s password.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="downloadAccount_next">downloadAccount_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>

<div class="method">
    <code class="details" id="emailLinkSignin">emailLinkSignin(body=None)</code>
  <pre>Reset password for a user.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to sign in with email.
  &quot;email&quot;: &quot;A String&quot;, # The email address of the user.
  &quot;idToken&quot;: &quot;A String&quot;, # Token for linking flow.
  &quot;oobCode&quot;: &quot;A String&quot;, # The confirmation code.
}


Returns:
  An object of the form:

    { # Response of email signIn.
  &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s email.
  &quot;expiresIn&quot;: &quot;A String&quot;, # Expiration time of STS id token in seconds.
  &quot;idToken&quot;: &quot;A String&quot;, # The STS id token to login the newly signed in user.
  &quot;isNewUser&quot;: True or False, # Whether the user is new.
  &quot;kind&quot;: &quot;identitytoolkit#EmailLinkSigninResponse&quot;, # The fixed string &quot;identitytoolkit#EmailLinkSigninResponse&quot;.
  &quot;localId&quot;: &quot;A String&quot;, # The RP local ID of the user.
  &quot;refreshToken&quot;: &quot;A String&quot;, # The refresh token for the signed in user.
}</pre>
</div>

<div class="method">
    <code class="details" id="getAccountInfo">getAccountInfo(body=None)</code>
  <pre>Returns the account info.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to get the account information.
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;email&quot;: [ # The list of emails of the users to inquiry.
    &quot;A String&quot;,
  ],
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token of the authenticated user.
  &quot;localId&quot;: [ # The list of local ID&#x27;s of the users to inquiry.
    &quot;A String&quot;,
  ],
  &quot;phoneNumber&quot;: [ # Privileged caller can query users by specified phone number.
    &quot;A String&quot;,
  ],
}


Returns:
  An object of the form:

    { # Response of getting account information.
  &quot;kind&quot;: &quot;identitytoolkit#GetAccountInfoResponse&quot;, # The fixed string &quot;identitytoolkit#GetAccountInfoResponse&quot;.
  &quot;users&quot;: [ # The info of the users.
    { # Template for an individual account info.
      &quot;createdAt&quot;: &quot;A String&quot;, # User creation timestamp.
      &quot;customAttributes&quot;: &quot;A String&quot;, # The custom attributes to be set in the user&#x27;s id token.
      &quot;customAuth&quot;: True or False, # Whether the user is authenticated by the developer.
      &quot;disabled&quot;: True or False, # Whether the user is disabled.
      &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
      &quot;email&quot;: &quot;A String&quot;, # The email of the user.
      &quot;emailVerified&quot;: True or False, # Whether the email has been verified.
      &quot;lastLoginAt&quot;: &quot;A String&quot;, # last login timestamp.
      &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
      &quot;passwordHash&quot;: &quot;A String&quot;, # The user&#x27;s hashed password.
      &quot;passwordUpdatedAt&quot;: 3.14, # The timestamp when the password was last updated.
      &quot;phoneNumber&quot;: &quot;A String&quot;, # User&#x27;s phone number.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The URL of the user profile photo.
      &quot;providerUserInfo&quot;: [ # The IDP of the user.
        {
          &quot;displayName&quot;: &quot;A String&quot;, # The user&#x27;s display name at the IDP.
          &quot;email&quot;: &quot;A String&quot;, # User&#x27;s email at IDP.
          &quot;federatedId&quot;: &quot;A String&quot;, # User&#x27;s identifier at IDP.
          &quot;phoneNumber&quot;: &quot;A String&quot;, # User&#x27;s phone number.
          &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo url at the IDP.
          &quot;providerId&quot;: &quot;A String&quot;, # The IdP ID. For white listed IdPs it&#x27;s a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it&#x27;s the OP identifier.
          &quot;rawId&quot;: &quot;A String&quot;, # User&#x27;s raw identifier directly returned from IDP.
          &quot;screenName&quot;: &quot;A String&quot;, # User&#x27;s screen name at Twitter or login name at Github.
        },
      ],
      &quot;rawPassword&quot;: &quot;A String&quot;, # The user&#x27;s plain text password.
      &quot;salt&quot;: &quot;A String&quot;, # The user&#x27;s password salt.
      &quot;screenName&quot;: &quot;A String&quot;, # User&#x27;s screen name at Twitter or login name at Github.
      &quot;validSince&quot;: &quot;A String&quot;, # Timestamp in seconds for valid login token.
      &quot;version&quot;: 42, # Version of the user&#x27;s password.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="getOobConfirmationCode">getOobConfirmationCode(body=None)</code>
  <pre>Get a code for user action confirmation.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request of getting a code for user confirmation (reset password, change email etc.)
  &quot;androidInstallApp&quot;: True or False, # whether or not to install the android app on the device where the link is opened
  &quot;androidMinimumVersion&quot;: &quot;A String&quot;, # minimum version of the app. if the version on the device is lower than this version then the user is taken to the play store to upgrade the app
  &quot;androidPackageName&quot;: &quot;A String&quot;, # android package name of the android app to handle the action code
  &quot;canHandleCodeInApp&quot;: True or False, # whether or not the app can handle the oob code without first going to web
  &quot;captchaResp&quot;: &quot;A String&quot;, # The recaptcha response from the user.
  &quot;challenge&quot;: &quot;A String&quot;, # The recaptcha challenge presented to the user.
  &quot;continueUrl&quot;: &quot;A String&quot;, # The url to continue to the Gitkit app
  &quot;email&quot;: &quot;A String&quot;, # The email of the user.
  &quot;iOSAppStoreId&quot;: &quot;A String&quot;, # iOS app store id to download the app if it&#x27;s not already installed
  &quot;iOSBundleId&quot;: &quot;A String&quot;, # the iOS bundle id of iOS app to handle the action code
  &quot;idToken&quot;: &quot;A String&quot;, # The user&#x27;s Gitkit login token for email change.
  &quot;kind&quot;: &quot;identitytoolkit#relyingparty&quot;, # The fixed string &quot;identitytoolkit#relyingparty&quot;.
  &quot;newEmail&quot;: &quot;A String&quot;, # The new email if the code is for email change.
  &quot;requestType&quot;: &quot;A String&quot;, # The request type.
  &quot;userIp&quot;: &quot;A String&quot;, # The IP address of the user.
}


Returns:
  An object of the form:

    { # Response of getting a code for user confirmation (reset password, change email etc.).
  &quot;email&quot;: &quot;A String&quot;, # The email address that the email is sent to.
  &quot;kind&quot;: &quot;identitytoolkit#GetOobConfirmationCodeResponse&quot;, # The fixed string &quot;identitytoolkit#GetOobConfirmationCodeResponse&quot;.
  &quot;oobCode&quot;: &quot;A String&quot;, # The code to be send to the user.
}</pre>
</div>

<div class="method">
    <code class="details" id="getProjectConfig">getProjectConfig(delegatedProjectNumber=None, projectNumber=None)</code>
  <pre>Get project configuration.

Args:
  delegatedProjectNumber: string, Delegated GCP project number of the request.
  projectNumber: string, GCP project number of the request.

Returns:
  An object of the form:

    { # Response of getting the project configuration.
  &quot;allowPasswordUser&quot;: True or False, # Whether to allow password user sign in or sign up.
  &quot;apiKey&quot;: &quot;A String&quot;, # Browser API key, needed when making http request to Apiary.
  &quot;authorizedDomains&quot;: [ # Authorized domains.
    &quot;A String&quot;,
  ],
  &quot;changeEmailTemplate&quot;: { # Template for an email template. # Change email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
  &quot;dynamicLinksDomain&quot;: &quot;A String&quot;,
  &quot;enableAnonymousUser&quot;: True or False, # Whether anonymous user is enabled.
  &quot;idpConfig&quot;: [ # OAuth2 provider configuration.
    { # Template for a single idp configuration.
      &quot;clientId&quot;: &quot;A String&quot;, # OAuth2 client ID.
      &quot;enabled&quot;: True or False, # Whether this IDP is enabled.
      &quot;experimentPercent&quot;: 42, # Percent of users who will be prompted/redirected federated login for this IDP.
      &quot;provider&quot;: &quot;A String&quot;, # OAuth2 provider.
      &quot;secret&quot;: &quot;A String&quot;, # OAuth2 client secret.
      &quot;whitelistedAudiences&quot;: [ # Whitelisted client IDs for audience check.
        &quot;A String&quot;,
      ],
    },
  ],
  &quot;legacyResetPasswordTemplate&quot;: { # Template for an email template. # Legacy reset password email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
  &quot;projectId&quot;: &quot;A String&quot;, # Project ID of the relying party.
  &quot;resetPasswordTemplate&quot;: { # Template for an email template. # Reset password email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
  &quot;useEmailSending&quot;: True or False, # Whether to use email sending provided by Firebear.
  &quot;verifyEmailTemplate&quot;: { # Template for an email template. # Verify email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="getPublicKeys">getPublicKeys()</code>
  <pre>Get token signing public key.

Args:

Returns:
  An object of the form:

    { # Respone of getting public keys.
  &quot;a_key&quot;: &quot;A String&quot;,
}</pre>
</div>

<div class="method">
    <code class="details" id="getRecaptchaParam">getRecaptchaParam()</code>
  <pre>Get recaptcha secure param.

Args:

Returns:
  An object of the form:

    { # Response of getting recaptcha param.
  &quot;kind&quot;: &quot;identitytoolkit#GetRecaptchaParamResponse&quot;, # The fixed string &quot;identitytoolkit#GetRecaptchaParamResponse&quot;.
  &quot;recaptchaSiteKey&quot;: &quot;A String&quot;, # Site key registered at recaptcha.
  &quot;recaptchaStoken&quot;: &quot;A String&quot;, # The stoken field for the recaptcha widget, used to request captcha challenge.
}</pre>
</div>

<div class="method">
    <code class="details" id="resetPassword">resetPassword(body=None)</code>
  <pre>Reset password for a user.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to reset the password.
  &quot;email&quot;: &quot;A String&quot;, # The email address of the user.
  &quot;newPassword&quot;: &quot;A String&quot;, # The new password inputted by the user.
  &quot;oldPassword&quot;: &quot;A String&quot;, # The old password inputted by the user.
  &quot;oobCode&quot;: &quot;A String&quot;, # The confirmation code.
}


Returns:
  An object of the form:

    { # Response of resetting the password.
  &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s email. If the out-of-band code is for email recovery, the user&#x27;s original email.
  &quot;kind&quot;: &quot;identitytoolkit#ResetPasswordResponse&quot;, # The fixed string &quot;identitytoolkit#ResetPasswordResponse&quot;.
  &quot;newEmail&quot;: &quot;A String&quot;, # If the out-of-band code is for email recovery, the user&#x27;s new email.
  &quot;requestType&quot;: &quot;A String&quot;, # The request type.
}</pre>
</div>

<div class="method">
    <code class="details" id="sendVerificationCode">sendVerificationCode(body=None)</code>
  <pre>Send SMS verification code.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request for Identitytoolkit-SendVerificationCode
  &quot;iosReceipt&quot;: &quot;A String&quot;, # Receipt of successful app token validation with APNS.
  &quot;iosSecret&quot;: &quot;A String&quot;, # Secret delivered to iOS app via APNS.
  &quot;phoneNumber&quot;: &quot;A String&quot;, # The phone number to send the verification code to in E.164 format.
  &quot;recaptchaToken&quot;: &quot;A String&quot;, # Recaptcha solution.
}


Returns:
  An object of the form:

    { # Response for Identitytoolkit-SendVerificationCode
  &quot;sessionInfo&quot;: &quot;A String&quot;, # Encrypted session information
}</pre>
</div>

<div class="method">
    <code class="details" id="setAccountInfo">setAccountInfo(body=None)</code>
  <pre>Set account info for a user.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to set the account information.
  &quot;captchaChallenge&quot;: &quot;A String&quot;, # The captcha challenge.
  &quot;captchaResponse&quot;: &quot;A String&quot;, # Response to the captcha.
  &quot;createdAt&quot;: &quot;A String&quot;, # The timestamp when the account is created.
  &quot;customAttributes&quot;: &quot;A String&quot;, # The custom attributes to be set in the user&#x27;s id token.
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;deleteAttribute&quot;: [ # The attributes users request to delete.
    &quot;A String&quot;,
  ],
  &quot;deleteProvider&quot;: [ # The IDPs the user request to delete.
    &quot;A String&quot;,
  ],
  &quot;disableUser&quot;: True or False, # Whether to disable the user.
  &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
  &quot;email&quot;: &quot;A String&quot;, # The email of the user.
  &quot;emailVerified&quot;: True or False, # Mark the email as verified or not.
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token of the authenticated user.
  &quot;instanceId&quot;: &quot;A String&quot;, # Instance id token of the app.
  &quot;lastLoginAt&quot;: &quot;A String&quot;, # Last login timestamp.
  &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
  &quot;oobCode&quot;: &quot;A String&quot;, # The out-of-band code of the change email request.
  &quot;password&quot;: &quot;A String&quot;, # The new password of the user.
  &quot;phoneNumber&quot;: &quot;A String&quot;, # Privileged caller can update user with specified phone number.
  &quot;photoUrl&quot;: &quot;A String&quot;, # The photo url of the user.
  &quot;provider&quot;: [ # The associated IDPs of the user.
    &quot;A String&quot;,
  ],
  &quot;returnSecureToken&quot;: True or False, # Whether return sts id token and refresh token instead of gitkit token.
  &quot;upgradeToFederatedLogin&quot;: True or False, # Mark the user to upgrade to federated login.
  &quot;validSince&quot;: &quot;A String&quot;, # Timestamp in seconds for valid login token.
}


Returns:
  An object of the form:

    { # Respone of setting the account information.
  &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
  &quot;email&quot;: &quot;A String&quot;, # The email of the user.
  &quot;emailVerified&quot;: True or False, # If email has been verified.
  &quot;expiresIn&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
  &quot;idToken&quot;: &quot;A String&quot;, # The Gitkit id token to login the newly sign up user.
  &quot;kind&quot;: &quot;identitytoolkit#SetAccountInfoResponse&quot;, # The fixed string &quot;identitytoolkit#SetAccountInfoResponse&quot;.
  &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
  &quot;newEmail&quot;: &quot;A String&quot;, # The new email the user attempts to change to.
  &quot;passwordHash&quot;: &quot;A String&quot;, # The user&#x27;s hashed password.
  &quot;photoUrl&quot;: &quot;A String&quot;, # The photo url of the user.
  &quot;providerUserInfo&quot;: [ # The user&#x27;s profiles at the associated IdPs.
    {
      &quot;displayName&quot;: &quot;A String&quot;, # The user&#x27;s display name at the IDP.
      &quot;federatedId&quot;: &quot;A String&quot;, # User&#x27;s identifier at IDP.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo url at the IDP.
      &quot;providerId&quot;: &quot;A String&quot;, # The IdP ID. For whitelisted IdPs it&#x27;s a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it&#x27;s the OP identifier.
    },
  ],
  &quot;refreshToken&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be refresh token.
}</pre>
</div>

<div class="method">
    <code class="details" id="setProjectConfig">setProjectConfig(body=None)</code>
  <pre>Set project configuration.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to set the project configuration.
  &quot;allowPasswordUser&quot;: True or False, # Whether to allow password user sign in or sign up.
  &quot;apiKey&quot;: &quot;A String&quot;, # Browser API key, needed when making http request to Apiary.
  &quot;authorizedDomains&quot;: [ # Authorized domains for widget redirect.
    &quot;A String&quot;,
  ],
  &quot;changeEmailTemplate&quot;: { # Template for an email template. # Change email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;enableAnonymousUser&quot;: True or False, # Whether to enable anonymous user.
  &quot;idpConfig&quot;: [ # Oauth2 provider configuration.
    { # Template for a single idp configuration.
      &quot;clientId&quot;: &quot;A String&quot;, # OAuth2 client ID.
      &quot;enabled&quot;: True or False, # Whether this IDP is enabled.
      &quot;experimentPercent&quot;: 42, # Percent of users who will be prompted/redirected federated login for this IDP.
      &quot;provider&quot;: &quot;A String&quot;, # OAuth2 provider.
      &quot;secret&quot;: &quot;A String&quot;, # OAuth2 client secret.
      &quot;whitelistedAudiences&quot;: [ # Whitelisted client IDs for audience check.
        &quot;A String&quot;,
      ],
    },
  ],
  &quot;legacyResetPasswordTemplate&quot;: { # Template for an email template. # Legacy reset password email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
  &quot;resetPasswordTemplate&quot;: { # Template for an email template. # Reset password email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
  &quot;useEmailSending&quot;: True or False, # Whether to use email sending provided by Firebear.
  &quot;verifyEmailTemplate&quot;: { # Template for an email template. # Verify email template.
    &quot;body&quot;: &quot;A String&quot;, # Email body.
    &quot;format&quot;: &quot;A String&quot;, # Email body format.
    &quot;from&quot;: &quot;A String&quot;, # From address of the email.
    &quot;fromDisplayName&quot;: &quot;A String&quot;, # From display name.
    &quot;replyTo&quot;: &quot;A String&quot;, # Reply-to address.
    &quot;subject&quot;: &quot;A String&quot;, # Subject of the email.
  },
}


Returns:
  An object of the form:

    { # Response of setting the project configuration.
  &quot;projectId&quot;: &quot;A String&quot;, # Project ID of the relying party.
}</pre>
</div>

<div class="method">
    <code class="details" id="signOutUser">signOutUser(body=None)</code>
  <pre>Sign out user.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to sign out user.
  &quot;instanceId&quot;: &quot;A String&quot;, # Instance id token of the app.
  &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
}


Returns:
  An object of the form:

    { # Response of signing out user.
  &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
}</pre>
</div>

<div class="method">
    <code class="details" id="signupNewUser">signupNewUser(body=None)</code>
  <pre>Signup new user.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to signup new user, create anonymous user or anonymous user reauth.
  &quot;captchaChallenge&quot;: &quot;A String&quot;, # The captcha challenge.
  &quot;captchaResponse&quot;: &quot;A String&quot;, # Response to the captcha.
  &quot;disabled&quot;: True or False, # Whether to disable the user. Only can be used by service account.
  &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
  &quot;email&quot;: &quot;A String&quot;, # The email of the user.
  &quot;emailVerified&quot;: True or False, # Mark the email as verified or not. Only can be used by service account.
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token of the authenticated user.
  &quot;instanceId&quot;: &quot;A String&quot;, # Instance id token of the app.
  &quot;localId&quot;: &quot;A String&quot;, # Privileged caller can create user with specified user id.
  &quot;password&quot;: &quot;A String&quot;, # The new password of the user.
  &quot;phoneNumber&quot;: &quot;A String&quot;, # Privileged caller can create user with specified phone number.
  &quot;photoUrl&quot;: &quot;A String&quot;, # The photo url of the user.
  &quot;tenantId&quot;: &quot;A String&quot;, # For multi-tenant use cases, in order to construct sign-in URL with the correct IDP parameters, Firebear needs to know which Tenant to retrieve IDP configs from.
  &quot;tenantProjectNumber&quot;: &quot;A String&quot;, # Tenant project number to be used for idp discovery.
}


Returns:
  An object of the form:

    { # Response of signing up new user, creating anonymous user or anonymous user reauth.
  &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
  &quot;email&quot;: &quot;A String&quot;, # The email of the user.
  &quot;expiresIn&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
  &quot;idToken&quot;: &quot;A String&quot;, # The Gitkit id token to login the newly sign up user.
  &quot;kind&quot;: &quot;identitytoolkit#SignupNewUserResponse&quot;, # The fixed string &quot;identitytoolkit#SignupNewUserResponse&quot;.
  &quot;localId&quot;: &quot;A String&quot;, # The RP local ID of the user.
  &quot;refreshToken&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be refresh token.
}</pre>
</div>

<div class="method">
    <code class="details" id="uploadAccount">uploadAccount(body=None)</code>
  <pre>Batch upload existing user accounts.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to upload user account in batch.
  &quot;allowOverwrite&quot;: True or False, # Whether allow overwrite existing account when user local_id exists.
  &quot;blockSize&quot;: 42,
  &quot;cpuMemCost&quot;: 42, # The following 4 fields are for standard scrypt algorithm.
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;dkLen&quot;: 42,
  &quot;hashAlgorithm&quot;: &quot;A String&quot;, # The password hash algorithm.
  &quot;memoryCost&quot;: 42, # Memory cost for hash calculation. Used by scrypt similar algorithms.
  &quot;parallelization&quot;: 42,
  &quot;rounds&quot;: 42, # Rounds for hash calculation. Used by scrypt and similar algorithms.
  &quot;saltSeparator&quot;: &quot;A String&quot;, # The salt separator.
  &quot;sanityCheck&quot;: True or False, # If true, backend will do sanity check(including duplicate email and federated id) when uploading account.
  &quot;signerKey&quot;: &quot;A String&quot;, # The key for to hash the password.
  &quot;targetProjectId&quot;: &quot;A String&quot;, # Specify which project (field value is actually project id) to operate. Only used when provided credential.
  &quot;users&quot;: [ # The account info to be stored.
    { # Template for an individual account info.
      &quot;createdAt&quot;: &quot;A String&quot;, # User creation timestamp.
      &quot;customAttributes&quot;: &quot;A String&quot;, # The custom attributes to be set in the user&#x27;s id token.
      &quot;customAuth&quot;: True or False, # Whether the user is authenticated by the developer.
      &quot;disabled&quot;: True or False, # Whether the user is disabled.
      &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
      &quot;email&quot;: &quot;A String&quot;, # The email of the user.
      &quot;emailVerified&quot;: True or False, # Whether the email has been verified.
      &quot;lastLoginAt&quot;: &quot;A String&quot;, # last login timestamp.
      &quot;localId&quot;: &quot;A String&quot;, # The local ID of the user.
      &quot;passwordHash&quot;: &quot;A String&quot;, # The user&#x27;s hashed password.
      &quot;passwordUpdatedAt&quot;: 3.14, # The timestamp when the password was last updated.
      &quot;phoneNumber&quot;: &quot;A String&quot;, # User&#x27;s phone number.
      &quot;photoUrl&quot;: &quot;A String&quot;, # The URL of the user profile photo.
      &quot;providerUserInfo&quot;: [ # The IDP of the user.
        {
          &quot;displayName&quot;: &quot;A String&quot;, # The user&#x27;s display name at the IDP.
          &quot;email&quot;: &quot;A String&quot;, # User&#x27;s email at IDP.
          &quot;federatedId&quot;: &quot;A String&quot;, # User&#x27;s identifier at IDP.
          &quot;phoneNumber&quot;: &quot;A String&quot;, # User&#x27;s phone number.
          &quot;photoUrl&quot;: &quot;A String&quot;, # The user&#x27;s photo url at the IDP.
          &quot;providerId&quot;: &quot;A String&quot;, # The IdP ID. For white listed IdPs it&#x27;s a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it&#x27;s the OP identifier.
          &quot;rawId&quot;: &quot;A String&quot;, # User&#x27;s raw identifier directly returned from IDP.
          &quot;screenName&quot;: &quot;A String&quot;, # User&#x27;s screen name at Twitter or login name at Github.
        },
      ],
      &quot;rawPassword&quot;: &quot;A String&quot;, # The user&#x27;s plain text password.
      &quot;salt&quot;: &quot;A String&quot;, # The user&#x27;s password salt.
      &quot;screenName&quot;: &quot;A String&quot;, # User&#x27;s screen name at Twitter or login name at Github.
      &quot;validSince&quot;: &quot;A String&quot;, # Timestamp in seconds for valid login token.
      &quot;version&quot;: 42, # Version of the user&#x27;s password.
    },
  ],
}


Returns:
  An object of the form:

    { # Respone of uploading accounts in batch.
  &quot;error&quot;: [ # The error encountered while processing the account info.
    {
      &quot;index&quot;: 42, # The index of the malformed account, starting from 0.
      &quot;message&quot;: &quot;A String&quot;, # Detailed error message for the account info.
    },
  ],
  &quot;kind&quot;: &quot;identitytoolkit#UploadAccountResponse&quot;, # The fixed string &quot;identitytoolkit#UploadAccountResponse&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="verifyAssertion">verifyAssertion(body=None)</code>
  <pre>Verifies the assertion returned by the IdP.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to verify the IDP assertion.
  &quot;autoCreate&quot;: True or False, # When it&#x27;s true, automatically creates a new account if the user doesn&#x27;t exist. When it&#x27;s false, allows existing user to sign in normally and throws exception if the user doesn&#x27;t exist.
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token of the authenticated user.
  &quot;instanceId&quot;: &quot;A String&quot;, # Instance id token of the app.
  &quot;pendingIdToken&quot;: &quot;A String&quot;, # The GITKit token for the non-trusted IDP pending to be confirmed by the user.
  &quot;postBody&quot;: &quot;A String&quot;, # The post body if the request is a HTTP POST.
  &quot;requestUri&quot;: &quot;A String&quot;, # The URI to which the IDP redirects the user back. It may contain federated login result params added by the IDP.
  &quot;returnIdpCredential&quot;: True or False, # Whether return 200 and IDP credential rather than throw exception when federated id is already linked.
  &quot;returnRefreshToken&quot;: True or False, # Whether to return refresh tokens.
  &quot;returnSecureToken&quot;: True or False, # Whether return sts id token and refresh token instead of gitkit token.
  &quot;sessionId&quot;: &quot;A String&quot;, # Session ID, which should match the one in previous createAuthUri request.
  &quot;tenantId&quot;: &quot;A String&quot;, # For multi-tenant use cases, in order to construct sign-in URL with the correct IDP parameters, Firebear needs to know which Tenant to retrieve IDP configs from.
  &quot;tenantProjectNumber&quot;: &quot;A String&quot;, # Tenant project number to be used for idp discovery.
}


Returns:
  An object of the form:

    { # Response of verifying the IDP assertion.
  &quot;action&quot;: &quot;A String&quot;, # The action code.
  &quot;appInstallationUrl&quot;: &quot;A String&quot;, # URL for OTA app installation.
  &quot;appScheme&quot;: &quot;A String&quot;, # The custom scheme used by mobile app.
  &quot;context&quot;: &quot;A String&quot;, # The opaque value used by the client to maintain context info between the authentication request and the IDP callback.
  &quot;dateOfBirth&quot;: &quot;A String&quot;, # The birth date of the IdP account.
  &quot;displayName&quot;: &quot;A String&quot;, # The display name of the user.
  &quot;email&quot;: &quot;A String&quot;, # The email returned by the IdP. NOTE: The federated login user may not own the email.
  &quot;emailRecycled&quot;: True or False, # It&#x27;s true if the email is recycled.
  &quot;emailVerified&quot;: True or False, # The value is true if the IDP is also the email provider. It means the user owns the email.
  &quot;errorMessage&quot;: &quot;A String&quot;, # Client error code.
  &quot;expiresIn&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
  &quot;federatedId&quot;: &quot;A String&quot;, # The unique ID identifies the IdP account.
  &quot;firstName&quot;: &quot;A String&quot;, # The first name of the user.
  &quot;fullName&quot;: &quot;A String&quot;, # The full name of the user.
  &quot;idToken&quot;: &quot;A String&quot;, # The ID token.
  &quot;inputEmail&quot;: &quot;A String&quot;, # It&#x27;s the identifier param in the createAuthUri request if the identifier is an email. It can be used to check whether the user input email is different from the asserted email.
  &quot;isNewUser&quot;: True or False, # True if it&#x27;s a new user sign-in, false if it&#x27;s a returning user.
  &quot;kind&quot;: &quot;identitytoolkit#VerifyAssertionResponse&quot;, # The fixed string &quot;identitytoolkit#VerifyAssertionResponse&quot;.
  &quot;language&quot;: &quot;A String&quot;, # The language preference of the user.
  &quot;lastName&quot;: &quot;A String&quot;, # The last name of the user.
  &quot;localId&quot;: &quot;A String&quot;, # The RP local ID if it&#x27;s already been mapped to the IdP account identified by the federated ID.
  &quot;needConfirmation&quot;: True or False, # Whether the assertion is from a non-trusted IDP and need account linking confirmation.
  &quot;needEmail&quot;: True or False, # Whether need client to supply email to complete the federated login flow.
  &quot;nickName&quot;: &quot;A String&quot;, # The nick name of the user.
  &quot;oauthAccessToken&quot;: &quot;A String&quot;, # The OAuth2 access token.
  &quot;oauthAuthorizationCode&quot;: &quot;A String&quot;, # The OAuth2 authorization code.
  &quot;oauthExpireIn&quot;: 42, # The lifetime in seconds of the OAuth2 access token.
  &quot;oauthIdToken&quot;: &quot;A String&quot;, # The OIDC id token.
  &quot;oauthRequestToken&quot;: &quot;A String&quot;, # The user approved request token for the OpenID OAuth extension.
  &quot;oauthScope&quot;: &quot;A String&quot;, # The scope for the OpenID OAuth extension.
  &quot;oauthTokenSecret&quot;: &quot;A String&quot;, # The OAuth1 access token secret.
  &quot;originalEmail&quot;: &quot;A String&quot;, # The original email stored in the mapping storage. It&#x27;s returned when the federated ID is associated to a different email.
  &quot;photoUrl&quot;: &quot;A String&quot;, # The URI of the public accessible profiel picture.
  &quot;providerId&quot;: &quot;A String&quot;, # The IdP ID. For white listed IdPs it&#x27;s a short domain name e.g. google.com, aol.com, live.net and yahoo.com. If the &quot;providerId&quot; param is set to OpenID OP identifer other than the whilte listed IdPs the OP identifier is returned. If the &quot;identifier&quot; param is federated ID in the createAuthUri request. The domain part of the federated ID is returned.
  &quot;rawUserInfo&quot;: &quot;A String&quot;, # Raw IDP-returned user info.
  &quot;refreshToken&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be refresh token.
  &quot;screenName&quot;: &quot;A String&quot;, # The screen_name of a Twitter user or the login name at Github.
  &quot;timeZone&quot;: &quot;A String&quot;, # The timezone of the user.
  &quot;verifiedProvider&quot;: [ # When action is &#x27;map&#x27;, contains the idps which can be used for confirmation.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="verifyCustomToken">verifyCustomToken(body=None)</code>
  <pre>Verifies the developer asserted ID token.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to verify a custom token
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;instanceId&quot;: &quot;A String&quot;, # Instance id token of the app.
  &quot;returnSecureToken&quot;: True or False, # Whether return sts id token and refresh token instead of gitkit token.
  &quot;token&quot;: &quot;A String&quot;, # The custom token to verify
}


Returns:
  An object of the form:

    { # Response from verifying a custom token
  &quot;expiresIn&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token for authenticated user.
  &quot;isNewUser&quot;: True or False, # True if it&#x27;s a new user sign-in, false if it&#x27;s a returning user.
  &quot;kind&quot;: &quot;identitytoolkit#VerifyCustomTokenResponse&quot;, # The fixed string &quot;identitytoolkit#VerifyCustomTokenResponse&quot;.
  &quot;refreshToken&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be refresh token.
}</pre>
</div>

<div class="method">
    <code class="details" id="verifyPassword">verifyPassword(body=None)</code>
  <pre>Verifies the user entered password.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request to verify the password.
  &quot;captchaChallenge&quot;: &quot;A String&quot;, # The captcha challenge.
  &quot;captchaResponse&quot;: &quot;A String&quot;, # Response to the captcha.
  &quot;delegatedProjectNumber&quot;: &quot;A String&quot;, # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
  &quot;email&quot;: &quot;A String&quot;, # The email of the user.
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token of the authenticated user.
  &quot;instanceId&quot;: &quot;A String&quot;, # Instance id token of the app.
  &quot;password&quot;: &quot;A String&quot;, # The password inputed by the user.
  &quot;pendingIdToken&quot;: &quot;A String&quot;, # The GITKit token for the non-trusted IDP, which is to be confirmed by the user.
  &quot;returnSecureToken&quot;: True or False, # Whether return sts id token and refresh token instead of gitkit token.
  &quot;tenantId&quot;: &quot;A String&quot;, # For multi-tenant use cases, in order to construct sign-in URL with the correct IDP parameters, Firebear needs to know which Tenant to retrieve IDP configs from.
  &quot;tenantProjectNumber&quot;: &quot;A String&quot;, # Tenant project number to be used for idp discovery.
}


Returns:
  An object of the form:

    { # Request of verifying the password.
  &quot;displayName&quot;: &quot;A String&quot;, # The name of the user.
  &quot;email&quot;: &quot;A String&quot;, # The email returned by the IdP. NOTE: The federated login user may not own the email.
  &quot;expiresIn&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
  &quot;idToken&quot;: &quot;A String&quot;, # The GITKit token for authenticated user.
  &quot;kind&quot;: &quot;identitytoolkit#VerifyPasswordResponse&quot;, # The fixed string &quot;identitytoolkit#VerifyPasswordResponse&quot;.
  &quot;localId&quot;: &quot;A String&quot;, # The RP local ID if it&#x27;s already been mapped to the IdP account identified by the federated ID.
  &quot;oauthAccessToken&quot;: &quot;A String&quot;, # The OAuth2 access token.
  &quot;oauthAuthorizationCode&quot;: &quot;A String&quot;, # The OAuth2 authorization code.
  &quot;oauthExpireIn&quot;: 42, # The lifetime in seconds of the OAuth2 access token.
  &quot;photoUrl&quot;: &quot;A String&quot;, # The URI of the user&#x27;s photo at IdP
  &quot;refreshToken&quot;: &quot;A String&quot;, # If idToken is STS id token, then this field will be refresh token.
  &quot;registered&quot;: True or False, # Whether the email is registered.
}</pre>
</div>

<div class="method">
    <code class="details" id="verifyPhoneNumber">verifyPhoneNumber(body=None)</code>
  <pre>Verifies ownership of a phone number and creates/updates the user account accordingly.

Args:
  body: object, The request body.
    The object takes the form of:

{ # Request for Identitytoolkit-VerifyPhoneNumber
  &quot;code&quot;: &quot;A String&quot;,
  &quot;idToken&quot;: &quot;A String&quot;,
  &quot;operation&quot;: &quot;A String&quot;,
  &quot;phoneNumber&quot;: &quot;A String&quot;,
  &quot;sessionInfo&quot;: &quot;A String&quot;, # The session info previously returned by IdentityToolkit-SendVerificationCode.
  &quot;temporaryProof&quot;: &quot;A String&quot;,
  &quot;verificationProof&quot;: &quot;A String&quot;,
}


Returns:
  An object of the form:

    { # Response for Identitytoolkit-VerifyPhoneNumber
  &quot;expiresIn&quot;: &quot;A String&quot;,
  &quot;idToken&quot;: &quot;A String&quot;,
  &quot;isNewUser&quot;: True or False,
  &quot;localId&quot;: &quot;A String&quot;,
  &quot;phoneNumber&quot;: &quot;A String&quot;,
  &quot;refreshToken&quot;: &quot;A String&quot;,
  &quot;temporaryProof&quot;: &quot;A String&quot;,
  &quot;temporaryProofExpiresIn&quot;: &quot;A String&quot;,
  &quot;verificationProof&quot;: &quot;A String&quot;,
  &quot;verificationProofExpiresIn&quot;: &quot;A String&quot;,
}</pre>
</div>

</body></html>