<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="servicebroker_v1beta1.html">Service Broker API</a> . <a href="servicebroker_v1beta1.projects.html">projects</a> . <a href="servicebroker_v1beta1.projects.brokers.html">brokers</a> . <a href="servicebroker_v1beta1.projects.brokers.instances.html">instances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="servicebroker_v1beta1.projects.brokers.instances.bindings.html">bindings()</a></code>
</p>
<p class="firstline">Returns the bindings Resource.</p>

<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the given service instance from the system.</p>
<p class="toc_element">
  <code><a href="#getLast_operation">getLast_operation(name, planId=None, serviceId=None, x__xgafv=None, operation=None)</a></code></p>
<p class="firstline">Returns the state of the last operation for the service instance.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
<p class="firstline">Lists all the instances in the brokers</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="get">get(name, x__xgafv=None)</code>
  <pre>Gets the given service instance from the system.
The API call accepts both OSB style API and standard google style API
resource path.
i.e. both `projects/*/brokers/*/instances/*`
 and `projects/*/brokers/*/v2/service_instances/*` are acceptable paths.

Args:
  name: string, The resource name of the instance to return.
Name must match
`projects/[PROJECT_ID]/brokers/[BROKER_ID]/` +
`v2/service_instances/[INSTANCE_ID]`
or
`projects/[PROJECT_ID]/brokers/[BROKER_ID]/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:

    { # Message describing inputs to Provision and Update Service instance requests.
    "space_guid": "A String", # The identifier for the project space within the platform organization.
        # Required.
    "previous_values": { # Used only in UpdateServiceInstance request to optionally specify previous
        # fields.
      "a_key": "", # Properties of the object.
    },
    "plan_id": "A String", # The ID of the plan. See `Service` and `Plan` resources for details.
        # Maximum length is 64, GUID recommended.
        # Required.
    "description": "A String", # To return errors when GetInstance call is done via HTTP to be unified with
        # other methods.
    "parameters": { # Configuration options for the service instance.
        # Parameters is JSON object serialized to string.
      "a_key": "", # Properties of the object.
    },
    "organization_guid": "A String", # The platform GUID for the organization under which the service is to be
        # provisioned.
        # Required.
    "instance_id": "A String", # The id of the service instance. Must be unique within GCP project.
        # Maximum length is 64, GUID recommended.
        # Required.
    "deploymentName": "A String", # Output only.
        # String containing the Deployment Manager deployment name that was created
        # for this instance,
    "context": { # Platform specific contextual information under which the service instance
        # is to be provisioned. This replaces organization_guid and space_guid.
        # But can also contain anything.
        # Currently only used for logging context information.
      "a_key": "", # Properties of the object.
    },
    "service_id": "A String", # The id of the service. Must be a valid identifier of a service
        # contained in the list from a `ListServices()` call.
        # Maximum length is 64, GUID recommended.
        # Required.
    "resourceName": "A String", # Output only.
        # The resource name of the instance, e.g.
        # projects/project_id/brokers/broker_id/service_instances/instance_id
    "createTime": "A String", # Output only.
        # Timestamp for when the instance was created.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getLast_operation">getLast_operation(name, planId=None, serviceId=None, x__xgafv=None, operation=None)</code>
  <pre>Returns the state of the last operation for the service instance.
Only last (or current) operation can be polled.

Args:
  name: string, Name must match
`projects/[PROJECT_ID]/brokers/[BROKER_ID]/v2/`+
   `service_instances/[INSTANCE_ID]`. (required)
  planId: string, Plan id.
  serviceId: string, Service id.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  operation: string, If `operation` was returned during mutation operation, this field must be
populated with the provided value.

Returns:
  An object of the form:

    { # Describes a long running operation, which conforms to OpenService API.
    "state": "A String", # The state of the operation.
        # Valid values are: "in progress", "succeeded", and "failed".
    "description": "A String", # Optional description of the Operation state.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</code>
  <pre>Lists all the instances in the brokers
This API is an extension and not part of the OSB spec.
Hence the path is a standard Google API URL.

Args:
  parent: string, Parent must match `projects/[PROJECT_ID]/brokers/[BROKER_ID]`. (required)
  pageToken: string, Specifies a page token to use. Set `pageToken` to a `nextPageToken`
returned by a previous list request to get the next page of results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageSize: integer, Specifies the number of results to return per page. If there are fewer
elements than the specified number, returns all elements.
Optional. Acceptable values are 0 to 200, inclusive. (Default: 100)

Returns:
  An object of the form:

    { # The response for the `ListServiceInstances()` method.
    "nextPageToken": "A String", # This token allows you to get the next page of results for list requests.
        # If the number of results is larger than `pageSize`, use the `nextPageToken`
        # as a value for the query parameter `pageToken` in the next list request.
        # Subsequent list requests will have their own `nextPageToken` to continue
        # paging through the results
    "instances": [ # The list of instances in the broker.
      { # Message describing inputs to Provision and Update Service instance requests.
        "space_guid": "A String", # The identifier for the project space within the platform organization.
            # Required.
        "previous_values": { # Used only in UpdateServiceInstance request to optionally specify previous
            # fields.
          "a_key": "", # Properties of the object.
        },
        "plan_id": "A String", # The ID of the plan. See `Service` and `Plan` resources for details.
            # Maximum length is 64, GUID recommended.
            # Required.
        "description": "A String", # To return errors when GetInstance call is done via HTTP to be unified with
            # other methods.
        "parameters": { # Configuration options for the service instance.
            # Parameters is JSON object serialized to string.
          "a_key": "", # Properties of the object.
        },
        "organization_guid": "A String", # The platform GUID for the organization under which the service is to be
            # provisioned.
            # Required.
        "instance_id": "A String", # The id of the service instance. Must be unique within GCP project.
            # Maximum length is 64, GUID recommended.
            # Required.
        "deploymentName": "A String", # Output only.
            # String containing the Deployment Manager deployment name that was created
            # for this instance,
        "context": { # Platform specific contextual information under which the service instance
            # is to be provisioned. This replaces organization_guid and space_guid.
            # But can also contain anything.
            # Currently only used for logging context information.
          "a_key": "", # Properties of the object.
        },
        "service_id": "A String", # The id of the service. Must be a valid identifier of a service
            # contained in the list from a `ListServices()` call.
            # Maximum length is 64, GUID recommended.
            # Required.
        "resourceName": "A String", # Output only.
            # The resource name of the instance, e.g.
            # projects/project_id/brokers/broker_id/service_instances/instance_id
        "createTime": "A String", # Output only.
            # Timestamp for when the instance was created.
      },
    ],
    "description": "A String", # Used to communicate description of the response. Usually for non-standard
        # error codes.
        # https://github.com/openservicebrokerapi/servicebroker/blob/master/spec.md#service-broker-errors
  }</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>

</body></html>