{"files":{"SKILL.md":"---\nname: turbine-labs-api\ndescription: \"Turbine Labs API skill. Use when working with Turbine Labs for admin, changelog, zone. Covers 44 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Turbine Labs API\nAPI version: 1.0\n\n## Auth\nApiKey Authorization in header\n\n## Base URL\nhttps://api.turbinelabs.io/v1.0\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /admin/user/self -- returns the user object for the account authorized and making this request.\n3. POST /admin/user/self/access_tokens -- create first access_token\n\n## Endpoints\n44 endpoints across 9 groups. See references/api-spec.lap for full details.\n\n### Admin\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /admin/user/self | Returns the user object for the account authorized and making this request. |\n| GET | /admin/user/self/access_tokens | Lists Access Tokens that are configured for the authenticated user. |\n| POST | /admin/user/self/access_tokens | Creates a new Access Token and associates it with the authenticated user. |\n| DELETE | /admin/user/self/access_token/{access-token-key} | Delete the specified access token. |\n\n### Changelog\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /changelog/adhoc | Allows an arbitrary filter to be specified and applied to the org\\'s change log. |\n| GET | /changelog/domain-graph/{domainKey} | get changes related to the indicated domain |\n| GET | /changelog/route-graph/{routeKey} | get changes related to the indicated route |\n| GET | /changelog/shared-rules-graph/{sharedRulesKey} | get changes related to the indicated SharedRules |\n| GET | /changelog/cluster-graph/{clusterKey} | get changes related to the indicated cluster |\n| GET | /changelog/zone/{zoneKey} | get changes in a specified zone |\n\n### Zone\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /zone | get a list of zones |\n| POST | /zone | create zone |\n| GET | /zone/{zoneKey} | get zone |\n| DELETE | /zone/{zoneKey} | delete zone |\n\n### Domain\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /domain | get domains |\n| POST | /domain | create domain |\n| GET | /domain/{domainKey} | get domain |\n| DELETE | /domain/{domainKey} | delete domain |\n\n### Proxy\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /proxy | list proxies |\n| POST | /proxy | create proxy |\n| GET | /proxy/{proxyKey} | get proxy |\n| DELETE | /proxy/{proxyKey} | delete proxy |\n\n### Listener\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /listener | list listeners |\n| POST | /listener | create listener |\n| GET | /listener/{listenerKey} | get listener |\n| PUT | /listener/{listenerKey} | modify listener |\n| DELETE | /listener/{listenerKey} | delete listener |\n\n### Shared_rules\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /shared_rules | get shared_rules |\n| POST | /shared_rules | create shared_rules |\n| GET | /shared_rules/{sharedRulesKey} | get shared_rules object |\n| PUT | /shared_rules/{sharedRulesKey} | modify shared_rules object |\n| DELETE | /shared_rules/{sharedRulesKey} | delete shared_rules object |\n\n### Route\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /route | get routes |\n| POST | /route | create route |\n| GET | /route/{routeKey} | get route |\n| PUT | /route/{routeKey} | modify route |\n| DELETE | /route/{routeKey} | delete route |\n\n### Cluster\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /cluster | get clusters |\n| POST | /cluster | create cluster |\n| GET | /cluster/{clusterKey} | get cluster |\n| PUT | /cluster/{clusterKey} | modify cluster |\n| DELETE | /cluster/{clusterKey} | delete cluster |\n| POST | /cluster/{clusterKey}/instances | add instance |\n| DELETE | /cluster/{clusterKey}/instances/{instanceIdentifier} | remove instance |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all self?\" -> GET /admin/user/self\n- \"List all access_tokens?\" -> GET /admin/user/self/access_tokens\n- \"Create a access_token?\" -> POST /admin/user/self/access_tokens\n- \"Delete a access_token?\" -> DELETE /admin/user/self/access_token/{access-token-key}\n- \"List all adhoc?\" -> GET /changelog/adhoc\n- \"Get domain-graph details?\" -> GET /changelog/domain-graph/{domainKey}\n- \"Get route-graph details?\" -> GET /changelog/route-graph/{routeKey}\n- \"Get shared-rules-graph details?\" -> GET /changelog/shared-rules-graph/{sharedRulesKey}\n- \"Get cluster-graph details?\" -> GET /changelog/cluster-graph/{clusterKey}\n- \"Get zone details?\" -> GET /changelog/zone/{zoneKey}\n- \"List all zone?\" -> GET /zone\n- \"Create a zone?\" -> POST /zone\n- \"Delete a zone?\" -> DELETE /zone/{zoneKey}\n- \"List all domain?\" -> GET /domain\n- \"Create a domain?\" -> POST /domain\n- \"Get domain details?\" -> GET /domain/{domainKey}\n- \"Delete a domain?\" -> DELETE /domain/{domainKey}\n- \"List all proxy?\" -> GET /proxy\n- \"Create a proxy?\" -> POST /proxy\n- \"Get proxy details?\" -> GET /proxy/{proxyKey}\n- \"Delete a proxy?\" -> DELETE /proxy/{proxyKey}\n- \"List all listener?\" -> GET /listener\n- \"Create a listener?\" -> POST /listener\n- \"Get listener details?\" -> GET /listener/{listenerKey}\n- \"Update a listener?\" -> PUT /listener/{listenerKey}\n- \"Delete a listener?\" -> DELETE /listener/{listenerKey}\n- \"List all shared_rules?\" -> GET /shared_rules\n- \"Create a shared_rule?\" -> POST /shared_rules\n- \"Get shared_rule details?\" -> GET /shared_rules/{sharedRulesKey}\n- \"Update a shared_rule?\" -> PUT /shared_rules/{sharedRulesKey}\n- \"Delete a shared_rule?\" -> DELETE /shared_rules/{sharedRulesKey}\n- \"List all route?\" -> GET /route\n- \"Create a route?\" -> POST /route\n- \"Get route details?\" -> GET /route/{routeKey}\n- \"Update a route?\" -> PUT /route/{routeKey}\n- \"Delete a route?\" -> DELETE /route/{routeKey}\n- \"List all cluster?\" -> GET /cluster\n- \"Create a cluster?\" -> POST /cluster\n- \"Get cluster details?\" -> GET /cluster/{clusterKey}\n- \"Update a cluster?\" -> PUT /cluster/{clusterKey}\n- \"Delete a cluster?\" -> DELETE /cluster/{clusterKey}\n- \"Create a instance?\" -> POST /cluster/{clusterKey}/instances\n- \"Delete a instance?\" -> DELETE /cluster/{clusterKey}/instances/{instanceIdentifier}\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints return the modified resource on success\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Turbine Labs API\n@base https://api.turbinelabs.io/v1.0\n@version 1.0\n@auth ApiKey Authorization in header\n@endpoints 44\n@hint download_for_search\n@toc admin(4), changelog(6), zone(4), domain(4), proxy(4), listener(5), shared_rules(5), route(5), cluster(7)\n\n@group admin\n@endpoint GET /admin/user/self\n@desc Returns the user object for the account authorized and making this request.\n@returns(200) The authorized user.\n\n@endpoint GET /admin/user/self/access_tokens\n@desc Lists Access Tokens that are configured for the authenticated user.\n@returns(200) A list of Access Tokens defined for the authenticated user.\n\n@endpoint POST /admin/user/self/access_tokens\n@desc Creates a new Access Token and associates it with the authenticated user.\n@required {description: map # A short string (<255 characters) describing the expected use of the token.}\n@returns(200) The new Access Token that was created.\n\n@endpoint DELETE /admin/user/self/access_token/{access-token-key}\n@desc Delete the specified access token.\n@required {access-token-key: any # the key of the Access Token that should be deleted, checksum: any # the current checksum of the user to be modified}\n@returns(200) An empty result if the API key deletion was successful.\n\n@endgroup\n\n@group changelog\n@endpoint GET /changelog/adhoc\n@desc Allows an arbitrary filter to be specified and applied to the org\\'s change log.\n@optional {filter: any # Encoded FilterSums representing the query you would like to execute. See object definition for details.}\n@returns(200) A list of changes that meet the provided filter.\n\n@endpoint GET /changelog/domain-graph/{domainKey}\n@desc get changes related to the indicated domain\n@required {domainKey: any # the domain key to see an audit log for}\n@optional {start: any # The beginning of the window we want to see changes for; measured in microseconds since Unix Epoch., end: any # The end of the window we want to see changes for; measured in microseconds since Unix Epoch., max_results: any # Determines how many ChangeDescription object should be returned to the calling code., ref_id: any # When paginating a Changelog request start on the entry that comes immediately before or after this ID (as determined by the direction argument)., direction: any # If set to \"before\" then changes will be returned that occurred before reference ID. If \"after\" then changes will be returned that have occurred since the reference ID.}\n@returns(200) A list of changes occurring during the requested window.\n\n@endpoint GET /changelog/route-graph/{routeKey}\n@desc get changes related to the indicated route\n@required {routeKey: any # the route key to see an audit log for}\n@optional {start: any # The beginning of the window we want to see changes for; measured in microseconds since Unix Epoch., end: any # The end of the window we want to see changes for; measured in microseconds since Unix Epoch., max_results: any # Determines how many ChangeDescription object should be returned to the calling code., ref_id: any # When paginating a Changelog request start on the entry that comes immediately before or after this ID (as determined by the direction argument)., direction: any # If set to \"before\" then changes will be returned that occurred before reference ID. If \"after\" then changes will be returned that have occurred since the reference ID.}\n@returns(200) A list of changes occurring during the requested window.\n\n@endpoint GET /changelog/shared-rules-graph/{sharedRulesKey}\n@desc get changes related to the indicated SharedRules\n@required {sharedRulesKey: any # the shared rules key to see an audit log for}\n@optional {start: any # The beginning of the window we want to see changes for; measured in microseconds since Unix Epoch., end: any # The end of the window we want to see changes for; measured in microseconds since Unix Epoch., max_results: any # Determines how many ChangeDescription object should be returned to the calling code., ref_id: any # When paginating a Changelog request start on the entry that comes immediately before or after this ID (as determined by the direction argument)., direction: any # If set to \"before\" then changes will be returned that occurred before reference ID. If \"after\" then changes will be returned that have occurred since the reference ID.}\n@returns(200) A list of changes occurring during the requested window.\n\n@endpoint GET /changelog/cluster-graph/{clusterKey}\n@desc get changes related to the indicated cluster\n@required {clusterKey: any # the cluster key to see an audit log for}\n@optional {start: any # The beginning of the window we want to see changes for; measured in microseconds since Unix Epoch., end: any # The end of the window we want to see changes for; measured in microseconds since Unix Epoch., max_results: any # Determines how many ChangeDescription object should be returned to the calling code., ref_id: any # When paginating a Changelog request start on the entry that comes immediately before or after this ID (as determined by the direction argument)., direction: any # If set to \"before\" then changes will be returned that occurred before reference ID. If \"after\" then changes will be returned that have occurred since the reference ID.}\n@returns(200) A list of changes occurring during the requested window.\n\n@endpoint GET /changelog/zone/{zoneKey}\n@desc get changes in a specified zone\n@required {zoneKey: any # the zone key to see an audit log for}\n@optional {start: any # The beginning of the window we want to see changes for; measured in microseconds since Unix Epoch., end: any # The end of the window we want to see changes for; measured in microseconds since Unix Epoch., max_results: any # Determines how many ChangeDescription object should be returned to the calling code., ref_id: any # When paginating a Changelog request start on the entry that comes immediately before or after this ID (as determined by the direction argument)., direction: any # If set to \"before\" then changes will be returned that occurred before reference ID. If \"after\" then changes will be returned that have occurred since the reference ID.}\n@returns(200) A list of changes occurring during the requested window.\n\n@endgroup\n\n@group zone\n@endpoint GET /zone\n@desc get a list of zones\n@optional {filters: any # A JSON encoded array of ZoneFilter objects. The filter is taken as a union of intersections. In other words an object that matches every constraint in any ZoneFilter will be included.}\n@returns(200) A result containing an array of zones\n\n@endpoint POST /zone\n@desc create zone\n@required {zone: map # the zone to create}\n@returns(200) A result containing the newly created zone\n\n@endpoint GET /zone/{zoneKey}\n@desc get zone\n@required {zoneKey: any # the zone key}\n@returns(200) a result containing a single zone\n\n@endpoint DELETE /zone/{zoneKey}\n@desc delete zone\n@required {zoneKey: any # the zone key, checksum: any # the current checksum of the zone to be deleted}\n@returns(200) an empty result\n\n@endgroup\n\n@group domain\n@endpoint GET /domain\n@desc get domains\n@optional {filters: any # A JSON encoded array of DomainFilter objects. The filter is taken as a union of intersections. In other words an object that matches every constraint in any DomainFilter will be included.}\n@returns(200) a result containing a list of domains\n\n@endpoint POST /domain\n@desc create domain\n@required {domain: map # the domain to create}\n@returns(200) the newly created zone\n\n@endpoint GET /domain/{domainKey}\n@desc get domain\n@required {domainKey: any # the domain key}\n@returns(200) a result containing a single domain\n\n@endpoint DELETE /domain/{domainKey}\n@desc delete domain\n@required {domainKey: any # the domain key, checksum: any # the current checksum of the domain to be deleted}\n@returns(200) an empty result\n\n@endgroup\n\n@group proxy\n@endpoint GET /proxy\n@desc list proxies\n@optional {filters: any # A JSON encoded array of ProxyFilter objects. The filter is taken as a union of intersections. In other words an object that matches every constraint in any ProxyFilter will be included.}\n@returns(200) a result containing a list of proxies\n\n@endpoint POST /proxy\n@desc create proxy\n@required {proxy: map # the proxy to create}\n@returns(200) the newly created proxy\n\n@endpoint GET /proxy/{proxyKey}\n@desc get proxy\n@required {proxyKey: any # the proxy key}\n@returns(200) a result containing a single proxy\n\n@endpoint DELETE /proxy/{proxyKey}\n@desc delete proxy\n@required {proxyKey: any # the proxy key, checksum: any # the current checksum of the proxy to be deleted}\n@returns(200) an empty result\n\n@endgroup\n\n@group listener\n@endpoint GET /listener\n@desc list listeners\n@optional {filters: any # A JSON encoded array of ListenerFilter objects. The filter is taken as a union of intersections. In other words an object that matches every constraint in any ListenerFilter will be included.}\n@returns(200) a result containing a list of listeners\n\n@endpoint POST /listener\n@desc create listener\n@required {listener: map # the listener to create}\n@returns(200) the newly created listener\n\n@endpoint GET /listener/{listenerKey}\n@desc get listener\n@required {listenerKey: any # the listener key}\n@returns(200) a result containing a single listener\n\n@endpoint PUT /listener/{listenerKey}\n@desc modify listener\n@required {listenerKey: any # the listener key, listener: any # the listener to modify}\n@returns(200) A result containing the modified cluster\n\n@endpoint DELETE /listener/{listenerKey}\n@desc delete listener\n@required {listenerKey: any # the listener key, checksum: any # the current checksum of the listener to be deleted}\n@returns(200) an empty result\n\n@endgroup\n\n@group shared_rules\n@endpoint GET /shared_rules\n@desc get shared_rules\n@optional {filters: any # A JSON encoded array of SharedRulesFilter objects. The filter is taken as a union of intersections. In other words an object that matches every constraint in any SharedRulesFilter will be included.}\n@returns(200) a result containing a list of shared_rules\n\n@endpoint POST /shared_rules\n@desc create shared_rules\n@required {shared_rules: map # the shared_rules object to create}\n@returns(200) the newly created shared_rules object\n\n@endpoint GET /shared_rules/{sharedRulesKey}\n@desc get shared_rules object\n@required {sharedRulesKey: any # the shared_rules key}\n@returns(200) a result containing a single shared_rules object\n\n@endpoint PUT /shared_rules/{sharedRulesKey}\n@desc modify shared_rules object\n@required {sharedRulesKey: any # the shared_rules key, shared_rules: any # the shared_rules object to modify}\n@returns(200) A result containing the modified shared_rules object\n\n@endpoint DELETE /shared_rules/{sharedRulesKey}\n@desc delete shared_rules object\n@required {sharedRulesKey: any # the shared_rules key, checksum: any # the current checksum of the shared_rules to be deleted}\n@returns(200) an empty result\n\n@endgroup\n\n@group route\n@endpoint GET /route\n@desc get routes\n@optional {filters: any # A JSON encoded array of RouteFilter objects. The filter is taken as a union of intersections. In other words an object that matches every constraint in any RouteFilter will be included.}\n@returns(200) a result containing a list of routes\n\n@endpoint POST /route\n@desc create route\n@required {route: map # the route to create}\n@returns(200) the newly created route\n\n@endpoint GET /route/{routeKey}\n@desc get route\n@required {routeKey: any # the route key}\n@returns(200) a result containing a single route\n\n@endpoint PUT /route/{routeKey}\n@desc modify route\n@required {routeKey: any # the route key, route: any # the route to modify}\n@returns(200) A result containing the modified route\n\n@endpoint DELETE /route/{routeKey}\n@desc delete route\n@required {routeKey: any # the route key, checksum: any # the current checksum of the route to be deleted}\n@returns(200) an empty result\n\n@endgroup\n\n@group cluster\n@endpoint GET /cluster\n@desc get clusters\n@optional {filters: any # A JSON encoded array of ClusterFilter objects. The filter is taken as a union of intersections. In other words an object that matches every constraint in any ClusterFilter will be included.}\n@returns(200) a result containing a list of clusters\n\n@endpoint POST /cluster\n@desc create cluster\n@required {cluster: map # the cluster to create}\n@returns(200) the newly created cluster\n\n@endpoint GET /cluster/{clusterKey}\n@desc get cluster\n@required {clusterKey: any # the cluster key}\n@returns(200) a result containing a single cluster\n\n@endpoint PUT /cluster/{clusterKey}\n@desc modify cluster\n@required {clusterKey: any # the cluster key, cluster: any # the cluster to modify}\n@returns(200) A result containing the modified cluster\n\n@endpoint DELETE /cluster/{clusterKey}\n@desc delete cluster\n@required {clusterKey: any # the cluster key, checksum: any # the current checksum of the cluster to be deleted}\n@returns(200) an empty result\n\n@endpoint POST /cluster/{clusterKey}/instances\n@desc add instance\n@required {clusterKey: any # the cluster to add the instance to, instance: map # the instance to add}\n@returns(200) the newly created instance\n\n@endpoint DELETE /cluster/{clusterKey}/instances/{instanceIdentifier}\n@desc remove instance\n@required {checksum: any # the current checksum of the instance to be deleted, clusterKey: any # the cluster to remove an instance from, instanceIdentifier: any # the instance to remove, identified as :}\n@returns(200) an empty result\n\n@endgroup\n\n@end\n"}}