{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":"tools","path":"tools","contentType":"directory"},{"name":".pullapprove.yml","path":".pullapprove.yml","contentType":"file"},{"name":".travis.yml","path":".travis.yml","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"NOTICE","path":"NOTICE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"_release-notes.md","path":"_release-notes.md","contentType":"symlink_file"},{"name":"_spec.md","path":"_spec.md","contentType":"symlink_file"},{"name":"profile.md","path":"profile.md","contentType":"file"},{"name":"release-notes.md","path":"release-notes.md","contentType":"file"},{"name":"spec.md","path":"spec.md","contentType":"file"}],"totalCount":12}},"fileTreeProcessingTime":9.887198999999999,"foldersToFetch":[],"repo":{"id":62855546,"defaultBranch":"master","name":"servicebroker","ownerLogin":"openservicebrokerapi","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-07-08T03:22:26.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/19862012?v=4","public":true,"private":false,"isOrgOwned":true},"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"v2.12","listCacheKey":"v0:1660072168.886137","canEdit":false,"refType":"tag","currentOid":"edefb618af463dd7a6eec2f9da2bcb2ad8cc2055"},"path":"spec.md","currentUser":null,"blob":{"rawLines":null,"stylingDirectives":null,"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/openservicebrokerapi/servicebroker/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"spec.md","displayUrl":"https://github.com/openservicebrokerapi/servicebroker/blob/v2.12/spec.md?raw=true","headerInfo":{"blobSize":"53.1 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":null,"isGitLfs":false,"onBranch":false,"shortPath":"4f96737","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fopenservicebrokerapi%2Fservicebroker%2Fblob%2Fv2.12%2Fspec.md","isCSV":false,"isRichtext":true,"toc":[{"level":1,"text":"Open Service Broker API v2.12","anchor":"open-service-broker-api-v212","htmlText":"Open Service Broker API v2.12"},{"level":2,"text":"Table of Contents","anchor":"table-of-contents","htmlText":"Table of Contents"},{"level":2,"text":"API Overview","anchor":"api-overview","htmlText":"API Overview"},{"level":2,"text":"Notations and Terminology","anchor":"notations-and-terminology","htmlText":"Notations and Terminology"},{"level":3,"text":"Notational Conventions","anchor":"notational-conventions","htmlText":"Notational Conventions"},{"level":3,"text":"Terminology","anchor":"terminology","htmlText":"Terminology"},{"level":2,"text":"Changes","anchor":"changes","htmlText":"Changes"},{"level":3,"text":"Change Policy","anchor":"change-policy","htmlText":"Change Policy"},{"level":3,"text":"Changes Since v2.11","anchor":"changes-since-v211","htmlText":"Changes Since v2.11"},{"level":2,"text":"API Version Header","anchor":"api-version-header","htmlText":"API Version Header"},{"level":2,"text":"Authentication","anchor":"authentication","htmlText":"Authentication"},{"level":2,"text":"Catalog Management","anchor":"catalog-management","htmlText":"Catalog Management"},{"level":3,"text":"Request","anchor":"request","htmlText":"Request"},{"level":4,"text":"Route","anchor":"route","htmlText":"Route"},{"level":4,"text":"cURL","anchor":"curl","htmlText":"cURL"},{"level":3,"text":"Response","anchor":"response","htmlText":"Response"},{"level":4,"text":"Body - Schema of Service Objects","anchor":"body---schema-of-service-objects","htmlText":"Body - Schema of Service Objects"},{"level":5,"text":"Service Objects","anchor":"service-objects","htmlText":"Service Objects"},{"level":5,"text":"Dashboard Client Object","anchor":"dashboard-client-object","htmlText":"Dashboard Client Object"},{"level":5,"text":"Plan Object","anchor":"plan-object","htmlText":"Plan Object"},{"level":3,"text":"Adding a Broker to the Platform","anchor":"adding-a-broker-to-the-platform","htmlText":"Adding a Broker to the Platform"},{"level":2,"text":"Synchronous and Asynchronous Operations","anchor":"synchronous-and-asynchronous-operations","htmlText":"Synchronous and Asynchronous Operations"},{"level":3,"text":"Synchronous Operations","anchor":"synchronous-operations","htmlText":"Synchronous Operations"},{"level":3,"text":"Asynchronous Operations","anchor":"asynchronous-operations","htmlText":"Asynchronous Operations"},{"level":4,"text":"Blocking Operations","anchor":"blocking-operations","htmlText":"Blocking Operations"},{"level":2,"text":"Polling Last Operation","anchor":"polling-last-operation","htmlText":"Polling Last Operation"},{"level":3,"text":"Request","anchor":"request-1","htmlText":"Request"},{"level":5,"text":"Route","anchor":"route-1","htmlText":"Route"},{"level":5,"text":"Parameters","anchor":"parameters","htmlText":"Parameters"},{"level":5,"text":"cURL","anchor":"curl-1","htmlText":"cURL"},{"level":3,"text":"Response","anchor":"response-1","htmlText":"Response"},{"level":5,"text":"Body","anchor":"body","htmlText":"Body"},{"level":3,"text":"Polling Interval and Duration","anchor":"polling-interval-and-duration","htmlText":"Polling Interval and Duration"},{"level":2,"text":"Provisioning","anchor":"provisioning","htmlText":"Provisioning"},{"level":3,"text":"Request","anchor":"request-2","htmlText":"Request"},{"level":5,"text":"Route","anchor":"route-2","htmlText":"Route"},{"level":4,"text":"Parameters","anchor":"parameters-1","htmlText":"Parameters"},{"level":5,"text":"Body","anchor":"body-1","htmlText":"Body"},{"level":5,"text":"cURL","anchor":"curl-2","htmlText":"cURL"},{"level":3,"text":"Response","anchor":"response-2","htmlText":"Response"},{"level":5,"text":"Body","anchor":"body-2","htmlText":"Body"},{"level":2,"text":"Updating a Service Instance","anchor":"updating-a-service-instance","htmlText":"Updating a Service Instance"},{"level":3,"text":"Request","anchor":"request-3","htmlText":"Request"},{"level":5,"text":"Route","anchor":"route-3","htmlText":"Route"},{"level":4,"text":"Parameters","anchor":"parameters-2","htmlText":"Parameters"},{"level":5,"text":"Body","anchor":"body-3","htmlText":"Body"},{"level":5,"text":"cURL","anchor":"curl-3","htmlText":"cURL"},{"level":3,"text":"Response","anchor":"response-3","htmlText":"Response"},{"level":5,"text":"Body","anchor":"body-4","htmlText":"Body"},{"level":2,"text":"Binding","anchor":"binding","htmlText":"Binding"},{"level":3,"text":"Types of Binding","anchor":"types-of-binding","htmlText":"Types of Binding"},{"level":4,"text":"Credentials","anchor":"credentials","htmlText":"Credentials"},{"level":4,"text":"Log Drain","anchor":"log-drain","htmlText":"Log Drain"},{"level":4,"text":"Route Services","anchor":"route-services","htmlText":"Route Services"},{"level":4,"text":"Volume Services","anchor":"volume-services","htmlText":"Volume Services"},{"level":3,"text":"Request","anchor":"request-4","htmlText":"Request"},{"level":5,"text":"Route","anchor":"route-4","htmlText":"Route"},{"level":5,"text":"Body","anchor":"body-5","htmlText":"Body"},{"level":5,"text":"Bind Resource Object","anchor":"bind-resource-object","htmlText":"Bind Resource Object"},{"level":5,"text":"cURL","anchor":"curl-4","htmlText":"cURL"},{"level":3,"text":"Response","anchor":"response-4","htmlText":"Response"},{"level":5,"text":"Body","anchor":"body-6","htmlText":"Body"},{"level":5,"text":"Volume Mounts Object","anchor":"volume-mounts-object","htmlText":"Volume Mounts Object"},{"level":5,"text":"Device Object","anchor":"device-object","htmlText":"Device Object"},{"level":2,"text":"Unbinding","anchor":"unbinding","htmlText":"Unbinding"},{"level":3,"text":"Request","anchor":"request-5","htmlText":"Request"},{"level":5,"text":"Route","anchor":"route-5","htmlText":"Route"},{"level":5,"text":"Parameters","anchor":"parameters-3","htmlText":"Parameters"},{"level":5,"text":"cURL","anchor":"curl-5","htmlText":"cURL"},{"level":3,"text":"Response","anchor":"response-5","htmlText":"Response"},{"level":5,"text":"Body","anchor":"body-7","htmlText":"Body"},{"level":2,"text":"Deprovisioning","anchor":"deprovisioning","htmlText":"Deprovisioning"},{"level":3,"text":"Request","anchor":"request-6","htmlText":"Request"},{"level":5,"text":"Route","anchor":"route-6","htmlText":"Route"},{"level":5,"text":"Parameters","anchor":"parameters-4","htmlText":"Parameters"},{"level":5,"text":"cURL","anchor":"curl-6","htmlText":"cURL"},{"level":3,"text":"Response","anchor":"response-6","htmlText":"Response"},{"level":5,"text":"Body","anchor":"body-8","htmlText":"Body"},{"level":2,"text":"Broker Errors","anchor":"broker-errors","htmlText":"Broker Errors"},{"level":3,"text":"Response","anchor":"response-7","htmlText":"Response"},{"level":5,"text":"Body","anchor":"body-9","htmlText":"Body"},{"level":2,"text":"Orphans","anchor":"orphans","htmlText":"Orphans"}],"lineInfo":{"truncatedLoc":"942","truncatedSloc":"709"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/openservicebrokerapi/servicebroker/blob/v2.12/spec.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/openservicebrokerapi/servicebroker/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/openservicebrokerapi/servicebroker/raw/v2.12/spec.md","renderImageOrRaw":false,"richText":"

Open Service Broker API v2.12

\n

Table of Contents

\n\n

API Overview

\n

The Service Broker API defines an HTTP interface between the services marketplace of a platform and service brokers.

\n

The service broker is the component of the service that implements the Service Broker API, for which a platform's marketplace is a client. Service brokers are responsible for advertising a catalog of service offerings and service plans to the marketplace, and acting on requests from the marketplace for provisioning, binding, unbinding, and deprovisioning.

\n

In general, provisioning reserves a resource on a service; we call this reserved resource a service instance. What a service instance represents can vary by service. Examples include a single database on a multi-tenant server, a dedicated cluster, or an account on a web application.

\n

What a binding represents MAY also vary by service. In general creation of a binding either generates credentials necessary for accessing the resource or provides the service instance with information for a configuration change.

\n

A platform marketplace MAY expose services from one or many service brokers, and an individual service broker MAY support one or many platform marketplaces using different URL prefixes and credentials.

\n

Notations and Terminology

\n

Notational Conventions

\n

The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\",\n\"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this document are to\nbe interpreted as described in RFC 2119.

\n

Terminology

\n

This specification defines the following terms:

\n\n

Changes

\n

Change Policy

\n\n

Changes Since v2.11

\n\n

For changes in older versions, see the release notes.

\n

API Version Header

\n

Requests from the platform to the service broker MUST contain a header that declares the version number of the Service Broker API that the marketplace will use:

\n

X-Broker-Api-Version: 2.12

\n

The version numbers are in the format MAJOR.MINOR using semantic versioning.

\n

This header allows brokers to reject requests from marketplaces for versions they do not support. While minor API revisions will always be additive, it is possible that brokers depend on a feature from a newer version of the API that is supported by the platform. In this scenario the broker MAY reject the request with 412 Precondition Failed and provide a message that informs the operator of the API version that is to be used instead.

\n

Authentication

\n

The marketplace MUST authenticate with the service broker using HTTP\nbasic authentication (the Authorization: header) on every request. The broker is responsible for validating the username and password and returning a 401 Unauthorized message if credentials are invalid. It is RECOMMENDED that brokers support secure communication from platform marketplaces over TLS.

\n

Catalog Management

\n

The first endpoint that a platform will interact with on the broker is the service catalog.

\n

The platform marketplace fetches this endpoint from all brokers in order to present an aggregated user-facing catalog.

\n

Warnings for broker authors:

\n\n

The following sections describe catalog requests and responses in the Service Broker API.

\n

Request

\n

Route

\n

GET /v2/catalog

\n

cURL

\n
$ curl -H \"X-Broker-API-Version: 2.12\" http://username:password@broker-url/v2/catalog\n
\n

Response

\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status CodeDescription
200 OKMUST be returned upon successful processing of this request. The expected response body is below.
\n

Body - Schema of Service Objects

\n

CLI and web clients have different needs with regard to service and plan names.\nA CLI-friendly string is all lowercase, with no spaces.\nKeep it short -- imagine a user having to type it as an argument for a longer\ncommand.\nA web-friendly display name is camel-cased with spaces and punctuation supported.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
services*array-of-service-objectsSchema of service objects defined below. MAY be empty.
\n
Service Objects
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
name*stringA CLI-friendly name of the service. All lowercase, no spaces. This MUST be globally unique within a platform marketplace. MUST be a non-empty string.
id*stringAn identifier used to correlate this service in future requests to the broker. This MUST be globally unique within a platform marketplace. MUST be a non-empty string. Using a GUID is RECOMMENDED.
description*stringA short description of the service. MUST be a non-empty string.
tagsarray-of-stringsTags provide a flexible mechanism to expose a classification, attribute, or base technology of a service, enabling equivalent services to be swapped out without changes to dependent logic in applications, buildpacks, or other services. E.g. mysql, relational, redis, key-value, caching, messaging, amqp.
requiresarray-of-stringsA list of permissions that the user would have to give the service, if they provision it. The only permissions currently supported are syslog_drain, route_forwarding and volume_mount.
bindable*booleanSpecifies whether service instances of the service can be bound to applications. This specifies the default for all plans of this service. Plans can override this field (see Plan Object).
metadataJSON objectAn opaque object of metadata for a service offering. Controller treats this as a blob. Note that there are conventions in existing brokers and controllers for fields that aid in the display of catalog data.
dashboard_clientobjectContains the data necessary to activate the Dashboard SSO feature for this service.
plan_updateablebooleanWhether the service supports upgrade/downgrade for some plans. Please note that the misspelling of the attribute plan_updatable to plan_updateable was done by mistake. We have opted to keep that misspelling instead of fixing it and thus breaking backward compatibility. Defaults to false.
plans*array-of-objectsA list of plans for this service, schema is defined below. MUST contain at least one plan.
\n
Dashboard Client Object
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
idstringThe id of the Oauth client that the dashboard will use. If present, MUST be a non-empty string.
secretstringA secret for the dashboard client. If present, MUST be a non-empty string.
redirect_uristringA URI for the service dashboard. Validated by the OAuth token server when the dashboard requests a token.
\n
Plan Object
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
id*stringAn identifier used to correlate this plan in future requests to the broker. This MUST be globally unique within a platform marketplace. MUST be a non-empty string. Using a GUID is RECOMMENDED.
name*stringThe CLI-friendly name of the plan. MUST be unique within the service. All lowercase, no spaces. MUST be a non-empty string.
description*stringA short description of the plan. MUST be a non-empty string.
metadataJSON objectAn opaque object of metadata for a service plan. Controller treats this as a blob. Note that there are conventions in existing brokers and controllers for fields that aid in the display of catalog data.
freebooleanWhen false, service instances of this plan have a cost. The default is true.
bindablebooleanSpecifies whether service instances of the service plan can be bound to applications. This field is OPTIONAL. If specified, this takes precedence over the bindable attribute of the service. If not specified, the default is derived from the service.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"services\": [{\n    \"name\": \"fake-service\",\n    \"id\": \"acb56d7c-XXXX-XXXX-XXXX-feb140a59a66\",\n    \"description\": \"fake service\",\n    \"tags\": [\"no-sql\", \"relational\"],\n    \"requires\": [\"route_forwarding\"],\n    \"bindable\": true,\n    \"metadata\": {\n      \"provider\": {\n        \"name\": \"The name\"\n      },\n      \"listing\": {\n        \"imageUrl\": \"http://example.com/cat.gif\",\n        \"blurb\": \"Add a blurb here\",\n        \"longDescription\": \"A long time ago, in a galaxy far far away...\"\n      },\n      \"displayName\": \"The Fake Broker\"\n    },\n    \"dashboard_client\": {\n      \"id\": \"398e2f8e-XXXX-XXXX-XXXX-19a71ecbcf64\",\n      \"secret\": \"277cabb0-XXXX-XXXX-XXXX-7822c0a90e5d\",\n      \"redirect_uri\": \"http://localhost:1234\"\n    },\n    \"plan_updateable\": true,\n    \"plans\": [{\n      \"name\": \"fake-plan-1\",\n      \"id\": \"d3031751-XXXX-XXXX-XXXX-a42377d3320e\",\n      \"description\": \"Shared fake Server, 5tb persistent disk, 40 max concurrent connections\",\n      \"max_storage_tb\": 5,\n      \"metadata\": {\n        \"costs\":[\n            {\n               \"amount\":{\n                  \"usd\":99.0\n               },\n               \"unit\":\"MONTHLY\"\n            },\n            {\n               \"amount\":{\n                  \"usd\":0.99\n               },\n               \"unit\":\"1GB of messages over 20GB\"\n            }\n         ],\n        \"bullets\": [\n          \"Shared fake server\",\n          \"5 TB storage\",\n          \"40 concurrent connections\"\n        ]\n      }\n    }, {\n      \"name\": \"fake-plan-2\",\n      \"id\": \"0f4008b5-XXXX-XXXX-XXXX-dace631cd648\",\n      \"description\": \"Shared fake Server, 5tb persistent disk, 40 max concurrent connections. 100 async\",\n      \"max_storage_tb\": 5,\n      \"metadata\": {\n        \"costs\":[\n            {\n               \"amount\":{\n                  \"usd\":199.0\n               },\n               \"unit\":\"MONTHLY\"\n            },\n            {\n               \"amount\":{\n                  \"usd\":0.99\n               },\n               \"unit\":\"1GB of messages over 20GB\"\n            }\n         ],\n        \"bullets\": [\n          \"40 concurrent connections\"\n        ]\n      }\n    }]\n  }]\n}\n
\n

Adding a Broker to the Platform

\n

After implementing the first endpoint GET /v2/catalog documented above, the service broker will need to be registered with your platform to make your services and plans available to end users.

\n

Synchronous and Asynchronous Operations

\n

Platforms expect prompt responses to all API requests in order to provide users with fast feedback. Service broker authors SHOULD implement their brokers to respond promptly to all requests but will need to decide whether to implement synchronous or asynchronous responses. Brokers that can guarantee completion of the requested operation with the response SHOULD return the synchronous response. Brokers that cannot guarantee completion of the operation with the response SHOULD implement the asynchronous response.

\n

Providing a synchronous response for a provision, update, or bind operation before actual completion causes confusion for users as their service might not be usable and they have no way to find out when it will be. Asynchronous responses set expectations for users that an operation is in progress and can also provide updates on the status of the operation.

\n

Support for synchronous or asynchronous responses MAY vary by service offering, even by service plan.

\n

Synchronous Operations

\n

To execute a request synchronously, the broker need only return the usual status codes: 201 Created for provision and bind, and 200 OK for update, unbind, and deprovision.

\n

Brokers that support sychronous responses for provision, update, and delete can ignore the accepts_incomplete=true query parameter if it is provided by the client.

\n

Asynchronous Operations

\n

Note: Asynchronous operations are currently supported only for provision, update, and deprovision.

\n

For a broker to return an asynchronous response, the query parameter accepts_incomplete=true MUST be included the request. If the parameter is not included or is set to false, and the broker cannot fulfill the request synchronously (guaranteeing that the operation is complete on response), then the broker SHOULD reject the request with the status code 422 Unprocessable Entity and the following body:

\n
{\n  \"error\": \"AsyncRequired\",\n  \"description\": \"This service plan requires client support for asynchronous service operations.\"\n}\n
\n

If the query parameter described above is present, and the broker executes the request asynchronously, the broker MUST return the asynchronous response 202 Accepted. The response body SHOULD be the same as if the broker were serving the request synchronously.

\n

An asynchronous response triggers the platform marketplace to poll the endpoint GET /v2/service_instances/:guid/last_operation until the broker indicates that the requested operation has succeeded or failed. Brokers MAY include a status message with each response for the last_operation endpoint that provides visibility to end users as to the progress of the operation.

\n

Blocking Operations

\n

Brokers do not have to support concurrent requests that act on the same\nset of resources. If a broker receives a request that it is not able to\nprocess due to other activity being done on that resource then the broker\nMUST reject the request with an HTTP 422 Unprocessable Entity.\nThe HTTP body of the response MUST include a description property\nexplaining the reason for the failure.

\n

Sample response:

\n
{\n  \"description\": \"Another operation for this service instance is in progress\"\n}\n
\n

Polling Last Operation

\n

When a broker returns status code 202 Accepted for Provision, Update, or Deprovision, the platform will begin polling the /v2/service_instances/:guid/last_operation endpoint to obtain the state of the last requested operation. The broker response MUST contain the field state and MAY contain the field description.

\n

Valid values for state are in progress, succeeded, and failed. The platform will poll the last_operation endpoint as long as the broker returns \"state\": \"in progress\". Returning \"state\": \"succeeded\" or \"state\": \"failed\" will cause the platform to cease polling. The value provided for description will be passed through to the platform API client and can be used to provide additional detail for users about the progress of the operation.

\n

Request

\n
Route
\n

GET /v2/service_instances/:instance_id/last_operation

\n
Parameters
\n

The request provides these query string parameters as useful hints for brokers.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query-String FieldTypeDescription
service_idstringID of the service from the catalog. If present, MUST be a non-empty string.
plan_idstringID of the plan from the catalog. If present, MUST be a non-empty string.
operationstringA broker-provided identifier for the operation. When a value for operation is included with asynchronous responses for Provision, Update, and Deprovision requests, the platform MUST provide the same value using this query parameter as a URL-encoded string. If present, MUST be a non-empty string.
\n

Note: Although the request query parameters `service_id` and `plan_id` are not mandatory, the platform SHOULD include them on all `last_operation` requests it makes to service brokers.

\n
cURL
\n
$ curl http://username:password@broker-url/v2/service_instances/:instance_id/last_operation\n
\n

Response

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status CodeDescription
200 OKMUST be returned upon successful processing of this request. The expected response body is below.
410 GoneAppropriate only for asynchronous delete operations. The platform MUST consider this response a success and remove the resource from its database. The expected response body is {}. Returning this while the platform is polling for create or update operations SHOULD be interpreted as an invalid response and the platform SHOULD continue polling.
\n

Responses with any other status code SHOULD be interpreted as an error or invalid response. The platform SHOULD continue polling until the broker returns a valid response or the maximum polling duration is reached. Brokers MAY use the description field to expose user-facing error messages about the operation state; for more info see Broker Errors.

\n
Body
\n

All response bodies MUST be a valid JSON Object ({}). This is for future compatibility; it will be easier to add fields in the future if JSON is expected rather than to support the cases when a JSON body might or might not be returned.

\n

For success responses, the following fields are valid.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
state*stringValid values are in progress, succeeded, and failed. While \"state\": \"in progress\", the platform SHOULD continue polling. A response with \"state\": \"succeeded\" or \"state\": \"failed\" MUST cause the platform to cease polling.
descriptionstringA user-facing message displayed to the platform API client. Can be used to tell the user details about the status of the operation. If present, MUST be a non-empty string.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"state\": \"in progress\",\n  \"description\": \"Creating service (10% complete).\"\n}\n
\n

Polling Interval and Duration

\n

The frequency and maximum duration of polling MAY vary by platform client. If a platform has a max polling duration and this limit is reached, the platform MUST cease polling and the operation state MUST be considered failed.

\n

Provisioning

\n

When the broker receives a provision request from the platform, it MUST take whatever action is necessary to create a new resource. What provisioning represents varies by service and plan, although there are several common use cases. For a MySQL service, provisioning could result in an empty dedicated database server running on its own VM or an empty schema on a shared database server. For non-data services, provisioning could just mean an account on an multi-tenant SaaS application.

\n

Request

\n
Route
\n

PUT /v2/service_instances/:instance_id

\n

The :instance_id of a service instance is provided by the platform. This ID will be used for future requests (bind and deprovision), so the broker will use it to correlate the resource it creates.

\n

Parameters

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Parameter nameTypeDescription
accepts_incompletebooleanA value of true indicates that the marketplace and its clients support asynchronous broker operations. If this parameter is not included in the request, and the broker can only provision a service instance of the requested plan asynchronously, the broker MUST reject the request with a 422 Unprocessable Entity as described below.
\n
Body
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Request fieldTypeDescription
service_id*stringThe ID of the service (from the catalog). MUST be globally unique. MUST be a non-empty string.
plan_id*stringThe ID of the plan (from the catalog) for which the service instance has been requested. MUST be unique to a service. MUST be a non-empty string.
contextobjectPlatform specific contextual information under which the service instance is to be provisioned. Although most brokers will not use this field, it could be helpful in determining data placement or applying custom business rules. context will replace organization_guid and space_guid in future versions of the specification - in the interim both SHOULD be used to ensure interoperability with old and new implementations.
organization_guid*stringDeprecated in favor of context. The platform GUID for the organization under which the service instance is to be provisioned. Although most brokers will not use this field, it might be helpful for executing operations on a user's behalf. MUST be a non-empty string.
space_guid*stringDeprecated in favor of context. The identifier for the project space within the platform organization. Although most brokers will not use this field, it might be helpful for executing operations on a user's behalf. MUST be a non-empty string.
parametersJSON objectConfiguration options for the service instance. Controller treats this as a blob. Brokers SHOULD ensure that the client has provided valid configuration parameters and values for the operation.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"context\": {\n    \"platform\": \"cloudfoundry\",\n    \"some_field\": \"some-contextual-data\"\n  },\n  \"service_id\": \"service-guid-here\",\n  \"plan_id\": \"plan-guid-here\",\n  \"organization_guid\": \"org-guid-here\",\n  \"space_guid\": \"space-guid-here\",\n  \"parameters\": {\n    \"parameter1\": 1,\n    \"parameter2\": \"foo\"\n  }\n}\n
\n
cURL
\n
$ curl http://username:password@broker-url/v2/service_instances/:instance_id?accepts_incomplete=true -d '{\n  \"context\": {\n    \"platform\": \"cloudfoundry\",\n    \"some_field\": \"some-contextual-data\"\n  },\n  \"service_id\": \"service-guid-here\",\n  \"plan_id\": \"plan-guid-here\",\n  \"organization_guid\": \"org-guid-here\",\n  \"space_guid\": \"space-guid-here\",\n  \"parameters\": {\n    \"parameter1\": 1,\n    \"parameter2\": \"foo\"\n  }\n}' -X PUT -H \"X-Broker-API-Version: 2.12\" -H \"Content-Type: application/json\"\n
\n

Response

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status CodeDescription
200 OKMUST be returned if the service instance already exists, is fully provisioned, and the requested parameters are identical to the existing service instance. The expected response body is below.
201 CreatedMUST be returned if the service instance was provisioned as a result of this request. The expected response body is below.
202 AcceptedMUST be returned if the service instance provisioning is in progress. This triggers the platform marketplace to poll the Service Instance Last Operation Endpoint for operation status. Note that a re-sent PUT request MUST return a 202 Accepted, not a 200 OK, if the service instance is not yet fully provisioned.
409 ConflictMUST be returned if a service instance with the same id already exists but with different attributes. The expected response body is {}, though the description field MAY be used to return a user-facing error message, as described in Broker Errors.
422 Unprocessable EntityMUST be returned if the broker only supports asynchronous provisioning for the requested plan and the request did not include ?accepts_incomplete=true. The expected response body is: { \"error\": \"AsyncRequired\", \"description\": \"This service plan requires client support for asynchronous service operations.\" }, as described below.
\n

Responses with any other status code will be interpreted as a failure. Brokers can include a user-facing message in the description field; for details see Broker Errors.

\n
Body
\n

All response bodies MUST be a valid JSON Object ({}). This is for future compatibility; it will be easier to add fields in the future if JSON is expected rather than to support the cases when a JSON body might or might not be returned.

\n

For success responses, a broker MUST return the following fields. For error responses, see Broker Errors.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
dashboard_urlstringThe URL of a web-based management user interface for the service instance; we refer to this as a service dashboard. The URL MUST contain enough information for the dashboard to identify the resource being accessed (9189kdfsk0vfnku in the example below). Note: a broker that wishes to return dashboard_url for a service instance MUST return it with the initial response to the provision request, even if the service is provisioned asynchronously. If present, MUST be a non-empty string.
operationstringFor asynchronous responses, service brokers MAY return an identifier representing the operation. The value of this field MUST be provided by the platform with requests to the Last Operation endpoint in a URL encoded query parameter. If present, MUST be a non-empty string.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"dashboard_url\": \"http://example-dashboard.example.com/9189kdfsk0vfnku\",\n  \"operation\": \"task_10\"\n}\n
\n

Updating a Service Instance

\n

By implementing this endpoint, service broker authors can enable users to modify two attributes of an existing service instance: the service plan and parameters. By changing the service plan, users can upgrade or downgrade their service instance to other plans. By modifying properties, users can change configuration options that are specific to a service or plan.

\n

To enable support for the update of the plan, a broker MUST declare support per service by including plan_updateable: true in its catalog endpoint.

\n

Not all permutations of plan changes are expected to be supported. For example, a service might support upgrading from plan \"shared small\" to \"shared large\" but not to plan \"dedicated\". It is up to the broker to validate whether a particular permutation of plan change is supported. If a particular plan change is not supported, the broker SHOULD return a meaningful error message in response.

\n

Request

\n
Route
\n

PATCH /v2/service_instances/:instance_id

\n

:instance_id is the global unique ID of a previously provisioned service instance.

\n

Parameters

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Parameter nameTypeDescription
accepts_incompletebooleanA value of true indicates that the marketplace and its clients support asynchronous broker operations. If this parameter is not included in the request, and the broker can only provision a service instance of the requested plan asynchronously, the broker SHOULD reject the request with a 422 Unprocessable Entity as described below.
\n
Body
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Request FieldTypeDescription
contextobjectContextual data under which the service instance is created.
service_id*stringThe ID of the service (from the catalog). MUST be globally unique. MUST be a non-empty string.
plan_idstringThe ID of the plan (from the catalog) for which the service instance has been requested. MUST be unique to a service. If present, MUST be a non-empty string. If this field is not present in the request message, then the broker MUST NOT change the plan of the instance as a result of this request.
parametersJSON objectConfiguration options for the service instance. An opaque object, controller treats this as a blob. Brokers SHOULD ensure that the client has provided valid configuration parameters and values for the operation. If this field is not present in the request message, then the broker MUST NOT change the parameters of the instance as a result of this request.
previous_valuesobjectInformation about the service instance prior to the update.
previous_values.service_idstringDeprecated; determined to be unnecessary as the value is immutable. ID of the service for the service instance. If present, MUST be a non-empty string.
previous_values.plan_idstringID of the plan prior to the update. If present, MUST be a non-empty string.
previous_values.organization_idstringDeprecated as it was redundant information. Organization for the service instance MUST be provided by platforms in the top-level field context. ID of the organization specified for the service instance. If present, MUST be a non-empty string.
previous_values.space_idstringDeprecated as it was redundant information. Space for the service instance MUST be provided by platforms in the top-level field context. ID of the space specified for the service instance. If present, MUST be a non-empty string.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"context\": {\n    \"platform\": \"cloudfoundry\",\n    \"some_field\": \"some-contextual-data\"\n  },\n  \"service_id\": \"service-guid-here\",\n  \"plan_id\": \"plan-guid-here\",\n  \"parameters\": {\n    \"parameter1\": 1,\n    \"parameter2\": \"foo\"\n  },\n  \"previous_values\": {\n    \"plan_id\": \"old-plan-guid-here\",\n    \"service_id\": \"service-guid-here\",\n    \"organization_id\": \"org-guid-here\",\n    \"space_id\": \"space-guid-here\"\n  }\n}\n
\n
cURL
\n
$ curl http://username:password@broker-url/v2/service_instances/:instance_id?accepts_incomplete=true -d '{\n  \"context\": {\n    \"platform\": \"cloudfoundry\",\n    \"some_field\": \"some-contextual-data\"\n  },\n  \"service_id\": \"service-guid-here\",\n  \"plan_id\": \"plan-guid-here\",\n  \"parameters\": {\n    \"parameter1\": 1,\n    \"parameter2\": \"foo\"\n  },\n  \"previous_values\": {\n    \"plan_id\": \"old-plan-guid-here\",\n    \"service_id\": \"service-guid-here\",\n    \"organization_id\": \"org-guid-here\",\n    \"space_id\": \"space-guid-here\"\n  }\n}' -X PATCH -H \"X-Broker-API-Version: 2.12\" -H \"Content-Type: application/json\"\n
\n

Response

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status CodeDescription
200 OKMUST be returned if the request's changes have been applied. The expected response body is {}.
202 AcceptedMUST be returned if the service instance update is in progress. This triggers the platform marketplace to poll the Last Operation for operation status. Note that a re-sent PATCH request MUST return a 202 Accepted, not a 200 OK, if the requested update has not yet completed.
422 Unprocessable entityMUST be returned if the requested change is not supported or if the request cannot currently be fulfilled due to the state of the service instance (e.g. service instance utilization is over the quota of the requested plan). Brokers SHOULD include a user-facing message in the body; for details see Broker Errors. Additionally, a 422 Unprocessable Entity can also be returned if the broker only supports asynchronous update for the requested plan and the request did not include ?accepts_incomplete=true; in this case the expected response body is: { \"error\": \"AsyncRequired\", \"description\": \"This service plan requires client support for asynchronous service operations.\" }
\n

Responses with any other status code will be interpreted as a failure. Brokers can include a user-facing message in the description field; for details see Broker Errors.

\n
Body
\n

All response bodies MUST be a valid JSON Object ({}). This is for future compatibility; it will be easier to add fields in the future if JSON is expected rather than to support the cases when a JSON body might or might not be returned.

\n

For success responses, a broker MUST return the following field. Others will be ignored. For error responses, see Broker Errors.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
operationstringFor asynchronous responses, service brokers MAY return an identifier representing the operation. The value of this field MUST be provided by the platform with requests to the Last Operation endpoint in a URL encoded query parameter. If present, MUST be a non-empty string.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"operation\": \"task_10\"\n}\n
\n

Binding

\n

If bindable:true is declared for a service or plan in the Catalog endpoint, the platform MAY request generation of a service binding.

\n

Note: Not all services need to be bindable --- some deliver value just from being provisioned. Brokers that offer services that are bindable MUST declare them as such using `bindable: true` in the [Catalog](#catalog-management). Brokers that do not offer any bindable services do not need to implement the endpoint for bind requests.

\n

Types of Binding

\n

Credentials

\n

Credentials are a set of information used by an application or a user to utilize the service instance. If the broker supports generation of credentials it MUST return credentials in the response for a request to create a service binding. Credentials SHOULD be unique whenever possible, so access can be revoked for each binding without affecting consumers of other bindings for the service instance.

\n

Log Drain

\n

There are a class of service offerings that provide aggregation, indexing, and\nanalysis of log data. To utilize these services an application that generates\nlogs needs information for the location to which it will stream logs. A\ncreate binding response from a service broker that provides one of these\nservices MUST include a syslog_drain_url. The platform MUST use the\nsyslog_drain_url value when sending logs to the service.

\n

Brokers MUST NOT include a syslog_drain_url in a create binding response\nif the associated Catalog entry for the service\ndid not include a \"requires\":[\"syslog_drain\"] property.

\n

Route Services

\n

There are a class of service offerings that intermediate requests to\napplications, performing functions such as rate limiting or authorization.

\n

If a platform supports route services, it MUST send a routable address,\nor endpoint, for the application along with the request to create a service\nbinding using \"bind_resource\":{\"route\":\"some-address.com\"}. A broker MAY\nsupport configuration specific to an address using parameters; exposing this\nfeature to users would require a platform to support binding multiple\nroutable addresses to the same service instance.

\n

If a service is deployed in a configuration to support this behavior, the\nbroker MUST return a route_service_url in the response for a request to\ncreate a binding, so that the platform knows where to proxy the application\nrequest. If the service is deployed such that the network configuration to\nproxy application requests through instances of the service is managed\nout-of-band, the broker MUST NOT return route_service_url in the response.

\n

Brokers MUST NOT include a route_service_url in a create binding response\nif the associated Catalog entry for the service\ndid not include a \"requires\":[\"route_forwarding\"] property.

\n

Volume Services

\n

There are a class of services that provide network storage to applications\nvia volume mounts in the application container. A create binding response\nfrom one of these services MUST include volume_mounts.

\n

Brokers MUST NOT include volume_mounts in a create binding response\nif the associated Catalog entry for the service\ndid not include a \"requires\":[\"volume_mount\"] property.

\n

Request

\n
Route
\n

PUT /v2/service_instances/:instance_id/service_bindings/:binding_id

\n

The :instance_id is the ID of a previously provisioned service instance. The :binding_id is also provided by the platform. This ID will be used for future unbind requests, so the broker will use it to correlate\nthe resource it creates.

\n
Body
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Request FieldTypeDescription
service_id*stringID of the service from the catalog. MUST be a non-empty string.
plan_id*stringID of the plan from the catalog. MUST be a non-empty string.
app_guidstringDeprecated in favor of bind_resource.app_guid. GUID of an application associated with the binding to be created. If present, MUST be a non-empty string.
bind_resourceJSON objectA JSON object that contains data for platform resources associated with the binding to be created. See Bind Resource Object for more information.
parametersJSON objectConfiguration options for the service binding. An opaque object, controller treats this as a blob. Brokers SHOULD ensure that the client has provided valid configuration parameters and values for the operation.
\n
Bind Resource Object
\n

The bind_resource object contains platform specific information\nrelated to the context in which the service will be used.\nIn some cases the platform might not be able to provide this information\nat the time of the binding request, therefore the bind_resource and\nits fields are OPTIONAL.

\n

Below are some common fields that MAY be used. Platforms MAY choose to\nadd additional ones as needed.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Request FieldTypeDescription
app_guidstringGUID of an application associated with the binding. For credentials bindings.
routestringURL of the application to be intermediated. For route services bindings.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"service_id\": \"service-guid-here\",\n  \"plan_id\": \"plan-guid-here\",\n  \"bind_resource\": {\n    \"app_guid\": \"app-guid-here\"\n  },\n  \"parameters\": {\n    \"parameter1-name-here\": 1,\n    \"parameter2-name-here\": \"parameter2-value-here\"\n  }\n}\n
\n
cURL
\n
$ curl http://username:password@broker-url/v2/service_instances/:instance_id/service_bindings/:binding_id -d '{\n  \"service_id\": \"service-guid-here\",\n  \"plan_id\": \"plan-guid-here\",\n  \"bind_resource\": {\n    \"app_guid\": \"app-guid-here\"\n  },\n  \"parameters\": {\n    \"parameter1-name-here\": 1,\n    \"parameter2-name-here\": \"parameter2-value-here\"\n  }\n}' -X PUT\n
\n

Response

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status CodeDescription
200 OKMUST be returned if the binding already exists and the requested parameters are identical to the existing binding. The expected response body is below.
201 CreatedMUST be returned if the binding was created as a result of this request. The expected response body is below.
409 ConflictMUST be returned if a service binding with the same id, for the same service instance, already exists but with different parameters. The expected response body is {}, though the description field MAY be used to return a user-facing error message, as described in Broker Errors.
422 Unprocessable EntityMUST be returned if the broker requires that app_guid be included in the request body. The expected response body is: { \"error\": \"RequiresApp\", \"description\": \"This service supports generation of credentials through binding an application only.\" }
\n

Responses with any other status code will be interpreted as a failure and an unbind request will be sent to the broker to prevent an orphan being created on the broker. Brokers can include a user-facing message in the description field; for details see Broker Errors.

\n
Body
\n

All response bodies MUST be a valid JSON Object ({}). This is for future compatibility; it will be easier to add fields in the future if JSON is expected rather than to support the cases when a JSON body might or might not be returned.

\n

For success responses, the following fields are supported. Others will be ignored. For error responses, see Broker Errors.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response FieldTypeDescription
credentialsobjectA free-form hash of credentials that can be used by applications or users to access the service.
syslog_drain_urlstringA URL to which logs MUST be streamed. \"requires\":[\"syslog_drain\"] MUST be declared in the Catalog endpoint or the platform MUST consider the response invalid.
route_service_urlstringA URL to which the platform MUST proxy requests for the address sent with bind_resource.route in the request body. \"requires\":[\"route_forwarding\"] MUST be declared in the Catalog endpoint or the platform can consider the response invalid.
volume_mountsarray-of-objectsAn array of configuration for remote storage devices to be mounted into an application container filesystem. \"requires\":[\"volume_mount\"] MUST be declared in the Catalog endpoint or the platform can consider the response invalid.
\n
Volume Mounts Object
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response FieldTypeDescription
driver*stringName of the volume driver plugin which manages the device.
container_dir*stringThe path in the application container onto which the volume will be mounted. This specification does not mandate what action the platform is to take if the path specified already exists in the container.
mode*string\"r\" to mount the volume read-only or \"rw\" to mount it read-write.
device_type*stringA string specifying the type of device to mount. Currently the only supported value is \"shared\".
device*device-objectDevice object containing device_type specific details. Currently only shared devices are supported.
\n
Device Object
\n

Currently only shared devices are supported; a distributed file system which can be mounted on all app instances simultaneously.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
FieldTypeDescription
volume_id*stringID of the shared volume to mount on every app instance.
mount_configobjectConfiguration object to be passed to the driver when the volume is mounted.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"credentials\": {\n    \"uri\": \"mysql://mysqluser:pass@mysqlhost:3306/dbname\",\n    \"username\": \"mysqluser\",\n    \"password\": \"pass\",\n    \"host\": \"mysqlhost\",\n    \"port\": 3306,\n    \"database\": \"dbname\"\n  }\n}\n
\n
{\n  \"volume_mounts\": [{\n    \"driver\": \"cephdriver\",\n    \"container_dir\": \"/data/images\",\n    \"mode\": \"r\",\n    \"device_type\": \"shared\",\n    \"device\": {\n      \"volume_id\": \"bc2c1eab-05b9-482d-b0cf-750ee07de311\",\n      \"mount_config\": {\n        \"key\": \"value\"\n      }\n    }\n  }]\n}\n
\n

Unbinding

\n

Note: Brokers that do not provide any bindable services or plans do not need to implement this endpoint.

\n

When a broker receives an unbind request from the marketplace, it MUST delete any resources associated with the binding. In the case where credentials were generated, this might result in requests to the service instance failing to authenticate.

\n

Request

\n
Route
\n

DELETE /v2/service_instances/:instance_id/service_bindings/:binding_id

\n

The :instance_id is the ID of a previously provisioned service instance. The :binding_id is the ID of a previously provisioned binding for that service instance.

\n
Parameters
\n

The request provides these query string parameters as useful hints for brokers.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query-String FieldTypeDescription
service_id*stringID of the service from the catalog. MUST be a non-empty string.
plan_id*stringID of the plan from the catalog. MUST be a non-empty string.
\n

* Query parameters with an asterisk are REQUIRED.

\n
cURL
\n
$ curl 'http://username:password@broker-url/v2/service_instances/:instance_id/\n  service_bindings/:binding_id?service_id=service-id-here&plan_id=plan-id-here' -X DELETE -H \"X-Broker-API-Version: 2.12\"\n
\n

Response

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status CodeDescription
200 OKMUST be returned if the binding was deleted as a result of this request. The expected response body is {}.
410 GoneMUST be returned if the binding does not exist. The expected response body is {}.
\n

Responses with any other status code will be interpreted as a failure and the binding will remain in the marketplace database. Brokers can include a user-facing message in the description field; for details see Broker Errors.

\n
Body
\n

All response bodies MUST be a valid JSON Object ({}). This is for future compatibility; it will be easier to add fields in the future if JSON is expected rather than to support the cases when a JSON body might or might not be returned.

\n

For a success response, the expected response body is {}.

\n

Deprovisioning

\n

When a broker receives a deprovision request from the marketplace, it MUST\ndelete any resources it created during the provision.\nUsually this means that all resources are immediately reclaimed for future\nprovisions.

\n

Request

\n
Route
\n

DELETE /v2/service_instances/:instance_id

\n

:instance_id is the identifier of a previously provisioned service instance.

\n
Parameters
\n

The request provides these query string parameters as useful hints for brokers.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Query-String FieldTypeDescription
service_id*stringID of the service from the catalog. MUST be a non-empty string.
plan_id*stringID of the plan from the catalog. MUST be a non-empty string.
accepts_incompletebooleanA value of true indicates that both the marketplace and the requesting client support asynchronous deprovisioning. If this parameter is not included in the request, and the broker can only deprovision a service instance of the requested plan asynchronously, the broker MUST reject the request with a 422 Unprocessable Entity as described below.
\n

* Query parameters with an asterisk are REQUIRED.

\n
cURL
\n
$ curl 'http://username:password@broker-url/v2/service_instances/:instance_id?accepts_incomplete=true\n  &service_id=service-id-here&plan_id=plan-id-here' -X DELETE -H \"X-Broker-API-Version: 2.12\"\n
\n

Response

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status CodeDescription
200 OKMUST be returned if the service instance was deleted as a result of this request. The expected response body is {}.
202 AcceptedMUST be returned if the service instance deletion is in progress. This triggers the marketplace to poll the Service Instance Last Operation Endpoint for operation status. Note that a re-sent DELETE request MUST return a 202 Accepted, not a 200 OK, if the delete request has not completed yet.
410 GoneMUST be returned if the service instance does not exist. The expected response body is {}.
422 Unprocessable EntityMUST be returned if the broker only supports asynchronous deprovisioning for the requested plan and the request did not include ?accepts_incomplete=true. The expected response body is: { \"error\": \"AsyncRequired\", \"description\": \"This service plan requires client support for asynchronous service operations.\" }, as described below.
\n

Responses with any other status code will be interpreted as a failure and the service instance will remain in the marketplace database. Brokers can include a user-facing message in the description field; for details see Broker Errors.

\n
Body
\n

All response bodies MUST be a valid JSON Object ({}). This is for future compatibility; it will be easier to add fields in the future if JSON is expected rather than to support the cases when a JSON body might or might not be returned.

\n

For success responses, the following fields are supported. Others will be ignored. For error responses, see Broker Errors.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response fieldTypeDescription
operationstringFor asynchronous responses, service brokers MAY return an identifier representing the operation. The value of this field MUST be provided by the platform with requests to the Last Operation endpoint in a URL encoded query parameter. If present, MUST be a non-empty string.
\n

* Fields with an asterisk are REQUIRED.

\n
{\n  \"operation\": \"task_10\"\n}\n
\n

Broker Errors

\n

Response

\n

Broker failures beyond the scope of the well-defined HTTP response codes listed\nabove (like 410 Gone on Deprovisioning) MUST return an appropriate HTTP response code\n(chosen to accurately reflect the nature of the failure) and a body containing a valid JSON Object (not an array).

\n
Body
\n

All response bodies MUST be a valid JSON Object ({}). This is for future compatibility; it will be easier to add fields in the future if JSON is expected rather than to support the cases when a JSON body might or might not be returned.

\n

For error responses, the following fields are valid. Others will be ignored. If an empty JSON object is returned in the body {}, a generic message containing the HTTP response code returned by the broker will be displayed to the requester.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Response FieldTypeDescription
descriptionstringA meaningful error message explaining why the request failed.
\n
{\n  \"description\": \"Your account has exceeded its quota for service instances. Please contact support at http://support.example.com.\"\n}\n
\n

Orphans

\n

The platform marketplace is the source of truth for service instances and bindings. Service brokers are expected to have successfully provisioned all the service instances and bindings that the marketplace knows about, and none that it doesn't.

\n

Orphans can result if the broker does not return a response before a request from the marketplace times out (typically 60 seconds). For example, if a broker does not return a response to a provision request before the request times out, the broker might eventually succeed in provisioning a service instance after the marketplace considers the request a failure. This results in an orphan service instance on the broker's side.

\n

To mitigate orphan service instances and bindings, the marketplace SHOULD attempt to delete resources it cannot be sure were successfully created, and SHOULD keep trying to delete them until the broker responds with a success.

\n

Platforms SHOULD initiate orphan mitigation in the following scenarios:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Status code of broker responsePlatform interpretation of responsePlatform initiates orphan mitigation?
200SuccessNo
200 with malformed responseFailureNo
201SuccessNo
201 with malformed responseFailureYes
All other 2xxFailureYes
408Failure due to timeoutYes
All other 4xxBroker rejected requestNo
5xxBroker errorYes
TimeoutFailureYes
\n

If the platform marketplace encounters an internal error provisioning a service instance or binding (for example, saving to the database fails), then it MUST at least send a single delete or unbind request to the service broker to prevent creation of an orphan.

\n
","renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"Open Service Broker API v2.12","kind":"section_1","ident_start":2,"ident_end":31,"extent_start":0,"extent_end":54344,"fully_qualified_name":"Open Service Broker API v2.12","ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":31}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":942,"utf16_col":0}}},{"name":"Table of Contents","kind":"section_2","ident_start":36,"ident_end":53,"extent_start":33,"extent_end":1082,"fully_qualified_name":"Table of Contents","ident_utf16":{"start":{"line_number":2,"utf16_col":3},"end":{"line_number":2,"utf16_col":20}},"extent_utf16":{"start":{"line_number":2,"utf16_col":0},"end":{"line_number":26,"utf16_col":0}}},{"name":"API Overview","kind":"section_2","ident_start":1085,"ident_end":1097,"extent_start":1082,"extent_end":2294,"fully_qualified_name":"API Overview","ident_utf16":{"start":{"line_number":26,"utf16_col":3},"end":{"line_number":26,"utf16_col":15}},"extent_utf16":{"start":{"line_number":26,"utf16_col":0},"end":{"line_number":38,"utf16_col":0}}},{"name":"Notations and Terminology","kind":"section_2","ident_start":2297,"ident_end":2322,"extent_start":2294,"extent_end":3858,"fully_qualified_name":"Notations and Terminology","ident_utf16":{"start":{"line_number":38,"utf16_col":3},"end":{"line_number":38,"utf16_col":28}},"extent_utf16":{"start":{"line_number":38,"utf16_col":0},"end":{"line_number":75,"utf16_col":0}}},{"name":"Notational Conventions","kind":"section_3","ident_start":2328,"ident_end":2350,"extent_start":2324,"extent_end":2586,"fully_qualified_name":"Notational Conventions","ident_utf16":{"start":{"line_number":40,"utf16_col":4},"end":{"line_number":40,"utf16_col":26}},"extent_utf16":{"start":{"line_number":40,"utf16_col":0},"end":{"line_number":46,"utf16_col":0}}},{"name":"Terminology","kind":"section_3","ident_start":2590,"ident_end":2601,"extent_start":2586,"extent_end":3858,"fully_qualified_name":"Terminology","ident_utf16":{"start":{"line_number":46,"utf16_col":4},"end":{"line_number":46,"utf16_col":15}},"extent_utf16":{"start":{"line_number":46,"utf16_col":0},"end":{"line_number":75,"utf16_col":0}}},{"name":"Changes","kind":"section_2","ident_start":3861,"ident_end":3868,"extent_start":3858,"extent_end":5660,"fully_qualified_name":"Changes","ident_utf16":{"start":{"line_number":75,"utf16_col":3},"end":{"line_number":75,"utf16_col":10}},"extent_utf16":{"start":{"line_number":75,"utf16_col":0},"end":{"line_number":99,"utf16_col":0}}},{"name":"Change Policy","kind":"section_3","ident_start":3874,"ident_end":3887,"extent_start":3870,"extent_end":4242,"fully_qualified_name":"Change Policy","ident_utf16":{"start":{"line_number":77,"utf16_col":4},"end":{"line_number":77,"utf16_col":17}},"extent_utf16":{"start":{"line_number":77,"utf16_col":0},"end":{"line_number":86,"utf16_col":0}}},{"name":"Changes Since v2.11","kind":"section_3","ident_start":4246,"ident_end":4265,"extent_start":4242,"extent_end":5660,"fully_qualified_name":"Changes Since v2.11","ident_utf16":{"start":{"line_number":86,"utf16_col":4},"end":{"line_number":86,"utf16_col":23}},"extent_utf16":{"start":{"line_number":86,"utf16_col":0},"end":{"line_number":99,"utf16_col":0}}},{"name":"API Version Header","kind":"section_2","ident_start":5663,"ident_end":5681,"extent_start":5660,"extent_end":6397,"fully_qualified_name":"API Version Header","ident_utf16":{"start":{"line_number":99,"utf16_col":3},"end":{"line_number":99,"utf16_col":21}},"extent_utf16":{"start":{"line_number":99,"utf16_col":0},"end":{"line_number":109,"utf16_col":0}}},{"name":"Authentication","kind":"section_2","ident_start":6400,"ident_end":6414,"extent_start":6397,"extent_end":6790,"fully_qualified_name":"Authentication","ident_utf16":{"start":{"line_number":109,"utf16_col":3},"end":{"line_number":109,"utf16_col":17}},"extent_utf16":{"start":{"line_number":109,"utf16_col":0},"end":{"line_number":114,"utf16_col":0}}},{"name":"Catalog Management","kind":"section_2","ident_start":6793,"ident_end":6811,"extent_start":6790,"extent_end":14650,"fully_qualified_name":"Catalog Management","ident_utf16":{"start":{"line_number":114,"utf16_col":3},"end":{"line_number":114,"utf16_col":21}},"extent_utf16":{"start":{"line_number":114,"utf16_col":0},"end":{"line_number":279,"utf16_col":0}}},{"name":"Request","kind":"section_3","ident_start":7536,"ident_end":7543,"extent_start":7532,"extent_end":7680,"fully_qualified_name":"Request","ident_utf16":{"start":{"line_number":127,"utf16_col":4},"end":{"line_number":127,"utf16_col":11}},"extent_utf16":{"start":{"line_number":127,"utf16_col":0},"end":{"line_number":137,"utf16_col":0}}},{"name":"Route","kind":"section_4","ident_start":7550,"ident_end":7555,"extent_start":7545,"extent_end":7575,"fully_qualified_name":"Route","ident_utf16":{"start":{"line_number":129,"utf16_col":5},"end":{"line_number":129,"utf16_col":10}},"extent_utf16":{"start":{"line_number":129,"utf16_col":0},"end":{"line_number":132,"utf16_col":0}}},{"name":"cURL","kind":"section_4","ident_start":7580,"ident_end":7584,"extent_start":7575,"extent_end":7680,"fully_qualified_name":"cURL","ident_utf16":{"start":{"line_number":132,"utf16_col":5},"end":{"line_number":132,"utf16_col":9}},"extent_utf16":{"start":{"line_number":132,"utf16_col":0},"end":{"line_number":137,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":7684,"ident_end":7692,"extent_start":7680,"extent_end":14394,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":137,"utf16_col":4},"end":{"line_number":137,"utf16_col":12}},"extent_utf16":{"start":{"line_number":137,"utf16_col":0},"end":{"line_number":275,"utf16_col":0}}},{"name":"Body - Schema of Service Objects","kind":"section_4","ident_start":7855,"ident_end":7887,"extent_start":7850,"extent_end":14394,"fully_qualified_name":"Body - Schema of Service Objects","ident_utf16":{"start":{"line_number":143,"utf16_col":5},"end":{"line_number":143,"utf16_col":37}},"extent_utf16":{"start":{"line_number":143,"utf16_col":0},"end":{"line_number":275,"utf16_col":0}}},{"name":"Service Objects","kind":"section_5","ident_start":8360,"ident_end":8375,"extent_start":8354,"extent_end":10613,"fully_qualified_name":"Service Objects","ident_utf16":{"start":{"line_number":155,"utf16_col":6},"end":{"line_number":155,"utf16_col":21}},"extent_utf16":{"start":{"line_number":155,"utf16_col":0},"end":{"line_number":170,"utf16_col":0}}},{"name":"Dashboard Client Object","kind":"section_5","ident_start":10619,"ident_end":10642,"extent_start":10613,"extent_end":11051,"fully_qualified_name":"Dashboard Client Object","ident_utf16":{"start":{"line_number":170,"utf16_col":6},"end":{"line_number":170,"utf16_col":29}},"extent_utf16":{"start":{"line_number":170,"utf16_col":0},"end":{"line_number":179,"utf16_col":0}}},{"name":"Plan Object","kind":"section_5","ident_start":11057,"ident_end":11068,"extent_start":11051,"extent_end":14394,"fully_qualified_name":"Plan Object","ident_utf16":{"start":{"line_number":179,"utf16_col":6},"end":{"line_number":179,"utf16_col":17}},"extent_utf16":{"start":{"line_number":179,"utf16_col":0},"end":{"line_number":275,"utf16_col":0}}},{"name":"Adding a Broker to the Platform","kind":"section_3","ident_start":14398,"ident_end":14429,"extent_start":14394,"extent_end":14650,"fully_qualified_name":"Adding a Broker to the Platform","ident_utf16":{"start":{"line_number":275,"utf16_col":4},"end":{"line_number":275,"utf16_col":35}},"extent_utf16":{"start":{"line_number":275,"utf16_col":0},"end":{"line_number":279,"utf16_col":0}}},{"name":"Synchronous and Asynchronous Operations","kind":"section_2","ident_start":14653,"ident_end":14692,"extent_start":14650,"extent_end":17910,"fully_qualified_name":"Synchronous and Asynchronous Operations","ident_utf16":{"start":{"line_number":279,"utf16_col":3},"end":{"line_number":279,"utf16_col":42}},"extent_utf16":{"start":{"line_number":279,"utf16_col":0},"end":{"line_number":326,"utf16_col":0}}},{"name":"Synchronous Operations","kind":"section_3","ident_start":15679,"ident_end":15701,"extent_start":15675,"extent_end":16047,"fully_qualified_name":"Synchronous Operations","ident_utf16":{"start":{"line_number":287,"utf16_col":4},"end":{"line_number":287,"utf16_col":26}},"extent_utf16":{"start":{"line_number":287,"utf16_col":0},"end":{"line_number":293,"utf16_col":0}}},{"name":"Asynchronous Operations","kind":"section_3","ident_start":16051,"ident_end":16074,"extent_start":16047,"extent_end":17910,"fully_qualified_name":"Asynchronous Operations","ident_utf16":{"start":{"line_number":293,"utf16_col":4},"end":{"line_number":293,"utf16_col":27}},"extent_utf16":{"start":{"line_number":293,"utf16_col":0},"end":{"line_number":326,"utf16_col":0}}},{"name":"Blocking Operations","kind":"section_4","ident_start":17389,"ident_end":17408,"extent_start":17384,"extent_end":17910,"fully_qualified_name":"Blocking Operations","ident_utf16":{"start":{"line_number":310,"utf16_col":5},"end":{"line_number":310,"utf16_col":24}},"extent_utf16":{"start":{"line_number":310,"utf16_col":0},"end":{"line_number":326,"utf16_col":0}}},{"name":"Polling Last Operation","kind":"section_2","ident_start":17913,"ident_end":17935,"extent_start":17910,"extent_end":22097,"fully_qualified_name":"Polling Last Operation","ident_utf16":{"start":{"line_number":326,"utf16_col":3},"end":{"line_number":326,"utf16_col":25}},"extent_utf16":{"start":{"line_number":326,"utf16_col":0},"end":{"line_number":387,"utf16_col":0}}},{"name":"Request","kind":"section_3","ident_start":18791,"ident_end":18798,"extent_start":18787,"extent_end":19941,"fully_qualified_name":"Request","ident_utf16":{"start":{"line_number":332,"utf16_col":4},"end":{"line_number":332,"utf16_col":11}},"extent_utf16":{"start":{"line_number":332,"utf16_col":0},"end":{"line_number":354,"utf16_col":0}}},{"name":"Route","kind":"section_5","ident_start":18806,"ident_end":18811,"extent_start":18800,"extent_end":18869,"fully_qualified_name":"Route","ident_utf16":{"start":{"line_number":334,"utf16_col":6},"end":{"line_number":334,"utf16_col":11}},"extent_utf16":{"start":{"line_number":334,"utf16_col":0},"end":{"line_number":337,"utf16_col":0}}},{"name":"Parameters","kind":"section_5","ident_start":18875,"ident_end":18885,"extent_start":18869,"extent_end":19829,"fully_qualified_name":"Parameters","ident_utf16":{"start":{"line_number":337,"utf16_col":6},"end":{"line_number":337,"utf16_col":16}},"extent_utf16":{"start":{"line_number":337,"utf16_col":0},"end":{"line_number":349,"utf16_col":0}}},{"name":"cURL","kind":"section_5","ident_start":19835,"ident_end":19839,"extent_start":19829,"extent_end":19941,"fully_qualified_name":"cURL","ident_utf16":{"start":{"line_number":349,"utf16_col":6},"end":{"line_number":349,"utf16_col":10}},"extent_utf16":{"start":{"line_number":349,"utf16_col":0},"end":{"line_number":354,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":19945,"ident_end":19953,"extent_start":19941,"extent_end":21833,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":354,"utf16_col":4},"end":{"line_number":354,"utf16_col":12}},"extent_utf16":{"start":{"line_number":354,"utf16_col":0},"end":{"line_number":383,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":20884,"ident_end":20888,"extent_start":20878,"extent_end":21833,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":363,"utf16_col":6},"end":{"line_number":363,"utf16_col":10}},"extent_utf16":{"start":{"line_number":363,"utf16_col":0},"end":{"line_number":383,"utf16_col":0}}},{"name":"Polling Interval and Duration","kind":"section_3","ident_start":21837,"ident_end":21866,"extent_start":21833,"extent_end":22097,"fully_qualified_name":"Polling Interval and Duration","ident_utf16":{"start":{"line_number":383,"utf16_col":4},"end":{"line_number":383,"utf16_col":33}},"extent_utf16":{"start":{"line_number":383,"utf16_col":0},"end":{"line_number":387,"utf16_col":0}}},{"name":"Provisioning","kind":"section_2","ident_start":22100,"ident_end":22112,"extent_start":22097,"extent_end":28838,"fully_qualified_name":"Provisioning","ident_utf16":{"start":{"line_number":387,"utf16_col":3},"end":{"line_number":387,"utf16_col":15}},"extent_utf16":{"start":{"line_number":387,"utf16_col":0},"end":{"line_number":482,"utf16_col":0}}},{"name":"Request","kind":"section_3","ident_start":22608,"ident_end":22615,"extent_start":22604,"extent_end":25793,"fully_qualified_name":"Request","ident_utf16":{"start":{"line_number":391,"utf16_col":4},"end":{"line_number":391,"utf16_col":11}},"extent_utf16":{"start":{"line_number":391,"utf16_col":0},"end":{"line_number":450,"utf16_col":0}}},{"name":"Route","kind":"section_5","ident_start":22623,"ident_end":22628,"extent_start":22617,"extent_end":22871,"fully_qualified_name":"Route","ident_utf16":{"start":{"line_number":393,"utf16_col":6},"end":{"line_number":393,"utf16_col":11}},"extent_utf16":{"start":{"line_number":393,"utf16_col":0},"end":{"line_number":398,"utf16_col":0}}},{"name":"Parameters","kind":"section_4","ident_start":22876,"ident_end":22886,"extent_start":22871,"extent_end":25793,"fully_qualified_name":"Parameters","ident_utf16":{"start":{"line_number":398,"utf16_col":5},"end":{"line_number":398,"utf16_col":15}},"extent_utf16":{"start":{"line_number":398,"utf16_col":0},"end":{"line_number":450,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":23322,"ident_end":23326,"extent_start":23316,"extent_end":25285,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":403,"utf16_col":6},"end":{"line_number":403,"utf16_col":10}},"extent_utf16":{"start":{"line_number":403,"utf16_col":0},"end":{"line_number":432,"utf16_col":0}}},{"name":"cURL","kind":"section_5","ident_start":25291,"ident_end":25295,"extent_start":25285,"extent_end":25793,"fully_qualified_name":"cURL","ident_utf16":{"start":{"line_number":432,"utf16_col":6},"end":{"line_number":432,"utf16_col":10}},"extent_utf16":{"start":{"line_number":432,"utf16_col":0},"end":{"line_number":450,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":25797,"ident_end":25805,"extent_start":25793,"extent_end":28838,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":450,"utf16_col":4},"end":{"line_number":450,"utf16_col":12}},"extent_utf16":{"start":{"line_number":450,"utf16_col":0},"end":{"line_number":482,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":27407,"ident_end":27411,"extent_start":27401,"extent_end":28838,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":462,"utf16_col":6},"end":{"line_number":462,"utf16_col":10}},"extent_utf16":{"start":{"line_number":462,"utf16_col":0},"end":{"line_number":482,"utf16_col":0}}},{"name":"Updating a Service Instance","kind":"section_2","ident_start":28841,"ident_end":28868,"extent_start":28838,"extent_end":35713,"fully_qualified_name":"Updating a Service Instance","ident_utf16":{"start":{"line_number":482,"utf16_col":3},"end":{"line_number":482,"utf16_col":30}},"extent_utf16":{"start":{"line_number":482,"utf16_col":0},"end":{"line_number":590,"utf16_col":0}}},{"name":"Request","kind":"section_3","ident_start":29810,"ident_end":29817,"extent_start":29806,"extent_end":33431,"fully_qualified_name":"Request","ident_utf16":{"start":{"line_number":490,"utf16_col":4},"end":{"line_number":490,"utf16_col":11}},"extent_utf16":{"start":{"line_number":490,"utf16_col":0},"end":{"line_number":561,"utf16_col":0}}},{"name":"Route","kind":"section_5","ident_start":29825,"ident_end":29830,"extent_start":29819,"extent_end":29961,"fully_qualified_name":"Route","ident_utf16":{"start":{"line_number":492,"utf16_col":6},"end":{"line_number":492,"utf16_col":11}},"extent_utf16":{"start":{"line_number":492,"utf16_col":0},"end":{"line_number":497,"utf16_col":0}}},{"name":"Parameters","kind":"section_4","ident_start":29966,"ident_end":29976,"extent_start":29961,"extent_end":33431,"fully_qualified_name":"Parameters","ident_utf16":{"start":{"line_number":497,"utf16_col":5},"end":{"line_number":497,"utf16_col":15}},"extent_utf16":{"start":{"line_number":497,"utf16_col":0},"end":{"line_number":561,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":30414,"ident_end":30418,"extent_start":30408,"extent_end":32818,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":502,"utf16_col":6},"end":{"line_number":502,"utf16_col":10}},"extent_utf16":{"start":{"line_number":502,"utf16_col":0},"end":{"line_number":539,"utf16_col":0}}},{"name":"cURL","kind":"section_5","ident_start":32824,"ident_end":32828,"extent_start":32818,"extent_end":33431,"fully_qualified_name":"cURL","ident_utf16":{"start":{"line_number":539,"utf16_col":6},"end":{"line_number":539,"utf16_col":10}},"extent_utf16":{"start":{"line_number":539,"utf16_col":0},"end":{"line_number":561,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":33435,"ident_end":33443,"extent_start":33431,"extent_end":35713,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":561,"utf16_col":4},"end":{"line_number":561,"utf16_col":12}},"extent_utf16":{"start":{"line_number":561,"utf16_col":0},"end":{"line_number":590,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":34853,"ident_end":34857,"extent_start":34847,"extent_end":35713,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":571,"utf16_col":6},"end":{"line_number":571,"utf16_col":10}},"extent_utf16":{"start":{"line_number":571,"utf16_col":0},"end":{"line_number":590,"utf16_col":0}}},{"name":"Binding","kind":"section_2","ident_start":35716,"ident_end":35723,"extent_start":35713,"extent_end":45910,"fully_qualified_name":"Binding","ident_utf16":{"start":{"line_number":590,"utf16_col":3},"end":{"line_number":590,"utf16_col":10}},"extent_utf16":{"start":{"line_number":590,"utf16_col":0},"end":{"line_number":789,"utf16_col":0}}},{"name":"Types of Binding","kind":"section_3","ident_start":36244,"ident_end":36260,"extent_start":36240,"extent_end":39010,"fully_qualified_name":"Types of Binding","ident_utf16":{"start":{"line_number":596,"utf16_col":4},"end":{"line_number":596,"utf16_col":20}},"extent_utf16":{"start":{"line_number":596,"utf16_col":0},"end":{"line_number":648,"utf16_col":0}}},{"name":"Credentials","kind":"section_4","ident_start":36267,"ident_end":36278,"extent_start":36262,"extent_end":36683,"fully_qualified_name":"Credentials","ident_utf16":{"start":{"line_number":598,"utf16_col":5},"end":{"line_number":598,"utf16_col":16}},"extent_utf16":{"start":{"line_number":598,"utf16_col":0},"end":{"line_number":602,"utf16_col":0}}},{"name":"Log Drain","kind":"section_4","ident_start":36688,"ident_end":36697,"extent_start":36683,"extent_end":37336,"fully_qualified_name":"Log Drain","ident_utf16":{"start":{"line_number":602,"utf16_col":5},"end":{"line_number":602,"utf16_col":14}},"extent_utf16":{"start":{"line_number":602,"utf16_col":0},"end":{"line_number":615,"utf16_col":0}}},{"name":"Route Services","kind":"section_4","ident_start":37341,"ident_end":37355,"extent_start":37336,"extent_end":38581,"fully_qualified_name":"Route Services","ident_utf16":{"start":{"line_number":615,"utf16_col":5},"end":{"line_number":615,"utf16_col":19}},"extent_utf16":{"start":{"line_number":615,"utf16_col":0},"end":{"line_number":638,"utf16_col":0}}},{"name":"Volume Services","kind":"section_4","ident_start":38586,"ident_end":38601,"extent_start":38581,"extent_end":39010,"fully_qualified_name":"Volume Services","ident_utf16":{"start":{"line_number":638,"utf16_col":5},"end":{"line_number":638,"utf16_col":20}},"extent_utf16":{"start":{"line_number":638,"utf16_col":0},"end":{"line_number":648,"utf16_col":0}}},{"name":"Request","kind":"section_3","ident_start":39014,"ident_end":39021,"extent_start":39010,"extent_end":41601,"fully_qualified_name":"Request","ident_utf16":{"start":{"line_number":648,"utf16_col":4},"end":{"line_number":648,"utf16_col":11}},"extent_utf16":{"start":{"line_number":648,"utf16_col":0},"end":{"line_number":714,"utf16_col":0}}},{"name":"Route","kind":"section_5","ident_start":39029,"ident_end":39034,"extent_start":39023,"extent_end":39347,"fully_qualified_name":"Route","ident_utf16":{"start":{"line_number":650,"utf16_col":6},"end":{"line_number":650,"utf16_col":11}},"extent_utf16":{"start":{"line_number":650,"utf16_col":0},"end":{"line_number":656,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":39353,"ident_end":39357,"extent_start":39347,"extent_end":40221,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":656,"utf16_col":6},"end":{"line_number":656,"utf16_col":10}},"extent_utf16":{"start":{"line_number":656,"utf16_col":0},"end":{"line_number":666,"utf16_col":0}}},{"name":"Bind Resource Object","kind":"section_5","ident_start":40227,"ident_end":40247,"extent_start":40221,"extent_end":41228,"fully_qualified_name":"Bind Resource Object","ident_utf16":{"start":{"line_number":666,"utf16_col":6},"end":{"line_number":666,"utf16_col":26}},"extent_utf16":{"start":{"line_number":666,"utf16_col":0},"end":{"line_number":699,"utf16_col":0}}},{"name":"cURL","kind":"section_5","ident_start":41234,"ident_end":41238,"extent_start":41228,"extent_end":41601,"fully_qualified_name":"cURL","ident_utf16":{"start":{"line_number":699,"utf16_col":6},"end":{"line_number":699,"utf16_col":10}},"extent_utf16":{"start":{"line_number":699,"utf16_col":0},"end":{"line_number":714,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":41605,"ident_end":41613,"extent_start":41601,"extent_end":45910,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":714,"utf16_col":4},"end":{"line_number":714,"utf16_col":12}},"extent_utf16":{"start":{"line_number":714,"utf16_col":0},"end":{"line_number":789,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":42848,"ident_end":42852,"extent_start":42842,"extent_end":44228,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":725,"utf16_col":6},"end":{"line_number":725,"utf16_col":10}},"extent_utf16":{"start":{"line_number":725,"utf16_col":0},"end":{"line_number":738,"utf16_col":0}}},{"name":"Volume Mounts Object","kind":"section_5","ident_start":44234,"ident_end":44254,"extent_start":44228,"extent_end":44976,"fully_qualified_name":"Volume Mounts Object","ident_utf16":{"start":{"line_number":738,"utf16_col":6},"end":{"line_number":738,"utf16_col":26}},"extent_utf16":{"start":{"line_number":738,"utf16_col":0},"end":{"line_number":748,"utf16_col":0}}},{"name":"Device Object","kind":"section_5","ident_start":44982,"ident_end":44995,"extent_start":44976,"extent_end":45910,"fully_qualified_name":"Device Object","ident_utf16":{"start":{"line_number":748,"utf16_col":6},"end":{"line_number":748,"utf16_col":19}},"extent_utf16":{"start":{"line_number":748,"utf16_col":0},"end":{"line_number":789,"utf16_col":0}}},{"name":"Unbinding","kind":"section_2","ident_start":45913,"ident_end":45922,"extent_start":45910,"extent_end":48015,"fully_qualified_name":"Unbinding","ident_utf16":{"start":{"line_number":789,"utf16_col":3},"end":{"line_number":789,"utf16_col":12}},"extent_utf16":{"start":{"line_number":789,"utf16_col":0},"end":{"line_number":834,"utf16_col":0}}},{"name":"Request","kind":"section_3","ident_start":46301,"ident_end":46308,"extent_start":46297,"extent_end":47176,"fully_qualified_name":"Request","ident_utf16":{"start":{"line_number":795,"utf16_col":4},"end":{"line_number":795,"utf16_col":11}},"extent_utf16":{"start":{"line_number":795,"utf16_col":0},"end":{"line_number":819,"utf16_col":0}}},{"name":"Route","kind":"section_5","ident_start":46316,"ident_end":46321,"extent_start":46310,"extent_end":46563,"fully_qualified_name":"Route","ident_utf16":{"start":{"line_number":797,"utf16_col":6},"end":{"line_number":797,"utf16_col":11}},"extent_utf16":{"start":{"line_number":797,"utf16_col":0},"end":{"line_number":802,"utf16_col":0}}},{"name":"Parameters","kind":"section_5","ident_start":46569,"ident_end":46579,"extent_start":46563,"extent_end":46955,"fully_qualified_name":"Parameters","ident_utf16":{"start":{"line_number":802,"utf16_col":6},"end":{"line_number":802,"utf16_col":16}},"extent_utf16":{"start":{"line_number":802,"utf16_col":0},"end":{"line_number":813,"utf16_col":0}}},{"name":"cURL","kind":"section_5","ident_start":46961,"ident_end":46965,"extent_start":46955,"extent_end":47176,"fully_qualified_name":"cURL","ident_utf16":{"start":{"line_number":813,"utf16_col":6},"end":{"line_number":813,"utf16_col":10}},"extent_utf16":{"start":{"line_number":813,"utf16_col":0},"end":{"line_number":819,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":47180,"ident_end":47188,"extent_start":47176,"extent_end":48015,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":819,"utf16_col":4},"end":{"line_number":819,"utf16_col":12}},"extent_utf16":{"start":{"line_number":819,"utf16_col":0},"end":{"line_number":834,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":47709,"ident_end":47713,"extent_start":47703,"extent_end":48015,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":828,"utf16_col":6},"end":{"line_number":828,"utf16_col":10}},"extent_utf16":{"start":{"line_number":828,"utf16_col":0},"end":{"line_number":834,"utf16_col":0}}},{"name":"Deprovisioning","kind":"section_2","ident_start":48018,"ident_end":48032,"extent_start":48015,"extent_end":51516,"fully_qualified_name":"Deprovisioning","ident_utf16":{"start":{"line_number":834,"utf16_col":3},"end":{"line_number":834,"utf16_col":17}},"extent_utf16":{"start":{"line_number":834,"utf16_col":0},"end":{"line_number":895,"utf16_col":0}}},{"name":"Request","kind":"section_3","ident_start":48255,"ident_end":48262,"extent_start":48251,"extent_end":49391,"fully_qualified_name":"Request","ident_utf16":{"start":{"line_number":841,"utf16_col":4},"end":{"line_number":841,"utf16_col":11}},"extent_utf16":{"start":{"line_number":841,"utf16_col":0},"end":{"line_number":866,"utf16_col":0}}},{"name":"Route","kind":"section_5","ident_start":48270,"ident_end":48275,"extent_start":48264,"extent_end":48401,"fully_qualified_name":"Route","ident_utf16":{"start":{"line_number":843,"utf16_col":6},"end":{"line_number":843,"utf16_col":11}},"extent_utf16":{"start":{"line_number":843,"utf16_col":0},"end":{"line_number":848,"utf16_col":0}}},{"name":"Parameters","kind":"section_5","ident_start":48407,"ident_end":48417,"extent_start":48401,"extent_end":49175,"fully_qualified_name":"Parameters","ident_utf16":{"start":{"line_number":848,"utf16_col":6},"end":{"line_number":848,"utf16_col":16}},"extent_utf16":{"start":{"line_number":848,"utf16_col":0},"end":{"line_number":860,"utf16_col":0}}},{"name":"cURL","kind":"section_5","ident_start":49181,"ident_end":49185,"extent_start":49175,"extent_end":49391,"fully_qualified_name":"cURL","ident_utf16":{"start":{"line_number":860,"utf16_col":6},"end":{"line_number":860,"utf16_col":10}},"extent_utf16":{"start":{"line_number":860,"utf16_col":0},"end":{"line_number":866,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":49395,"ident_end":49403,"extent_start":49391,"extent_end":51516,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":866,"utf16_col":4},"end":{"line_number":866,"utf16_col":12}},"extent_utf16":{"start":{"line_number":866,"utf16_col":0},"end":{"line_number":895,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":50663,"ident_end":50667,"extent_start":50657,"extent_end":51516,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":877,"utf16_col":6},"end":{"line_number":877,"utf16_col":10}},"extent_utf16":{"start":{"line_number":877,"utf16_col":0},"end":{"line_number":895,"utf16_col":0}}},{"name":"Broker Errors","kind":"section_2","ident_start":51519,"ident_end":51532,"extent_start":51516,"extent_end":52640,"fully_qualified_name":"Broker Errors","ident_utf16":{"start":{"line_number":895,"utf16_col":3},"end":{"line_number":895,"utf16_col":16}},"extent_utf16":{"start":{"line_number":895,"utf16_col":0},"end":{"line_number":919,"utf16_col":0}}},{"name":"Response","kind":"section_3","ident_start":51538,"ident_end":51546,"extent_start":51534,"extent_end":52640,"fully_qualified_name":"Response","ident_utf16":{"start":{"line_number":897,"utf16_col":4},"end":{"line_number":897,"utf16_col":12}},"extent_utf16":{"start":{"line_number":897,"utf16_col":0},"end":{"line_number":919,"utf16_col":0}}},{"name":"Body","kind":"section_5","ident_start":51857,"ident_end":51861,"extent_start":51851,"extent_end":52640,"fully_qualified_name":"Body","ident_utf16":{"start":{"line_number":903,"utf16_col":6},"end":{"line_number":903,"utf16_col":10}},"extent_utf16":{"start":{"line_number":903,"utf16_col":0},"end":{"line_number":919,"utf16_col":0}}},{"name":"Orphans","kind":"section_2","ident_start":52643,"ident_end":52650,"extent_start":52640,"extent_end":54344,"fully_qualified_name":"Orphans","ident_utf16":{"start":{"line_number":919,"utf16_col":3},"end":{"line_number":919,"utf16_col":10}},"extent_utf16":{"start":{"line_number":919,"utf16_col":0},"end":{"line_number":942,"utf16_col":0}}}]}},"copilotInfo":null,"copilotAccessAllowed":false,"csrf_tokens":{"/openservicebrokerapi/servicebroker/branches":{"post":"Dc-oFcjzEVMW4D5Przz6Doo_k0loXe8V2k2Y5sPhj_dZeLS8w7g-eEDj3bTXagSgZcwCv4qb12TdGXfjTE50IA"},"/repos/preferences":{"post":"WTW-y75UD7dX53zXxJlBEy9-vbYqaxDNe-ErGbZjhzpcNdzOn11lbJ7ZaMkyYiHQdZgzF9Jl2YuKCzs1TmntkA"}}},"title":"servicebroker/spec.md at v2.12 ยท openservicebrokerapi/servicebroker"}