<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, 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, x__xgafv=None, pageSize=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, 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, 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 'projects/{projectId}'. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A ScanConfig resource contains the configurations to launch a scan.
  "maxQps": 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.
  "displayName": "A String", # Required.
      # The user provided display name of the ScanConfig.
  "name": "A String", # The resource name of the ScanConfig. The name follows the format of
      # 'projects/{projectId}/scanConfigs/{scanConfigId}'. The ScanConfig IDs are
      # generated by the system.
  "schedule": { # Scan schedule configuration. # The schedule of the ScanConfig.
    "scheduleTime": "A String", # 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.
    "intervalDurationDays": 42, # Required.
        # The duration of time between executions in days.
  },
  "riskLevel": "A String", # The risk level selected for the scan
  "exportToSecurityCommandCenter": "A String", # Controls export of scan configurations and results to Cloud Security
      # Command Center.
  "targetPlatforms": [ # Set of Cloud Platforms targeted by the scan. If empty, APP_ENGINE will be
      # used as a default.
    "A String",
  ],
  "blacklistPatterns": [ # The blacklist URL patterns as described in
      # https://cloud.google.com/security-scanner/docs/excluded-urls
    "A String",
  ],
  "authentication": { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
      # authentication configuration during scanning.
    "googleAccount": { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
      "username": "A String", # Required.
          # The user name of the Google account.
      "password": "A String", # Input only.
          # Required.
          # The password of the Google account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
    },
    "customAccount": { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
      "username": "A String", # Required.
          # The user name of the custom account.
      "loginUrl": "A String", # Required.
          # The login form URL of the website.
      "password": "A String", # Input only.
          # Required.
          # The password of the custom account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
    },
  },
  "userAgent": "A String", # The user agent used during scanning.
  "startingUrls": [ # Required.
      # The starting URLs from which the scanner finds site pages.
    "A String",
  ],
  "latestRun": { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
      # Next id: 12
    "warningTraces": [ # Output only.
        # 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.
        "code": "A String", # Output only.
            # Indicates the warning code.
      },
    ],
    "name": "A String", # Output only.
        # The resource name of the ScanRun. The name follows the format of
        # 'projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}'.
        # The ScanRun IDs are generated by the system.
    "executionState": "A String", # Output only.
        # The execution state of the ScanRun.
    "urlsTestedCount": "A String", # Output only.
        # 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.
    "progressPercent": 42, # Output only.
        # 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.
    "errorTrace": { # Output only. # Output only.
        # If result_state is an ERROR, this field provides the primary reason for
        # scan's termination and more details, if such are available.
        # Defines an error trace message for a ScanRun.
      "mostCommonHttpErrorCode": 42, # Output only.
          # 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.
      "code": "A String", # Output only.
          # Indicates the error reason code.
      "scanConfigError": { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # Output only.
          # 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.
        "code": "A String", # Output only.
            # Indicates the reason code for a configuration failure.
        "fieldName": "A String", # Output only.
            # Indicates the full name of the ScanConfig field that triggers this error,
            # for example "scan_config.max_qps". This field is provided for
            # troubleshooting purposes only and its actual value can change in the
            # future.
      },
    },
    "resultState": "A String", # Output only.
        # The result state of the ScanRun. This field is only available after the
        # execution state reaches "FINISHED".
    "startTime": "A String", # Output only.
        # The time at which the ScanRun started.
    "endTime": "A String", # Output only.
        # The time at which the ScanRun reached termination state - that the ScanRun
        # is either finished or stopped by user.
    "hasVulnerabilities": True or False, # Output only.
        # Whether the scan run has found any vulnerabilities.
    "urlsCrawledCount": "A String", # Output only.
        # 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.
  },
}

  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.
    "maxQps": 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.
    "displayName": "A String", # Required.
        # The user provided display name of the ScanConfig.
    "name": "A String", # The resource name of the ScanConfig. The name follows the format of
        # 'projects/{projectId}/scanConfigs/{scanConfigId}'. The ScanConfig IDs are
        # generated by the system.
    "schedule": { # Scan schedule configuration. # The schedule of the ScanConfig.
      "scheduleTime": "A String", # 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.
      "intervalDurationDays": 42, # Required.
          # The duration of time between executions in days.
    },
    "riskLevel": "A String", # The risk level selected for the scan
    "exportToSecurityCommandCenter": "A String", # Controls export of scan configurations and results to Cloud Security
        # Command Center.
    "targetPlatforms": [ # Set of Cloud Platforms targeted by the scan. If empty, APP_ENGINE will be
        # used as a default.
      "A String",
    ],
    "blacklistPatterns": [ # The blacklist URL patterns as described in
        # https://cloud.google.com/security-scanner/docs/excluded-urls
      "A String",
    ],
    "authentication": { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
        # authentication configuration during scanning.
      "googleAccount": { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
        "username": "A String", # Required.
            # The user name of the Google account.
        "password": "A String", # Input only.
            # Required.
            # The password of the Google account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
      },
      "customAccount": { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
        "username": "A String", # Required.
            # The user name of the custom account.
        "loginUrl": "A String", # Required.
            # The login form URL of the website.
        "password": "A String", # Input only.
            # Required.
            # The password of the custom account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
      },
    },
    "userAgent": "A String", # The user agent used during scanning.
    "startingUrls": [ # Required.
        # The starting URLs from which the scanner finds site pages.
      "A String",
    ],
    "latestRun": { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
        # Next id: 12
      "warningTraces": [ # Output only.
          # 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.
          "code": "A String", # Output only.
              # Indicates the warning code.
        },
      ],
      "name": "A String", # Output only.
          # The resource name of the ScanRun. The name follows the format of
          # 'projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}'.
          # The ScanRun IDs are generated by the system.
      "executionState": "A String", # Output only.
          # The execution state of the ScanRun.
      "urlsTestedCount": "A String", # Output only.
          # 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.
      "progressPercent": 42, # Output only.
          # 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.
      "errorTrace": { # Output only. # Output only.
          # If result_state is an ERROR, this field provides the primary reason for
          # scan's termination and more details, if such are available.
          # Defines an error trace message for a ScanRun.
        "mostCommonHttpErrorCode": 42, # Output only.
            # 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.
        "code": "A String", # Output only.
            # Indicates the error reason code.
        "scanConfigError": { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # Output only.
            # 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.
          "code": "A String", # Output only.
              # Indicates the reason code for a configuration failure.
          "fieldName": "A String", # Output only.
              # Indicates the full name of the ScanConfig field that triggers this error,
              # for example "scan_config.max_qps". This field is provided for
              # troubleshooting purposes only and its actual value can change in the
              # future.
        },
      },
      "resultState": "A String", # Output only.
          # The result state of the ScanRun. This field is only available after the
          # execution state reaches "FINISHED".
      "startTime": "A String", # Output only.
          # The time at which the ScanRun started.
      "endTime": "A String", # Output only.
          # The time at which the ScanRun reached termination state - that the ScanRun
          # is either finished or stopped by user.
      "hasVulnerabilities": True or False, # Output only.
          # Whether the scan run has found any vulnerabilities.
      "urlsCrawledCount": "A String", # Output only.
          # 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.
    },
  }</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 'projects/{projectId}/scanConfigs/{scanConfigId}'. (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 'projects/{projectId}/scanConfigs/{scanConfigId}'. (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.
    "maxQps": 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.
    "displayName": "A String", # Required.
        # The user provided display name of the ScanConfig.
    "name": "A String", # The resource name of the ScanConfig. The name follows the format of
        # 'projects/{projectId}/scanConfigs/{scanConfigId}'. The ScanConfig IDs are
        # generated by the system.
    "schedule": { # Scan schedule configuration. # The schedule of the ScanConfig.
      "scheduleTime": "A String", # 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.
      "intervalDurationDays": 42, # Required.
          # The duration of time between executions in days.
    },
    "riskLevel": "A String", # The risk level selected for the scan
    "exportToSecurityCommandCenter": "A String", # Controls export of scan configurations and results to Cloud Security
        # Command Center.
    "targetPlatforms": [ # Set of Cloud Platforms targeted by the scan. If empty, APP_ENGINE will be
        # used as a default.
      "A String",
    ],
    "blacklistPatterns": [ # The blacklist URL patterns as described in
        # https://cloud.google.com/security-scanner/docs/excluded-urls
      "A String",
    ],
    "authentication": { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
        # authentication configuration during scanning.
      "googleAccount": { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
        "username": "A String", # Required.
            # The user name of the Google account.
        "password": "A String", # Input only.
            # Required.
            # The password of the Google account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
      },
      "customAccount": { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
        "username": "A String", # Required.
            # The user name of the custom account.
        "loginUrl": "A String", # Required.
            # The login form URL of the website.
        "password": "A String", # Input only.
            # Required.
            # The password of the custom account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
      },
    },
    "userAgent": "A String", # The user agent used during scanning.
    "startingUrls": [ # Required.
        # The starting URLs from which the scanner finds site pages.
      "A String",
    ],
    "latestRun": { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
        # Next id: 12
      "warningTraces": [ # Output only.
          # 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.
          "code": "A String", # Output only.
              # Indicates the warning code.
        },
      ],
      "name": "A String", # Output only.
          # The resource name of the ScanRun. The name follows the format of
          # 'projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}'.
          # The ScanRun IDs are generated by the system.
      "executionState": "A String", # Output only.
          # The execution state of the ScanRun.
      "urlsTestedCount": "A String", # Output only.
          # 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.
      "progressPercent": 42, # Output only.
          # 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.
      "errorTrace": { # Output only. # Output only.
          # If result_state is an ERROR, this field provides the primary reason for
          # scan's termination and more details, if such are available.
          # Defines an error trace message for a ScanRun.
        "mostCommonHttpErrorCode": 42, # Output only.
            # 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.
        "code": "A String", # Output only.
            # Indicates the error reason code.
        "scanConfigError": { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # Output only.
            # 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.
          "code": "A String", # Output only.
              # Indicates the reason code for a configuration failure.
          "fieldName": "A String", # Output only.
              # Indicates the full name of the ScanConfig field that triggers this error,
              # for example "scan_config.max_qps". This field is provided for
              # troubleshooting purposes only and its actual value can change in the
              # future.
        },
      },
      "resultState": "A String", # Output only.
          # The result state of the ScanRun. This field is only available after the
          # execution state reaches "FINISHED".
      "startTime": "A String", # Output only.
          # The time at which the ScanRun started.
      "endTime": "A String", # Output only.
          # The time at which the ScanRun reached termination state - that the ScanRun
          # is either finished or stopped by user.
      "hasVulnerabilities": True or False, # Output only.
          # Whether the scan run has found any vulnerabilities.
      "urlsCrawledCount": "A String", # Output only.
          # 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.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, x__xgafv=None, pageSize=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 'projects/{projectId}'. (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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  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.

Returns:
  An object of the form:

    { # Response for the `ListScanConfigs` method.
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no
        # more results in the list.
    "scanConfigs": [ # The list of ScanConfigs returned.
      { # A ScanConfig resource contains the configurations to launch a scan.
        "maxQps": 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.
        "displayName": "A String", # Required.
            # The user provided display name of the ScanConfig.
        "name": "A String", # The resource name of the ScanConfig. The name follows the format of
            # 'projects/{projectId}/scanConfigs/{scanConfigId}'. The ScanConfig IDs are
            # generated by the system.
        "schedule": { # Scan schedule configuration. # The schedule of the ScanConfig.
          "scheduleTime": "A String", # 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.
          "intervalDurationDays": 42, # Required.
              # The duration of time between executions in days.
        },
        "riskLevel": "A String", # The risk level selected for the scan
        "exportToSecurityCommandCenter": "A String", # Controls export of scan configurations and results to Cloud Security
            # Command Center.
        "targetPlatforms": [ # Set of Cloud Platforms targeted by the scan. If empty, APP_ENGINE will be
            # used as a default.
          "A String",
        ],
        "blacklistPatterns": [ # The blacklist URL patterns as described in
            # https://cloud.google.com/security-scanner/docs/excluded-urls
          "A String",
        ],
        "authentication": { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
            # authentication configuration during scanning.
          "googleAccount": { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
            "username": "A String", # Required.
                # The user name of the Google account.
            "password": "A String", # Input only.
                # Required.
                # The password of the Google account. The credential is stored encrypted
                # and not returned in any response nor included in audit logs.
          },
          "customAccount": { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
            "username": "A String", # Required.
                # The user name of the custom account.
            "loginUrl": "A String", # Required.
                # The login form URL of the website.
            "password": "A String", # Input only.
                # Required.
                # The password of the custom account. The credential is stored encrypted
                # and not returned in any response nor included in audit logs.
          },
        },
        "userAgent": "A String", # The user agent used during scanning.
        "startingUrls": [ # Required.
            # The starting URLs from which the scanner finds site pages.
          "A String",
        ],
        "latestRun": { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
            # Next id: 12
          "warningTraces": [ # Output only.
              # 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.
              "code": "A String", # Output only.
                  # Indicates the warning code.
            },
          ],
          "name": "A String", # Output only.
              # The resource name of the ScanRun. The name follows the format of
              # 'projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}'.
              # The ScanRun IDs are generated by the system.
          "executionState": "A String", # Output only.
              # The execution state of the ScanRun.
          "urlsTestedCount": "A String", # Output only.
              # 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.
          "progressPercent": 42, # Output only.
              # 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.
          "errorTrace": { # Output only. # Output only.
              # If result_state is an ERROR, this field provides the primary reason for
              # scan's termination and more details, if such are available.
              # Defines an error trace message for a ScanRun.
            "mostCommonHttpErrorCode": 42, # Output only.
                # 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.
            "code": "A String", # Output only.
                # Indicates the error reason code.
            "scanConfigError": { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # Output only.
                # 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.
              "code": "A String", # Output only.
                  # Indicates the reason code for a configuration failure.
              "fieldName": "A String", # Output only.
                  # Indicates the full name of the ScanConfig field that triggers this error,
                  # for example "scan_config.max_qps". This field is provided for
                  # troubleshooting purposes only and its actual value can change in the
                  # future.
            },
          },
          "resultState": "A String", # Output only.
              # The result state of the ScanRun. This field is only available after the
              # execution state reaches "FINISHED".
          "startTime": "A String", # Output only.
              # The time at which the ScanRun started.
          "endTime": "A String", # Output only.
              # The time at which the ScanRun reached termination state - that the ScanRun
              # is either finished or stopped by user.
          "hasVulnerabilities": True or False, # Output only.
              # Whether the scan run has found any vulnerabilities.
          "urlsCrawledCount": "A String", # Output only.
              # 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.
        },
      },
    ],
  }</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 'execute()' 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, 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
'projects/{projectId}/scanConfigs/{scanConfigId}'. The ScanConfig IDs are
generated by the system. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A ScanConfig resource contains the configurations to launch a scan.
  "maxQps": 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.
  "displayName": "A String", # Required.
      # The user provided display name of the ScanConfig.
  "name": "A String", # The resource name of the ScanConfig. The name follows the format of
      # 'projects/{projectId}/scanConfigs/{scanConfigId}'. The ScanConfig IDs are
      # generated by the system.
  "schedule": { # Scan schedule configuration. # The schedule of the ScanConfig.
    "scheduleTime": "A String", # 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.
    "intervalDurationDays": 42, # Required.
        # The duration of time between executions in days.
  },
  "riskLevel": "A String", # The risk level selected for the scan
  "exportToSecurityCommandCenter": "A String", # Controls export of scan configurations and results to Cloud Security
      # Command Center.
  "targetPlatforms": [ # Set of Cloud Platforms targeted by the scan. If empty, APP_ENGINE will be
      # used as a default.
    "A String",
  ],
  "blacklistPatterns": [ # The blacklist URL patterns as described in
      # https://cloud.google.com/security-scanner/docs/excluded-urls
    "A String",
  ],
  "authentication": { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
      # authentication configuration during scanning.
    "googleAccount": { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
      "username": "A String", # Required.
          # The user name of the Google account.
      "password": "A String", # Input only.
          # Required.
          # The password of the Google account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
    },
    "customAccount": { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
      "username": "A String", # Required.
          # The user name of the custom account.
      "loginUrl": "A String", # Required.
          # The login form URL of the website.
      "password": "A String", # Input only.
          # Required.
          # The password of the custom account. The credential is stored encrypted
          # and not returned in any response nor included in audit logs.
    },
  },
  "userAgent": "A String", # The user agent used during scanning.
  "startingUrls": [ # Required.
      # The starting URLs from which the scanner finds site pages.
    "A String",
  ],
  "latestRun": { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
      # Next id: 12
    "warningTraces": [ # Output only.
        # 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.
        "code": "A String", # Output only.
            # Indicates the warning code.
      },
    ],
    "name": "A String", # Output only.
        # The resource name of the ScanRun. The name follows the format of
        # 'projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}'.
        # The ScanRun IDs are generated by the system.
    "executionState": "A String", # Output only.
        # The execution state of the ScanRun.
    "urlsTestedCount": "A String", # Output only.
        # 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.
    "progressPercent": 42, # Output only.
        # 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.
    "errorTrace": { # Output only. # Output only.
        # If result_state is an ERROR, this field provides the primary reason for
        # scan's termination and more details, if such are available.
        # Defines an error trace message for a ScanRun.
      "mostCommonHttpErrorCode": 42, # Output only.
          # 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.
      "code": "A String", # Output only.
          # Indicates the error reason code.
      "scanConfigError": { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # Output only.
          # 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.
        "code": "A String", # Output only.
            # Indicates the reason code for a configuration failure.
        "fieldName": "A String", # Output only.
            # Indicates the full name of the ScanConfig field that triggers this error,
            # for example "scan_config.max_qps". This field is provided for
            # troubleshooting purposes only and its actual value can change in the
            # future.
      },
    },
    "resultState": "A String", # Output only.
        # The result state of the ScanRun. This field is only available after the
        # execution state reaches "FINISHED".
    "startTime": "A String", # Output only.
        # The time at which the ScanRun started.
    "endTime": "A String", # Output only.
        # The time at which the ScanRun reached termination state - that the ScanRun
        # is either finished or stopped by user.
    "hasVulnerabilities": True or False, # Output only.
        # Whether the scan run has found any vulnerabilities.
    "urlsCrawledCount": "A String", # Output only.
        # 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.
  },
}

  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.
    "maxQps": 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.
    "displayName": "A String", # Required.
        # The user provided display name of the ScanConfig.
    "name": "A String", # The resource name of the ScanConfig. The name follows the format of
        # 'projects/{projectId}/scanConfigs/{scanConfigId}'. The ScanConfig IDs are
        # generated by the system.
    "schedule": { # Scan schedule configuration. # The schedule of the ScanConfig.
      "scheduleTime": "A String", # 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.
      "intervalDurationDays": 42, # Required.
          # The duration of time between executions in days.
    },
    "riskLevel": "A String", # The risk level selected for the scan
    "exportToSecurityCommandCenter": "A String", # Controls export of scan configurations and results to Cloud Security
        # Command Center.
    "targetPlatforms": [ # Set of Cloud Platforms targeted by the scan. If empty, APP_ENGINE will be
        # used as a default.
      "A String",
    ],
    "blacklistPatterns": [ # The blacklist URL patterns as described in
        # https://cloud.google.com/security-scanner/docs/excluded-urls
      "A String",
    ],
    "authentication": { # Scan authentication configuration. # The authentication configuration. If specified, service will use the
        # authentication configuration during scanning.
      "googleAccount": { # Describes authentication configuration that uses a Google account. # Authentication using a Google account.
        "username": "A String", # Required.
            # The user name of the Google account.
        "password": "A String", # Input only.
            # Required.
            # The password of the Google account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
      },
      "customAccount": { # Describes authentication configuration that uses a custom account. # Authentication using a custom account.
        "username": "A String", # Required.
            # The user name of the custom account.
        "loginUrl": "A String", # Required.
            # The login form URL of the website.
        "password": "A String", # Input only.
            # Required.
            # The password of the custom account. The credential is stored encrypted
            # and not returned in any response nor included in audit logs.
      },
    },
    "userAgent": "A String", # The user agent used during scanning.
    "startingUrls": [ # Required.
        # The starting URLs from which the scanner finds site pages.
      "A String",
    ],
    "latestRun": { # A ScanRun is a output-only resource representing an actual run of the scan. # Latest ScanRun if available.
        # Next id: 12
      "warningTraces": [ # Output only.
          # 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.
          "code": "A String", # Output only.
              # Indicates the warning code.
        },
      ],
      "name": "A String", # Output only.
          # The resource name of the ScanRun. The name follows the format of
          # 'projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}'.
          # The ScanRun IDs are generated by the system.
      "executionState": "A String", # Output only.
          # The execution state of the ScanRun.
      "urlsTestedCount": "A String", # Output only.
          # 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.
      "progressPercent": 42, # Output only.
          # 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.
      "errorTrace": { # Output only. # Output only.
          # If result_state is an ERROR, this field provides the primary reason for
          # scan's termination and more details, if such are available.
          # Defines an error trace message for a ScanRun.
        "mostCommonHttpErrorCode": 42, # Output only.
            # 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.
        "code": "A String", # Output only.
            # Indicates the error reason code.
        "scanConfigError": { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # Output only.
            # 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.
          "code": "A String", # Output only.
              # Indicates the reason code for a configuration failure.
          "fieldName": "A String", # Output only.
              # Indicates the full name of the ScanConfig field that triggers this error,
              # for example "scan_config.max_qps". This field is provided for
              # troubleshooting purposes only and its actual value can change in the
              # future.
        },
      },
      "resultState": "A String", # Output only.
          # The result state of the ScanRun. This field is only available after the
          # execution state reaches "FINISHED".
      "startTime": "A String", # Output only.
          # The time at which the ScanRun started.
      "endTime": "A String", # Output only.
          # The time at which the ScanRun reached termination state - that the ScanRun
          # is either finished or stopped by user.
      "hasVulnerabilities": True or False, # Output only.
          # Whether the scan run has found any vulnerabilities.
      "urlsCrawledCount": "A String", # Output only.
          # 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.
    },
  }</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 'projects/{projectId}/scanConfigs/{scanConfigId}'. (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
    "warningTraces": [ # Output only.
        # 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.
        "code": "A String", # Output only.
            # Indicates the warning code.
      },
    ],
    "name": "A String", # Output only.
        # The resource name of the ScanRun. The name follows the format of
        # 'projects/{projectId}/scanConfigs/{scanConfigId}/scanRuns/{scanRunId}'.
        # The ScanRun IDs are generated by the system.
    "executionState": "A String", # Output only.
        # The execution state of the ScanRun.
    "urlsTestedCount": "A String", # Output only.
        # 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.
    "progressPercent": 42, # Output only.
        # 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.
    "errorTrace": { # Output only. # Output only.
        # If result_state is an ERROR, this field provides the primary reason for
        # scan's termination and more details, if such are available.
        # Defines an error trace message for a ScanRun.
      "mostCommonHttpErrorCode": 42, # Output only.
          # 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.
      "code": "A String", # Output only.
          # Indicates the error reason code.
      "scanConfigError": { # Defines a custom error message used by CreateScanConfig and UpdateScanConfig # Output only.
          # 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.
        "code": "A String", # Output only.
            # Indicates the reason code for a configuration failure.
        "fieldName": "A String", # Output only.
            # Indicates the full name of the ScanConfig field that triggers this error,
            # for example "scan_config.max_qps". This field is provided for
            # troubleshooting purposes only and its actual value can change in the
            # future.
      },
    },
    "resultState": "A String", # Output only.
        # The result state of the ScanRun. This field is only available after the
        # execution state reaches "FINISHED".
    "startTime": "A String", # Output only.
        # The time at which the ScanRun started.
    "endTime": "A String", # Output only.
        # The time at which the ScanRun reached termination state - that the ScanRun
        # is either finished or stopped by user.
    "hasVulnerabilities": True or False, # Output only.
        # Whether the scan run has found any vulnerabilities.
    "urlsCrawledCount": "A String", # Output only.
        # 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.
  }</pre>
</div>

</body></html>