<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="websecurityscanner_v1beta.html">Web Security Scanner API</a> . <a href="websecurityscanner_v1beta.projects.html">projects</a> . <a href="websecurityscanner_v1beta.projects.scanConfigs.html">scanConfigs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="websecurityscanner_v1beta.projects.scanConfigs.scanRuns.html">scanRuns()</a></code>
</p>
<p class="firstline">Returns the scanRuns Resource.</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 ScanConfig.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an existing ScanConfig and its child resources.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a ScanConfig.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists ScanConfigs under a given project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_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="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a ScanConfig. This method support partial update of a ScanConfig.</p>
<p class="toc_element">
  <code><a href="#start">start(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Start a ScanRun according to the given ScanConfig.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new ScanConfig.

Args:
  parent: string, Required. The parent resource name where the scan is created, which should be a
project resource name in the format &#x27;projects/{projectId}&#x27;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A ScanConfig resource contains the configurations to launch a scan.
  &quot;exportToSecurityCommandCenter&quot;: &quot;A String&quot;, # Controls export of scan configurations and results to Security
      # Command Center.
  &quot;managedScan&quot;: True or False, # Whether the scan config is managed by Web Security Scanner, output
      # only.
  &quot;userAgent&quot;: &quot;A String&quot;, # The user agent used during scanning.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The user provided display name of the ScanConfig.
  &quot;schedule&quot;: { # Scan schedule configuration. # The schedule of the ScanConfig.
    &quot;intervalDurationDays&quot;: 42, # Required. The duration of time between executions in days.
    &quot;scheduleTime&quot;: &quot;A String&quot;, # A timestamp indicates when the next run will be scheduled. The value is
        # refreshed by the server after each run. If unspecified, it will default
        # to current server time, which means the scan will be scheduled to start
        # immediately.
  },
  &quot;authentication&quot;: { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
      # authentication configuration during scanning.
    &quot;googleAccount&quot;: { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
      &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the Google account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
      &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the Google account.
    },
    &quot;iapCredential&quot;: { # Describes authentication configuration for Identity-Aware-Proxy (IAP). # Authentication using Identity-Aware-Proxy (IAP).
      &quot;iapTestServiceAccountInfo&quot;: { # Describes authentication configuration when Web-Security-Scanner # Authentication configuration when Web-Security-Scanner service
          # account is added in Identity-Aware-Proxy (IAP) access policies.
          # service account is added in Identity-Aware-Proxy (IAP) access policies.
        &quot;targetAudienceClientId&quot;: &quot;A String&quot;, # Required. Describes OAuth2 Client ID of resources protected by
            # Identity-Aware-Proxy(IAP).
      },
    },
    &quot;customAccount&quot;: { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
      &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the custom account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
      &quot;loginUrl&quot;: &quot;A String&quot;, # Required. The login form URL of the website.
      &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the custom account.
    },
  },
  &quot;riskLevel&quot;: &quot;A String&quot;, # The risk level selected for the scan
  &quot;blacklistPatterns&quot;: [ # The excluded URL patterns as described in
      # https://cloud.google.com/security-command-center/docs/how-to-use-web-security-scanner#excluding_urls
    &quot;A String&quot;,
  ],
  &quot;latestRun&quot;: { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
      # Next id: 12
    &quot;progressPercent&quot;: 42, # The percentage of total completion ranging from 0 to 100.
        # If the scan is in queue, the value is 0.
        # If the scan is running, the value ranges from 0 to 100.
        # If the scan is finished, the value is 100.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanRun. The name follows the format of
        # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#x27;.
        # The ScanRun IDs are generated by the system.
    &quot;executionState&quot;: &quot;A String&quot;, # The execution state of the ScanRun.
    &quot;hasVulnerabilities&quot;: True or False, # Whether the scan run has found any vulnerabilities.
    &quot;startTime&quot;: &quot;A String&quot;, # The time at which the ScanRun started.
    &quot;urlsTestedCount&quot;: &quot;A String&quot;, # The number of URLs tested during this ScanRun. If the scan is in progress,
        # the value represents the number of URLs tested up to now. The number of
        # URLs tested is usually larger than the number URLS crawled because
        # typically a crawled URL is tested with multiple test payloads.
    &quot;resultState&quot;: &quot;A String&quot;, # The result state of the ScanRun. This field is only available after the
        # execution state reaches &quot;FINISHED&quot;.
    &quot;urlsCrawledCount&quot;: &quot;A String&quot;, # The number of URLs crawled during this ScanRun. If the scan is in progress,
        # the value represents the number of URLs crawled up to now.
    &quot;endTime&quot;: &quot;A String&quot;, # The time at which the ScanRun reached termination state - that the ScanRun
        # is either finished or stopped by user.
    &quot;warningTraces&quot;: [ # A list of warnings, if such are encountered during this scan run.
      { # Output only.
          # Defines a warning trace message for ScanRun. Warning traces provide customers
          # with useful information that helps make the scanning process more effective.
        &quot;code&quot;: &quot;A String&quot;, # Indicates the warning code.
      },
    ],
    &quot;errorTrace&quot;: { # Output only. # If result_state is an ERROR, this field provides the primary reason for
        # scan&#x27;s termination and more details, if such are available.
        # Defines an error trace message for a ScanRun.
      &quot;scanConfigError&quot;: { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # If the scan encounters SCAN_CONFIG_ISSUE error, this field has the error
          # message encountered during scan configuration validation that is performed
          # before each scan run.
          # APIs when scan configuration validation fails. It is also reported as part of
          # a ScanRunErrorTrace message if scan validation fails due to a scan
          # configuration error.
        &quot;fieldName&quot;: &quot;A String&quot;, # Indicates the full name of the ScanConfig field that triggers this error,
            # for example &quot;scan_config.max_qps&quot;. This field is provided for
            # troubleshooting purposes only and its actual value can change in the
            # future.
        &quot;code&quot;: &quot;A String&quot;, # Indicates the reason code for a configuration failure.
      },
      &quot;code&quot;: &quot;A String&quot;, # Indicates the error reason code.
      &quot;mostCommonHttpErrorCode&quot;: 42, # If the scan encounters TOO_MANY_HTTP_ERRORS, this field indicates the most
          # common HTTP error code, if such is available. For example, if this code is
          # 404, the scan has encountered too many NOT_FOUND responses.
    },
  },
  &quot;maxQps&quot;: 42, # The maximum QPS during scanning. A valid value ranges from 5 to 20
      # inclusively. If the field is unspecified or its value is set 0, server will
      # default to 15. Other values outside of [5, 20] range will be rejected with
      # INVALID_ARGUMENT error.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanConfig. The name follows the format of
      # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. The ScanConfig IDs are
      # generated by the system.
  &quot;startingUrls&quot;: [ # Required. The starting URLs from which the scanner finds site pages.
    &quot;A String&quot;,
  ],
  &quot;staticIpScan&quot;: True or False, # Whether the scan configuration has enabled static IP address scan feature.
      # If enabled, the scanner will access applications from static IP addresses.
  &quot;targetPlatforms&quot;: [ # Set of Google Cloud platforms targeted by the scan. If empty, APP_ENGINE
      # will be used as a default.
    &quot;A String&quot;,
  ],
}

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

