<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="file_v1beta1.html">Cloud Filestore API</a> . <a href="file_v1beta1.projects.html">projects</a> . <a href="file_v1beta1.projects.locations.html">locations</a> . <a href="file_v1beta1.projects.locations.instances.html">instances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body, instanceId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an instance.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an instance.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the details of a specific instance.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None, filter=None)</a></code></p>
<p class="firstline">Lists all instances in a project for either a specified location</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the settings of a specific instance.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body, instanceId=None, x__xgafv=None)</code>
  <pre>Creates an instance.

Args:
  parent: string, The instance's project and location, in the format
projects/{project_id}/locations/{location}. In Cloud Filestore,
locations map to GCP zones, for example **us-west1-b**. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Cloud Filestore instance.
    "description": "A String", # Optional. A description of the instance (2048 characters or less).
    "labels": { # Resource labels to represent user provided metadata.
      "a_key": "A String",
    },
    "networks": [ # VPC networks to which the instance is connected.
        # For this version, only a single network is supported.
      { # Network configuration for the instance.
        "reservedIpRange": "A String", # A /29 CIDR block in one of the
            # [internal IP address
            # ranges](https://www.arin.net/knowledge/address_filters.html) that
            # identifies the range of IP addresses reserved for this instance. For
            # example, 10.0.0.0/29 or 192.168.0.0/29. The range you specify can't overlap
            # with either existing subnets or assigned IP address ranges for other Cloud
            # Filestore instances in the selected VPC network.
        "modes": [ # Internet protocol versions for which the instance has IP addresses
            # assigned. For this version, only MODE_IPV4 is supported.
          "A String",
        ],
        "ipAddresses": [ # Output only.
            # IPv4 addresses in the format
            # {octet 1}.{octet 2}.{octet 3}.{octet 4} or IPv6 addresses in the format
            # {block 1}:{block 2}:{block 3}:{block 4}:{block 5}:{block 6}:{block
            # 7}:{block 8}.
          "A String",
        ],
        "network": "A String", # The name of the Google Compute Engine
            # [VPC network](/compute/docs/networks-and-firewalls#networks) to which the
            # instance is connected.
      },
    ],
    "state": "A String", # Output only.
        # The instance state.
    "etag": "A String", # Server-specified ETag for the instance resource to prevent simultaneous
        # updates from overwriting each other.
    "fileShares": [ # File system shares on the instance.
        # For this version, only a single file share is supported.
      { # File share configuration for the instance.
        "capacityGb": "A String", # File share capacity in gigabytes (GB).
            # Cloud Filestore defines 1 GB as 1024^3 bytes.
        "name": "A String", # The name of the file share (must be 16 characters or less).
      },
    ],
    "tier": "A String", # The service tier of the instance.
    "createTime": "A String", # Output only.
        # The time when the instance was created.
    "statusMessage": "A String", # Output only.
        # Additional information about the instance state, if available.
    "name": "A String", # Output only.
        # The resource name of the instance, in the format
        # projects/{project_id}/locations/{location_id}/instances/{instance_id}.
  }

  instanceId: string, The name of the instance to create.
