<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="#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="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>