<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="servicecontrol_v1.html">Google Service Control API</a> . <a href="servicecontrol_v1.services.html">services</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#check">check(serviceName=None, body, x__xgafv=None)</a></code></p>
<p class="firstline">Checks an operation with Google Service Control to decide whether</p>
<p class="toc_element">
  <code><a href="#report">report(serviceName=None, body, x__xgafv=None)</a></code></p>
<p class="firstline">Reports operation results to Google Service Control, such as logs and</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="check">check(serviceName=None, body, x__xgafv=None)</code>
  <pre>Checks an operation with Google Service Control to decide whether
the given operation should proceed. It should be called before the
operation is executed.

If feasible, the client should cache the check results and reuse them for
60 seconds. In case of server errors, the client can rely on the cached
results for longer time.

NOTE: the `CheckRequest` has the size limit of 1MB.

This method requires the `servicemanagement.services.check` permission
on the specified service. For more information, see
[Google Cloud IAM](https://cloud.google.com/iam).

Args:
  serviceName: string, The service name as specified in its service configuration. For example,
`"pubsub.googleapis.com"`.

See google.api.Service for the definition of a service name. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for the Check method.
    "operation": { # Represents information regarding an operation. # The operation to be checked.
      "operationName": "A String", # Fully qualified name of the operation. Reserved for future use.
      "metricValueSets": [ # Represents information about this operation. Each MetricValueSet
          # corresponds to a metric defined in the service configuration.
          # The data type used in the MetricValueSet must agree with
          # the data type specified in the metric definition.
          #
          # Within a single operation, it is not allowed to have more than one
          # MetricValue instances that have the same metric names and identical
          # label value combinations. If a request has such duplicated MetricValue
          # instances, the entire request is rejected with
          # an invalid argument error.
        { # Represents a set of metric values in the same metric.
            # Each metric value in the set should have a unique combination of start time,
            # end time, and label values.
          "metricValues": [ # The values in this metric.
            { # Represents a single metric value.
              "labels": { # The labels describing the metric value.
                  # See comments on google.api.servicecontrol.v1.Operation.labels for
                  # the overriding relationship.
                "a_key": "A String",
              },
              "doubleValue": 3.14, # A double precision floating point value.
              "boolValue": True or False, # A boolean value.
              "startTime": "A String", # The start of the time period over which this metric value's measurement
                  # applies. The time period has different semantics for different metric
                  # types (cumulative, delta, and gauge). See the metric definition
                  # documentation in the service configuration for details.
              "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                  # points. It contains the size of the population of sample points plus
                  # additional optional information:
                  #
                  #   - the arithmetic mean of the samples
                  #   - the minimum and maximum of the samples
                  #   - the sum-squared-deviation of the samples, used to compute variance
                  #   - a histogram of the values of the sample points
                "count": "A String", # The total number of samples in the distribution. Must be >= 0.
                "bucketCounts": [ # The number of samples in each histogram bucket. `bucket_counts` are
                    # optional. If present, they must sum to the `count` value.
                    #
                    # The buckets are defined below in `bucket_option`. There are N buckets.
                    # `bucket_counts[0]` is the number of samples in the underflow bucket.
                    # `bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of samples
                    # in each of the finite buckets. And `bucket_counts[N] is the number
                    # of samples in the overflow bucket. See the comments of `bucket_option`
                    # below for more details.
                    #
                    # Any suffix of trailing zeros may be omitted.
                  "A String",
                ],
                "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                  "scale": 3.14, # The i'th exponential bucket covers the interval
                      #   [scale * growth_factor^(i-1), scale * growth_factor^i)
                      # where i ranges from 1 to num_finite_buckets inclusive.
                      # Must be > 0.
                  "growthFactor": 3.14, # The i'th exponential bucket covers the interval
                      #   [scale * growth_factor^(i-1), scale * growth_factor^i)
                      # where i ranges from 1 to num_finite_buckets inclusive.
                      # Must be larger than 1.0.
                  "numFiniteBuckets": 42, # The number of finite buckets. With the underflow and overflow buckets,
                      # the total number of buckets is `num_finite_buckets` + 2.
                      # See comments on `bucket_options` for details.
                },
                "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
                "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
                "sumOfSquaredDeviation": 3.14, # The sum of squared deviations from the mean:
                    #   Sum[i=1..count]((x_i - mean)^2)
                    # where each x_i is a sample values. If `count` is zero then this field
                    # must be zero, otherwise validation of the request fails.
                "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                  "width": 3.14, # The i'th linear bucket covers the interval
                      #   [offset + (i-1) * width, offset + i * width)
                      # where i ranges from 1 to num_finite_buckets, inclusive.
                      # Must be strictly positive.
                  "numFiniteBuckets": 42, # The number of finite buckets. With the underflow and overflow buckets,
                      # the total number of buckets is `num_finite_buckets` + 2.
                      # See comments on `bucket_options` for details.
                  "offset": 3.14, # The i'th linear bucket covers the interval
                      #   [offset + (i-1) * width, offset + i * width)
                      # where i ranges from 1 to num_finite_buckets, inclusive.
                },
                "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                  "bounds": [ # 'bound' is a list of strictly increasing boundaries between
                      # buckets. Note that a list of length N-1 defines N buckets because
                      # of fenceposting. See comments on `bucket_options` for details.
                      #
                      # The i'th finite bucket covers the interval
                      #   [bound[i-1], bound[i])
                      # where i ranges from 1 to bound_size() - 1. Note that there are no
                      # finite buckets at all if 'bound' only contains a single element; in
                      # that special case the single bound defines the boundary between the
                      # underflow and overflow buckets.
                      #
                      # bucket number                   lower bound    upper bound
                      #  i == 0 (underflow)              -inf           bound[i]
                      #  0 < i < bound_size()            bound[i-1]     bound[i]
                      #  i == bound_size() (overflow)    bound[i-1]     +inf
                    3.14,
                  ],
                },
                "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                    # zero then this field must be zero.
              },
              "stringValue": "A String", # A text string value.
              "int64Value": "A String", # A signed 64-bit integer value.
              "endTime": "A String", # The end of the time period over which this metric value's measurement
                  # applies.
            },
          ],
          "metricName": "A String", # The metric name defined in the service configuration.
        },
      ],
      "importance": "A String", # DO NOT USE. This is an experimental field.
      "labels": { # Labels describing the operation. Only the following labels are allowed:
          #
          # - Labels describing monitored resources as defined in
          #   the service configuration.
          # - Default labels of metric values. When specified, labels defined in the
          #   metric value override these default.
          # - The following labels defined by Google Cloud Platform:
          #     - `cloud.googleapis.com/location` describing the location where the
          #        operation happened,
          #     - `servicecontrol.googleapis.com/user_agent` describing the user agent
          #        of the API request,
          #     - `servicecontrol.googleapis.com/service_agent` describing the service
          #        used to handle the API request (e.g. ESP),
          #     - `servicecontrol.googleapis.com/platform` describing the platform
          #        where the API is served (e.g. GAE, GCE, GKE).
        "a_key": "A String",
      },
      "consumerId": "A String", # Identity of the consumer who is using the service.
          # This field should be filled in for the operations initiated by a
          # consumer, but not for service-initiated operations that are
          # not related to a specific consumer.
          #
          # This can be in one of the following formats:
          #   project:<project_id>,
          #   project_number:<project_number>,
          #   api_key:<api_key>.
      "logEntries": [ # Represents information to be logged.
        { # An individual log entry.
          "name": "A String", # Required. The log to which this log entry belongs. Examples: `"syslog"`,
              # `"book_log"`.
          "textPayload": "A String", # The log entry payload, represented as a Unicode string (UTF-8).
          "timestamp": "A String", # The time the event described by the log entry occurred. If
              # omitted, defaults to operation start time.
          "labels": { # A set of user-defined (key, value) data that provides additional
              # information about the log entry.
            "a_key": "A String",
          },
          "structPayload": { # The log entry payload, represented as a structure that
              # is expressed as a JSON object.
            "a_key": "", # Properties of the object.
          },
          "insertId": "A String", # A unique ID for the log entry used for deduplication. If omitted,
              # the implementation will generate one based on operation_id.
          "protoPayload": { # The log entry payload, represented as a protocol buffer that is
              # expressed as a JSON object. You can only pass `protoPayload`
              # values that belong to a set of approved types.
            "a_key": "", # Properties of the object. Contains field @type with type URL.
          },
          "severity": "A String", # The severity of the log entry. The default value is
              # `LogSeverity.DEFAULT`.
        },
      ],
      "startTime": "A String", # Required. Start time of the operation.
      "endTime": "A String", # End time of the operation.
          # Required when the operation is used in ServiceController.Report,
          # but optional when the operation is used in ServiceController.Check.
      "operationId": "A String", # Identity of the operation. This must be unique within the scope of the
          # service that generated the operation. If the service calls
          # Check() and Report() on the same operation, the two calls should carry
          # the same id.
          #
          # UUID version 4 is recommended, though not required.
          # In scenarios where an operation is computed from existing information
          # and an idempotent id is desirable for deduplication purpose, UUID version 5
          # is recommended. See RFC 4122 for details.
    },
    "serviceConfigId": "A String", # Specifies which version of service configuration should be used to process
        # the request.
        # 
        # If unspecified or no matching version can be found, the
        # latest one will be used.
  }

  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 Check method.
    "serviceConfigId": "A String", # The actual config id used to process the request.
    "checkErrors": [ # Indicate the decision of the check.
        #
        # If no check errors are present, the service should process the operation.
        # Otherwise the service should use the list of errors to determine the
        # appropriate action.
      { # Defines the errors to be returned in
          # google.api.servicecontrol.v1.CheckResponse.check_errors.
        "code": "A String", # The error code.
        "detail": "A String", # Free-form text providing details on the error cause of the error.
      },
    ],
    "operationId": "A String", # The same operation_id value used in the CheckRequest.
        # Used for logging and diagnostics purposes.
  }</pre>
