<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> . <a href="servicebroker_v1beta1.projects.brokers.instances.bindings.html">bindings</a></h1>
<h2>Instance Methods</h2>
<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 binding.</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 bindings in the instance.</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="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 binding.
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]/service_binding/[BINDING_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 bindings in the instance.

Args:
  parent: string, Parent must match
`projects/[PROJECT_ID]/brokers/[BROKER_ID]/` +
`v2/service_instances/[INSTANCE_ID]`
or
`projects/[PROJECT_ID]/brokers/[BROKER_ID]/instances/[INSTANCE_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 `ListBindings()` 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
    "bindings": [ # The list of bindings in the instance.
      { # Describes the binding.
        "plan_id": "A String", # The ID of the plan. See `Service` and `Plan` resources for details.
            # Maximum length is 64, GUID recommended.
            # Required.
        "parameters": { # Configuration options for the service binding.
          "a_key": "", # Properties of the object.
        },
        "deploymentName": "A String", # Output only.
            # String containing the Deployment Manager deployment name that was created
            # for this binding,
        "binding_id": "A String", # The id of the binding. Must be unique within GCP project.
            # Maximum length is 64, GUID recommended.
            # Required.
        "resourceName": "A String", # Output only.
            # The resource name of the binding, e.g.
            # projects/project_id/brokers/broker_id/service_instances/instance_id/bindings/binding_id.
        "bind_resource": { # A JSON object that contains data for platform resources associated with
            # the binding to be created.
          "a_key": "", # Properties of the object.
        },
        "createTime": "A String", # Output only.
            # Timestamp for when the binding was created.
        "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.
      },
    ],
    "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>