Returns:
  An object of the form:

    { # A ScanConfig resource contains the configurations to launch a scan.
    &quot;exportToSecurityCommandCenter&quot;: &quot;A String&quot;, # Controls export of scan configurations and results to Security
        # Command Center.
    &quot;managedScan&quot;: True or False, # Whether the scan config is managed by Web Security Scanner, output
        # only.
    &quot;userAgent&quot;: &quot;A String&quot;, # The user agent used during scanning.
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The user provided display name of the ScanConfig.
    &quot;schedule&quot;: { # Scan schedule configuration. # The schedule of the ScanConfig.
      &quot;intervalDurationDays&quot;: 42, # Required. The duration of time between executions in days.
      &quot;scheduleTime&quot;: &quot;A String&quot;, # A timestamp indicates when the next run will be scheduled. The value is
          # refreshed by the server after each run. If unspecified, it will default
          # to current server time, which means the scan will be scheduled to start
          # immediately.
    },
    &quot;authentication&quot;: { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
        # authentication configuration during scanning.
      &quot;googleAccount&quot;: { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
        &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the Google account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
        &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the Google account.
      },
      &quot;iapCredential&quot;: { # Describes authentication configuration for Identity-Aware-Proxy (IAP). # Authentication using Identity-Aware-Proxy (IAP).
        &quot;iapTestServiceAccountInfo&quot;: { # Describes authentication configuration when Web-Security-Scanner # Authentication configuration when Web-Security-Scanner service
            # account is added in Identity-Aware-Proxy (IAP) access policies.
            # service account is added in Identity-Aware-Proxy (IAP) access policies.
          &quot;targetAudienceClientId&quot;: &quot;A String&quot;, # Required. Describes OAuth2 Client ID of resources protected by
              # Identity-Aware-Proxy(IAP).
        },
      },
      &quot;customAccount&quot;: { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
        &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the custom account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
        &quot;loginUrl&quot;: &quot;A String&quot;, # Required. The login form URL of the website.
        &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the custom account.
      },
    },
    &quot;riskLevel&quot;: &quot;A String&quot;, # The risk level selected for the scan
    &quot;blacklistPatterns&quot;: [ # The excluded URL patterns as described in
        # https://cloud.google.com/security-command-center/docs/how-to-use-web-security-scanner#excluding_urls
      &quot;A String&quot;,
    ],
    &quot;latestRun&quot;: { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
        # Next id: 12
      &quot;progressPercent&quot;: 42, # The percentage of total completion ranging from 0 to 100.
          # If the scan is in queue, the value is 0.
          # If the scan is running, the value ranges from 0 to 100.
          # If the scan is finished, the value is 100.
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanRun. The name follows the format of
          # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#x27;.
          # The ScanRun IDs are generated by the system.
      &quot;executionState&quot;: &quot;A String&quot;, # The execution state of the ScanRun.
      &quot;hasVulnerabilities&quot;: True or False, # Whether the scan run has found any vulnerabilities.
      &quot;startTime&quot;: &quot;A String&quot;, # The time at which the ScanRun started.
      &quot;urlsTestedCount&quot;: &quot;A String&quot;, # The number of URLs tested during this ScanRun. If the scan is in progress,
          # the value represents the number of URLs tested up to now. The number of
          # URLs tested is usually larger than the number URLS crawled because
          # typically a crawled URL is tested with multiple test payloads.
      &quot;resultState&quot;: &quot;A String&quot;, # The result state of the ScanRun. This field is only available after the
          # execution state reaches &quot;FINISHED&quot;.
      &quot;urlsCrawledCount&quot;: &quot;A String&quot;, # The number of URLs crawled during this ScanRun. If the scan is in progress,
          # the value represents the number of URLs crawled up to now.
      &quot;endTime&quot;: &quot;A String&quot;, # The time at which the ScanRun reached termination state - that the ScanRun
          # is either finished or stopped by user.
      &quot;warningTraces&quot;: [ # A list of warnings, if such are encountered during this scan run.
        { # Output only.
            # Defines a warning trace message for ScanRun. Warning traces provide customers
            # with useful information that helps make the scanning process more effective.
          &quot;code&quot;: &quot;A String&quot;, # Indicates the warning code.
        },
      ],
      &quot;errorTrace&quot;: { # Output only. # If result_state is an ERROR, this field provides the primary reason for
          # scan&#x27;s termination and more details, if such are available.
          # Defines an error trace message for a ScanRun.
        &quot;scanConfigError&quot;: { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # If the scan encounters SCAN_CONFIG_ISSUE error, this field has the error
            # message encountered during scan configuration validation that is performed
            # before each scan run.
            # APIs when scan configuration validation fails. It is also reported as part of
            # a ScanRunErrorTrace message if scan validation fails due to a scan
            # configuration error.
          &quot;fieldName&quot;: &quot;A String&quot;, # Indicates the full name of the ScanConfig field that triggers this error,
              # for example &quot;scan_config.max_qps&quot;. This field is provided for
              # troubleshooting purposes only and its actual value can change in the
              # future.
          &quot;code&quot;: &quot;A String&quot;, # Indicates the reason code for a configuration failure.
        },
        &quot;code&quot;: &quot;A String&quot;, # Indicates the error reason code.
        &quot;mostCommonHttpErrorCode&quot;: 42, # If the scan encounters TOO_MANY_HTTP_ERRORS, this field indicates the most
            # common HTTP error code, if such is available. For example, if this code is
            # 404, the scan has encountered too many NOT_FOUND responses.
      },
    },
    &quot;maxQps&quot;: 42, # The maximum QPS during scanning. A valid value ranges from 5 to 20
        # inclusively. If the field is unspecified or its value is set 0, server will
        # default to 15. Other values outside of [5, 20] range will be rejected with
        # INVALID_ARGUMENT error.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanConfig. The name follows the format of
        # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. The ScanConfig IDs are
        # generated by the system.
    &quot;startingUrls&quot;: [ # Required. The starting URLs from which the scanner finds site pages.
      &quot;A String&quot;,
    ],
    &quot;staticIpScan&quot;: True or False, # Whether the scan configuration has enabled static IP address scan feature.
        # If enabled, the scanner will access applications from static IP addresses.
    &quot;targetPlatforms&quot;: [ # Set of Google Cloud platforms targeted by the scan. If empty, APP_ENGINE
        # will be used as a default.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an existing ScanConfig and its child resources.

Args:
  name: string, Required. The resource name of the ScanConfig to be deleted. The name follows the
format of &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. (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);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a ScanConfig.

Args:
  name: string, Required. The resource name of the ScanConfig to be returned. The name follows the
format of &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A ScanConfig resource contains the configurations to launch a scan.
    &quot;exportToSecurityCommandCenter&quot;: &quot;A String&quot;, # Controls export of scan configurations and results to Security
        # Command Center.
    &quot;managedScan&quot;: True or False, # Whether the scan config is managed by Web Security Scanner, output
        # only.
    &quot;userAgent&quot;: &quot;A String&quot;, # The user agent used during scanning.
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The user provided display name of the ScanConfig.
    &quot;schedule&quot;: { # Scan schedule configuration. # The schedule of the ScanConfig.
      &quot;intervalDurationDays&quot;: 42, # Required. The duration of time between executions in days.
      &quot;scheduleTime&quot;: &quot;A String&quot;, # A timestamp indicates when the next run will be scheduled. The value is
          # refreshed by the server after each run. If unspecified, it will default
          # to current server time, which means the scan will be scheduled to start
          # immediately.
    },
    &quot;authentication&quot;: { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
        # authentication configuration during scanning.
      &quot;googleAccount&quot;: { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
        &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the Google account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
        &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the Google account.
      },
      &quot;iapCredential&quot;: { # Describes authentication configuration for Identity-Aware-Proxy (IAP). # Authentication using Identity-Aware-Proxy (IAP).
        &quot;iapTestServiceAccountInfo&quot;: { # Describes authentication configuration when Web-Security-Scanner # Authentication configuration when Web-Security-Scanner service
            # account is added in Identity-Aware-Proxy (IAP) access policies.
            # service account is added in Identity-Aware-Proxy (IAP) access policies.
          &quot;targetAudienceClientId&quot;: &quot;A String&quot;, # Required. Describes OAuth2 Client ID of resources protected by
              # Identity-Aware-Proxy(IAP).
        },
      },
      &quot;customAccount&quot;: { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
        &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the custom account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
        &quot;loginUrl&quot;: &quot;A String&quot;, # Required. The login form URL of the website.
        &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the custom account.
      },
    },
    &quot;riskLevel&quot;: &quot;A String&quot;, # The risk level selected for the scan
    &quot;blacklistPatterns&quot;: [ # The excluded URL patterns as described in
        # https://cloud.google.com/security-command-center/docs/how-to-use-web-security-scanner#excluding_urls
      &quot;A String&quot;,
    ],
    &quot;latestRun&quot;: { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
        # Next id: 12
      &quot;progressPercent&quot;: 42, # The percentage of total completion ranging from 0 to 100.
          # If the scan is in queue, the value is 0.
          # If the scan is running, the value ranges from 0 to 100.
          # If the scan is finished, the value is 100.
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanRun. The name follows the format of
          # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#x27;.
          # The ScanRun IDs are generated by the system.
      &quot;executionState&quot;: &quot;A String&quot;, # The execution state of the ScanRun.
      &quot;hasVulnerabilities&quot;: True or False, # Whether the scan run has found any vulnerabilities.
      &quot;startTime&quot;: &quot;A String&quot;, # The time at which the ScanRun started.
      &quot;urlsTestedCount&quot;: &quot;A String&quot;, # The number of URLs tested during this ScanRun. If the scan is in progress,
          # the value represents the number of URLs tested up to now. The number of
          # URLs tested is usually larger than the number URLS crawled because
          # typically a crawled URL is tested with multiple test payloads.
      &quot;resultState&quot;: &quot;A String&quot;, # The result state of the ScanRun. This field is only available after the
          # execution state reaches &quot;FINISHED&quot;.
      &quot;urlsCrawledCount&quot;: &quot;A String&quot;, # The number of URLs crawled during this ScanRun. If the scan is in progress,
          # the value represents the number of URLs crawled up to now.
      &quot;endTime&quot;: &quot;A String&quot;, # The time at which the ScanRun reached termination state - that the ScanRun
          # is either finished or stopped by user.
      &quot;warningTraces&quot;: [ # A list of warnings, if such are encountered during this scan run.
        { # Output only.
            # Defines a warning trace message for ScanRun. Warning traces provide customers
            # with useful information that helps make the scanning process more effective.
          &quot;code&quot;: &quot;A String&quot;, # Indicates the warning code.
        },
      ],
      &quot;errorTrace&quot;: { # Output only. # If result_state is an ERROR, this field provides the primary reason for
          # scan&#x27;s termination and more details, if such are available.
          # Defines an error trace message for a ScanRun.
        &quot;scanConfigError&quot;: { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # If the scan encounters SCAN_CONFIG_ISSUE error, this field has the error
            # message encountered during scan configuration validation that is performed
            # before each scan run.
            # APIs when scan configuration validation fails. It is also reported as part of
            # a ScanRunErrorTrace message if scan validation fails due to a scan
            # configuration error.
          &quot;fieldName&quot;: &quot;A String&quot;, # Indicates the full name of the ScanConfig field that triggers this error,
              # for example &quot;scan_config.max_qps&quot;. This field is provided for
              # troubleshooting purposes only and its actual value can change in the
              # future.
          &quot;code&quot;: &quot;A String&quot;, # Indicates the reason code for a configuration failure.
        },
        &quot;code&quot;: &quot;A String&quot;, # Indicates the error reason code.
        &quot;mostCommonHttpErrorCode&quot;: 42, # If the scan encounters TOO_MANY_HTTP_ERRORS, this field indicates the most
            # common HTTP error code, if such is available. For example, if this code is
            # 404, the scan has encountered too many NOT_FOUND responses.
      },
    },
    &quot;maxQps&quot;: 42, # The maximum QPS during scanning. A valid value ranges from 5 to 20
        # inclusively. If the field is unspecified or its value is set 0, server will
        # default to 15. Other values outside of [5, 20] range will be rejected with
        # INVALID_ARGUMENT error.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanConfig. The name follows the format of
        # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. The ScanConfig IDs are
        # generated by the system.
    &quot;startingUrls&quot;: [ # Required. The starting URLs from which the scanner finds site pages.
      &quot;A String&quot;,
    ],
    &quot;staticIpScan&quot;: True or False, # Whether the scan configuration has enabled static IP address scan feature.
        # If enabled, the scanner will access applications from static IP addresses.
    &quot;targetPlatforms&quot;: [ # Set of Google Cloud platforms targeted by the scan. If empty, APP_ENGINE
        # will be used as a default.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists ScanConfigs under a given project.

Args:
  parent: string, Required. The parent resource name, which should be a project resource name in the
format &#x27;projects/{projectId}&#x27;. (required)
  pageToken: string, A token identifying a page of results to be returned. This should be a
`next_page_token` value returned from a previous List request.
If unspecified, the first page of results is returned.
  pageSize: integer, The maximum number of ScanConfigs to return, can be limited by server.
If not specified or not positive, the implementation will select a
reasonable value.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for the `ListScanConfigs` method.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no
        # more results in the list.
    &quot;scanConfigs&quot;: [ # The list of ScanConfigs returned.
      { # A ScanConfig resource contains the configurations to launch a scan.
        &quot;exportToSecurityCommandCenter&quot;: &quot;A String&quot;, # Controls export of scan configurations and results to Security
            # Command Center.
        &quot;managedScan&quot;: True or False, # Whether the scan config is managed by Web Security Scanner, output
            # only.
        &quot;userAgent&quot;: &quot;A String&quot;, # The user agent used during scanning.
        &quot;displayName&quot;: &quot;A String&quot;, # Required. The user provided display name of the ScanConfig.
        &quot;schedule&quot;: { # Scan schedule configuration. # The schedule of the ScanConfig.
          &quot;intervalDurationDays&quot;: 42, # Required. The duration of time between executions in days.
          &quot;scheduleTime&quot;: &quot;A String&quot;, # A timestamp indicates when the next run will be scheduled. The value is
              # refreshed by the server after each run. If unspecified, it will default
              # to current server time, which means the scan will be scheduled to start
              # immediately.
        },
        &quot;authentication&quot;: { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
            # authentication configuration during scanning.
          &quot;googleAccount&quot;: { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
            &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the Google account. The credential is stored encrypted
                # and not returned in any response nor included in audit logs.
            &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the Google account.
          },
          &quot;iapCredential&quot;: { # Describes authentication configuration for Identity-Aware-Proxy (IAP). # Authentication using Identity-Aware-Proxy (IAP).
            &quot;iapTestServiceAccountInfo&quot;: { # Describes authentication configuration when Web-Security-Scanner # Authentication configuration when Web-Security-Scanner service
                # account is added in Identity-Aware-Proxy (IAP) access policies.
                # service account is added in Identity-Aware-Proxy (IAP) access policies.
              &quot;targetAudienceClientId&quot;: &quot;A String&quot;, # Required. Describes OAuth2 Client ID of resources protected by
                  # Identity-Aware-Proxy(IAP).
            },
          },
          &quot;customAccount&quot;: { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
            &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the custom account. The credential is stored encrypted
                # and not returned in any response nor included in audit logs.
            &quot;loginUrl&quot;: &quot;A String&quot;, # Required. The login form URL of the website.
            &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the custom account.
          },
        },
        &quot;riskLevel&quot;: &quot;A String&quot;, # The risk level selected for the scan
        &quot;blacklistPatterns&quot;: [ # The excluded URL patterns as described in
            # https://cloud.google.com/security-command-center/docs/how-to-use-web-security-scanner#excluding_urls
          &quot;A String&quot;,
        ],
        &quot;latestRun&quot;: { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
            # Next id: 12
          &quot;progressPercent&quot;: 42, # The percentage of total completion ranging from 0 to 100.
              # If the scan is in queue, the value is 0.
              # If the scan is running, the value ranges from 0 to 100.
              # If the scan is finished, the value is 100.
          &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanRun. The name follows the format of
              # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#x27;.
              # The ScanRun IDs are generated by the system.
          &quot;executionState&quot;: &quot;A String&quot;, # The execution state of the ScanRun.
          &quot;hasVulnerabilities&quot;: True or False, # Whether the scan run has found any vulnerabilities.
          &quot;startTime&quot;: &quot;A String&quot;, # The time at which the ScanRun started.
          &quot;urlsTestedCount&quot;: &quot;A String&quot;, # The number of URLs tested during this ScanRun. If the scan is in progress,
              # the value represents the number of URLs tested up to now. The number of
              # URLs tested is usually larger than the number URLS crawled because
              # typically a crawled URL is tested with multiple test payloads.
          &quot;resultState&quot;: &quot;A String&quot;, # The result state of the ScanRun. This field is only available after the
              # execution state reaches &quot;FINISHED&quot;.
          &quot;urlsCrawledCount&quot;: &quot;A String&quot;, # The number of URLs crawled during this ScanRun. If the scan is in progress,
              # the value represents the number of URLs crawled up to now.
          &quot;endTime&quot;: &quot;A String&quot;, # The time at which the ScanRun reached termination state - that the ScanRun
              # is either finished or stopped by user.
          &quot;warningTraces&quot;: [ # A list of warnings, if such are encountered during this scan run.
            { # Output only.
                # Defines a warning trace message for ScanRun. Warning traces provide customers
                # with useful information that helps make the scanning process more effective.
              &quot;code&quot;: &quot;A String&quot;, # Indicates the warning code.
            },
          ],
          &quot;errorTrace&quot;: { # Output only. # If result_state is an ERROR, this field provides the primary reason for
              # scan&#x27;s termination and more details, if such are available.
              # Defines an error trace message for a ScanRun.
            &quot;scanConfigError&quot;: { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # If the scan encounters SCAN_CONFIG_ISSUE error, this field has the error
                # message encountered during scan configuration validation that is performed
                # before each scan run.
                # APIs when scan configuration validation fails. It is also reported as part of
                # a ScanRunErrorTrace message if scan validation fails due to a scan
                # configuration error.
              &quot;fieldName&quot;: &quot;A String&quot;, # Indicates the full name of the ScanConfig field that triggers this error,
                  # for example &quot;scan_config.max_qps&quot;. This field is provided for
                  # troubleshooting purposes only and its actual value can change in the
                  # future.
              &quot;code&quot;: &quot;A String&quot;, # Indicates the reason code for a configuration failure.
            },
            &quot;code&quot;: &quot;A String&quot;, # Indicates the error reason code.
            &quot;mostCommonHttpErrorCode&quot;: 42, # If the scan encounters TOO_MANY_HTTP_ERRORS, this field indicates the most
                # common HTTP error code, if such is available. For example, if this code is
                # 404, the scan has encountered too many NOT_FOUND responses.
          },
        },
        &quot;maxQps&quot;: 42, # The maximum QPS during scanning. A valid value ranges from 5 to 20
            # inclusively. If the field is unspecified or its value is set 0, server will
            # default to 15. Other values outside of [5, 20] range will be rejected with
            # INVALID_ARGUMENT error.
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanConfig. The name follows the format of
            # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. The ScanConfig IDs are
            # generated by the system.
        &quot;startingUrls&quot;: [ # Required. The starting URLs from which the scanner finds site pages.
          &quot;A String&quot;,
        ],
        &quot;staticIpScan&quot;: True or False, # Whether the scan configuration has enabled static IP address scan feature.
            # If enabled, the scanner will access applications from static IP addresses.
        &quot;targetPlatforms&quot;: [ # Set of Google Cloud platforms targeted by the scan. If empty, APP_ENGINE
            # will be used as a default.
          &quot;A String&quot;,
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_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="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a ScanConfig. This method support partial update of a ScanConfig.

Args:
  name: string, The resource name of the ScanConfig. The name follows the format of
&#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. The ScanConfig IDs are
generated by the system. (required)
  body: object, The request body.
    The object takes the form of:

{ # A ScanConfig resource contains the configurations to launch a scan.
  &quot;exportToSecurityCommandCenter&quot;: &quot;A String&quot;, # Controls export of scan configurations and results to Security
      # Command Center.
  &quot;managedScan&quot;: True or False, # Whether the scan config is managed by Web Security Scanner, output
      # only.
  &quot;userAgent&quot;: &quot;A String&quot;, # The user agent used during scanning.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The user provided display name of the ScanConfig.
  &quot;schedule&quot;: { # Scan schedule configuration. # The schedule of the ScanConfig.
    &quot;intervalDurationDays&quot;: 42, # Required. The duration of time between executions in days.
    &quot;scheduleTime&quot;: &quot;A String&quot;, # A timestamp indicates when the next run will be scheduled. The value is
        # refreshed by the server after each run. If unspecified, it will default
        # to current server time, which means the scan will be scheduled to start
        # immediately.
  },
  &quot;authentication&quot;: { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
      # authentication configuration during scanning.
    &quot;googleAccount&quot;: { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
      &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the Google account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
      &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the Google account.
    },
    &quot;iapCredential&quot;: { # Describes authentication configuration for Identity-Aware-Proxy (IAP). # Authentication using Identity-Aware-Proxy (IAP).
      &quot;iapTestServiceAccountInfo&quot;: { # Describes authentication configuration when Web-Security-Scanner # Authentication configuration when Web-Security-Scanner service
          # account is added in Identity-Aware-Proxy (IAP) access policies.
          # service account is added in Identity-Aware-Proxy (IAP) access policies.
        &quot;targetAudienceClientId&quot;: &quot;A String&quot;, # Required. Describes OAuth2 Client ID of resources protected by
            # Identity-Aware-Proxy(IAP).
      },
    },
    &quot;customAccount&quot;: { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
      &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the custom account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
      &quot;loginUrl&quot;: &quot;A String&quot;, # Required. The login form URL of the website.
      &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the custom account.
    },
  },
  &quot;riskLevel&quot;: &quot;A String&quot;, # The risk level selected for the scan
  &quot;blacklistPatterns&quot;: [ # The excluded URL patterns as described in
      # https://cloud.google.com/security-command-center/docs/how-to-use-web-security-scanner#excluding_urls
    &quot;A String&quot;,
  ],
  &quot;latestRun&quot;: { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
      # Next id: 12
    &quot;progressPercent&quot;: 42, # The percentage of total completion ranging from 0 to 100.
        # If the scan is in queue, the value is 0.
        # If the scan is running, the value ranges from 0 to 100.
        # If the scan is finished, the value is 100.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanRun. The name follows the format of
        # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#x27;.
        # The ScanRun IDs are generated by the system.
    &quot;executionState&quot;: &quot;A String&quot;, # The execution state of the ScanRun.
    &quot;hasVulnerabilities&quot;: True or False, # Whether the scan run has found any vulnerabilities.
    &quot;startTime&quot;: &quot;A String&quot;, # The time at which the ScanRun started.
    &quot;urlsTestedCount&quot;: &quot;A String&quot;, # The number of URLs tested during this ScanRun. If the scan is in progress,
        # the value represents the number of URLs tested up to now. The number of
        # URLs tested is usually larger than the number URLS crawled because
        # typically a crawled URL is tested with multiple test payloads.
    &quot;resultState&quot;: &quot;A String&quot;, # The result state of the ScanRun. This field is only available after the
        # execution state reaches &quot;FINISHED&quot;.
    &quot;urlsCrawledCount&quot;: &quot;A String&quot;, # The number of URLs crawled during this ScanRun. If the scan is in progress,
        # the value represents the number of URLs crawled up to now.
    &quot;endTime&quot;: &quot;A String&quot;, # The time at which the ScanRun reached termination state - that the ScanRun
        # is either finished or stopped by user.
    &quot;warningTraces&quot;: [ # A list of warnings, if such are encountered during this scan run.
      { # Output only.
          # Defines a warning trace message for ScanRun. Warning traces provide customers
          # with useful information that helps make the scanning process more effective.
        &quot;code&quot;: &quot;A String&quot;, # Indicates the warning code.
      },
    ],
    &quot;errorTrace&quot;: { # Output only. # If result_state is an ERROR, this field provides the primary reason for
        # scan&#x27;s termination and more details, if such are available.
        # Defines an error trace message for a ScanRun.
      &quot;scanConfigError&quot;: { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # If the scan encounters SCAN_CONFIG_ISSUE error, this field has the error
          # message encountered during scan configuration validation that is performed
          # before each scan run.
          # APIs when scan configuration validation fails. It is also reported as part of
          # a ScanRunErrorTrace message if scan validation fails due to a scan
          # configuration error.
        &quot;fieldName&quot;: &quot;A String&quot;, # Indicates the full name of the ScanConfig field that triggers this error,
            # for example &quot;scan_config.max_qps&quot;. This field is provided for
            # troubleshooting purposes only and its actual value can change in the
            # future.
        &quot;code&quot;: &quot;A String&quot;, # Indicates the reason code for a configuration failure.
      },
      &quot;code&quot;: &quot;A String&quot;, # Indicates the error reason code.
      &quot;mostCommonHttpErrorCode&quot;: 42, # If the scan encounters TOO_MANY_HTTP_ERRORS, this field indicates the most
          # common HTTP error code, if such is available. For example, if this code is
          # 404, the scan has encountered too many NOT_FOUND responses.
    },
  },
  &quot;maxQps&quot;: 42, # The maximum QPS during scanning. A valid value ranges from 5 to 20
      # inclusively. If the field is unspecified or its value is set 0, server will
      # default to 15. Other values outside of [5, 20] range will be rejected with
      # INVALID_ARGUMENT error.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanConfig. The name follows the format of
      # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. The ScanConfig IDs are
      # generated by the system.
  &quot;startingUrls&quot;: [ # Required. The starting URLs from which the scanner finds site pages.
    &quot;A String&quot;,
  ],
  &quot;staticIpScan&quot;: True or False, # Whether the scan configuration has enabled static IP address scan feature.
      # If enabled, the scanner will access applications from static IP addresses.
  &quot;targetPlatforms&quot;: [ # Set of Google Cloud platforms targeted by the scan. If empty, APP_ENGINE
      # will be used as a default.
    &quot;A String&quot;,
  ],
}

  updateMask: string, Required. The update mask applies to the resource. For the `FieldMask` definition,
see
https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A ScanConfig resource contains the configurations to launch a scan.
    &quot;exportToSecurityCommandCenter&quot;: &quot;A String&quot;, # Controls export of scan configurations and results to Security
        # Command Center.
    &quot;managedScan&quot;: True or False, # Whether the scan config is managed by Web Security Scanner, output
        # only.
    &quot;userAgent&quot;: &quot;A String&quot;, # The user agent used during scanning.
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The user provided display name of the ScanConfig.
    &quot;schedule&quot;: { # Scan schedule configuration. # The schedule of the ScanConfig.
      &quot;intervalDurationDays&quot;: 42, # Required. The duration of time between executions in days.
      &quot;scheduleTime&quot;: &quot;A String&quot;, # A timestamp indicates when the next run will be scheduled. The value is
          # refreshed by the server after each run. If unspecified, it will default
          # to current server time, which means the scan will be scheduled to start
          # immediately.
    },
    &quot;authentication&quot;: { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
        # authentication configuration during scanning.
      &quot;googleAccount&quot;: { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
        &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the Google account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
        &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the Google account.
      },
      &quot;iapCredential&quot;: { # Describes authentication configuration for Identity-Aware-Proxy (IAP). # Authentication using Identity-Aware-Proxy (IAP).
        &quot;iapTestServiceAccountInfo&quot;: { # Describes authentication configuration when Web-Security-Scanner # Authentication configuration when Web-Security-Scanner service
            # account is added in Identity-Aware-Proxy (IAP) access policies.
            # service account is added in Identity-Aware-Proxy (IAP) access policies.
          &quot;targetAudienceClientId&quot;: &quot;A String&quot;, # Required. Describes OAuth2 Client ID of resources protected by
              # Identity-Aware-Proxy(IAP).
        },
      },
      &quot;customAccount&quot;: { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
        &quot;password&quot;: &quot;A String&quot;, # Required. Input only. The password of the custom account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
        &quot;loginUrl&quot;: &quot;A String&quot;, # Required. The login form URL of the website.
        &quot;username&quot;: &quot;A String&quot;, # Required. The user name of the custom account.
      },
    },
    &quot;riskLevel&quot;: &quot;A String&quot;, # The risk level selected for the scan
    &quot;blacklistPatterns&quot;: [ # The excluded URL patterns as described in
        # https://cloud.google.com/security-command-center/docs/how-to-use-web-security-scanner#excluding_urls
      &quot;A String&quot;,
    ],
    &quot;latestRun&quot;: { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
        # Next id: 12
      &quot;progressPercent&quot;: 42, # The percentage of total completion ranging from 0 to 100.
          # If the scan is in queue, the value is 0.
          # If the scan is running, the value ranges from 0 to 100.
          # If the scan is finished, the value is 100.
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanRun. The name follows the format of
          # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#x27;.
          # The ScanRun IDs are generated by the system.
      &quot;executionState&quot;: &quot;A String&quot;, # The execution state of the ScanRun.
      &quot;hasVulnerabilities&quot;: True or False, # Whether the scan run has found any vulnerabilities.
      &quot;startTime&quot;: &quot;A String&quot;, # The time at which the ScanRun started.
      &quot;urlsTestedCount&quot;: &quot;A String&quot;, # The number of URLs tested during this ScanRun. If the scan is in progress,
          # the value represents the number of URLs tested up to now. The number of
          # URLs tested is usually larger than the number URLS crawled because
          # typically a crawled URL is tested with multiple test payloads.
      &quot;resultState&quot;: &quot;A String&quot;, # The result state of the ScanRun. This field is only available after the
          # execution state reaches &quot;FINISHED&quot;.
      &quot;urlsCrawledCount&quot;: &quot;A String&quot;, # The number of URLs crawled during this ScanRun. If the scan is in progress,
          # the value represents the number of URLs crawled up to now.
      &quot;endTime&quot;: &quot;A String&quot;, # The time at which the ScanRun reached termination state - that the ScanRun
          # is either finished or stopped by user.
      &quot;warningTraces&quot;: [ # A list of warnings, if such are encountered during this scan run.
        { # Output only.
            # Defines a warning trace message for ScanRun. Warning traces provide customers
            # with useful information that helps make the scanning process more effective.
          &quot;code&quot;: &quot;A String&quot;, # Indicates the warning code.
        },
      ],
      &quot;errorTrace&quot;: { # Output only. # If result_state is an ERROR, this field provides the primary reason for
          # scan&#x27;s termination and more details, if such are available.
          # Defines an error trace message for a ScanRun.
        &quot;scanConfigError&quot;: { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # If the scan encounters SCAN_CONFIG_ISSUE error, this field has the error
            # message encountered during scan configuration validation that is performed
            # before each scan run.
            # APIs when scan configuration validation fails. It is also reported as part of
            # a ScanRunErrorTrace message if scan validation fails due to a scan
            # configuration error.
          &quot;fieldName&quot;: &quot;A String&quot;, # Indicates the full name of the ScanConfig field that triggers this error,
              # for example &quot;scan_config.max_qps&quot;. This field is provided for
              # troubleshooting purposes only and its actual value can change in the
              # future.
          &quot;code&quot;: &quot;A String&quot;, # Indicates the reason code for a configuration failure.
        },
        &quot;code&quot;: &quot;A String&quot;, # Indicates the error reason code.
        &quot;mostCommonHttpErrorCode&quot;: 42, # If the scan encounters TOO_MANY_HTTP_ERRORS, this field indicates the most
            # common HTTP error code, if such is available. For example, if this code is
            # 404, the scan has encountered too many NOT_FOUND responses.
      },
    },
    &quot;maxQps&quot;: 42, # The maximum QPS during scanning. A valid value ranges from 5 to 20
        # inclusively. If the field is unspecified or its value is set 0, server will
        # default to 15. Other values outside of [5, 20] range will be rejected with
        # INVALID_ARGUMENT error.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanConfig. The name follows the format of
        # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. The ScanConfig IDs are
        # generated by the system.
    &quot;startingUrls&quot;: [ # Required. The starting URLs from which the scanner finds site pages.
      &quot;A String&quot;,
    ],
    &quot;staticIpScan&quot;: True or False, # Whether the scan configuration has enabled static IP address scan feature.
        # If enabled, the scanner will access applications from static IP addresses.
    &quot;targetPlatforms&quot;: [ # Set of Google Cloud platforms targeted by the scan. If empty, APP_ENGINE
        # will be used as a default.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="start">start(name, body=None, x__xgafv=None)</code>
  <pre>Start a ScanRun according to the given ScanConfig.

Args:
  name: string, Required. The resource name of the ScanConfig to be used. The name follows the
format of &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#x27;. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for the `StartScanRun` method.
  }

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

Returns:
  An object of the form:

    { # A ScanRun is a output-only resource representing an actual run of the scan.
      # Next id: 12
    &quot;progressPercent&quot;: 42, # The percentage of total completion ranging from 0 to 100.
        # If the scan is in queue, the value is 0.
        # If the scan is running, the value ranges from 0 to 100.
        # If the scan is finished, the value is 100.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the ScanRun. The name follows the format of
        # &#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#x27;.
        # The ScanRun IDs are generated by the system.
    &quot;executionState&quot;: &quot;A String&quot;, # The execution state of the ScanRun.
    &quot;hasVulnerabilities&quot;: True or False, # Whether the scan run has found any vulnerabilities.
    &quot;startTime&quot;: &quot;A String&quot;, # The time at which the ScanRun started.
    &quot;urlsTestedCount&quot;: &quot;A String&quot;, # The number of URLs tested during this ScanRun. If the scan is in progress,
        # the value represents the number of URLs tested up to now. The number of
        # URLs tested is usually larger than the number URLS crawled because
        # typically a crawled URL is tested with multiple test payloads.
    &quot;resultState&quot;: &quot;A String&quot;, # The result state of the ScanRun. This field is only available after the
        # execution state reaches &quot;FINISHED&quot;.
    &quot;urlsCrawledCount&quot;: &quot;A String&quot;, # The number of URLs crawled during this ScanRun. If the scan is in progress,
        # the value represents the number of URLs crawled up to now.
    &quot;endTime&quot;: &quot;A String&quot;, # The time at which the ScanRun reached termination state - that the ScanRun
        # is either finished or stopped by user.
    &quot;warningTraces&quot;: [ # A list of warnings, if such are encountered during this scan run.
      { # Output only.
          # Defines a warning trace message for ScanRun. Warning traces provide customers
          # with useful information that helps make the scanning process more effective.
        &quot;code&quot;: &quot;A String&quot;, # Indicates the warning code.
      },
    ],
    &quot;errorTrace&quot;: { # Output only. # If result_state is an ERROR, this field provides the primary reason for
        # scan&#x27;s termination and more details, if such are available.
        # Defines an error trace message for a ScanRun.
      &quot;scanConfigError&quot;: { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # If the scan encounters SCAN_CONFIG_ISSUE error, this field has the error
          # message encountered during scan configuration validation that is performed
          # before each scan run.
          # APIs when scan configuration validation fails. It is also reported as part of
          # a ScanRunErrorTrace message if scan validation fails due to a scan
          # configuration error.
        &quot;fieldName&quot;: &quot;A String&quot;, # Indicates the full name of the ScanConfig field that triggers this error,
            # for example &quot;scan_config.max_qps&quot;. This field is provided for
            # troubleshooting purposes only and its actual value can change in the
            # future.
        &quot;code&quot;: &quot;A String&quot;, # Indicates the reason code for a configuration failure.
      },
      &quot;code&quot;: &quot;A String&quot;, # Indicates the error reason code.
      &quot;mostCommonHttpErrorCode&quot;: 42, # If the scan encounters TOO_MANY_HTTP_ERRORS, this field indicates the most
          # common HTTP error code, if such is available. For example, if this code is
          # 404, the scan has encountered too many NOT_FOUND responses.
    },
  }</pre>
</div>

</body></html>