<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="recaptchaenterprise_v1.html">reCAPTCHA Enterprise API</a> . <a href="recaptchaenterprise_v1.projects.html">projects</a> . <a href="recaptchaenterprise_v1.projects.keys.html">keys</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#addIpOverride">addIpOverride(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Adds an IP override to a key. The following restrictions hold: * The maximum number of IP overrides per key is 1000. * For any conflict (such as IP already exists or IP part of an existing IP range), an error is returned.</p>
<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="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new reCAPTCHA Enterprise key.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified key.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the specified key.</p>
<p class="toc_element">
  <code><a href="#getMetrics">getMetrics(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get some aggregated metrics for a Key. This data can be used to build dashboards.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of all keys that belong to a project.</p>
<p class="toc_element">
  <code><a href="#listIpOverrides">listIpOverrides(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all IP overrides for a key.</p>
<p class="toc_element">
  <code><a href="#listIpOverrides_next">listIpOverrides_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#migrate">migrate(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Migrates an existing key from reCAPTCHA to reCAPTCHA Enterprise. Once a key is migrated, it can be used from either product. SiteVerify requests are billed as CreateAssessment calls. You must be authenticated as one of the current owners of the reCAPTCHA Key, and your user must have the reCAPTCHA Enterprise Admin IAM role in the destination project.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified key.</p>
<p class="toc_element">
  <code><a href="#removeIpOverride">removeIpOverride(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Removes an IP override from a key. The following restrictions hold: * If the IP isn't found in an existing IP override, a `NOT_FOUND` error is returned. * If the IP is found in an existing IP override, but the override type does not match, a `NOT_FOUND` error is returned.</p>
<p class="toc_element">
  <code><a href="#retrieveLegacySecretKey">retrieveLegacySecretKey(x__xgafv=None)</a></code></p>
<p class="firstline">Returns the secret key related to the specified public key. You must use the legacy secret key only in a 3rd party integration with legacy reCAPTCHA.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addIpOverride">addIpOverride(name, body=None, x__xgafv=None)</code>
  <pre>Adds an IP override to a key. The following restrictions hold: * The maximum number of IP overrides per key is 1000. * For any conflict (such as IP already exists or IP part of an existing IP range), an error is returned.

Args:
  name: string, Required. The name of the key to which the IP override is added, in the format `projects/{project}/keys/{key}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The AddIpOverride request message.
  &quot;ipOverrideData&quot;: { # Information about the IP or IP range override. # Required. IP override added to the key.
    &quot;ip&quot;: &quot;A String&quot;, # Required. The IP address to override (can be IPv4, IPv6 or CIDR). The IP override must be a valid IPv4 or IPv6 address, or a CIDR range. The IP override must be a public IP address. Example of IPv4: 168.192.5.6 Example of IPv6: 2001:0000:130F:0000:0000:09C0:876A:130B Example of IPv4 with CIDR: 168.192.5.0/24 Example of IPv6 with CIDR: 2001:0DB8:1234::/48
    &quot;overrideType&quot;: &quot;A String&quot;, # Required. Describes the type of IP override.
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for AddIpOverride.
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new reCAPTCHA Enterprise key.

Args:
  parent: string, Required. The name of the project in which the key is created, in the format `projects/{project}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A key used to identify and configure applications (web and/or mobile) that use reCAPTCHA Enterprise.
  &quot;androidSettings&quot;: { # Settings specific to keys that can be used by Android apps. # Settings for keys that can be used by Android apps.
    &quot;allowAllPackageNames&quot;: True or False, # Optional. If set to true, allowed_package_names are not enforced.
    &quot;allowedPackageNames&quot;: [ # Optional. Android package names of apps allowed to use the key. Example: &#x27;com.companyname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;supportNonGoogleAppStoreDistribution&quot;: True or False, # Optional. Set to true for keys that are used in an Android application that is available for download in app stores in addition to the Google Play Store.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp corresponding to the creation of this key.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name of this key. Modifiable by user.
  &quot;expressSettings&quot;: { # Settings specific to keys that can be used for reCAPTCHA Express. # Settings for keys that can be used by reCAPTCHA Express.
  },
  &quot;iosSettings&quot;: { # Settings specific to keys that can be used by iOS apps. # Settings for keys that can be used by iOS apps.
    &quot;allowAllBundleIds&quot;: True or False, # Optional. If set to true, allowed_bundle_ids are not enforced.
    &quot;allowedBundleIds&quot;: [ # Optional. iOS bundle ids of apps allowed to use the key. Example: &#x27;com.companyname.productname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;appleDeveloperId&quot;: { # Contains fields that are required to perform Apple-specific integrity checks. # Optional. Apple Developer account details for the app that is protected by the reCAPTCHA Key. reCAPTCHA leverages platform-specific checks like Apple App Attest and Apple DeviceCheck to protect your app from abuse. Providing these fields allows reCAPTCHA to get a better assessment of the integrity of your app.
      &quot;keyId&quot;: &quot;A String&quot;, # Required. The Apple developer key ID (10-character string).
      &quot;privateKey&quot;: &quot;A String&quot;, # Required. Input only. A private key (downloaded as a text file with a .p8 file extension) generated for your Apple Developer account. Ensure that Apple DeviceCheck is enabled for the private key.
      &quot;teamId&quot;: &quot;A String&quot;, # Required. The Apple team ID (10-character string) owning the provisioning profile used to build your application.
    },
  },
  &quot;labels&quot;: { # Optional. See [Creating and managing labels] (https://cloud.google.com/recaptcha/docs/labels).
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`.
  &quot;testingOptions&quot;: { # Options for user acceptance testing. # Optional. Options for user acceptance testing.
    &quot;testingChallenge&quot;: &quot;A String&quot;, # Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests for this site return nocaptcha if NOCAPTCHA, or an unsolvable challenge if CHALLENGE.
    &quot;testingScore&quot;: 3.14, # Optional. All assessments for this Key return this score. Must be between 0 (likely not legitimate) and 1 (likely legitimate) inclusive.
  },
  &quot;wafSettings&quot;: { # Settings specific to keys that can be used for WAF (Web Application Firewall). # Optional. Settings for Web Application Firewall (WAF).
    &quot;wafFeature&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) feature for which this key is enabled.
    &quot;wafService&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) service that uses this key.
  },
  &quot;webSettings&quot;: { # Settings specific to keys that can be used by websites. # Settings for keys that can be used by websites.
    &quot;allowAllDomains&quot;: True or False, # Optional. If set to true, it means allowed_domains are not enforced.
    &quot;allowAmpTraffic&quot;: True or False, # Optional. If set to true, the key can be used on AMP (Accelerated Mobile Pages) websites. This is supported only for the SCORE integration type.
    &quot;allowedDomains&quot;: [ # Optional. Domains or subdomains of websites allowed to use the key. All subdomains of an allowed domain are automatically allowed. A valid domain requires a host and must not include any path, port, query or fragment. Examples: &#x27;example.com&#x27; or &#x27;subdomain.example.com&#x27;
      &quot;A String&quot;,
    ],
    &quot;challengeSecurityPreference&quot;: &quot;A String&quot;, # Optional. Settings for the frequency and difficulty at which this key triggers captcha challenges. This should only be specified for `IntegrationType` CHECKBOX, INVISIBLE or POLICY_BASED_CHALLENGE.
    &quot;challengeSettings&quot;: { # Settings for POLICY_BASED_CHALLENGE keys to control when a challenge is triggered. # Optional. Challenge settings.
      &quot;actionSettings&quot;: { # Optional. The action to score threshold map. The action name should be the same as the action name passed in the `data-action` attribute (see https://cloud.google.com/recaptcha/docs/actions-website). Action names are case-insensitive. There is a maximum of 100 action settings. An action name has a maximum length of 100.
        &quot;a_key&quot;: { # Per-action challenge settings.
          &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
        },
      },
      &quot;defaultSettings&quot;: { # Per-action challenge settings. # Required. Defines when a challenge is triggered (unless the default threshold is overridden for the given action, see `action_settings`).
        &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
      },
    },
    &quot;integrationType&quot;: &quot;A String&quot;, # Required. Describes how this key is integrated with the website.
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A key used to identify and configure applications (web and/or mobile) that use reCAPTCHA Enterprise.
  &quot;androidSettings&quot;: { # Settings specific to keys that can be used by Android apps. # Settings for keys that can be used by Android apps.
    &quot;allowAllPackageNames&quot;: True or False, # Optional. If set to true, allowed_package_names are not enforced.
    &quot;allowedPackageNames&quot;: [ # Optional. Android package names of apps allowed to use the key. Example: &#x27;com.companyname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;supportNonGoogleAppStoreDistribution&quot;: True or False, # Optional. Set to true for keys that are used in an Android application that is available for download in app stores in addition to the Google Play Store.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp corresponding to the creation of this key.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name of this key. Modifiable by user.
  &quot;expressSettings&quot;: { # Settings specific to keys that can be used for reCAPTCHA Express. # Settings for keys that can be used by reCAPTCHA Express.
  },
  &quot;iosSettings&quot;: { # Settings specific to keys that can be used by iOS apps. # Settings for keys that can be used by iOS apps.
    &quot;allowAllBundleIds&quot;: True or False, # Optional. If set to true, allowed_bundle_ids are not enforced.
    &quot;allowedBundleIds&quot;: [ # Optional. iOS bundle ids of apps allowed to use the key. Example: &#x27;com.companyname.productname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;appleDeveloperId&quot;: { # Contains fields that are required to perform Apple-specific integrity checks. # Optional. Apple Developer account details for the app that is protected by the reCAPTCHA Key. reCAPTCHA leverages platform-specific checks like Apple App Attest and Apple DeviceCheck to protect your app from abuse. Providing these fields allows reCAPTCHA to get a better assessment of the integrity of your app.
      &quot;keyId&quot;: &quot;A String&quot;, # Required. The Apple developer key ID (10-character string).
      &quot;privateKey&quot;: &quot;A String&quot;, # Required. Input only. A private key (downloaded as a text file with a .p8 file extension) generated for your Apple Developer account. Ensure that Apple DeviceCheck is enabled for the private key.
      &quot;teamId&quot;: &quot;A String&quot;, # Required. The Apple team ID (10-character string) owning the provisioning profile used to build your application.
    },
  },
  &quot;labels&quot;: { # Optional. See [Creating and managing labels] (https://cloud.google.com/recaptcha/docs/labels).
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`.
  &quot;testingOptions&quot;: { # Options for user acceptance testing. # Optional. Options for user acceptance testing.
    &quot;testingChallenge&quot;: &quot;A String&quot;, # Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests for this site return nocaptcha if NOCAPTCHA, or an unsolvable challenge if CHALLENGE.
    &quot;testingScore&quot;: 3.14, # Optional. All assessments for this Key return this score. Must be between 0 (likely not legitimate) and 1 (likely legitimate) inclusive.
  },
  &quot;wafSettings&quot;: { # Settings specific to keys that can be used for WAF (Web Application Firewall). # Optional. Settings for Web Application Firewall (WAF).
    &quot;wafFeature&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) feature for which this key is enabled.
    &quot;wafService&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) service that uses this key.
  },
  &quot;webSettings&quot;: { # Settings specific to keys that can be used by websites. # Settings for keys that can be used by websites.
    &quot;allowAllDomains&quot;: True or False, # Optional. If set to true, it means allowed_domains are not enforced.
    &quot;allowAmpTraffic&quot;: True or False, # Optional. If set to true, the key can be used on AMP (Accelerated Mobile Pages) websites. This is supported only for the SCORE integration type.
    &quot;allowedDomains&quot;: [ # Optional. Domains or subdomains of websites allowed to use the key. All subdomains of an allowed domain are automatically allowed. A valid domain requires a host and must not include any path, port, query or fragment. Examples: &#x27;example.com&#x27; or &#x27;subdomain.example.com&#x27;
      &quot;A String&quot;,
    ],
    &quot;challengeSecurityPreference&quot;: &quot;A String&quot;, # Optional. Settings for the frequency and difficulty at which this key triggers captcha challenges. This should only be specified for `IntegrationType` CHECKBOX, INVISIBLE or POLICY_BASED_CHALLENGE.
    &quot;challengeSettings&quot;: { # Settings for POLICY_BASED_CHALLENGE keys to control when a challenge is triggered. # Optional. Challenge settings.
      &quot;actionSettings&quot;: { # Optional. The action to score threshold map. The action name should be the same as the action name passed in the `data-action` attribute (see https://cloud.google.com/recaptcha/docs/actions-website). Action names are case-insensitive. There is a maximum of 100 action settings. An action name has a maximum length of 100.
        &quot;a_key&quot;: { # Per-action challenge settings.
          &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
        },
      },
      &quot;defaultSettings&quot;: { # Per-action challenge settings. # Required. Defines when a challenge is triggered (unless the default threshold is overridden for the given action, see `action_settings`).
        &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
      },
    },
    &quot;integrationType&quot;: &quot;A String&quot;, # Required. Describes how this key is integrated with the website.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified key.

Args:
  name: string, Required. The name of the key to be deleted, in the format `projects/{project}/keys/{key}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Returns the specified key.

Args:
  name: string, Required. The name of the requested key, in the format `projects/{project}/keys/{key}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A key used to identify and configure applications (web and/or mobile) that use reCAPTCHA Enterprise.
  &quot;androidSettings&quot;: { # Settings specific to keys that can be used by Android apps. # Settings for keys that can be used by Android apps.
    &quot;allowAllPackageNames&quot;: True or False, # Optional. If set to true, allowed_package_names are not enforced.
    &quot;allowedPackageNames&quot;: [ # Optional. Android package names of apps allowed to use the key. Example: &#x27;com.companyname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;supportNonGoogleAppStoreDistribution&quot;: True or False, # Optional. Set to true for keys that are used in an Android application that is available for download in app stores in addition to the Google Play Store.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp corresponding to the creation of this key.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name of this key. Modifiable by user.
  &quot;expressSettings&quot;: { # Settings specific to keys that can be used for reCAPTCHA Express. # Settings for keys that can be used by reCAPTCHA Express.
  },
  &quot;iosSettings&quot;: { # Settings specific to keys that can be used by iOS apps. # Settings for keys that can be used by iOS apps.
    &quot;allowAllBundleIds&quot;: True or False, # Optional. If set to true, allowed_bundle_ids are not enforced.
    &quot;allowedBundleIds&quot;: [ # Optional. iOS bundle ids of apps allowed to use the key. Example: &#x27;com.companyname.productname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;appleDeveloperId&quot;: { # Contains fields that are required to perform Apple-specific integrity checks. # Optional. Apple Developer account details for the app that is protected by the reCAPTCHA Key. reCAPTCHA leverages platform-specific checks like Apple App Attest and Apple DeviceCheck to protect your app from abuse. Providing these fields allows reCAPTCHA to get a better assessment of the integrity of your app.
      &quot;keyId&quot;: &quot;A String&quot;, # Required. The Apple developer key ID (10-character string).
      &quot;privateKey&quot;: &quot;A String&quot;, # Required. Input only. A private key (downloaded as a text file with a .p8 file extension) generated for your Apple Developer account. Ensure that Apple DeviceCheck is enabled for the private key.
      &quot;teamId&quot;: &quot;A String&quot;, # Required. The Apple team ID (10-character string) owning the provisioning profile used to build your application.
    },
  },
  &quot;labels&quot;: { # Optional. See [Creating and managing labels] (https://cloud.google.com/recaptcha/docs/labels).
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`.
  &quot;testingOptions&quot;: { # Options for user acceptance testing. # Optional. Options for user acceptance testing.
    &quot;testingChallenge&quot;: &quot;A String&quot;, # Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests for this site return nocaptcha if NOCAPTCHA, or an unsolvable challenge if CHALLENGE.
    &quot;testingScore&quot;: 3.14, # Optional. All assessments for this Key return this score. Must be between 0 (likely not legitimate) and 1 (likely legitimate) inclusive.
  },
  &quot;wafSettings&quot;: { # Settings specific to keys that can be used for WAF (Web Application Firewall). # Optional. Settings for Web Application Firewall (WAF).
    &quot;wafFeature&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) feature for which this key is enabled.
    &quot;wafService&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) service that uses this key.
  },
  &quot;webSettings&quot;: { # Settings specific to keys that can be used by websites. # Settings for keys that can be used by websites.
    &quot;allowAllDomains&quot;: True or False, # Optional. If set to true, it means allowed_domains are not enforced.
    &quot;allowAmpTraffic&quot;: True or False, # Optional. If set to true, the key can be used on AMP (Accelerated Mobile Pages) websites. This is supported only for the SCORE integration type.
    &quot;allowedDomains&quot;: [ # Optional. Domains or subdomains of websites allowed to use the key. All subdomains of an allowed domain are automatically allowed. A valid domain requires a host and must not include any path, port, query or fragment. Examples: &#x27;example.com&#x27; or &#x27;subdomain.example.com&#x27;
      &quot;A String&quot;,
    ],
    &quot;challengeSecurityPreference&quot;: &quot;A String&quot;, # Optional. Settings for the frequency and difficulty at which this key triggers captcha challenges. This should only be specified for `IntegrationType` CHECKBOX, INVISIBLE or POLICY_BASED_CHALLENGE.
    &quot;challengeSettings&quot;: { # Settings for POLICY_BASED_CHALLENGE keys to control when a challenge is triggered. # Optional. Challenge settings.
      &quot;actionSettings&quot;: { # Optional. The action to score threshold map. The action name should be the same as the action name passed in the `data-action` attribute (see https://cloud.google.com/recaptcha/docs/actions-website). Action names are case-insensitive. There is a maximum of 100 action settings. An action name has a maximum length of 100.
        &quot;a_key&quot;: { # Per-action challenge settings.
          &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
        },
      },
      &quot;defaultSettings&quot;: { # Per-action challenge settings. # Required. Defines when a challenge is triggered (unless the default threshold is overridden for the given action, see `action_settings`).
        &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
      },
    },
    &quot;integrationType&quot;: &quot;A String&quot;, # Required. Describes how this key is integrated with the website.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="getMetrics">getMetrics(name, x__xgafv=None)</code>
  <pre>Get some aggregated metrics for a Key. This data can be used to build dashboards.

Args:
  name: string, Required. The name of the requested metrics, in the format `projects/{project}/keys/{key}/metrics`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Metrics for a single Key.
  &quot;challengeMetrics&quot;: [ # Metrics are continuous and in order by dates, and in the granularity of day. Only challenge-based keys (CHECKBOX, INVISIBLE) have challenge-based data.
    { # Metrics related to challenges.
      &quot;failedCount&quot;: &quot;A String&quot;, # Count of submitted challenge solutions that were incorrect or otherwise deemed suspicious such that a subsequent challenge was triggered.
      &quot;nocaptchaCount&quot;: &quot;A String&quot;, # Count of nocaptchas (successful verification without a challenge) issued.
      &quot;pageloadCount&quot;: &quot;A String&quot;, # Count of reCAPTCHA checkboxes or badges rendered. This is mostly equivalent to a count of pageloads for pages that include reCAPTCHA.
      &quot;passedCount&quot;: &quot;A String&quot;, # Count of nocaptchas (successful verification without a challenge) plus submitted challenge solutions that were correct and resulted in verification.
    },
  ],
  &quot;name&quot;: &quot;A String&quot;, # Output only. Identifier. The name of the metrics, in the format `projects/{project}/keys/{key}/metrics`.
  &quot;scoreMetrics&quot;: [ # Metrics are continuous and in order by dates, and in the granularity of day. All Key types should have score-based data.
    { # Metrics related to scoring.
      &quot;actionMetrics&quot;: { # Action-based metrics. The map key is the action name which specified by the site owners at time of the &quot;execute&quot; client-side call.
        &quot;a_key&quot;: { # Score distribution.
          &quot;scoreBuckets&quot;: { # Map key is score value multiplied by 100. The scores are discrete values between [0, 1]. The maximum number of buckets is on order of a few dozen, but typically much lower (ie. 10).
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      },
      &quot;overallMetrics&quot;: { # Score distribution. # Aggregated score metrics for all traffic.
        &quot;scoreBuckets&quot;: { # Map key is score value multiplied by 100. The scores are discrete values between [0, 1]. The maximum number of buckets is on order of a few dozen, but typically much lower (ie. 10).
          &quot;a_key&quot;: &quot;A String&quot;,
        },
      },
    },
  ],
  &quot;startTime&quot;: &quot;A String&quot;, # Inclusive start time aligned to a day in the America/Los_Angeles (Pacific) timezone.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns the list of all keys that belong to a project.

Args:
  parent: string, Required. The name of the project that contains the keys that is listed, in the format `projects/{project}`. (required)
  pageSize: integer, Optional. The maximum number of keys to return. Default is 10. Max limit is 1000.
  pageToken: string, Optional. The next_page_token value returned from a previous. ListKeysRequest, if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to request to list keys in a project.
  &quot;keys&quot;: [ # Key details.
    { # A key used to identify and configure applications (web and/or mobile) that use reCAPTCHA Enterprise.
      &quot;androidSettings&quot;: { # Settings specific to keys that can be used by Android apps. # Settings for keys that can be used by Android apps.
        &quot;allowAllPackageNames&quot;: True or False, # Optional. If set to true, allowed_package_names are not enforced.
        &quot;allowedPackageNames&quot;: [ # Optional. Android package names of apps allowed to use the key. Example: &#x27;com.companyname.appname&#x27;
          &quot;A String&quot;,
        ],
        &quot;supportNonGoogleAppStoreDistribution&quot;: True or False, # Optional. Set to true for keys that are used in an Android application that is available for download in app stores in addition to the Google Play Store.
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp corresponding to the creation of this key.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name of this key. Modifiable by user.
      &quot;expressSettings&quot;: { # Settings specific to keys that can be used for reCAPTCHA Express. # Settings for keys that can be used by reCAPTCHA Express.
      },
      &quot;iosSettings&quot;: { # Settings specific to keys that can be used by iOS apps. # Settings for keys that can be used by iOS apps.
        &quot;allowAllBundleIds&quot;: True or False, # Optional. If set to true, allowed_bundle_ids are not enforced.
        &quot;allowedBundleIds&quot;: [ # Optional. iOS bundle ids of apps allowed to use the key. Example: &#x27;com.companyname.productname.appname&#x27;
          &quot;A String&quot;,
        ],
        &quot;appleDeveloperId&quot;: { # Contains fields that are required to perform Apple-specific integrity checks. # Optional. Apple Developer account details for the app that is protected by the reCAPTCHA Key. reCAPTCHA leverages platform-specific checks like Apple App Attest and Apple DeviceCheck to protect your app from abuse. Providing these fields allows reCAPTCHA to get a better assessment of the integrity of your app.
          &quot;keyId&quot;: &quot;A String&quot;, # Required. The Apple developer key ID (10-character string).
          &quot;privateKey&quot;: &quot;A String&quot;, # Required. Input only. A private key (downloaded as a text file with a .p8 file extension) generated for your Apple Developer account. Ensure that Apple DeviceCheck is enabled for the private key.
          &quot;teamId&quot;: &quot;A String&quot;, # Required. The Apple team ID (10-character string) owning the provisioning profile used to build your application.
        },
      },
      &quot;labels&quot;: { # Optional. See [Creating and managing labels] (https://cloud.google.com/recaptcha/docs/labels).
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`.
      &quot;testingOptions&quot;: { # Options for user acceptance testing. # Optional. Options for user acceptance testing.
        &quot;testingChallenge&quot;: &quot;A String&quot;, # Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests for this site return nocaptcha if NOCAPTCHA, or an unsolvable challenge if CHALLENGE.
        &quot;testingScore&quot;: 3.14, # Optional. All assessments for this Key return this score. Must be between 0 (likely not legitimate) and 1 (likely legitimate) inclusive.
      },
      &quot;wafSettings&quot;: { # Settings specific to keys that can be used for WAF (Web Application Firewall). # Optional. Settings for Web Application Firewall (WAF).
        &quot;wafFeature&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) feature for which this key is enabled.
        &quot;wafService&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) service that uses this key.
      },
      &quot;webSettings&quot;: { # Settings specific to keys that can be used by websites. # Settings for keys that can be used by websites.
        &quot;allowAllDomains&quot;: True or False, # Optional. If set to true, it means allowed_domains are not enforced.
        &quot;allowAmpTraffic&quot;: True or False, # Optional. If set to true, the key can be used on AMP (Accelerated Mobile Pages) websites. This is supported only for the SCORE integration type.
        &quot;allowedDomains&quot;: [ # Optional. Domains or subdomains of websites allowed to use the key. All subdomains of an allowed domain are automatically allowed. A valid domain requires a host and must not include any path, port, query or fragment. Examples: &#x27;example.com&#x27; or &#x27;subdomain.example.com&#x27;
          &quot;A String&quot;,
        ],
        &quot;challengeSecurityPreference&quot;: &quot;A String&quot;, # Optional. Settings for the frequency and difficulty at which this key triggers captcha challenges. This should only be specified for `IntegrationType` CHECKBOX, INVISIBLE or POLICY_BASED_CHALLENGE.
        &quot;challengeSettings&quot;: { # Settings for POLICY_BASED_CHALLENGE keys to control when a challenge is triggered. # Optional. Challenge settings.
          &quot;actionSettings&quot;: { # Optional. The action to score threshold map. The action name should be the same as the action name passed in the `data-action` attribute (see https://cloud.google.com/recaptcha/docs/actions-website). Action names are case-insensitive. There is a maximum of 100 action settings. An action name has a maximum length of 100.
            &quot;a_key&quot;: { # Per-action challenge settings.
              &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
            },
          },
          &quot;defaultSettings&quot;: { # Per-action challenge settings. # Required. Defines when a challenge is triggered (unless the default threshold is overridden for the given action, see `action_settings`).
            &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
          },
        },
        &quot;integrationType&quot;: &quot;A String&quot;, # Required. Describes how this key is integrated with the website.
      },
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results. It is set to empty if no keys remain in results.
}</pre>
</div>

<div class="method">
    <code class="details" id="listIpOverrides">listIpOverrides(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all IP overrides for a key.

Args:
  parent: string, Required. The parent key for which the IP overrides are listed, in the format `projects/{project}/keys/{key}`. (required)
  pageSize: integer, Optional. The maximum number of overrides to return. Default is 10. Max limit is 100. If the number of overrides is less than the page_size, all overrides are returned. If the page size is more than 100, it is coerced to 100.
  pageToken: string, Optional. The next_page_token value returned from a previous ListIpOverridesRequest, if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for ListIpOverrides.
  &quot;ipOverrides&quot;: [ # IP Overrides details.
    { # Information about the IP or IP range override.
      &quot;ip&quot;: &quot;A String&quot;, # Required. The IP address to override (can be IPv4, IPv6 or CIDR). The IP override must be a valid IPv4 or IPv6 address, or a CIDR range. The IP override must be a public IP address. Example of IPv4: 168.192.5.6 Example of IPv6: 2001:0000:130F:0000:0000:09C0:876A:130B Example of IPv4 with CIDR: 168.192.5.0/24 Example of IPv6 with CIDR: 2001:0DB8:1234::/48
      &quot;overrideType&quot;: &quot;A String&quot;, # Required. Describes the type of IP override.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results. If this field is empty, no keys remain in the results.
}</pre>
</div>

<div class="method">
    <code class="details" id="listIpOverrides_next">listIpOverrides_next()</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="list_next">list_next()</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="migrate">migrate(name, body=None, x__xgafv=None)</code>
  <pre>Migrates an existing key from reCAPTCHA to reCAPTCHA Enterprise. Once a key is migrated, it can be used from either product. SiteVerify requests are billed as CreateAssessment calls. You must be authenticated as one of the current owners of the reCAPTCHA Key, and your user must have the reCAPTCHA Enterprise Admin IAM role in the destination project.

Args:
  name: string, Required. The name of the key to be migrated, in the format `projects/{project}/keys/{key}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The migrate key request message.
  &quot;skipBillingCheck&quot;: True or False, # Optional. If true, skips the billing check. A reCAPTCHA Enterprise key or migrated key behaves differently than a reCAPTCHA (non-Enterprise version) key when you reach a quota limit (see https://cloud.google.com/recaptcha/quotas#quota_limit). To avoid any disruption of your usage, we check that a billing account is present. If your usage of reCAPTCHA is under the free quota, you can safely skip the billing check and proceed with the migration. See https://cloud.google.com/recaptcha/docs/billing-information.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A key used to identify and configure applications (web and/or mobile) that use reCAPTCHA Enterprise.
  &quot;androidSettings&quot;: { # Settings specific to keys that can be used by Android apps. # Settings for keys that can be used by Android apps.
    &quot;allowAllPackageNames&quot;: True or False, # Optional. If set to true, allowed_package_names are not enforced.
    &quot;allowedPackageNames&quot;: [ # Optional. Android package names of apps allowed to use the key. Example: &#x27;com.companyname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;supportNonGoogleAppStoreDistribution&quot;: True or False, # Optional. Set to true for keys that are used in an Android application that is available for download in app stores in addition to the Google Play Store.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp corresponding to the creation of this key.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name of this key. Modifiable by user.
  &quot;expressSettings&quot;: { # Settings specific to keys that can be used for reCAPTCHA Express. # Settings for keys that can be used by reCAPTCHA Express.
  },
  &quot;iosSettings&quot;: { # Settings specific to keys that can be used by iOS apps. # Settings for keys that can be used by iOS apps.
    &quot;allowAllBundleIds&quot;: True or False, # Optional. If set to true, allowed_bundle_ids are not enforced.
    &quot;allowedBundleIds&quot;: [ # Optional. iOS bundle ids of apps allowed to use the key. Example: &#x27;com.companyname.productname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;appleDeveloperId&quot;: { # Contains fields that are required to perform Apple-specific integrity checks. # Optional. Apple Developer account details for the app that is protected by the reCAPTCHA Key. reCAPTCHA leverages platform-specific checks like Apple App Attest and Apple DeviceCheck to protect your app from abuse. Providing these fields allows reCAPTCHA to get a better assessment of the integrity of your app.
      &quot;keyId&quot;: &quot;A String&quot;, # Required. The Apple developer key ID (10-character string).
      &quot;privateKey&quot;: &quot;A String&quot;, # Required. Input only. A private key (downloaded as a text file with a .p8 file extension) generated for your Apple Developer account. Ensure that Apple DeviceCheck is enabled for the private key.
      &quot;teamId&quot;: &quot;A String&quot;, # Required. The Apple team ID (10-character string) owning the provisioning profile used to build your application.
    },
  },
  &quot;labels&quot;: { # Optional. See [Creating and managing labels] (https://cloud.google.com/recaptcha/docs/labels).
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`.
  &quot;testingOptions&quot;: { # Options for user acceptance testing. # Optional. Options for user acceptance testing.
    &quot;testingChallenge&quot;: &quot;A String&quot;, # Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests for this site return nocaptcha if NOCAPTCHA, or an unsolvable challenge if CHALLENGE.
    &quot;testingScore&quot;: 3.14, # Optional. All assessments for this Key return this score. Must be between 0 (likely not legitimate) and 1 (likely legitimate) inclusive.
  },
  &quot;wafSettings&quot;: { # Settings specific to keys that can be used for WAF (Web Application Firewall). # Optional. Settings for Web Application Firewall (WAF).
    &quot;wafFeature&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) feature for which this key is enabled.
    &quot;wafService&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) service that uses this key.
  },
  &quot;webSettings&quot;: { # Settings specific to keys that can be used by websites. # Settings for keys that can be used by websites.
    &quot;allowAllDomains&quot;: True or False, # Optional. If set to true, it means allowed_domains are not enforced.
    &quot;allowAmpTraffic&quot;: True or False, # Optional. If set to true, the key can be used on AMP (Accelerated Mobile Pages) websites. This is supported only for the SCORE integration type.
    &quot;allowedDomains&quot;: [ # Optional. Domains or subdomains of websites allowed to use the key. All subdomains of an allowed domain are automatically allowed. A valid domain requires a host and must not include any path, port, query or fragment. Examples: &#x27;example.com&#x27; or &#x27;subdomain.example.com&#x27;
      &quot;A String&quot;,
    ],
    &quot;challengeSecurityPreference&quot;: &quot;A String&quot;, # Optional. Settings for the frequency and difficulty at which this key triggers captcha challenges. This should only be specified for `IntegrationType` CHECKBOX, INVISIBLE or POLICY_BASED_CHALLENGE.
    &quot;challengeSettings&quot;: { # Settings for POLICY_BASED_CHALLENGE keys to control when a challenge is triggered. # Optional. Challenge settings.
      &quot;actionSettings&quot;: { # Optional. The action to score threshold map. The action name should be the same as the action name passed in the `data-action` attribute (see https://cloud.google.com/recaptcha/docs/actions-website). Action names are case-insensitive. There is a maximum of 100 action settings. An action name has a maximum length of 100.
        &quot;a_key&quot;: { # Per-action challenge settings.
          &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
        },
      },
      &quot;defaultSettings&quot;: { # Per-action challenge settings. # Required. Defines when a challenge is triggered (unless the default threshold is overridden for the given action, see `action_settings`).
        &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
      },
    },
    &quot;integrationType&quot;: &quot;A String&quot;, # Required. Describes how this key is integrated with the website.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the specified key.

Args:
  name: string, Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A key used to identify and configure applications (web and/or mobile) that use reCAPTCHA Enterprise.
  &quot;androidSettings&quot;: { # Settings specific to keys that can be used by Android apps. # Settings for keys that can be used by Android apps.
    &quot;allowAllPackageNames&quot;: True or False, # Optional. If set to true, allowed_package_names are not enforced.
    &quot;allowedPackageNames&quot;: [ # Optional. Android package names of apps allowed to use the key. Example: &#x27;com.companyname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;supportNonGoogleAppStoreDistribution&quot;: True or False, # Optional. Set to true for keys that are used in an Android application that is available for download in app stores in addition to the Google Play Store.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp corresponding to the creation of this key.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name of this key. Modifiable by user.
  &quot;expressSettings&quot;: { # Settings specific to keys that can be used for reCAPTCHA Express. # Settings for keys that can be used by reCAPTCHA Express.
  },
  &quot;iosSettings&quot;: { # Settings specific to keys that can be used by iOS apps. # Settings for keys that can be used by iOS apps.
    &quot;allowAllBundleIds&quot;: True or False, # Optional. If set to true, allowed_bundle_ids are not enforced.
    &quot;allowedBundleIds&quot;: [ # Optional. iOS bundle ids of apps allowed to use the key. Example: &#x27;com.companyname.productname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;appleDeveloperId&quot;: { # Contains fields that are required to perform Apple-specific integrity checks. # Optional. Apple Developer account details for the app that is protected by the reCAPTCHA Key. reCAPTCHA leverages platform-specific checks like Apple App Attest and Apple DeviceCheck to protect your app from abuse. Providing these fields allows reCAPTCHA to get a better assessment of the integrity of your app.
      &quot;keyId&quot;: &quot;A String&quot;, # Required. The Apple developer key ID (10-character string).
      &quot;privateKey&quot;: &quot;A String&quot;, # Required. Input only. A private key (downloaded as a text file with a .p8 file extension) generated for your Apple Developer account. Ensure that Apple DeviceCheck is enabled for the private key.
      &quot;teamId&quot;: &quot;A String&quot;, # Required. The Apple team ID (10-character string) owning the provisioning profile used to build your application.
    },
  },
  &quot;labels&quot;: { # Optional. See [Creating and managing labels] (https://cloud.google.com/recaptcha/docs/labels).
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`.
  &quot;testingOptions&quot;: { # Options for user acceptance testing. # Optional. Options for user acceptance testing.
    &quot;testingChallenge&quot;: &quot;A String&quot;, # Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests for this site return nocaptcha if NOCAPTCHA, or an unsolvable challenge if CHALLENGE.
    &quot;testingScore&quot;: 3.14, # Optional. All assessments for this Key return this score. Must be between 0 (likely not legitimate) and 1 (likely legitimate) inclusive.
  },
  &quot;wafSettings&quot;: { # Settings specific to keys that can be used for WAF (Web Application Firewall). # Optional. Settings for Web Application Firewall (WAF).
    &quot;wafFeature&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) feature for which this key is enabled.
    &quot;wafService&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) service that uses this key.
  },
  &quot;webSettings&quot;: { # Settings specific to keys that can be used by websites. # Settings for keys that can be used by websites.
    &quot;allowAllDomains&quot;: True or False, # Optional. If set to true, it means allowed_domains are not enforced.
    &quot;allowAmpTraffic&quot;: True or False, # Optional. If set to true, the key can be used on AMP (Accelerated Mobile Pages) websites. This is supported only for the SCORE integration type.
    &quot;allowedDomains&quot;: [ # Optional. Domains or subdomains of websites allowed to use the key. All subdomains of an allowed domain are automatically allowed. A valid domain requires a host and must not include any path, port, query or fragment. Examples: &#x27;example.com&#x27; or &#x27;subdomain.example.com&#x27;
      &quot;A String&quot;,
    ],
    &quot;challengeSecurityPreference&quot;: &quot;A String&quot;, # Optional. Settings for the frequency and difficulty at which this key triggers captcha challenges. This should only be specified for `IntegrationType` CHECKBOX, INVISIBLE or POLICY_BASED_CHALLENGE.
    &quot;challengeSettings&quot;: { # Settings for POLICY_BASED_CHALLENGE keys to control when a challenge is triggered. # Optional. Challenge settings.
      &quot;actionSettings&quot;: { # Optional. The action to score threshold map. The action name should be the same as the action name passed in the `data-action` attribute (see https://cloud.google.com/recaptcha/docs/actions-website). Action names are case-insensitive. There is a maximum of 100 action settings. An action name has a maximum length of 100.
        &quot;a_key&quot;: { # Per-action challenge settings.
          &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
        },
      },
      &quot;defaultSettings&quot;: { # Per-action challenge settings. # Required. Defines when a challenge is triggered (unless the default threshold is overridden for the given action, see `action_settings`).
        &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
      },
    },
    &quot;integrationType&quot;: &quot;A String&quot;, # Required. Describes how this key is integrated with the website.
  },
}

  updateMask: string, Optional. The mask to control which fields of the key get updated. If the mask is not present, all fields are updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A key used to identify and configure applications (web and/or mobile) that use reCAPTCHA Enterprise.
  &quot;androidSettings&quot;: { # Settings specific to keys that can be used by Android apps. # Settings for keys that can be used by Android apps.
    &quot;allowAllPackageNames&quot;: True or False, # Optional. If set to true, allowed_package_names are not enforced.
    &quot;allowedPackageNames&quot;: [ # Optional. Android package names of apps allowed to use the key. Example: &#x27;com.companyname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;supportNonGoogleAppStoreDistribution&quot;: True or False, # Optional. Set to true for keys that are used in an Android application that is available for download in app stores in addition to the Google Play Store.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp corresponding to the creation of this key.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. Human-readable display name of this key. Modifiable by user.
  &quot;expressSettings&quot;: { # Settings specific to keys that can be used for reCAPTCHA Express. # Settings for keys that can be used by reCAPTCHA Express.
  },
  &quot;iosSettings&quot;: { # Settings specific to keys that can be used by iOS apps. # Settings for keys that can be used by iOS apps.
    &quot;allowAllBundleIds&quot;: True or False, # Optional. If set to true, allowed_bundle_ids are not enforced.
    &quot;allowedBundleIds&quot;: [ # Optional. iOS bundle ids of apps allowed to use the key. Example: &#x27;com.companyname.productname.appname&#x27;
      &quot;A String&quot;,
    ],
    &quot;appleDeveloperId&quot;: { # Contains fields that are required to perform Apple-specific integrity checks. # Optional. Apple Developer account details for the app that is protected by the reCAPTCHA Key. reCAPTCHA leverages platform-specific checks like Apple App Attest and Apple DeviceCheck to protect your app from abuse. Providing these fields allows reCAPTCHA to get a better assessment of the integrity of your app.
      &quot;keyId&quot;: &quot;A String&quot;, # Required. The Apple developer key ID (10-character string).
      &quot;privateKey&quot;: &quot;A String&quot;, # Required. Input only. A private key (downloaded as a text file with a .p8 file extension) generated for your Apple Developer account. Ensure that Apple DeviceCheck is enabled for the private key.
      &quot;teamId&quot;: &quot;A String&quot;, # Required. The Apple team ID (10-character string) owning the provisioning profile used to build your application.
    },
  },
  &quot;labels&quot;: { # Optional. See [Creating and managing labels] (https://cloud.google.com/recaptcha/docs/labels).
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name for the Key in the format `projects/{project}/keys/{key}`.
  &quot;testingOptions&quot;: { # Options for user acceptance testing. # Optional. Options for user acceptance testing.
    &quot;testingChallenge&quot;: &quot;A String&quot;, # Optional. For challenge-based keys only (CHECKBOX, INVISIBLE), all challenge requests for this site return nocaptcha if NOCAPTCHA, or an unsolvable challenge if CHALLENGE.
    &quot;testingScore&quot;: 3.14, # Optional. All assessments for this Key return this score. Must be between 0 (likely not legitimate) and 1 (likely legitimate) inclusive.
  },
  &quot;wafSettings&quot;: { # Settings specific to keys that can be used for WAF (Web Application Firewall). # Optional. Settings for Web Application Firewall (WAF).
    &quot;wafFeature&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) feature for which this key is enabled.
    &quot;wafService&quot;: &quot;A String&quot;, # Required. The Web Application Firewall (WAF) service that uses this key.
  },
  &quot;webSettings&quot;: { # Settings specific to keys that can be used by websites. # Settings for keys that can be used by websites.
    &quot;allowAllDomains&quot;: True or False, # Optional. If set to true, it means allowed_domains are not enforced.
    &quot;allowAmpTraffic&quot;: True or False, # Optional. If set to true, the key can be used on AMP (Accelerated Mobile Pages) websites. This is supported only for the SCORE integration type.
    &quot;allowedDomains&quot;: [ # Optional. Domains or subdomains of websites allowed to use the key. All subdomains of an allowed domain are automatically allowed. A valid domain requires a host and must not include any path, port, query or fragment. Examples: &#x27;example.com&#x27; or &#x27;subdomain.example.com&#x27;
      &quot;A String&quot;,
    ],
    &quot;challengeSecurityPreference&quot;: &quot;A String&quot;, # Optional. Settings for the frequency and difficulty at which this key triggers captcha challenges. This should only be specified for `IntegrationType` CHECKBOX, INVISIBLE or POLICY_BASED_CHALLENGE.
    &quot;challengeSettings&quot;: { # Settings for POLICY_BASED_CHALLENGE keys to control when a challenge is triggered. # Optional. Challenge settings.
      &quot;actionSettings&quot;: { # Optional. The action to score threshold map. The action name should be the same as the action name passed in the `data-action` attribute (see https://cloud.google.com/recaptcha/docs/actions-website). Action names are case-insensitive. There is a maximum of 100 action settings. An action name has a maximum length of 100.
        &quot;a_key&quot;: { # Per-action challenge settings.
          &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
        },
      },
      &quot;defaultSettings&quot;: { # Per-action challenge settings. # Required. Defines when a challenge is triggered (unless the default threshold is overridden for the given action, see `action_settings`).
        &quot;scoreThreshold&quot;: 3.14, # Required. A challenge is triggered if the end-user score is below that threshold. Value must be between 0 and 1 (inclusive).
      },
    },
    &quot;integrationType&quot;: &quot;A String&quot;, # Required. Describes how this key is integrated with the website.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="removeIpOverride">removeIpOverride(name, body=None, x__xgafv=None)</code>
  <pre>Removes an IP override from a key. The following restrictions hold: * If the IP isn&#x27;t found in an existing IP override, a `NOT_FOUND` error is returned. * If the IP is found in an existing IP override, but the override type does not match, a `NOT_FOUND` error is returned.

Args:
  name: string, Required. The name of the key from which the IP override is removed, in the format `projects/{project}/keys/{key}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The RemoveIpOverride request message.
  &quot;ipOverrideData&quot;: { # Information about the IP or IP range override. # Required. IP override to be removed from the key.
    &quot;ip&quot;: &quot;A String&quot;, # Required. The IP address to override (can be IPv4, IPv6 or CIDR). The IP override must be a valid IPv4 or IPv6 address, or a CIDR range. The IP override must be a public IP address. Example of IPv4: 168.192.5.6 Example of IPv6: 2001:0000:130F:0000:0000:09C0:876A:130B Example of IPv4 with CIDR: 168.192.5.0/24 Example of IPv6 with CIDR: 2001:0DB8:1234::/48
    &quot;overrideType&quot;: &quot;A String&quot;, # Required. Describes the type of IP override.
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for RemoveIpOverride.
}</pre>
</div>

<div class="method">
    <code class="details" id="retrieveLegacySecretKey">retrieveLegacySecretKey(x__xgafv=None)</code>
  <pre>Returns the secret key related to the specified public key. You must use the legacy secret key only in a 3rd party integration with legacy reCAPTCHA.

Args:
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Secret key is used only in legacy reCAPTCHA. It must be used in a 3rd party integration with legacy reCAPTCHA.
  &quot;legacySecretKey&quot;: &quot;A String&quot;, # The secret key (also known as shared secret) authorizes communication between your application backend and the reCAPTCHA Enterprise server to create an assessment. The secret key needs to be kept safe for security purposes.
}</pre>
</div>

</body></html>