The name must be unique for the specified project and location.
  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.
    "response": { # 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`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # 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.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": 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.
    "name": "A String", # 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}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different 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` that 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.
        #
        # - 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 is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an instance.

Args:
  name: string, The instance resource name, in the format
projects/{project_id}/locations/{location}/instances/{instance_id} (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.
    "response": { # 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`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # 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.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": 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.
    "name": "A String", # 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}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different 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` that 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.
        #
        # - 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 is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

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

Args:
  name: string, The instance resource name, in the format
projects/{project_id}/locations/{location}/instances/{instance_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 Cloud Filestore instance.
      "description": "A String", # Optional. A description of the instance (2048 characters or less).
      "labels": { # Resource labels to represent user provided metadata.
        "a_key": "A String",
      },
      "networks": [ # VPC networks to which the instance is connected.
          # For this version, only a single network is supported.
        { # Network configuration for the instance.
          "reservedIpRange": "A String", # A /29 CIDR block in one of the
              # [internal IP address
              # ranges](https://www.arin.net/knowledge/address_filters.html) that
              # identifies the range of IP addresses reserved for this instance. For
              # example, 10.0.0.0/29 or 192.168.0.0/29. The range you specify can't overlap
              # with either existing subnets or assigned IP address ranges for other Cloud
              # Filestore instances in the selected VPC network.
          "modes": [ # Internet protocol versions for which the instance has IP addresses
              # assigned. For this version, only MODE_IPV4 is supported.
            "A String",
          ],
          "ipAddresses": [ # Output only.
              # IPv4 addresses in the format
              # {octet 1}.{octet 2}.{octet 3}.{octet 4} or IPv6 addresses in the format
              # {block 1}:{block 2}:{block 3}:{block 4}:{block 5}:{block 6}:{block
              # 7}:{block 8}.
            "A String",
          ],
          "network": "A String", # The name of the Google Compute Engine
              # [VPC network](/compute/docs/networks-and-firewalls#networks) to which the
              # instance is connected.
        },
      ],
      "state": "A String", # Output only.
          # The instance state.
      "etag": "A String", # Server-specified ETag for the instance resource to prevent simultaneous
          # updates from overwriting each other.
      "fileShares": [ # File system shares on the instance.
          # For this version, only a single file share is supported.
        { # File share configuration for the instance.
          "capacityGb": "A String", # File share capacity in gigabytes (GB).
              # Cloud Filestore defines 1 GB as 1024^3 bytes.
          "name": "A String", # The name of the file share (must be 16 characters or less).
        },
      ],
      "tier": "A String", # The service tier of the instance.
      "createTime": "A String", # Output only.
          # The time when the instance was created.
      "statusMessage": "A String", # Output only.
          # Additional information about the instance state, if available.
      "name": "A String", # Output only.
          # The resource name of the instance, in the format
          # projects/{project_id}/locations/{location_id}/instances/{instance_id}.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None, filter=None)</code>
  <pre>Lists all instances in a project for either a specified location
or for all locations.

Args:
  parent: string, The project and location for which to retrieve instance information,
in the format projects/{project_id}/locations/{location}. In Cloud
Filestore, locations map to GCP zones, for example **us-west1-b**. To
retrieve instance information for all locations, use "-" for the {location}
value. (required)
  orderBy: string, Sort results. Supported values are "name", "name desc" or "" (unsorted).
  pageSize: integer, The maximum number of items to return.
  pageToken: string, The next_page_token value to use if there are additional
results to retrieve for this list request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  filter: string, List filter.

Returns:
  An object of the form:

    { # ListInstancesResponse is the result of ListInstancesRequest.
    "nextPageToken": "A String", # The token you can use to retrieve the next page of results. Not returned
        # if there are no more results in the list.
    "unreachable": [ # Locations that could not be reached.
      "A String",
    ],
    "instances": [ # A list of instances in the project for the specified location.
        #
        # If the {location} value in the request is "-", the response contains a list
        # of instances from all locations. If any location is unreachable, the
        # response will only return instances in reachable locations and the
        # "unreachable" field will be populated with a list of unreachable locations.
      { # A Cloud Filestore instance.
          "description": "A String", # Optional. A description of the instance (2048 characters or less).
          "labels": { # Resource labels to represent user provided metadata.
            "a_key": "A String",
          },
          "networks": [ # VPC networks to which the instance is connected.
              # For this version, only a single network is supported.
            { # Network configuration for the instance.
              "reservedIpRange": "A String", # A /29 CIDR block in one of the
                  # [internal IP address
                  # ranges](https://www.arin.net/knowledge/address_filters.html) that
                  # identifies the range of IP addresses reserved for this instance. For
                  # example, 10.0.0.0/29 or 192.168.0.0/29. The range you specify can't overlap
                  # with either existing subnets or assigned IP address ranges for other Cloud
                  # Filestore instances in the selected VPC network.
              "modes": [ # Internet protocol versions for which the instance has IP addresses
                  # assigned. For this version, only MODE_IPV4 is supported.
                "A String",
              ],
              "ipAddresses": [ # Output only.
                  # IPv4 addresses in the format
                  # {octet 1}.{octet 2}.{octet 3}.{octet 4} or IPv6 addresses in the format
                  # {block 1}:{block 2}:{block 3}:{block 4}:{block 5}:{block 6}:{block
                  # 7}:{block 8}.
                "A String",
              ],
              "network": "A String", # The name of the Google Compute Engine
                  # [VPC network](/compute/docs/networks-and-firewalls#networks) to which the
                  # instance is connected.
            },
          ],
          "state": "A String", # Output only.
              # The instance state.
          "etag": "A String", # Server-specified ETag for the instance resource to prevent simultaneous
              # updates from overwriting each other.
          "fileShares": [ # File system shares on the instance.
              # For this version, only a single file share is supported.
            { # File share configuration for the instance.
              "capacityGb": "A String", # File share capacity in gigabytes (GB).
                  # Cloud Filestore defines 1 GB as 1024^3 bytes.
              "name": "A String", # The name of the file share (must be 16 characters or less).
            },
          ],
          "tier": "A String", # The service tier of the instance.
          "createTime": "A String", # Output only.
              # The time when the instance was created.
          "statusMessage": "A String", # Output only.
              # Additional information about the instance state, if available.
          "name": "A String", # Output only.
              # The resource name of the instance, in the format
              # projects/{project_id}/locations/{location_id}/instances/{instance_id}.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the settings of a specific instance.

Args:
  name: string, Output only.
The resource name of the instance, in the format
projects/{project_id}/locations/{location_id}/instances/{instance_id}. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Cloud Filestore instance.
    "description": "A String", # Optional. A description of the instance (2048 characters or less).
    "labels": { # Resource labels to represent user provided metadata.
      "a_key": "A String",
    },
    "networks": [ # VPC networks to which the instance is connected.
        # For this version, only a single network is supported.
      { # Network configuration for the instance.
        "reservedIpRange": "A String", # A /29 CIDR block in one of the
            # [internal IP address
            # ranges](https://www.arin.net/knowledge/address_filters.html) that
            # identifies the range of IP addresses reserved for this instance. For
            # example, 10.0.0.0/29 or 192.168.0.0/29. The range you specify can't overlap
            # with either existing subnets or assigned IP address ranges for other Cloud
            # Filestore instances in the selected VPC network.
        "modes": [ # Internet protocol versions for which the instance has IP addresses
            # assigned. For this version, only MODE_IPV4 is supported.
          "A String",
        ],
        "ipAddresses": [ # Output only.
            # IPv4 addresses in the format
            # {octet 1}.{octet 2}.{octet 3}.{octet 4} or IPv6 addresses in the format
            # {block 1}:{block 2}:{block 3}:{block 4}:{block 5}:{block 6}:{block
            # 7}:{block 8}.
          "A String",
        ],
        "network": "A String", # The name of the Google Compute Engine
            # [VPC network](/compute/docs/networks-and-firewalls#networks) to which the
            # instance is connected.
      },
    ],
    "state": "A String", # Output only.
        # The instance state.
    "etag": "A String", # Server-specified ETag for the instance resource to prevent simultaneous
        # updates from overwriting each other.
    "fileShares": [ # File system shares on the instance.
        # For this version, only a single file share is supported.
      { # File share configuration for the instance.
        "capacityGb": "A String", # File share capacity in gigabytes (GB).
            # Cloud Filestore defines 1 GB as 1024^3 bytes.
        "name": "A String", # The name of the file share (must be 16 characters or less).
      },
    ],
    "tier": "A String", # The service tier of the instance.
    "createTime": "A String", # Output only.
        # The time when the instance was created.
    "statusMessage": "A String", # Output only.
        # Additional information about the instance state, if available.
    "name": "A String", # Output only.
        # The resource name of the instance, in the format
        # projects/{project_id}/locations/{location_id}/instances/{instance_id}.
  }

  updateMask: string, Mask of fields to update.  At least one path must be supplied in this
field.  The elements of the repeated paths field may only include these
fields:
"description"
  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.
    "response": { # 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`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # 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.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": 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.
    "name": "A String", # 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}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different 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` that 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.
        #
        # - 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 is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

</body></html>