<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> . <a href="websecurityscanner_v1beta.projects.scanConfigs.scanRuns.html">scanRuns</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="websecurityscanner_v1beta.projects.scanConfigs.scanRuns.crawledUrls.html">crawledUrls()</a></code>
</p>
<p class="firstline">Returns the crawledUrls Resource.</p>

<p class="toc_element">
  <code><a href="websecurityscanner_v1beta.projects.scanConfigs.scanRuns.findingTypeStats.html">findingTypeStats()</a></code>
</p>
<p class="firstline">Returns the findingTypeStats Resource.</p>

<p class="toc_element">
  <code><a href="websecurityscanner_v1beta.projects.scanConfigs.scanRuns.findings.html">findings()</a></code>
</p>
<p class="firstline">Returns the findings Resource.</p>

<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a ScanRun.</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 ScanRuns under a given ScanConfig, in descending order of ScanRun</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="#stop">stop(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Stops a ScanRun. The stopped ScanRun is returned.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a ScanRun.

Args:
  name: string, Required. The resource name of the ScanRun to be returned. The name follows the
format of
&#x27;projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}&#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 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>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists ScanRuns under a given ScanConfig, in descending order of ScanRun
stop time.

Args:
  parent: string, Required. The parent resource name, which should be a scan resource name in the
format &#x27;projects/{projectId}/scanConfigs/{scanConfigId}&#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 ScanRuns 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 `ListScanRuns` method.
    &quot;scanRuns&quot;: [ # The list of ScanRuns returned.
      { # 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.
        },
      },
    ],
    &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.
  }</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="stop">stop(name, body=None, x__xgafv=None)</code>
  <pre>Stops a ScanRun. The stopped ScanRun is returned.

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

{ # Request for the `StopScanRun` 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>