</div>

<div class="method">
    <code class="details" id="report">report(serviceName=None, body, x__xgafv=None)</code>
  <pre>Reports operation results to Google Service Control, such as logs and
metrics. It should be called after an operation is completed.

If feasible, the client should aggregate reporting data for up to 5
seconds to reduce API traffic. Limiting aggregation to 5 seconds is to
reduce data loss during client crashes. Clients should carefully choose
the aggregation time window to avoid data loss risk more than 0.01%
for business and compliance reasons.

NOTE: the `ReportRequest` has the size limit of 1MB.

This method requires the `servicemanagement.services.report` permission
on the specified service. For more information, see
[Google Cloud IAM](https://cloud.google.com/iam).

Args:
  serviceName: string, The service name as specified in its service configuration. For example,
`"pubsub.googleapis.com"`.

See google.api.Service for the definition of a service name. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for the Report method.
    "operations": [ # Operations to be reported.
        # 
        # Typically the service should report one operation per request.
        # Putting multiple operations into a single request is allowed, but should
        # be used only when multiple operations are natually available at the time
        # of the report.
        # 
        # If multiple operations are in a single request, the total request size
        # should be no larger than 1MB. See ReportResponse.report_errors for
        # partial failure behavior.
      { # Represents information regarding an operation.
        "operationName": "A String", # Fully qualified name of the operation. Reserved for future use.
        "metricValueSets": [ # Represents information about this operation. Each MetricValueSet
            # corresponds to a metric defined in the service configuration.
            # The data type used in the MetricValueSet must agree with
            # the data type specified in the metric definition.
            #
            # Within a single operation, it is not allowed to have more than one
            # MetricValue instances that have the same metric names and identical
            # label value combinations. If a request has such duplicated MetricValue
            # instances, the entire request is rejected with
            # an invalid argument error.
          { # Represents a set of metric values in the same metric.
              # Each metric value in the set should have a unique combination of start time,
              # end time, and label values.
            "metricValues": [ # The values in this metric.
              { # Represents a single metric value.
                "labels": { # The labels describing the metric value.
                    # See comments on google.api.servicecontrol.v1.Operation.labels for
                    # the overriding relationship.
                  "a_key": "A String",
                },
                "doubleValue": 3.14, # A double precision floating point value.
                "boolValue": True or False, # A boolean value.
                "startTime": "A String", # The start of the time period over which this metric value's measurement
                    # applies. The time period has different semantics for different metric
                    # types (cumulative, delta, and gauge). See the metric definition
                    # documentation in the service configuration for details.
                "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                    # points. It contains the size of the population of sample points plus
                    # additional optional information:
                    #
                    #   - the arithmetic mean of the samples
                    #   - the minimum and maximum of the samples
                    #   - the sum-squared-deviation of the samples, used to compute variance
                    #   - a histogram of the values of the sample points
                  "count": "A String", # The total number of samples in the distribution. Must be >= 0.
                  "bucketCounts": [ # The number of samples in each histogram bucket. `bucket_counts` are
                      # optional. If present, they must sum to the `count` value.
                      #
                      # The buckets are defined below in `bucket_option`. There are N buckets.
                      # `bucket_counts[0]` is the number of samples in the underflow bucket.
                      # `bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of samples
                      # in each of the finite buckets. And `bucket_counts[N] is the number
                      # of samples in the overflow bucket. See the comments of `bucket_option`
                      # below for more details.
                      #
                      # Any suffix of trailing zeros may be omitted.
                    "A String",
                  ],
                  "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                    "scale": 3.14, # The i'th exponential bucket covers the interval
                        #   [scale * growth_factor^(i-1), scale * growth_factor^i)
                        # where i ranges from 1 to num_finite_buckets inclusive.
                        # Must be > 0.
                    "growthFactor": 3.14, # The i'th exponential bucket covers the interval
                        #   [scale * growth_factor^(i-1), scale * growth_factor^i)
                        # where i ranges from 1 to num_finite_buckets inclusive.
                        # Must be larger than 1.0.
                    "numFiniteBuckets": 42, # The number of finite buckets. With the underflow and overflow buckets,
                        # the total number of buckets is `num_finite_buckets` + 2.
                        # See comments on `bucket_options` for details.
                  },
                  "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
                  "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
                  "sumOfSquaredDeviation": 3.14, # The sum of squared deviations from the mean:
                      #   Sum[i=1..count]((x_i - mean)^2)
                      # where each x_i is a sample values. If `count` is zero then this field
                      # must be zero, otherwise validation of the request fails.
                  "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                    "width": 3.14, # The i'th linear bucket covers the interval
                        #   [offset + (i-1) * width, offset + i * width)
                        # where i ranges from 1 to num_finite_buckets, inclusive.
                        # Must be strictly positive.
                    "numFiniteBuckets": 42, # The number of finite buckets. With the underflow and overflow buckets,
                        # the total number of buckets is `num_finite_buckets` + 2.
                        # See comments on `bucket_options` for details.
                    "offset": 3.14, # The i'th linear bucket covers the interval
                        #   [offset + (i-1) * width, offset + i * width)
                        # where i ranges from 1 to num_finite_buckets, inclusive.
                  },
                  "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                    "bounds": [ # 'bound' is a list of strictly increasing boundaries between
                        # buckets. Note that a list of length N-1 defines N buckets because
                        # of fenceposting. See comments on `bucket_options` for details.
                        #
                        # The i'th finite bucket covers the interval
                        #   [bound[i-1], bound[i])
                        # where i ranges from 1 to bound_size() - 1. Note that there are no
                        # finite buckets at all if 'bound' only contains a single element; in
                        # that special case the single bound defines the boundary between the
                        # underflow and overflow buckets.
                        #
                        # bucket number                   lower bound    upper bound
                        #  i == 0 (underflow)              -inf           bound[i]
                        #  0 < i < bound_size()            bound[i-1]     bound[i]
                        #  i == bound_size() (overflow)    bound[i-1]     +inf
                      3.14,
                    ],
                  },
                  "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                      # zero then this field must be zero.
                },
                "stringValue": "A String", # A text string value.
                "int64Value": "A String", # A signed 64-bit integer value.
                "endTime": "A String", # The end of the time period over which this metric value's measurement
                    # applies.
              },
            ],
            "metricName": "A String", # The metric name defined in the service configuration.
          },
        ],
        "importance": "A String", # DO NOT USE. This is an experimental field.
        "labels": { # Labels describing the operation. Only the following labels are allowed:
            #
            # - Labels describing monitored resources as defined in
            #   the service configuration.
            # - Default labels of metric values. When specified, labels defined in the
            #   metric value override these default.
            # - The following labels defined by Google Cloud Platform:
            #     - `cloud.googleapis.com/location` describing the location where the
            #        operation happened,
            #     - `servicecontrol.googleapis.com/user_agent` describing the user agent
            #        of the API request,
            #     - `servicecontrol.googleapis.com/service_agent` describing the service
            #        used to handle the API request (e.g. ESP),
            #     - `servicecontrol.googleapis.com/platform` describing the platform
            #        where the API is served (e.g. GAE, GCE, GKE).
          "a_key": "A String",
        },
        "consumerId": "A String", # Identity of the consumer who is using the service.
            # This field should be filled in for the operations initiated by a
            # consumer, but not for service-initiated operations that are
            # not related to a specific consumer.
            #
            # This can be in one of the following formats:
            #   project:<project_id>,
            #   project_number:<project_number>,
            #   api_key:<api_key>.
        "logEntries": [ # Represents information to be logged.
          { # An individual log entry.
            "name": "A String", # Required. The log to which this log entry belongs. Examples: `"syslog"`,
                # `"book_log"`.
            "textPayload": "A String", # The log entry payload, represented as a Unicode string (UTF-8).
            "timestamp": "A String", # The time the event described by the log entry occurred. If
                # omitted, defaults to operation start time.
            "labels": { # A set of user-defined (key, value) data that provides additional
                # information about the log entry.
              "a_key": "A String",
            },
            "structPayload": { # The log entry payload, represented as a structure that
                # is expressed as a JSON object.
              "a_key": "", # Properties of the object.
            },
            "insertId": "A String", # A unique ID for the log entry used for deduplication. If omitted,
                # the implementation will generate one based on operation_id.
            "protoPayload": { # The log entry payload, represented as a protocol buffer that is
                # expressed as a JSON object. You can only pass `protoPayload`
                # values that belong to a set of approved types.
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
            "severity": "A String", # The severity of the log entry. The default value is
                # `LogSeverity.DEFAULT`.
          },
        ],
        "startTime": "A String", # Required. Start time of the operation.
        "endTime": "A String", # End time of the operation.
            # Required when the operation is used in ServiceController.Report,
            # but optional when the operation is used in ServiceController.Check.
        "operationId": "A String", # Identity of the operation. This must be unique within the scope of the
            # service that generated the operation. If the service calls
            # Check() and Report() on the same operation, the two calls should carry
            # the same id.
            #
            # UUID version 4 is recommended, though not required.
            # In scenarios where an operation is computed from existing information
            # and an idempotent id is desirable for deduplication purpose, UUID version 5
            # is recommended. See RFC 4122 for details.
      },
    ],
    "serviceConfigId": "A String", # Specifies which version of service config should be used to process the
        # request.
        # 
        # If unspecified or no matching version can be found, the
        # latest one will be used.
  }

  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 Report method.
    "serviceConfigId": "A String", # The actual config id used to process the request.
    "reportErrors": [ # Partial failures, one for each `Operation` in the request that failed
        # processing. There are three possible combinations of the RPC status:
        #
        # 1. The combination of a successful RPC status and an empty `report_errors`
        #    list indicates a complete success where all `Operations` in the
        #    request are processed successfully.
        # 2. The combination of a successful RPC status and a non-empty
        #    `report_errors` list indicates a partial success where some
        #    `Operations` in the request succeeded. Each
        #    `Operation` that failed processing has a corresponding item
        #    in this list.
        # 3. A failed RPC status indicates a general non-deterministic failure.
        #    When this happens, it's impossible to know which of the
        #    'Operations' in the request succeeded or failed.
      { # Represents the processing error of one `Operation` in the request.
        "status": { # The `Status` type defines a logical error model that is suitable for different # Details of the error when processing the `Operation`.
            # programming environments, including REST APIs and RPC APIs. It is used by
            # [gRPC](https://github.com/grpc). The error model is designed to be:
            #
            # - Simple to use and understand for most users
            # - Flexible enough to meet unexpected needs
            #
            # # Overview
            #
            # The `Status` message contains three pieces of data: error code, error message,
            # and error details. The error code should be an enum value of
            # google.rpc.Code, but it may accept additional error codes if needed.  The
            # error message should be a developer-facing English message that helps
            # developers *understand* and *resolve* the error. If a localized user-facing
            # error message is needed, put the localized message in the error details or
            # localize it in the client. The optional error details may contain arbitrary
            # information about the error. There is a predefined set of error detail types
            # in the package `google.rpc` which can be used for common error conditions.
            #
            # # Language mapping
            #
            # The `Status` message is the logical representation of the error model, but it
            # is not necessarily the actual wire format. When the `Status` message is
            # exposed in different client libraries and different wire protocols, it can be
            # mapped differently. For example, it will likely be mapped to some exceptions
            # in Java, but more likely mapped to some error codes in C.
            #
            # # Other uses
            #
            # The error model and the `Status` message can be used in a variety of
            # environments, either with or without APIs, to provide a
            # consistent developer experience across different environments.
            #
            # Example uses of this error model include:
            #
            # - Partial errors. If a service needs to return partial errors to the client,
            #     it may embed the `Status` in the normal response to indicate the partial
            #     errors.
            #
            # - Workflow errors. A typical workflow has multiple steps. Each step may
            #     have a `Status` message for error reporting purpose.
            #
            # - Batch operations. If a client uses batch request and batch response, the
            #     `Status` message should be used directly inside batch response, one for
            #     each error sub-response.
            #
            # - Asynchronous operations. If an API call embeds asynchronous operation
            #     results in its response, the status of those operations should be
            #     represented directly using the `Status` message.
            #
            # - Logging. If some API errors are stored in logs, the message `Status` could
            #     be used directly after any stripping needed for security/privacy reasons.
          "message": "A String", # 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.
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
          "details": [ # A list of messages that carry the error details.  There will be a
              # common set of message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
        },
        "operationId": "A String", # The Operation.operation_id value from the request.
      },
    ],
  }</pre>
</div>

</body></html>