<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="serviceusage_v1beta1.html">Service Usage API</a> . <a href="serviceusage_v1beta1.services.html">services</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="serviceusage_v1beta1.services.consumerQuotaMetrics.html">consumerQuotaMetrics()</a></code>
</p>
<p class="firstline">Returns the consumerQuotaMetrics Resource.</p>

<p class="toc_element">
  <code><a href="#batchEnable">batchEnable(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Enable multiple services on a project. The operation is atomic: if enabling any service fails, then the entire batch fails, and no state changes occur. Operation</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#disable">disable(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Disable a service so that it can no longer be used with a project. This prevents unintended usage that may cause unexpected billing charges or security leaks. It is not valid to call the disable method on a service that is not currently enabled. Callers will receive a `FAILED_PRECONDITION` status if the target service is not currently enabled. Operation</p>
<p class="toc_element">
  <code><a href="#enable">enable(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Enable a service so that it can be used with a project. Operation</p>
<p class="toc_element">
  <code><a href="#generateServiceIdentity">generateServiceIdentity(parent, x__xgafv=None)</a></code></p>
<p class="firstline">Generate service identity for service.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the service configuration and enabled state for a given service.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all services available to the specified project, and the current state of those services with respect to the project. The list includes all public services, all services for which the calling user has the `servicemanagement.services.bind` permission, and all services that have already been enabled on the project. The list can be filtered to only include services in a specific state, for example to only include services enabled on the 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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchEnable">batchEnable(parent, body=None, x__xgafv=None)</code>
  <pre>Enable multiple services on a project. The operation is atomic: if enabling any service fails, then the entire batch fails, and no state changes occur. Operation

Args:
  parent: string, Parent to enable services on. An example name would be: `projects/123` where `123` is the project number (not project ID). The `BatchEnableServices` method currently only supports projects. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for the `BatchEnableServices` method.
    &quot;serviceIds&quot;: [ # The identifiers of the services to enable on the project. A valid identifier would be: serviceusage.googleapis.com Enabling services requires that each service is public or is shared with the user enabling the service. Two or more services must be specified. To enable a single service, use the `EnableService` method instead. A single request can enable a maximum of 20 services at a time. If more than 20 services are specified, the request will fail, and no state changes will occur.
      &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:

    { # This resource represents a long-running operation that is the result of a network API call.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
      &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    },
  }</pre>
</div>

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

<div class="method">
    <code class="details" id="disable">disable(name, body=None, x__xgafv=None)</code>
  <pre>Disable a service so that it can no longer be used with a project. This prevents unintended usage that may cause unexpected billing charges or security leaks. It is not valid to call the disable method on a service that is not currently enabled. Callers will receive a `FAILED_PRECONDITION` status if the target service is not currently enabled. Operation

Args:
  name: string, Name of the consumer and service to disable the service on. The enable and disable methods currently only support projects. An example name would be: `projects/123/services/serviceusage.googleapis.com` where `123` is the project number (not project ID). (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for the `DisableService` method.
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
      &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="enable">enable(name, body=None, x__xgafv=None)</code>
  <pre>Enable a service so that it can be used with a project. Operation

Args:
  name: string, Name of the consumer and service to enable the service on. The `EnableService` and `DisableService` methods currently only support projects. Enabling a service requires that the service is public or is shared with the user enabling the service. An example name would be: `projects/123/services/serviceusage.googleapis.com` where `123` is the project number (not project ID). (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for the `EnableService` method.
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
      &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="generateServiceIdentity">generateServiceIdentity(parent, x__xgafv=None)</code>
  <pre>Generate service identity for service.

Args:
  parent: string, Name of the consumer and service to generate an identity for. The `GenerateServiceIdentity` methods currently only support projects. An example name would be: `projects/123/services/example.googleapis.com` where `123` is the project number. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
    &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
      &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Returns the service configuration and enabled state for a given service.

Args:
  name: string, Name of the consumer and service to get the `ConsumerState` for. An example name would be: `projects/123/services/serviceusage.googleapis.com` where `123` is the project number (not project ID). (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A service that is available for use by the consumer.
    &quot;parent&quot;: &quot;A String&quot;, # The resource name of the consumer. A valid name would be: - projects/123
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the consumer and service. A valid name would be: - projects/123/services/serviceusage.googleapis.com
    &quot;config&quot;: { # The configuration of the service. # The service configuration of the available service. Some fields may be filtered out of the configuration in responses to the `ListServices` method. These fields are present only in responses to the `GetService` method.
      &quot;quota&quot;: { # Quota configuration helps to achieve fairness and budgeting in service usage. The metric based quota configuration works this way: - The service configuration defines a set of metrics. - For API calls, the quota.metric_rules maps methods to metrics with corresponding costs. - The quota.limits defines limits on the metrics, which will be used for quota checks at runtime. An example quota configuration in yaml format: quota: limits: - name: apiWriteQpsPerProject metric: library.googleapis.com/write_calls unit: &quot;1/min/{project}&quot; # rate limit for consumer projects values: STANDARD: 10000 # The metric rules bind all methods to the read_calls metric, # except for the UpdateBook and DeleteBook methods. These two methods # are mapped to the write_calls metric, with the UpdateBook method # consuming at twice rate as the DeleteBook method. metric_rules: - selector: &quot;*&quot; metric_costs: library.googleapis.com/read_calls: 1 - selector: google.example.library.v1.LibraryService.UpdateBook metric_costs: library.googleapis.com/write_calls: 2 - selector: google.example.library.v1.LibraryService.DeleteBook metric_costs: library.googleapis.com/write_calls: 1 Corresponding Metric definition: metrics: - name: library.googleapis.com/read_calls display_name: Read requests metric_kind: DELTA value_type: INT64 - name: library.googleapis.com/write_calls display_name: Write requests metric_kind: DELTA value_type: INT64 # Quota configuration.
        &quot;limits&quot;: [ # List of `QuotaLimit` definitions for the service.
          { # `QuotaLimit` defines a specific limit that applies over a specified duration for a limit type. There can be at most one limit for a duration and limit type combination defined within a `QuotaGroup`.
            &quot;displayName&quot;: &quot;A String&quot;, # User-visible display name for this limit. Optional. If not set, the UI will provide a default display name based on the quota configuration. This field can be used to override the default display name generated from the configuration.
            &quot;defaultLimit&quot;: &quot;A String&quot;, # Default number of tokens that can be consumed during the specified duration. This is the number of tokens assigned when a client application developer activates the service for his/her project. Specifying a value of 0 will block all requests. This can be used if you are provisioning quota to selected consumers and blocking others. Similarly, a value of -1 will indicate an unlimited quota. No other negative values are allowed. Used by group-based quotas only.
            &quot;unit&quot;: &quot;A String&quot;, # Specify the unit of the quota limit. It uses the same syntax as Metric.unit. The supported unit kinds are determined by the quota backend system. Here are some examples: * &quot;1/min/{project}&quot; for quota per minute per project. Note: the order of unit components is insignificant. The &quot;1&quot; at the beginning is required to follow the metric unit syntax.
            &quot;metric&quot;: &quot;A String&quot;, # The name of the metric this quota limit applies to. The quota limits with the same metric will be checked together during runtime. The metric must be defined within the service config.
            &quot;values&quot;: { # Tiered limit values. You must specify this as a key:value pair, with an integer value that is the maximum number of requests allowed for the specified unit. Currently only STANDARD is supported.
              &quot;a_key&quot;: &quot;A String&quot;,
            },
            &quot;name&quot;: &quot;A String&quot;, # Name of the quota limit. The name must be provided, and it must be unique within the service. The name can only include alphanumeric characters as well as &#x27;-&#x27;. The maximum length of the limit name is 64 characters.
            &quot;maxLimit&quot;: &quot;A String&quot;, # Maximum number of tokens that can be consumed during the specified duration. Client application developers can override the default limit up to this maximum. If specified, this value cannot be set to a value less than the default limit. If not specified, it is set to the default limit. To allow clients to apply overrides with no upper bound, set this to -1, indicating unlimited maximum quota. Used by group-based quotas only.
            &quot;duration&quot;: &quot;A String&quot;, # Duration of this limit in textual notation. Must be &quot;100s&quot; or &quot;1d&quot;. Used by group-based quotas only.
            &quot;description&quot;: &quot;A String&quot;, # Optional. User-visible, extended description for this quota limit. Should be used only when more context is needed to understand this limit than provided by the limit&#x27;s display name (see: `display_name`).
            &quot;freeTier&quot;: &quot;A String&quot;, # Free tier value displayed in the Developers Console for this limit. The free tier is the number of tokens that will be subtracted from the billed amount when billing is enabled. This field can only be set on a limit with duration &quot;1d&quot;, in a billable group; it is invalid on any other limit. If this field is not set, it defaults to 0, indicating that there is no free tier for this service. Used by group-based quotas only.
          },
        ],
        &quot;metricRules&quot;: [ # List of `MetricRule` definitions, each one mapping a selected method to one or more metrics.
          { # Bind API methods to metrics. Binding a method to a metric causes that metric&#x27;s configured quota behaviors to apply to the method call.
            &quot;metricCosts&quot;: { # Metrics to update when the selected methods are called, and the associated cost applied to each metric. The key of the map is the metric name, and the values are the amount increased for the metric against which the quota limits are defined. The value must not be negative.
              &quot;a_key&quot;: &quot;A String&quot;,
            },
            &quot;selector&quot;: &quot;A String&quot;, # Selects the methods to which this rule applies. Refer to selector for syntax details.
          },
        ],
      },
      &quot;monitoring&quot;: { # Monitoring configuration of the service. The example below shows how to configure monitored resources and metrics for monitoring. In the example, a monitored resource and two metrics are defined. The `library.googleapis.com/book/returned_count` metric is sent to both producer and consumer projects, whereas the `library.googleapis.com/book/num_overdue` metric is only sent to the consumer project. monitored_resources: - type: library.googleapis.com/Branch display_name: &quot;Library Branch&quot; description: &quot;A branch of a library.&quot; launch_stage: GA labels: - key: resource_container description: &quot;The Cloud container (ie. project id) for the Branch.&quot; - key: location description: &quot;The location of the library branch.&quot; - key: branch_id description: &quot;The id of the branch.&quot; metrics: - name: library.googleapis.com/book/returned_count display_name: &quot;Books Returned&quot; description: &quot;The count of books that have been returned.&quot; launch_stage: GA metric_kind: DELTA value_type: INT64 unit: &quot;1&quot; labels: - key: customer_id description: &quot;The id of the customer.&quot; - name: library.googleapis.com/book/num_overdue display_name: &quot;Books Overdue&quot; description: &quot;The current number of overdue books.&quot; launch_stage: GA metric_kind: GAUGE value_type: INT64 unit: &quot;1&quot; labels: - key: customer_id description: &quot;The id of the customer.&quot; monitoring: producer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count consumer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count - library.googleapis.com/book/num_overdue # Monitoring configuration. This should not include the &#x27;producer_destinations&#x27; field.
        &quot;producerDestinations&quot;: [ # Monitoring configurations for sending metrics to the producer project. There can be multiple producer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration.
          { # Configuration of a specific monitoring destination (the producer project or the consumer project).
            &quot;metrics&quot;: [ # Types of the metrics to report to this monitoring destination. Each type must be defined in Service.metrics section.
              &quot;A String&quot;,
            ],
            &quot;monitoredResource&quot;: &quot;A String&quot;, # The monitored resource type. The type must be defined in Service.monitored_resources section.
          },
        ],
        &quot;consumerDestinations&quot;: [ # Monitoring configurations for sending metrics to the consumer project. There can be multiple consumer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration.
          { # Configuration of a specific monitoring destination (the producer project or the consumer project).
            &quot;metrics&quot;: [ # Types of the metrics to report to this monitoring destination. Each type must be defined in Service.metrics section.
              &quot;A String&quot;,
            ],
            &quot;monitoredResource&quot;: &quot;A String&quot;, # The monitored resource type. The type must be defined in Service.monitored_resources section.
          },
        ],
      },
      &quot;usage&quot;: { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
        &quot;producerNotificationChannel&quot;: &quot;A String&quot;, # The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.
        &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;.
          &quot;A String&quot;,
        ],
        &quot;rules&quot;: [ # A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
          { # Usage configuration rules for the service. NOTE: Under development. Use this rule to configure unregistered calls for the service. Unregistered calls are calls that do not contain consumer project identity. (Example: calls that do not contain an API key). By default, API methods do not allow unregistered calls, and each method call must be identified by a consumer project identity. Use this rule to allow/disallow unregistered calls. Example of an API that wants to allow unregistered calls for entire service. usage: rules: - selector: &quot;*&quot; allow_unregistered_calls: true Example of a method that wants to allow unregistered calls. usage: rules: - selector: &quot;google.example.library.v1.LibraryService.CreateBook&quot; allow_unregistered_calls: true
            &quot;allowUnregisteredCalls&quot;: True or False, # If true, the selected method allows unregistered calls, e.g. calls that don&#x27;t identify any user or application.
            &quot;skipServiceControl&quot;: True or False, # If true, the selected method should skip service control and the control plane features, such as quota and billing, will not be available. This flag is used by Google Cloud Endpoints to bypass checks for internal methods, such as service health check methods.
            &quot;selector&quot;: &quot;A String&quot;, # Selects the methods to which this rule applies. Use &#x27;*&#x27; to indicate all methods in all APIs. Refer to selector for syntax details.
          },
        ],
      },
      &quot;endpoints&quot;: [ # Configuration for network endpoints. Contains only the names and aliases of the endpoints.
        { # `Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
          &quot;name&quot;: &quot;A String&quot;, # The canonical name of this endpoint.
          &quot;target&quot;: &quot;A String&quot;, # The specification of an Internet routable address of API frontend that will handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary). It should be either a valid IPv4 address or a fully-qualified domain name. For example, &quot;8.8.8.8&quot; or &quot;myservice.appspot.com&quot;.
          &quot;allowCors&quot;: True or False, # Allowing [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka cross-domain traffic, would allow the backends served from this endpoint to receive and respond to HTTP OPTIONS requests. The response will be used by the browser to determine whether the subsequent cross-origin request is allowed to proceed.
          &quot;aliases&quot;: [ # DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.
            &quot;A String&quot;,
          ],
        },
      ],
      &quot;title&quot;: &quot;A String&quot;, # The product title for this service.
      &quot;authentication&quot;: { # `Authentication` defines the authentication configuration for an API. Example for an API targeted for external use: name: calendar.googleapis.com authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth # Auth configuration. Contains only the OAuth rules.
        &quot;providers&quot;: [ # Defines a set of authentication providers that a service supports.
          { # Configuration for an authentication provider, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
            &quot;jwksUri&quot;: &quot;A String&quot;, # URL of the provider&#x27;s public key set to validate signature of the JWT. See [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). Optional if the key set document: - can be retrieved from [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) of the issuer. - can be inferred from the email domain of the issuer (e.g. a Google service account). Example: https://www.googleapis.com/oauth2/v1/certs
            &quot;issuer&quot;: &quot;A String&quot;, # Identifies the principal that issued the JWT. See https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1 Usually a URL or an email address. Example: https://securetoken.google.com Example: 1234567-compute@developer.gserviceaccount.com
            &quot;audiences&quot;: &quot;A String&quot;, # The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, JWTs with audiences: - &quot;https://[service.name]/[google.protobuf.Api.name]&quot; - &quot;https://[service.name]/&quot; will be accepted. For example, if no audiences are in the setting, LibraryService API will accept JWTs with the following audiences: - https://library-example.googleapis.com/google.example.library.v1.LibraryService - https://library-example.googleapis.com/ Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
            &quot;authorizationUrl&quot;: &quot;A String&quot;, # Redirect URL if JWT token is required but not present or is expired. Implement authorizationUrl of securityDefinitions in OpenAPI spec.
            &quot;jwtLocations&quot;: [ # Defines the locations to extract the JWT. JWT locations can be either from HTTP headers or URL query parameters. The rule is that the first match wins. The checking order is: checking all headers first, then URL query parameters. If not specified, default to use following 3 locations: 1) Authorization: Bearer 2) x-goog-iap-jwt-assertion 3) access_token query parameter Default locations can be specified as followings: jwt_locations: - header: Authorization value_prefix: &quot;Bearer &quot; - header: x-goog-iap-jwt-assertion - query: access_token
              { # Specifies a location to extract JWT from an API request.
                &quot;header&quot;: &quot;A String&quot;, # Specifies HTTP header name to extract JWT token.
                &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix{token}&quot; Only applies to &quot;in&quot; header type. Must be empty for &quot;in&quot; query type. If not empty, the header value has to match (case sensitive) this prefix. If not matched, JWT will not be extracted. If matched, JWT will be extracted after the prefix is removed. For example, for &quot;Authorization: Bearer {JWT}&quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
                &quot;query&quot;: &quot;A String&quot;, # Specifies URL query parameter name to extract JWT token.
              },
            ],
            &quot;id&quot;: &quot;A String&quot;, # The unique identifier of the auth provider. It will be referred to by `AuthRequirement.provider_id`. Example: &quot;bookstore_auth&quot;.
          },
        ],
        &quot;rules&quot;: [ # A list of authentication rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
          { # Authentication rules for the service. By default, if a method has any authentication requirements, every request must include a valid credential matching one of the requirements. It&#x27;s an error to include more than one kind of credential in a single request. If a method doesn&#x27;t have any auth requirements, request credentials will be ignored.
            &quot;selector&quot;: &quot;A String&quot;, # Selects the methods to which this rule applies. Refer to selector for syntax details.
            &quot;oauth&quot;: { # OAuth scopes are a way to define data and permissions on data. For example, there are scopes defined for &quot;Read-only access to Google Calendar&quot; and &quot;Access to Cloud Platform&quot;. Users can consent to a scope for an application, giving it permission to access that data on their behalf. OAuth scope specifications should be fairly coarse grained; a user will need to see and understand the text description of what your scope means. In most cases: use one or at most two OAuth scopes for an entire family of products. If your product has multiple APIs, you should probably be sharing the OAuth scope across all of those APIs. When you need finer grained OAuth consent screens: talk with your product management about how developers will use them in practice. Please note that even though each of the canonical scopes is enough for a request to be accepted and passed to the backend, a request can still fail due to the backend requiring additional scopes or permissions. # The requirements for OAuth credentials.
              &quot;canonicalScopes&quot;: &quot;A String&quot;, # The list of publicly documented OAuth scopes that are allowed access. An OAuth token containing any of these scopes will be accepted. Example: canonical_scopes: https://www.googleapis.com/auth/calendar, https://www.googleapis.com/auth/calendar.read
            },
            &quot;allowWithoutCredential&quot;: True or False, # If true, the service accepts API keys without any other credential. This flag only applies to HTTP and gRPC requests.
            &quot;requirements&quot;: [ # Requirements for additional authentication providers.
              { # User-defined authentication requirements, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
                &quot;audiences&quot;: &quot;A String&quot;, # NOTE: This will be deprecated soon, once AuthProvider.audiences is implemented and accepted in all the runtime components. The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, only JWTs with audience &quot;https://Service_name/API_name&quot; will be accepted. For example, if no audiences are in the setting, LibraryService API will only accept JWTs with the following audience &quot;https://library-example.googleapis.com/google.example.library.v1.LibraryService&quot;. Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
                &quot;providerId&quot;: &quot;A String&quot;, # id from authentication provider. Example: provider_id: bookstore_auth
              },
            ],
          },
        ],
      },
      &quot;documentation&quot;: { # `Documentation` provides the information for describing a service. Example: documentation: summary: &gt; The Google Calendar API gives access to most calendar features. pages: - name: Overview content: (== include google/foo/overview.md ==) - name: Tutorial content: (== include google/foo/tutorial.md ==) subpages; - name: Java content: (== include google/foo/tutorial_java.md ==) rules: - selector: google.calendar.Calendar.Get description: &gt; ... - selector: google.calendar.Calendar.Put description: &gt; ... Documentation is provided in markdown syntax. In addition to standard markdown features, definition lists, tables and fenced code blocks are supported. Section headers can be provided and are interpreted relative to the section nesting of the context where a documentation fragment is embedded. Documentation from the IDL is merged with documentation defined via the config at normalization time, where documentation provided by config rules overrides IDL provided. A number of constructs specific to the API platform are supported in documentation text. In order to reference a proto element, the following notation can be used: [fully.qualified.proto.name][] To override the display text used for the link, this can be used: [display text][fully.qualified.proto.name] Text can be excluded from doc using the following notation: (-- internal comment --) A few directives are available in documentation. Note that directives must appear on a single line to be properly identified. The `include` directive includes a markdown file from an external source: (== include path/to/file ==) The `resource_for` directive marks a message to be the resource of a collection in REST view. If it is not specified, tools attempt to infer the resource from the operations in a collection: (== resource_for v1.shelves.books ==) The directive `suppress_warning` does not directly affect documentation and is documented together with service config validation. # Additional API documentation. Contains only the summary and the documentation URL.
        &quot;overview&quot;: &quot;A String&quot;, # Declares a single overview page. For example: documentation: summary: ... overview: (== include overview.md ==) This is a shortcut for the following declaration (using pages style): documentation: summary: ... pages: - name: Overview content: (== include overview.md ==) Note: you cannot specify both `overview` field and `pages` field.
        &quot;documentationRootUrl&quot;: &quot;A String&quot;, # The URL to the root of documentation.
        &quot;rules&quot;: [ # A list of documentation rules that apply to individual API elements. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
          { # A documentation rule provides information about individual API elements.
            &quot;selector&quot;: &quot;A String&quot;, # The selector is a comma-separated list of patterns. Each pattern is a qualified name of the element which may end in &quot;*&quot;, indicating a wildcard. Wildcards are only allowed at the end and for a whole component of the qualified name, i.e. &quot;foo.*&quot; is ok, but not &quot;foo.b*&quot; or &quot;foo.*.bar&quot;. A wildcard will match one or more components. To specify a default for all applicable elements, the whole pattern &quot;*&quot; is used.
            &quot;deprecationDescription&quot;: &quot;A String&quot;, # Deprecation description of the selected element(s). It can be provided if an element is marked as `deprecated`.
            &quot;description&quot;: &quot;A String&quot;, # Description of the selected API(s).
          },
        ],
        &quot;pages&quot;: [ # The top level pages for the documentation set.
          { # Represents a documentation page. A page can contain subpages to represent nested documentation set structure.
            &quot;name&quot;: &quot;A String&quot;, # The name of the page. It will be used as an identity of the page to generate URI of the page, text of the link to this page in navigation, etc. The full page name (start from the root page name to this page concatenated with `.`) can be used as reference to the page in your documentation. For example: pages: - name: Tutorial content: (== include tutorial.md ==) subpages: - name: Java content: (== include tutorial_java.md ==) You can reference `Java` page using Markdown reference link syntax: `Java`.
            &quot;content&quot;: &quot;A String&quot;, # The Markdown content of the page. You can use (== include {path} ==) to include content from a Markdown file.
            &quot;subpages&quot;: [ # Subpages of this page. The order of subpages specified here will be honored in the generated docset.
              # Object with schema name: Page
            ],
          },
        ],
        &quot;summary&quot;: &quot;A String&quot;, # A short summary of what the service does. Can only be provided by plain text.
        &quot;serviceRootUrl&quot;: &quot;A String&quot;, # Specifies the service root url if the default one (the service name from the yaml file) is not suitable. This can be seen in any fully specified service urls as well as sections that show a base that other urls are relative to.
      },
      &quot;monitoredResources&quot;: [ # Defines the monitored resources used by this service. This is required by the Service.monitoring and Service.logging configurations.
        { # An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of `&quot;gce_instance&quot;` and specifies the use of the labels `&quot;instance_id&quot;` and `&quot;zone&quot;` to identify particular VM instances. Different APIs can support different monitored resource types. APIs generally provide a `list` method that returns the monitored resource descriptors used by the API.
          &quot;type&quot;: &quot;A String&quot;, # Required. The monitored resource type. For example, the type `&quot;cloudsql_database&quot;` represents databases in Google Cloud SQL.
          &quot;labels&quot;: [ # Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels `&quot;database_id&quot;` and `&quot;zone&quot;`.
            { # A description of a label.
              &quot;key&quot;: &quot;A String&quot;, # The label key.
              &quot;valueType&quot;: &quot;A String&quot;, # The type of data that can be assigned to the label.
              &quot;description&quot;: &quot;A String&quot;, # A human-readable description for the label.
            },
          ],
          &quot;description&quot;: &quot;A String&quot;, # Optional. A detailed description of the monitored resource type that might be used in documentation.
          &quot;launchStage&quot;: &quot;A String&quot;, # Optional. The launch stage of the monitored resource definition.
          &quot;displayName&quot;: &quot;A String&quot;, # Optional. A concise name for the monitored resource type that might be displayed in user interfaces. It should be a Title Cased Noun Phrase, without any article or other determiners. For example, `&quot;Google Cloud SQL Database&quot;`.
          &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name of the monitored resource descriptor: `&quot;projects/{project_id}/monitoredResourceDescriptors/{type}&quot;` where {type} is the value of the `type` field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format `&quot;monitoredResourceDescriptors/{type}&quot;`.
        },
      ],
      &quot;apis&quot;: [ # A list of API interfaces exported by this service. Contains only the names, versions, and method names of the interfaces.
        { # Api is a light-weight descriptor for an API Interface. Interfaces are also described as &quot;protocol buffer services&quot; in some contexts, such as by the &quot;service&quot; keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as &quot;APIs&quot; in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.
          &quot;methods&quot;: [ # The methods of this interface, in unspecified order.
            { # Method represents a method of an API interface.
              &quot;options&quot;: [ # Any metadata attached to the method.
                { # A protocol buffer option, which can be attached to a message, field, enumeration, etc.
                  &quot;name&quot;: &quot;A String&quot;, # The option&#x27;s name. For protobuf built-in options (options defined in descriptor.proto), this is the short name. For example, `&quot;map_entry&quot;`. For custom options, it should be the fully-qualified name. For example, `&quot;google.api.http&quot;`.
                  &quot;value&quot;: { # The option&#x27;s value packed in an Any message. If the value is a primitive, the corresponding wrapper type defined in google/protobuf/wrappers.proto should be used. If the value is an enum, it should be stored as an int32 value using the google.protobuf.Int32Value type.
                    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
                  },
                },
              ],
              &quot;syntax&quot;: &quot;A String&quot;, # The source syntax of this method.
              &quot;requestTypeUrl&quot;: &quot;A String&quot;, # A URL of the input message type.
              &quot;responseStreaming&quot;: True or False, # If true, the response is streamed.
              &quot;name&quot;: &quot;A String&quot;, # The simple name of this method.
              &quot;requestStreaming&quot;: True or False, # If true, the request is streamed.
              &quot;responseTypeUrl&quot;: &quot;A String&quot;, # The URL of the output message type.
            },
          ],
          &quot;syntax&quot;: &quot;A String&quot;, # The source syntax of the service.
          &quot;sourceContext&quot;: { # `SourceContext` represents information about the source of a protobuf element, like the file in which it is defined. # Source context for the protocol buffer service represented by this message.
            &quot;fileName&quot;: &quot;A String&quot;, # The path-qualified name of the .proto file that contained the associated protobuf element. For example: `&quot;google/protobuf/source_context.proto&quot;`.
          },
          &quot;name&quot;: &quot;A String&quot;, # The fully qualified name of this interface, including package name followed by the interface&#x27;s simple name.
          &quot;options&quot;: [ # Any metadata attached to the interface.
            { # A protocol buffer option, which can be attached to a message, field, enumeration, etc.
              &quot;name&quot;: &quot;A String&quot;, # The option&#x27;s name. For protobuf built-in options (options defined in descriptor.proto), this is the short name. For example, `&quot;map_entry&quot;`. For custom options, it should be the fully-qualified name. For example, `&quot;google.api.http&quot;`.
              &quot;value&quot;: { # The option&#x27;s value packed in an Any message. If the value is a primitive, the corresponding wrapper type defined in google/protobuf/wrappers.proto should be used. If the value is an enum, it should be stored as an int32 value using the google.protobuf.Int32Value type.
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
            },
          ],
          &quot;version&quot;: &quot;A String&quot;, # A version string for this interface. If specified, must have the form `major-version.minor-version`, as in `1.10`. If the minor version is omitted, it defaults to zero. If the entire version field is empty, the major version is derived from the package name, as outlined below. If the field is not empty, the version in the package name will be verified to be consistent with what is provided here. The versioning schema uses [semantic versioning](http://semver.org) where the major version number indicates a breaking change and the minor version an additive, non-breaking change. Both version numbers are signals to users what to expect from different versions, and should be carefully chosen based on the product plan. The major version is also reflected in the package name of the interface, which must end in `v`, as in `google.feature.v1`. For major versions 0 and 1, the suffix can be omitted. Zero major versions must only be used for experimental, non-GA interfaces.
          &quot;mixins&quot;: [ # Included interfaces. See Mixin.
            { # Declares an API Interface to be included in this interface. The including interface must redeclare all the methods from the included interface, but documentation and options are inherited as follows: - If after comment and whitespace stripping, the documentation string of the redeclared method is empty, it will be inherited from the original method. - Each annotation belonging to the service config (http, visibility) which is not set in the redeclared method will be inherited. - If an http annotation is inherited, the path pattern will be modified as follows. Any version prefix will be replaced by the version of the including interface plus the root path if specified. Example of a simple mixin: package google.acl.v1; service AccessControl { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = &quot;/v1/{resource=**}:getAcl&quot;; } } package google.storage.v2; service Storage { // rpc GetAcl(GetAclRequest) returns (Acl); // Get a data record. rpc GetData(GetDataRequest) returns (Data) { option (google.api.http).get = &quot;/v2/{resource=**}&quot;; } } Example of a mixin configuration: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl The mixin construct implies that all methods in `AccessControl` are also declared with same name and request/response types in `Storage`. A documentation generator or annotation processor will see the effective `Storage.GetAcl` method after inheriting documentation and annotations as follows: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = &quot;/v2/{resource=**}:getAcl&quot;; } ... } Note how the version in the path pattern changed from `v1` to `v2`. If the `root` field in the mixin is specified, it should be a relative path under which inherited HTTP paths are placed. Example: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl root: acls This implies the following inherited HTTP annotation: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = &quot;/v2/acls/{resource=**}:getAcl&quot;; } ... }
              &quot;name&quot;: &quot;A String&quot;, # The fully qualified name of the interface which is included.
              &quot;root&quot;: &quot;A String&quot;, # If non-empty specifies a path under which inherited HTTP paths are rooted.
            },
          ],
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The DNS address at which this service is available. An example DNS address would be: `calendar.googleapis.com`.
    },
    &quot;state&quot;: &quot;A String&quot;, # Whether or not the service has been enabled for use by the consumer.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all services available to the specified project, and the current state of those services with respect to the project. The list includes all public services, all services for which the calling user has the `servicemanagement.services.bind` permission, and all services that have already been enabled on the project. The list can be filtered to only include services in a specific state, for example to only include services enabled on the project.

Args:
  parent: string, Parent to search for services on. An example name would be: `projects/123` where `123` is the project number (not project ID). (required)
  pageSize: integer, Requested size of the next page of data. Requested page size cannot exceed 200. If not set, the default page size is 50.
  filter: string, Only list services that conform to the given filter. The allowed filter strings are `state:ENABLED` and `state:DISABLED`.
  pageToken: string, Token identifying which result to start with, which is returned by a previous list call.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for the `ListServices` method.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token that can be passed to `ListServices` to resume a paginated query.
    &quot;services&quot;: [ # The available services for the requested project.
      { # A service that is available for use by the consumer.
        &quot;parent&quot;: &quot;A String&quot;, # The resource name of the consumer. A valid name would be: - projects/123
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the consumer and service. A valid name would be: - projects/123/services/serviceusage.googleapis.com
        &quot;config&quot;: { # The configuration of the service. # The service configuration of the available service. Some fields may be filtered out of the configuration in responses to the `ListServices` method. These fields are present only in responses to the `GetService` method.
          &quot;quota&quot;: { # Quota configuration helps to achieve fairness and budgeting in service usage. The metric based quota configuration works this way: - The service configuration defines a set of metrics. - For API calls, the quota.metric_rules maps methods to metrics with corresponding costs. - The quota.limits defines limits on the metrics, which will be used for quota checks at runtime. An example quota configuration in yaml format: quota: limits: - name: apiWriteQpsPerProject metric: library.googleapis.com/write_calls unit: &quot;1/min/{project}&quot; # rate limit for consumer projects values: STANDARD: 10000 # The metric rules bind all methods to the read_calls metric, # except for the UpdateBook and DeleteBook methods. These two methods # are mapped to the write_calls metric, with the UpdateBook method # consuming at twice rate as the DeleteBook method. metric_rules: - selector: &quot;*&quot; metric_costs: library.googleapis.com/read_calls: 1 - selector: google.example.library.v1.LibraryService.UpdateBook metric_costs: library.googleapis.com/write_calls: 2 - selector: google.example.library.v1.LibraryService.DeleteBook metric_costs: library.googleapis.com/write_calls: 1 Corresponding Metric definition: metrics: - name: library.googleapis.com/read_calls display_name: Read requests metric_kind: DELTA value_type: INT64 - name: library.googleapis.com/write_calls display_name: Write requests metric_kind: DELTA value_type: INT64 # Quota configuration.
            &quot;limits&quot;: [ # List of `QuotaLimit` definitions for the service.
              { # `QuotaLimit` defines a specific limit that applies over a specified duration for a limit type. There can be at most one limit for a duration and limit type combination defined within a `QuotaGroup`.
                &quot;displayName&quot;: &quot;A String&quot;, # User-visible display name for this limit. Optional. If not set, the UI will provide a default display name based on the quota configuration. This field can be used to override the default display name generated from the configuration.
                &quot;defaultLimit&quot;: &quot;A String&quot;, # Default number of tokens that can be consumed during the specified duration. This is the number of tokens assigned when a client application developer activates the service for his/her project. Specifying a value of 0 will block all requests. This can be used if you are provisioning quota to selected consumers and blocking others. Similarly, a value of -1 will indicate an unlimited quota. No other negative values are allowed. Used by group-based quotas only.
                &quot;unit&quot;: &quot;A String&quot;, # Specify the unit of the quota limit. It uses the same syntax as Metric.unit. The supported unit kinds are determined by the quota backend system. Here are some examples: * &quot;1/min/{project}&quot; for quota per minute per project. Note: the order of unit components is insignificant. The &quot;1&quot; at the beginning is required to follow the metric unit syntax.
                &quot;metric&quot;: &quot;A String&quot;, # The name of the metric this quota limit applies to. The quota limits with the same metric will be checked together during runtime. The metric must be defined within the service config.
                &quot;values&quot;: { # Tiered limit values. You must specify this as a key:value pair, with an integer value that is the maximum number of requests allowed for the specified unit. Currently only STANDARD is supported.
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
                &quot;name&quot;: &quot;A String&quot;, # Name of the quota limit. The name must be provided, and it must be unique within the service. The name can only include alphanumeric characters as well as &#x27;-&#x27;. The maximum length of the limit name is 64 characters.
                &quot;maxLimit&quot;: &quot;A String&quot;, # Maximum number of tokens that can be consumed during the specified duration. Client application developers can override the default limit up to this maximum. If specified, this value cannot be set to a value less than the default limit. If not specified, it is set to the default limit. To allow clients to apply overrides with no upper bound, set this to -1, indicating unlimited maximum quota. Used by group-based quotas only.
                &quot;duration&quot;: &quot;A String&quot;, # Duration of this limit in textual notation. Must be &quot;100s&quot; or &quot;1d&quot;. Used by group-based quotas only.
                &quot;description&quot;: &quot;A String&quot;, # Optional. User-visible, extended description for this quota limit. Should be used only when more context is needed to understand this limit than provided by the limit&#x27;s display name (see: `display_name`).
                &quot;freeTier&quot;: &quot;A String&quot;, # Free tier value displayed in the Developers Console for this limit. The free tier is the number of tokens that will be subtracted from the billed amount when billing is enabled. This field can only be set on a limit with duration &quot;1d&quot;, in a billable group; it is invalid on any other limit. If this field is not set, it defaults to 0, indicating that there is no free tier for this service. Used by group-based quotas only.
              },
            ],
            &quot;metricRules&quot;: [ # List of `MetricRule` definitions, each one mapping a selected method to one or more metrics.
              { # Bind API methods to metrics. Binding a method to a metric causes that metric&#x27;s configured quota behaviors to apply to the method call.
                &quot;metricCosts&quot;: { # Metrics to update when the selected methods are called, and the associated cost applied to each metric. The key of the map is the metric name, and the values are the amount increased for the metric against which the quota limits are defined. The value must not be negative.
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
                &quot;selector&quot;: &quot;A String&quot;, # Selects the methods to which this rule applies. Refer to selector for syntax details.
              },
            ],
          },
          &quot;monitoring&quot;: { # Monitoring configuration of the service. The example below shows how to configure monitored resources and metrics for monitoring. In the example, a monitored resource and two metrics are defined. The `library.googleapis.com/book/returned_count` metric is sent to both producer and consumer projects, whereas the `library.googleapis.com/book/num_overdue` metric is only sent to the consumer project. monitored_resources: - type: library.googleapis.com/Branch display_name: &quot;Library Branch&quot; description: &quot;A branch of a library.&quot; launch_stage: GA labels: - key: resource_container description: &quot;The Cloud container (ie. project id) for the Branch.&quot; - key: location description: &quot;The location of the library branch.&quot; - key: branch_id description: &quot;The id of the branch.&quot; metrics: - name: library.googleapis.com/book/returned_count display_name: &quot;Books Returned&quot; description: &quot;The count of books that have been returned.&quot; launch_stage: GA metric_kind: DELTA value_type: INT64 unit: &quot;1&quot; labels: - key: customer_id description: &quot;The id of the customer.&quot; - name: library.googleapis.com/book/num_overdue display_name: &quot;Books Overdue&quot; description: &quot;The current number of overdue books.&quot; launch_stage: GA metric_kind: GAUGE value_type: INT64 unit: &quot;1&quot; labels: - key: customer_id description: &quot;The id of the customer.&quot; monitoring: producer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count consumer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count - library.googleapis.com/book/num_overdue # Monitoring configuration. This should not include the &#x27;producer_destinations&#x27; field.
            &quot;producerDestinations&quot;: [ # Monitoring configurations for sending metrics to the producer project. There can be multiple producer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration.
              { # Configuration of a specific monitoring destination (the producer project or the consumer project).
                &quot;metrics&quot;: [ # Types of the metrics to report to this monitoring destination. Each type must be defined in Service.metrics section.
                  &quot;A String&quot;,
                ],
                &quot;monitoredResource&quot;: &quot;A String&quot;, # The monitored resource type. The type must be defined in Service.monitored_resources section.
              },
            ],
            &quot;consumerDestinations&quot;: [ # Monitoring configurations for sending metrics to the consumer project. There can be multiple consumer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration.
              { # Configuration of a specific monitoring destination (the producer project or the consumer project).
                &quot;metrics&quot;: [ # Types of the metrics to report to this monitoring destination. Each type must be defined in Service.metrics section.
                  &quot;A String&quot;,
                ],
                &quot;monitoredResource&quot;: &quot;A String&quot;, # The monitored resource type. The type must be defined in Service.monitored_resources section.
              },
            ],
          },
          &quot;usage&quot;: { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
            &quot;producerNotificationChannel&quot;: &quot;A String&quot;, # The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.
            &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;.
              &quot;A String&quot;,
            ],
            &quot;rules&quot;: [ # A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
              { # Usage configuration rules for the service. NOTE: Under development. Use this rule to configure unregistered calls for the service. Unregistered calls are calls that do not contain consumer project identity. (Example: calls that do not contain an API key). By default, API methods do not allow unregistered calls, and each method call must be identified by a consumer project identity. Use this rule to allow/disallow unregistered calls. Example of an API that wants to allow unregistered calls for entire service. usage: rules: - selector: &quot;*&quot; allow_unregistered_calls: true Example of a method that wants to allow unregistered calls. usage: rules: - selector: &quot;google.example.library.v1.LibraryService.CreateBook&quot; allow_unregistered_calls: true
                &quot;allowUnregisteredCalls&quot;: True or False, # If true, the selected method allows unregistered calls, e.g. calls that don&#x27;t identify any user or application.
                &quot;skipServiceControl&quot;: True or False, # If true, the selected method should skip service control and the control plane features, such as quota and billing, will not be available. This flag is used by Google Cloud Endpoints to bypass checks for internal methods, such as service health check methods.
                &quot;selector&quot;: &quot;A String&quot;, # Selects the methods to which this rule applies. Use &#x27;*&#x27; to indicate all methods in all APIs. Refer to selector for syntax details.
              },
            ],
          },
          &quot;endpoints&quot;: [ # Configuration for network endpoints. Contains only the names and aliases of the endpoints.
            { # `Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
              &quot;name&quot;: &quot;A String&quot;, # The canonical name of this endpoint.
              &quot;target&quot;: &quot;A String&quot;, # The specification of an Internet routable address of API frontend that will handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary). It should be either a valid IPv4 address or a fully-qualified domain name. For example, &quot;8.8.8.8&quot; or &quot;myservice.appspot.com&quot;.
              &quot;allowCors&quot;: True or False, # Allowing [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka cross-domain traffic, would allow the backends served from this endpoint to receive and respond to HTTP OPTIONS requests. The response will be used by the browser to determine whether the subsequent cross-origin request is allowed to proceed.
              &quot;aliases&quot;: [ # DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.
                &quot;A String&quot;,
              ],
            },
          ],
          &quot;title&quot;: &quot;A String&quot;, # The product title for this service.
          &quot;authentication&quot;: { # `Authentication` defines the authentication configuration for an API. Example for an API targeted for external use: name: calendar.googleapis.com authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth # Auth configuration. Contains only the OAuth rules.
            &quot;providers&quot;: [ # Defines a set of authentication providers that a service supports.
              { # Configuration for an authentication provider, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
                &quot;jwksUri&quot;: &quot;A String&quot;, # URL of the provider&#x27;s public key set to validate signature of the JWT. See [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). Optional if the key set document: - can be retrieved from [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) of the issuer. - can be inferred from the email domain of the issuer (e.g. a Google service account). Example: https://www.googleapis.com/oauth2/v1/certs
                &quot;issuer&quot;: &quot;A String&quot;, # Identifies the principal that issued the JWT. See https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1 Usually a URL or an email address. Example: https://securetoken.google.com Example: 1234567-compute@developer.gserviceaccount.com
                &quot;audiences&quot;: &quot;A String&quot;, # The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, JWTs with audiences: - &quot;https://[service.name]/[google.protobuf.Api.name]&quot; - &quot;https://[service.name]/&quot; will be accepted. For example, if no audiences are in the setting, LibraryService API will accept JWTs with the following audiences: - https://library-example.googleapis.com/google.example.library.v1.LibraryService - https://library-example.googleapis.com/ Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
                &quot;authorizationUrl&quot;: &quot;A String&quot;, # Redirect URL if JWT token is required but not present or is expired. Implement authorizationUrl of securityDefinitions in OpenAPI spec.
                &quot;jwtLocations&quot;: [ # Defines the locations to extract the JWT. JWT locations can be either from HTTP headers or URL query parameters. The rule is that the first match wins. The checking order is: checking all headers first, then URL query parameters. If not specified, default to use following 3 locations: 1) Authorization: Bearer 2) x-goog-iap-jwt-assertion 3) access_token query parameter Default locations can be specified as followings: jwt_locations: - header: Authorization value_prefix: &quot;Bearer &quot; - header: x-goog-iap-jwt-assertion - query: access_token
                  { # Specifies a location to extract JWT from an API request.
                    &quot;header&quot;: &quot;A String&quot;, # Specifies HTTP header name to extract JWT token.
                    &quot;valuePrefix&quot;: &quot;A String&quot;, # The value prefix. The value format is &quot;value_prefix{token}&quot; Only applies to &quot;in&quot; header type. Must be empty for &quot;in&quot; query type. If not empty, the header value has to match (case sensitive) this prefix. If not matched, JWT will not be extracted. If matched, JWT will be extracted after the prefix is removed. For example, for &quot;Authorization: Bearer {JWT}&quot;, value_prefix=&quot;Bearer &quot; with a space at the end.
                    &quot;query&quot;: &quot;A String&quot;, # Specifies URL query parameter name to extract JWT token.
                  },
                ],
                &quot;id&quot;: &quot;A String&quot;, # The unique identifier of the auth provider. It will be referred to by `AuthRequirement.provider_id`. Example: &quot;bookstore_auth&quot;.
              },
            ],
            &quot;rules&quot;: [ # A list of authentication rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
              { # Authentication rules for the service. By default, if a method has any authentication requirements, every request must include a valid credential matching one of the requirements. It&#x27;s an error to include more than one kind of credential in a single request. If a method doesn&#x27;t have any auth requirements, request credentials will be ignored.
                &quot;selector&quot;: &quot;A String&quot;, # Selects the methods to which this rule applies. Refer to selector for syntax details.
                &quot;oauth&quot;: { # OAuth scopes are a way to define data and permissions on data. For example, there are scopes defined for &quot;Read-only access to Google Calendar&quot; and &quot;Access to Cloud Platform&quot;. Users can consent to a scope for an application, giving it permission to access that data on their behalf. OAuth scope specifications should be fairly coarse grained; a user will need to see and understand the text description of what your scope means. In most cases: use one or at most two OAuth scopes for an entire family of products. If your product has multiple APIs, you should probably be sharing the OAuth scope across all of those APIs. When you need finer grained OAuth consent screens: talk with your product management about how developers will use them in practice. Please note that even though each of the canonical scopes is enough for a request to be accepted and passed to the backend, a request can still fail due to the backend requiring additional scopes or permissions. # The requirements for OAuth credentials.
                  &quot;canonicalScopes&quot;: &quot;A String&quot;, # The list of publicly documented OAuth scopes that are allowed access. An OAuth token containing any of these scopes will be accepted. Example: canonical_scopes: https://www.googleapis.com/auth/calendar, https://www.googleapis.com/auth/calendar.read
                },
                &quot;allowWithoutCredential&quot;: True or False, # If true, the service accepts API keys without any other credential. This flag only applies to HTTP and gRPC requests.
                &quot;requirements&quot;: [ # Requirements for additional authentication providers.
                  { # User-defined authentication requirements, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
                    &quot;audiences&quot;: &quot;A String&quot;, # NOTE: This will be deprecated soon, once AuthProvider.audiences is implemented and accepted in all the runtime components. The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, only JWTs with audience &quot;https://Service_name/API_name&quot; will be accepted. For example, if no audiences are in the setting, LibraryService API will only accept JWTs with the following audience &quot;https://library-example.googleapis.com/google.example.library.v1.LibraryService&quot;. Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com
                    &quot;providerId&quot;: &quot;A String&quot;, # id from authentication provider. Example: provider_id: bookstore_auth
                  },
                ],
              },
            ],
          },
          &quot;documentation&quot;: { # `Documentation` provides the information for describing a service. Example: documentation: summary: &gt; The Google Calendar API gives access to most calendar features. pages: - name: Overview content: (== include google/foo/overview.md ==) - name: Tutorial content: (== include google/foo/tutorial.md ==) subpages; - name: Java content: (== include google/foo/tutorial_java.md ==) rules: - selector: google.calendar.Calendar.Get description: &gt; ... - selector: google.calendar.Calendar.Put description: &gt; ... Documentation is provided in markdown syntax. In addition to standard markdown features, definition lists, tables and fenced code blocks are supported. Section headers can be provided and are interpreted relative to the section nesting of the context where a documentation fragment is embedded. Documentation from the IDL is merged with documentation defined via the config at normalization time, where documentation provided by config rules overrides IDL provided. A number of constructs specific to the API platform are supported in documentation text. In order to reference a proto element, the following notation can be used: [fully.qualified.proto.name][] To override the display text used for the link, this can be used: [display text][fully.qualified.proto.name] Text can be excluded from doc using the following notation: (-- internal comment --) A few directives are available in documentation. Note that directives must appear on a single line to be properly identified. The `include` directive includes a markdown file from an external source: (== include path/to/file ==) The `resource_for` directive marks a message to be the resource of a collection in REST view. If it is not specified, tools attempt to infer the resource from the operations in a collection: (== resource_for v1.shelves.books ==) The directive `suppress_warning` does not directly affect documentation and is documented together with service config validation. # Additional API documentation. Contains only the summary and the documentation URL.
            &quot;overview&quot;: &quot;A String&quot;, # Declares a single overview page. For example: documentation: summary: ... overview: (== include overview.md ==) This is a shortcut for the following declaration (using pages style): documentation: summary: ... pages: - name: Overview content: (== include overview.md ==) Note: you cannot specify both `overview` field and `pages` field.
            &quot;documentationRootUrl&quot;: &quot;A String&quot;, # The URL to the root of documentation.
            &quot;rules&quot;: [ # A list of documentation rules that apply to individual API elements. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
              { # A documentation rule provides information about individual API elements.
                &quot;selector&quot;: &quot;A String&quot;, # The selector is a comma-separated list of patterns. Each pattern is a qualified name of the element which may end in &quot;*&quot;, indicating a wildcard. Wildcards are only allowed at the end and for a whole component of the qualified name, i.e. &quot;foo.*&quot; is ok, but not &quot;foo.b*&quot; or &quot;foo.*.bar&quot;. A wildcard will match one or more components. To specify a default for all applicable elements, the whole pattern &quot;*&quot; is used.
                &quot;deprecationDescription&quot;: &quot;A String&quot;, # Deprecation description of the selected element(s). It can be provided if an element is marked as `deprecated`.
                &quot;description&quot;: &quot;A String&quot;, # Description of the selected API(s).
              },
            ],
            &quot;pages&quot;: [ # The top level pages for the documentation set.
              { # Represents a documentation page. A page can contain subpages to represent nested documentation set structure.
                &quot;name&quot;: &quot;A String&quot;, # The name of the page. It will be used as an identity of the page to generate URI of the page, text of the link to this page in navigation, etc. The full page name (start from the root page name to this page concatenated with `.`) can be used as reference to the page in your documentation. For example: pages: - name: Tutorial content: (== include tutorial.md ==) subpages: - name: Java content: (== include tutorial_java.md ==) You can reference `Java` page using Markdown reference link syntax: `Java`.
                &quot;content&quot;: &quot;A String&quot;, # The Markdown content of the page. You can use (== include {path} ==) to include content from a Markdown file.
                &quot;subpages&quot;: [ # Subpages of this page. The order of subpages specified here will be honored in the generated docset.
                  # Object with schema name: Page
                ],
              },
            ],
            &quot;summary&quot;: &quot;A String&quot;, # A short summary of what the service does. Can only be provided by plain text.
            &quot;serviceRootUrl&quot;: &quot;A String&quot;, # Specifies the service root url if the default one (the service name from the yaml file) is not suitable. This can be seen in any fully specified service urls as well as sections that show a base that other urls are relative to.
          },
          &quot;monitoredResources&quot;: [ # Defines the monitored resources used by this service. This is required by the Service.monitoring and Service.logging configurations.
            { # An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of `&quot;gce_instance&quot;` and specifies the use of the labels `&quot;instance_id&quot;` and `&quot;zone&quot;` to identify particular VM instances. Different APIs can support different monitored resource types. APIs generally provide a `list` method that returns the monitored resource descriptors used by the API.
              &quot;type&quot;: &quot;A String&quot;, # Required. The monitored resource type. For example, the type `&quot;cloudsql_database&quot;` represents databases in Google Cloud SQL.
              &quot;labels&quot;: [ # Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels `&quot;database_id&quot;` and `&quot;zone&quot;`.
                { # A description of a label.
                  &quot;key&quot;: &quot;A String&quot;, # The label key.
                  &quot;valueType&quot;: &quot;A String&quot;, # The type of data that can be assigned to the label.
                  &quot;description&quot;: &quot;A String&quot;, # A human-readable description for the label.
                },
              ],
              &quot;description&quot;: &quot;A String&quot;, # Optional. A detailed description of the monitored resource type that might be used in documentation.
              &quot;launchStage&quot;: &quot;A String&quot;, # Optional. The launch stage of the monitored resource definition.
              &quot;displayName&quot;: &quot;A String&quot;, # Optional. A concise name for the monitored resource type that might be displayed in user interfaces. It should be a Title Cased Noun Phrase, without any article or other determiners. For example, `&quot;Google Cloud SQL Database&quot;`.
              &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name of the monitored resource descriptor: `&quot;projects/{project_id}/monitoredResourceDescriptors/{type}&quot;` where {type} is the value of the `type` field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format `&quot;monitoredResourceDescriptors/{type}&quot;`.
            },
          ],
          &quot;apis&quot;: [ # A list of API interfaces exported by this service. Contains only the names, versions, and method names of the interfaces.
            { # Api is a light-weight descriptor for an API Interface. Interfaces are also described as &quot;protocol buffer services&quot; in some contexts, such as by the &quot;service&quot; keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as &quot;APIs&quot; in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.
              &quot;methods&quot;: [ # The methods of this interface, in unspecified order.
                { # Method represents a method of an API interface.
                  &quot;options&quot;: [ # Any metadata attached to the method.
                    { # A protocol buffer option, which can be attached to a message, field, enumeration, etc.
                      &quot;name&quot;: &quot;A String&quot;, # The option&#x27;s name. For protobuf built-in options (options defined in descriptor.proto), this is the short name. For example, `&quot;map_entry&quot;`. For custom options, it should be the fully-qualified name. For example, `&quot;google.api.http&quot;`.
                      &quot;value&quot;: { # The option&#x27;s value packed in an Any message. If the value is a primitive, the corresponding wrapper type defined in google/protobuf/wrappers.proto should be used. If the value is an enum, it should be stored as an int32 value using the google.protobuf.Int32Value type.
                        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
                      },
                    },
                  ],
                  &quot;syntax&quot;: &quot;A String&quot;, # The source syntax of this method.
                  &quot;requestTypeUrl&quot;: &quot;A String&quot;, # A URL of the input message type.
                  &quot;responseStreaming&quot;: True or False, # If true, the response is streamed.
                  &quot;name&quot;: &quot;A String&quot;, # The simple name of this method.
                  &quot;requestStreaming&quot;: True or False, # If true, the request is streamed.
                  &quot;responseTypeUrl&quot;: &quot;A String&quot;, # The URL of the output message type.
                },
              ],
              &quot;syntax&quot;: &quot;A String&quot;, # The source syntax of the service.
              &quot;sourceContext&quot;: { # `SourceContext` represents information about the source of a protobuf element, like the file in which it is defined. # Source context for the protocol buffer service represented by this message.
                &quot;fileName&quot;: &quot;A String&quot;, # The path-qualified name of the .proto file that contained the associated protobuf element. For example: `&quot;google/protobuf/source_context.proto&quot;`.
              },
              &quot;name&quot;: &quot;A String&quot;, # The fully qualified name of this interface, including package name followed by the interface&#x27;s simple name.
              &quot;options&quot;: [ # Any metadata attached to the interface.
                { # A protocol buffer option, which can be attached to a message, field, enumeration, etc.
                  &quot;name&quot;: &quot;A String&quot;, # The option&#x27;s name. For protobuf built-in options (options defined in descriptor.proto), this is the short name. For example, `&quot;map_entry&quot;`. For custom options, it should be the fully-qualified name. For example, `&quot;google.api.http&quot;`.
                  &quot;value&quot;: { # The option&#x27;s value packed in an Any message. If the value is a primitive, the corresponding wrapper type defined in google/protobuf/wrappers.proto should be used. If the value is an enum, it should be stored as an int32 value using the google.protobuf.Int32Value type.
                    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
                  },
                },
              ],
              &quot;version&quot;: &quot;A String&quot;, # A version string for this interface. If specified, must have the form `major-version.minor-version`, as in `1.10`. If the minor version is omitted, it defaults to zero. If the entire version field is empty, the major version is derived from the package name, as outlined below. If the field is not empty, the version in the package name will be verified to be consistent with what is provided here. The versioning schema uses [semantic versioning](http://semver.org) where the major version number indicates a breaking change and the minor version an additive, non-breaking change. Both version numbers are signals to users what to expect from different versions, and should be carefully chosen based on the product plan. The major version is also reflected in the package name of the interface, which must end in `v`, as in `google.feature.v1`. For major versions 0 and 1, the suffix can be omitted. Zero major versions must only be used for experimental, non-GA interfaces.
              &quot;mixins&quot;: [ # Included interfaces. See Mixin.
                { # Declares an API Interface to be included in this interface. The including interface must redeclare all the methods from the included interface, but documentation and options are inherited as follows: - If after comment and whitespace stripping, the documentation string of the redeclared method is empty, it will be inherited from the original method. - Each annotation belonging to the service config (http, visibility) which is not set in the redeclared method will be inherited. - If an http annotation is inherited, the path pattern will be modified as follows. Any version prefix will be replaced by the version of the including interface plus the root path if specified. Example of a simple mixin: package google.acl.v1; service AccessControl { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = &quot;/v1/{resource=**}:getAcl&quot;; } } package google.storage.v2; service Storage { // rpc GetAcl(GetAclRequest) returns (Acl); // Get a data record. rpc GetData(GetDataRequest) returns (Data) { option (google.api.http).get = &quot;/v2/{resource=**}&quot;; } } Example of a mixin configuration: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl The mixin construct implies that all methods in `AccessControl` are also declared with same name and request/response types in `Storage`. A documentation generator or annotation processor will see the effective `Storage.GetAcl` method after inheriting documentation and annotations as follows: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = &quot;/v2/{resource=**}:getAcl&quot;; } ... } Note how the version in the path pattern changed from `v1` to `v2`. If the `root` field in the mixin is specified, it should be a relative path under which inherited HTTP paths are placed. Example: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl root: acls This implies the following inherited HTTP annotation: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = &quot;/v2/acls/{resource=**}:getAcl&quot;; } ... }
                  &quot;name&quot;: &quot;A String&quot;, # The fully qualified name of the interface which is included.
                  &quot;root&quot;: &quot;A String&quot;, # If non-empty specifies a path under which inherited HTTP paths are rooted.
                },
              ],
            },
          ],
          &quot;name&quot;: &quot;A String&quot;, # The DNS address at which this service is available. An example DNS address would be: `calendar.googleapis.com`.
        },
        &quot;state&quot;: &quot;A String&quot;, # Whether or not the service has been enabled for use by the consumer.
      },
    ],
  }</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>

</body></html>