UNPKG

openapi-directory

Version:

Building & bundling https://github.com/APIs-guru/openapi-directory for easy use from JS

1 lines 76.9 kB
{"openapi":"3.0.0","info":{"contact":{"x-twitter":"GoTurbine"},"description":"The Turbine Labs API provides CRUD operations for core object types, and is\nmostly RESTy. The easiest way to interact with the API is with\n[tbnctl](https://docs.turbinelabs.io/advanced/tbnctl.html).\nIf you want to make direct HTTP calls, however, you can obtain an access\ntoken using tbnctl, and then pass it in the Authorization header,\nprefixed by `Token `:\n```console\ncurl -H \"Authorization: Token <access token>\" https://api.turbinelabs.io/v1.0/cluster\n```\n","title":"Turbine Labs API","version":"1.0","x-apisguru-categories":["cloud"],"x-logo":{"url":"https://twitter.com/GoTurbine/profile_image?size=original"},"x-origin":[{"format":"swagger","url":"https://raw.githubusercontent.com/turbinelabs/api/master/swagger.yml","version":"2.0"}],"x-providerName":"turbinelabs.io"},"security":[{"api_key":[]}],"tags":[{"description":"A logical deployment of services, which typically maps to a datacenter, availability zone, or compute cluster.","name":"Zone"},{"description":"A configuration that can be applied to one or more running Proxies serving one or more Domains.","name":"Proxy"},{"description":"An interface and port a Proxy will listen on","name":"Listener"},{"description":"A served hostname and port.","name":"Domain"},{"description":"A served path within a Domain.","name":"Route"},{"description":"A collection of rules specifying how a request should be mapped to an instance within a cluster. These may be shared between multiple Routes.","name":"Shared Rules"},{"description":"A collection of Instances, homogeneous in their purpose, heterogeneous in their metadata.","name":"Cluster"},{"description":"A collection of events that have occurred in your infrastructure. This includes changes detected by the deployed collectors (new Clusters or Cluster instances) as well as routing changes through the UI or API.","name":"Audit Log"}],"paths":{"/admin/user/self":{"get":{"description":"Request the user object for an authorized requesting account.","responses":{"200":{"description":"The authorized user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Returns the user object for the account authorized and making this request.","tags":["User Management"]}},"/admin/user/self/access_token/{access-token-key}":{"delete":{"parameters":[{"description":"the key of the Access Token that should be deleted","in":"path","name":"access-token-key","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}},{"description":"the current checksum of the user to be modified","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"An empty result if the API key deletion was successful."},"default":{"description":"An error; may be unexpected or validation error if the last API was removed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Delete the specified access token.","tags":["User Management"]}},"/admin/user/self/access_tokens":{"get":{"responses":{"200":{"description":"A list of Access Tokens defined for the authenticated user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiAccessTokens"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Lists Access Tokens that are configured for the authenticated user.","tags":["User Management"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenDescription"}}},"description":"A short string (<255 characters) describing the expected use of the token.","required":true},"responses":{"200":{"description":"The new Access Token that was created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessToken"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Creates a new Access Token and associates it with the authenticated user.","tags":["User Management"]}},"/changelog/adhoc":{"get":{"description":"Perform an adhoc query against the change log for your org. The filter is a JSON encoded FilterSum as defined in this file.","parameters":[{"description":"Encoded FilterSums representing the query you would like to execute. See object definition for details.","in":"query","name":"filter","x-ref-encoded-object":"#/definitions/FilterSums","schema":{"type":"string"}}],"responses":{"200":{"description":"A list of changes that meet the provided filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedChangeDescriptions"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"Allows an arbitrary filter to be specified and applied to the org\\'s change log.","tags":["Audit Log"]}},"/changelog/cluster-graph/{clusterKey}":{"get":{"description":"Gets all changes to a cluster.\n","parameters":[{"description":"the cluster key to see an audit log for","in":"path","name":"clusterKey","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}},{"description":"The beginning of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"start","required":false,"schema":{"type":"number","format":"int64"}},{"description":"The end of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"end","required":false,"schema":{"type":"number","format":"int64"}},{"description":"Determines how many ChangeDescription object should be returned to\nthe calling code.\n","in":"query","name":"max_results","required":false,"schema":{"type":"number","format":"int64"}},{"description":"When paginating a Changelog request start on the entry that comes\nimmediately before or after this ID (as determined by the direction\nargument).\n","in":"query","name":"ref_id","required":false,"schema":{"type":"string"}},{"description":"If set to \"before\" then changes will be returned that occurred before\nreference ID. If \"after\" then changes will be returned that have\noccurred since the reference ID.\n","in":"query","name":"direction","required":false,"schema":{"type":"string","enum":["before","after"]}}],"responses":{"200":{"description":"A list of changes occurring during the requested window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedChangeDescriptions"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get changes related to the indicated cluster","tags":["Audit Log"]}},"/changelog/domain-graph/{domainKey}":{"get":{"description":"Gets all changes to a domain, the proxies that front the specified domain,\nroutes within that domain, the shared rules of each route, the clusters\nconnected via route or shared rules.\n","parameters":[{"description":"the domain key to see an audit log for","in":"path","name":"domainKey","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}},{"description":"The beginning of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"start","required":false,"schema":{"type":"number","format":"int64"}},{"description":"The end of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"end","required":false,"schema":{"type":"number","format":"int64"}},{"description":"Determines how many ChangeDescription object should be returned to\nthe calling code.\n","in":"query","name":"max_results","required":false,"schema":{"type":"number","format":"int64"}},{"description":"When paginating a Changelog request start on the entry that comes\nimmediately before or after this ID (as determined by the direction\nargument).\n","in":"query","name":"ref_id","required":false,"schema":{"type":"string"}},{"description":"If set to \"before\" then changes will be returned that occurred before\nreference ID. If \"after\" then changes will be returned that have\noccurred since the reference ID.\n","in":"query","name":"direction","required":false,"schema":{"type":"string","enum":["before","after"]}}],"responses":{"200":{"description":"A list of changes occurring during the requested window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedChangeDescriptions"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get changes related to the indicated domain","tags":["Audit Log"]}},"/changelog/route-graph/{routeKey}":{"get":{"description":"Gets all changes to a route, the domains associated with it, the shared\nrules it references, and the clusters connected to it.\n","parameters":[{"description":"the route key to see an audit log for","in":"path","name":"routeKey","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}},{"description":"The beginning of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"start","required":false,"schema":{"type":"number","format":"int64"}},{"description":"The end of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"end","required":false,"schema":{"type":"number","format":"int64"}},{"description":"Determines how many ChangeDescription object should be returned to\nthe calling code.\n","in":"query","name":"max_results","required":false,"schema":{"type":"number","format":"int64"}},{"description":"When paginating a Changelog request start on the entry that comes\nimmediately before or after this ID (as determined by the direction\nargument).\n","in":"query","name":"ref_id","required":false,"schema":{"type":"string"}},{"description":"If set to \"before\" then changes will be returned that occurred before\nreference ID. If \"after\" then changes will be returned that have\noccurred since the reference ID.\n","in":"query","name":"direction","required":false,"schema":{"type":"string","enum":["before","after"]}}],"responses":{"200":{"description":"A list of changes occurring during the requested window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedChangeDescriptions"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get changes related to the indicated route","tags":["Audit Log"]}},"/changelog/shared-rules-graph/{sharedRulesKey}":{"get":{"description":"Gets all changes associated with set of Shared Rules; the domains using\nit and the clusters referenced by it.\n","parameters":[{"description":"the shared rules key to see an audit log for","in":"path","name":"sharedRulesKey","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}},{"description":"The beginning of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"start","required":false,"schema":{"type":"number","format":"int64"}},{"description":"The end of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"end","required":false,"schema":{"type":"number","format":"int64"}},{"description":"Determines how many ChangeDescription object should be returned to\nthe calling code.\n","in":"query","name":"max_results","required":false,"schema":{"type":"number","format":"int64"}},{"description":"When paginating a Changelog request start on the entry that comes\nimmediately before or after this ID (as determined by the direction\nargument).\n","in":"query","name":"ref_id","required":false,"schema":{"type":"string"}},{"description":"If set to \"before\" then changes will be returned that occurred before\nreference ID. If \"after\" then changes will be returned that have\noccurred since the reference ID.\n","in":"query","name":"direction","required":false,"schema":{"type":"string","enum":["before","after"]}}],"responses":{"200":{"description":"A list of changes occurring during the requested window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedChangeDescriptions"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get changes related to the indicated SharedRules","tags":["Audit Log"]}},"/changelog/zone/{zoneKey}":{"get":{"description":"Retrieve all changes in the specified zone.","parameters":[{"description":"the zone key to see an audit log for","in":"path","name":"zoneKey","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}},{"description":"The beginning of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"start","required":false,"schema":{"type":"number","format":"int64"}},{"description":"The end of the window we want to see changes for; measured in\nmicroseconds since Unix Epoch.\n","in":"query","name":"end","required":false,"schema":{"type":"number","format":"int64"}},{"description":"Determines how many ChangeDescription object should be returned to\nthe calling code.\n","in":"query","name":"max_results","required":false,"schema":{"type":"number","format":"int64"}},{"description":"When paginating a Changelog request start on the entry that comes\nimmediately before or after this ID (as determined by the direction\nargument).\n","in":"query","name":"ref_id","required":false,"schema":{"type":"string"}},{"description":"If set to \"before\" then changes will be returned that occurred before\nreference ID. If \"after\" then changes will be returned that have\noccurred since the reference ID.\n","in":"query","name":"direction","required":false,"schema":{"type":"string","enum":["before","after"]}}],"responses":{"200":{"description":"A list of changes occurring during the requested window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedChangeDescriptions"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get changes in a specified zone","tags":["Audit Log"]}},"/cluster":{"get":{"description":"Get a list of clusters","parameters":[{"description":"A JSON encoded array of ClusterFilter objects. The filter is taken\nas a union of intersections. In other words an object that matches\nevery constraint in any ClusterFilter will be included.\n","in":"query","name":"filters","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a list of clusters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiClusterResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get clusters","tags":["Cluster"]},"post":{"description":"Create a new cluster","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterCreate"}}},"description":"the cluster to create","required":true},"responses":{"200":{"description":"the newly created cluster","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"create cluster","tags":["Cluster"]}},"/cluster/{clusterKey}":{"delete":{"description":"Delete an existing cluster","parameters":[{"description":"the cluster key","in":"path","name":"clusterKey","required":true,"example":"7ef80556-60bb-46bd-4cec-f4e2533aa75c","schema":{"type":"string"}},{"description":"the current checksum of the cluster to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"delete cluster","tags":["Cluster"]},"get":{"description":"Get details for an existing cluster","parameters":[{"description":"the cluster key","in":"path","name":"clusterKey","required":true,"example":"7ef80556-60bb-46bd-4cec-f4e2533aa75c","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a single cluster","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get cluster","tags":["Cluster"]},"put":{"description":"Modify an existing cluster","parameters":[{"description":"the cluster key","in":"path","name":"clusterKey","required":true,"example":"5074fe62-821e-4034-55bd-b9caa09af2a1","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Cluster"}}},"description":"the cluster to modify","required":true},"responses":{"200":{"description":"A result containing the modified cluster","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"modify cluster","tags":["Cluster"]}},"/cluster/{clusterKey}/instances":{"post":{"description":"Add a new instance to a cluster","parameters":[{"description":"the cluster to add the instance to","in":"path","name":"clusterKey","required":true,"example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Instance"}}},"description":"the instance to add","required":true},"responses":{"200":{"description":"the newly created instance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"add instance","tags":["Cluster"]}},"/cluster/{clusterKey}/instances/{instanceIdentifier}":{"delete":{"description":"Remove an instance from a cluster","parameters":[{"description":"the current checksum of the instance to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}},{"description":"the cluster to remove an instance from","in":"path","name":"clusterKey","required":true,"example":"7ef80556-60bb-46bd-4cec-f4e2533aa75c","schema":{"type":"string"}},{"description":"the instance to remove, identified as <host>:<port>","in":"path","name":"instanceIdentifier","required":true,"example":"foo-1.useast.test.com:8080","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"remove instance","tags":["Cluster"]}},"/domain":{"get":{"description":"Get a list of domains","parameters":[{"description":"A JSON encoded array of DomainFilter objects. The filter is taken\nas a union of intersections. In other words an object that matches\nevery constraint in any DomainFilter will be included.\n","in":"query","name":"filters","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a list of domains","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiDomainResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get domains","tags":["Domain"]},"post":{"description":"Create a new domain","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCreate"}}},"description":"the domain to create","required":true},"responses":{"200":{"description":"the newly created zone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"create domain","tags":["Domain"]}},"/domain/{domainKey}":{"delete":{"description":"Delete an existing domain","parameters":[{"description":"the domain key","in":"path","name":"domainKey","required":true,"example":"48cf1c9b-f027-4223-b405-d48018ffb900","schema":{"type":"string"}},{"description":"the current checksum of the domain to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"delete domain","tags":["Domain"]},"get":{"description":"Get details for a single domain","parameters":[{"description":"the domain key","in":"path","name":"domainKey","required":true,"example":"48cf1c9b-f027-4223-b405-d48018ffb900","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a single domain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get domain","tags":["Domain"]}},"/listener":{"get":{"description":"Get a list of listeners","parameters":[{"description":"A JSON encoded array of ListenerFilter objects. The filter is taken\nas a union of intersections. In other words an object that matches\nevery constraint in any ListenerFilter will be included.\n","in":"query","name":"filters","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a list of listeners","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiListenerResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"list listeners","tags":["Listener"]},"post":{"description":"Create a new listener","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenerCreate"}}},"description":"the listener to create","required":true},"responses":{"200":{"description":"the newly created listener","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenerResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"create listener","tags":["Listener"]}},"/listener/{listenerKey}":{"delete":{"description":"Delete existing listener","parameters":[{"description":"the listener key","in":"path","name":"listenerKey","required":true,"example":"72c86057-ee8d-4a2b-a3a7-760fbd1d3b9f","schema":{"type":"string"}},{"description":"the current checksum of the listener to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Listener"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"delete listener","tags":["Listener"]},"get":{"description":"Get details for a single listener","parameters":[{"description":"the listener key","in":"path","name":"listenerKey","required":true,"example":"72c86057-ee8d-4a2b-a3a7-760fbd1d3b9f","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a single listener","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenerResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get listener","tags":["Listener"]},"put":{"description":"Modify an existing listener","parameters":[{"description":"the listener key","in":"path","name":"listenerKey","required":true,"example":"5074fe62-821e-4034-55bd-b9caa09af2a1","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Listener"}}},"description":"the listener to modify","required":true},"responses":{"200":{"description":"A result containing the modified cluster","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenerResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"modify listener","tags":["Listener"]}},"/proxy":{"get":{"description":"Get a list of proxies","parameters":[{"description":"A JSON encoded array of ProxyFilter objects. The filter is taken\nas a union of intersections. In other words an object that matches\nevery constraint in any ProxyFilter will be included.\n","in":"query","name":"filters","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a list of proxies","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiProxyResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"list proxies","tags":["Proxy"]},"post":{"description":"Create a new proxy","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyCreate"}}},"description":"the proxy to create","required":true},"responses":{"200":{"description":"the newly created proxy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"create proxy","tags":["Proxy"]}},"/proxy/{proxyKey}":{"delete":{"description":"Delete existing proxy","parameters":[{"description":"the proxy key","in":"path","name":"proxyKey","required":true,"example":"72c86057-ee8d-4a2b-a3a7-760fbd1d3b9f","schema":{"type":"string"}},{"description":"the current checksum of the proxy to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Proxy"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"delete proxy","tags":["Proxy"]},"get":{"description":"Get details for a single proxy","parameters":[{"description":"the proxy key","in":"path","name":"proxyKey","required":true,"example":"72c86057-ee8d-4a2b-a3a7-760fbd1d3b9f","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a single proxy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get proxy","tags":["Proxy"]}},"/route":{"get":{"description":"Get a list of routes","parameters":[{"description":"A JSON encoded array of RouteFilter objects. The filter is taken\nas a union of intersections. In other words an object that matches\nevery constraint in any RouteFilter will be included.\n","in":"query","name":"filters","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a list of routes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiRouteResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get routes","tags":["Route"]},"post":{"description":"Create a new route","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteCreate"}}},"description":"the route to create","required":true},"responses":{"200":{"description":"the newly created route","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"create route","tags":["Route"]}},"/route/{routeKey}":{"delete":{"description":"Delete an existing route","parameters":[{"description":"the route key","in":"path","name":"routeKey","required":true,"example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c","schema":{"type":"string"}},{"description":"the current checksum of the route to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"delete route","tags":["Route"]},"get":{"description":"Get details for an existing route","parameters":[{"description":"the route key","in":"path","name":"routeKey","required":true,"example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a single route","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get route","tags":["Route"]},"put":{"description":"Modify an existing route","parameters":[{"description":"the route key","in":"path","name":"routeKey","required":true,"example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Route"}}},"description":"the route to modify","required":true},"responses":{"200":{"description":"A result containing the modified route","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"modify route","tags":["Route"]}},"/shared_rules":{"get":{"description":"Get a list of shared_rules","parameters":[{"description":"A JSON encoded array of SharedRulesFilter objects. The filter is taken\nas a union of intersections. In other words an object that matches\nevery constraint in any SharedRulesFilter will be included.\n","in":"query","name":"filters","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a list of shared_rules","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiSharedRulesResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get shared_rules","tags":["Shared Rules"]},"post":{"description":"Create a new shared_rules object","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedRulesCreate"}}},"description":"the shared_rules object to create","required":true},"responses":{"200":{"description":"the newly created shared_rules object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedRulesResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"create shared_rules","tags":["Shared Rules"]}},"/shared_rules/{sharedRulesKey}":{"delete":{"description":"Delete an existing shared_rules object","parameters":[{"description":"the shared_rules key","in":"path","name":"sharedRulesKey","required":true,"example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c","schema":{"type":"string"}},{"description":"the current checksum of the shared_rules to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"delete shared_rules object","tags":["Route"]},"get":{"description":"Get details for an existing shared_rules object","parameters":[{"description":"the shared_rules key","in":"path","name":"sharedRulesKey","required":true,"example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a single shared_rules object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedRulesResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get shared_rules object","tags":["Shared Rules"]},"put":{"description":"Modify an existing shared_rules object","parameters":[{"description":"the shared_rules key","in":"path","name":"sharedRulesKey","required":true,"example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedRules"}}},"description":"the shared_rules object to modify","required":true},"responses":{"200":{"description":"A result containing the modified shared_rules object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedRulesResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"modify shared_rules object","tags":["Shared Rules"]}},"/zone":{"get":{"description":"Get all zones. possibly with filters\n","parameters":[{"description":"A JSON encoded array of ZoneFilter objects. The filter is taken\nas a union of intersections. In other words an object that matches\nevery constraint in any ZoneFilter will be included.\n","in":"query","name":"filters","schema":{"type":"string"}}],"responses":{"200":{"description":"A result containing an array of zones","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiZoneResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get a list of zones","tags":["Zone"]},"post":{"description":"Create a new zone.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneCreate"}}},"description":"the zone to create","required":true},"responses":{"200":{"description":"A result containing the newly created zone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"create zone","tags":["Zone"]}},"/zone/{zoneKey}":{"delete":{"description":"Delete a zone.\n","parameters":[{"description":"the zone key","in":"path","name":"zoneKey","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}},{"description":"the current checksum of the zone to be deleted","in":"query","name":"checksum","required":true,"example":"9cd24183-f848-48f8-6f55-0f07240700b9","schema":{"type":"string"}}],"responses":{"200":{"description":"an empty result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empty"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"delete zone","tags":["Zone"]},"get":{"description":"Get details for a single zone\n","parameters":[{"description":"the zone key","in":"path","name":"zoneKey","required":true,"example":"9cd24183-f848-48f8-6f55-0f0724070000","schema":{"type":"string"}}],"responses":{"200":{"description":"a result containing a single zone","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneResult"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"summary":"get zone","tags":["Zone"]}}},"servers":[{"url":"https://api.turbinelabs.io/v1.0"}],"components":{"securitySchemes":{"api_key":{"in":"header","name":"Authorization","type":"apiKey"}},"schemas":{"AccessToken":{"properties":{"access_token_key":{"type":"string"},"checksum":{"type":"string"},"created_at":{"description":"A timestamp that marks when a user was deleted. It is in the format\nyyyy-mm-ddThh:mm:ss.SZ. The timezone will always be UTC.\n","type":"string"},"description":{"type":"string"},"signed_token":{"description":"This will be set only when an AccessToken is initially created\n","type":"string"},"user_key":{"type":"string"}},"required":["access_token_key","description","user_key","created_at","checksum"],"type":"object"},"AccessTokenDescription":{"properties":{"description":{"type":"string"}},"required":["description"],"type":"object"},"AllConstraints":{"properties":{"dark":{"$ref":"#/components/schemas/ClusterConstraints"},"light":{"$ref":"#/components/schemas/ClusterConstraints"},"tap":{"$ref":"#/components/schemas/ClusterConstraints"}},"required":["light"],"type":"object"},"CORSConfig":{"description":"Experimental: Controls simple CORS responses for the associated domain.\nThe configurable properties map closely to the CORS specification which\nshould be referenced for a full discussion on their meaning:\nhttps://www.w3.org/TR/cors/ or https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS.\n","properties":{"allow_credentials":{"description":"Indicates whether the response to request can be exposed when the\nomit credentials flag is unset\nhttps://www.w3.org/TR/cors/#access-control-allow-credentials-response-header.\n","type":"boolean"},"allowed_headers":{"description":"Specifies what headers are allowed to be set when a request is made.\nhttps://www.w3.org/TR/cors/#access-control-allow-headers-response-header.\n","items":{"type":"string"},"type":"array"},"allowed_methods":{"description":"Indicates which HTTP request types may be used to call an endpoint.\nhttps://www.w3.org/TR/cors/#access-control-allow-methods-response-header.\n","items":{"type":"string"},"type":"array"},"allowed_origins":{"description":"Must contain a single element specifying the domain (origin) allowed\nto make requsets to this domain. If any origin is acceptable '*' may\nbe used as a wildcard https://www.w3.org/TR/cors/#origin-request-header,\nhttps://www.w3.org/TR/cors/#access-control-allow-origin-response-header.\n","items":{"type":"string"},"type":"array"},"exposed_headers":{"description":"Indicates which response headers may be accessed from the browser.\nhttps://www.w3.org/TR/cors/#http-access-control-expose-headers.\n","items":{"type":"string"},"type":"array"},"max_age":{"description":"Sets how long (in seconds) the response to a preflight request may be\ncached. A value of -1 will disable caching. https://www.w3.org/TR/cors/#access-control-max-age-response-header.\n","type":"integer"}},"required":["allowed_origins","allowed_methods"],"type":"object"},"CertKeyPathPair":{"description":"A key/cert pair that will be served when a domain terminates a SSL/TLS\nrequest. Paths should be absolute and accessible to the user running\nthe proxy instance.\n","properties":{"certificate_path":{"description":"Path to a certificate in the PEM format for the domain. If multiple\ncertificates need to be specified then should be contained in this file\nin the following order: first the primary certificate followed by any\nintermediary certificats.\n","type":"string"},"key_path":{"description":"Path to a file with the secret key in the PEM format for the domain.\n","type":"string"}},"required":["certificate_path","key_path"],"type":"object"},"ChangeDescription":{"properties":{"actor_key":{"description":"The user who made the change.","type":"string","x-example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c"},"at":{"description":"When the change took place in milliseconds since the Unix epoch.","format":"int64","type":"number"},"comment":{"description":"A description of the change.","type":"string"},"diffs":{"description":"A collection of attribute updates that compose this change.","items":{"$ref":"#/components/schemas/ChangeEntry"},"type":"array"},"txn":{"description":"A unique identifier for all this transaction. It is shared by all\nattribute updates within a change.\n","type":"string","x-example":"1c7b1c5e-1a23-4d04-5cb4-eccea4d5994c"}},"type":"object"},"ChangeEntry":{"properties":{"change_type":{"description":"Whether the value was added or removed to the object.","enum":["addition","removal"],"type":"string"},"object_key":{"description":"An ID uniquely identifying the object being changed.","type":"string","x-example":"9cd24183-f848-48f8-6f55-0f0724070000"},"object_type":{"description":"The name of the object being being altered.","enum":["org","user","zone","proxy","domain","route","shared_rules","cluster"],"type":"string"},"path":{"description":"A dot-separated / bracket-indexed path to the field changed on the object.","type":"string","x-example":"cluster.instance[10.0.1.5:8080].metadata[pod-template-hash]"},"value":{"description":"The value that has been added or removed to the object at the attribute\npath indicated in path.\n","type":"string"},"zone_key":{"description":"The zone this object is located in.","type":"string","x-example":"9cd24183-f848-48f8-6f55-0f0724070000"}},"type":"object"},"CircuitBreakers":{"description":"Provides limits on various parameters to protect clusters against sudden\nsurges in traffic.\n","properties":{"max_connections":{"description":"Maximum number of connections that will be established to all\ninstances in a cluster within a proxy. If set to 0, no new connections\nwill be created. If not specified, defaults to 1024.\n","type":"integer"},"max_pending_requests":{"description":"Maximum number of requests that will be queued while waiting on a\nconnection pool to a cluster within a proxy. If set to 0, no requests\nwill be queued. If not specified, defaults to 1024.\n","type":"integer"},"max_requests":{"description":"Maximum number of requests that can be outstanding to all instances in\na cluster within a proxy. Only applicable to HTTP/2 traffic since\nHTTP/1.1 clusters are governed by the maximum connections circuit\nbreaker. If set to 0, no requests will be made. If not specified,\ndefaults to 1024.\n","type":"integer"},"max_retries":{"description":"Maximum number of retries that can be outstanding to all instances in\na cluster within a proxy. If set to 0, requests will not be retried.\nIf not specified, defaults to 3.\n","type":"integer"}},"type":"object"},"Cluster":{"allOf":[{"$ref":"#/components/schemas/ClusterCreate"},{"properties":{"checksum":{"type":"string"},"cluster_key":{"type":"string"}},"required":["cluster_key","checksum"],"type":"object"}]},"ClusterConstraint":{"properties":{"cluster_key":{"type":"string"},"constraint_key":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Metadata"},"properties":{"$ref":"#/components/schemas/Metadata"},"response_data":{"allOf":[{"$ref":"#/components/schemas/ResponseData"}],"description":"When a request is served by a cluster selected by this constraint annotate\nthe response with the information specified within this ResponseData\nobject. It's possible that multiple response data configurations will\napply; if that's the case then the values from ClusterConstarint takes\nprecedence over those from a Route or SharedRules object.\n"},"weight":{"type":"integer"}},"type":"object"},"ClusterConstraints":{"items":{"$ref":"#/components/schemas/ClusterConstraint"},"type":"array"},"ClusterCreate":{"properties":{"circuit_breakers":{"$ref":"#/components/schemas/CircuitBreakers"},"health_checks":{"$ref":"#/components/schemas/HealthChecks"},"instances":{"$ref":"#/components/schemas/Instances"},"name":{"type":"string"},"outlier_detection":{"$ref":"#/components/schemas/OutlierDetection"},"require_tls":{"description":"If set, requests to this collection of hosts will be made via HTTPS.\nAt this time neither certificate validation and certificate pinning\nare supported for proxy clients of this cluster.\n","type":"boolean"},"zone_key":{"type":"string"}},"required":["zone_key","name"],"type":"object"},"ClusterFilter":{"properties":{"cluster_key":{"type":"string"},"name":{"type":"string"},"zone_key":{"type":"string"}},"type":"object"},"ClusterResult":{"properties":{"result":{"$ref":"#/components/schemas/Cluster"}},"type":"object"},"CohortSeed":{"properties":{"name":{"description":"The name of the cookie, the header field, or the query argument to\nbe checked for a cohort seed value.\n","type":"string"},"type":{"description":"Where a request's cohort seed will be drawn from.","enum":["header","cookie","query"],"type":"string"},"use_zero_value_seed":{"description":"If true, requests with a seed source which resolves to an empty value\nwill still be grouped and routed consistently. This means a misspelled\nor missing seed source on a request will sort all such traffic into a\nsingle backend. This could result in all traffic being assigned to a\nbackend intended for only a small percentage of traffic. Use with\ncaution.\n","type":"boolean"}},"type":"object"},"CookieDatum":{"description":"This describes a cookie that should be set in response to a HTTP request.\n","properties":{"domain":{"description":"Specifies the hosts to hich a cookie will be sent. Maps directly to a\ncookie's 'Domain' attribute.\n","type":"string"},"expires_in_sec":{"description":"This indicates how long a cookie will be valid, in seconds. If not set the\ndefault is to provide no expiration information. If set to 0 the cookie will\nhave an 'Expires' attribute set to 'Mon, 1 Jan 0001 12:00:00 UTC'. For values\ngreater than 0 the cookie's 'Max-Age' attribute will be set to that value.\n","type":"integer"},"http_only":{"description":"If set the cookie value will not be accessible via Document.cookie. Maps\ndirectly to 'HttpOnly' attribute.\n","type":"boolean"},"name":{"description":"The name of the cookie that will be attached to the response sent.","type":"string"},"path":{"description":"Specifies the path a cookie will be associated with. Maps directly to\nthe 'Path' attribute.\n","type":"string"},"same_site":{"description":"Allows assertions how a cookie should behave wend making cross-site requests.\nMaps directly to 'SameSite' attribute. If unset no guidance will be included\nin the cookie.\n","enum":["Strict","Lax"],"type":"string"},"secure":{"description":"If set the cookie will only be sent on subsequent requests when accessing\na server via HTTPS. Maps directly to 'Secure' attribute.\n","type":"boolean"},"value":{"description":"A literal value to send as the cookie value or a reference to\nsome metadatum value set on the Cluster Intsance that handles\na specific request.\n","type":"string"},"value_is_literal":{"description":"If true then the value attribute is treated as a literal and no attempt\nto resolve to a server metadatum.\n","type":"boolean"}},"type":"object"},"Domain":{"allOf":[{"$ref":"#/components/schemas/DomainCreate"},{"properties":{"checksum":{"type":"string"},"domain_key":{"type":"string"}},"required":["domain_key","checksum"],"type":"object"}]},"DomainCreate":{"properties":{"aliases":{"description":"A set of alternate names that this Domain may be referenced by. May\nstart ('*.') or end ('.*') with a wildcard.\n","items":{"type":"string"},"type":"array"},"checksum":{"type":"string"},"cors_config":{"$ref":"#/components/schemas/CORSConfig"},"domain_key":{"type":"string"},"force_https":{"description":"If set to true, requests must use TLS. If a request is not using TLS, (as determined by\nthe scheme or the presence of X-Forwarded-Proto header), a 301 redirect will be sent\ntelling the client to use HTTPS.\n","type":"boolean"},"gzip_enabled":{"description":"Experimental: if set to true will enable gzip compression on data that passes trough this domain","type":"boolean"},"name":{"type":"string"},"port":{"type":"integer"},"redirects":{"items":{"$ref":"#/components/schemas/Redirect"},"type":"array"},"ssl_config":{"$ref":"#/components/schemas/SSLConfig"},"zone_key":{"type":"string"}},"required":["zone_key","name","port"],"type":"object"},"DomainFilter":{"properties":{"domain_key":{"type":"string"},"name":{"type":"string"},"proxy_keys":{"description":"matches Domains with a superset of the specified proxy_keys. A\nslice with a single value of \"-\" will produce Domains with no linked\nProxies.\n","items":{"type":"string"},"type":"array"},"zone_key":{"type":"string"}},"type":"object"},"DomainResult":{"properties":{"result":{"$ref":"#/components/schemas/Domain"}},"type":"object"},"Empty":{"type":"object"},"Error":{"properties":{"code":{"format":"int32","type":"integer"},"fields":{"type":"string"},"message":{"type":"string"}},"type":"object"},"Filter":{"properties":{"absolute_match_only":{"description":"If set this will return ChangeEntry values with a path that matches\nthe