{"openapi":"3.1.0","info":{"title":"Cast AI (BYOK) API","version":"0.1.0","description":"Cast AI (BYOK) lets an AI assistant read your own Cast AI data through the Cast AI API with a key you supply (Cast AI API key (read-only access is enough)). Read-only: 10 tools (list_clusters, get_cluster, list_nodes, get_cluster_summary, list_clusters_summary, get_daily_cost_report, get_clusters_efficiency, list_node_templates, list_audit_events, get_platform_usage_report). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-castai.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-castai/docs"},"termsOfService":"https://connectorbay.com/byok-castai/terms"},"servers":[{"url":"https://byok-castai.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-castai/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_clusters":{"post":{"operationId":"list_clusters","summary":"List the Kubernetes clusters connected to your organization with cloud provider, region, status and agent status. Use fo","description":"List the Kubernetes clusters connected to your organization with cloud provider, region, status and agent status. Use for \"Which Kubernetes clusters are connected to Cast AI\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_clustersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_cluster":{"post":{"operationId":"get_cluster","summary":"Get one cluster: provider, region, status, agent status, creation time and tags. Use for \"What is the status of my Cast ","description":"Get one cluster: provider, region, status, agent status, creation time and tags. Use for \"What is the status of my Cast AI cluster prod-eks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster_id":{"description":"Id of the connected Kubernetes cluster (UUID), from list_clusters.","maxLength":200,"title":"Cluster Id","type":"string"}},"required":["cluster_id"],"title":"get_clusterArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_nodes":{"post":{"operationId":"list_nodes","summary":"List the nodes of a cluster with instance type, lifecycle (spot flag), zone, state, CPU and memory capacity and Kubernet","description":"List the nodes of a cluster with instance type, lifecycle (spot flag), zone, state, CPU and memory capacity and Kubernetes version. Use for \"Which nodes does my Cast AI cluster run and how many are spot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster_id":{"description":"Id of the connected Kubernetes cluster (UUID), from list_clusters.","maxLength":200,"title":"Cluster Id","type":"string"},"node_status":{"anyOf":[{"enum":["unknown","pending","creating","ready","not_ready","draining","deleting","deleted","interrupted","cordoned"],"type":"string"},{"type":"null"}],"default":null,"description":"Only nodes in this state, for example ready or not_ready.","title":"Node Status"},"lifecycle_type":{"anyOf":[{"enum":["on_demand","fallback","spot"],"type":"string"},{"type":"null"}],"default":null,"description":"Only nodes of this lifecycle.","title":"Lifecycle Type"},"zone":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only nodes in this availability zone.","title":"Zone"},"page_limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many nodes to return per page.","title":"Page Limit"},"page_cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous page's response to fetch the next page.","title":"Page Cursor"}},"required":["cluster_id"],"title":"list_nodesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_cluster_summary":{"post":{"operationId":"get_cluster_summary","summary":"Get a cluster's current resource and cost summary: node counts, provisioned and requested CPU and RAM, hourly cost on-de","description":"Get a cluster's current resource and cost summary: node counts, provisioned and requested CPU and RAM, hourly cost on-demand and spot, pod counts. Use for \"What does my Cast AI cluster cost per hour right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster_id":{"description":"Id of the connected Kubernetes cluster (UUID), from list_clusters.","maxLength":200,"title":"Cluster Id","type":"string"},"use_listing_prices":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to compute costs with list prices instead of your negotiated prices.","title":"Use Listing Prices"}},"required":["cluster_id"],"title":"get_cluster_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_clusters_summary":{"post":{"operationId":"list_clusters_summary","summary":"Get the current resource and cost summary of every cluster in the organization. Use for \"What do all my Cast AI clusters","description":"Get the current resource and cost summary of every cluster in the organization. Use for \"What do all my Cast AI clusters cost per hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"use_listing_prices":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to compute costs with list prices instead of your negotiated prices.","title":"Use Listing Prices"}},"title":"list_clusters_summaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_daily_cost_report":{"post":{"operationId":"get_daily_cost_report","summary":"Get hourly cost over a time range for every cluster: cost per hour for on-demand, spot and spot fallback nodes. Use for ","description":"Get hourly cost over a time range for every cluster: cost per hour for on-demand, spot and spot fallback nodes. Use for \"How did my Kubernetes cost develop over the last week in Cast AI\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"description":"Start of the range, RFC 3339 such as 2026-10-10T00:00:00Z.","maxLength":200,"title":"Start Time","type":"string"},"end_time":{"description":"End of the range, RFC 3339 such as 2026-10-17T00:00:00Z.","maxLength":200,"title":"End Time","type":"string"},"use_listing_prices":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to compute costs with list prices instead of your negotiated prices.","title":"Use Listing Prices"}},"required":["start_time","end_time"],"title":"get_daily_cost_reportArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_clusters_efficiency":{"post":{"operationId":"get_clusters_efficiency","summary":"Get the efficiency summary per cluster for a time range: wasted CPU, RAM and storage and over-provisioning percent. Use ","description":"Get the efficiency summary per cluster for a time range: wasted CPU, RAM and storage and over-provisioning percent. Use for \"Which of my clusters waste the most resources according to Cast AI\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"description":"Start of the range, RFC 3339.","maxLength":200,"title":"Start Time","type":"string"},"end_time":{"description":"End of the range, RFC 3339.","maxLength":200,"title":"End Time","type":"string"},"use_listing_prices":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to compute costs with list prices instead of your negotiated prices.","title":"Use Listing Prices"},"page_limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many clusters to return per page.","title":"Page Limit"}},"required":["start_time","end_time"],"title":"get_clusters_efficiencyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_node_templates":{"post":{"operationId":"list_node_templates","summary":"List a cluster's node templates with their name and constraints such as CPU and memory range, spot and on-demand use. Us","description":"List a cluster's node templates with their name and constraints such as CPU and memory range, spot and on-demand use. Use for \"What node templates does my Cast AI cluster use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cluster_id":{"description":"Id of the connected Kubernetes cluster (UUID), from list_clusters.","maxLength":200,"title":"Cluster Id","type":"string"},"include_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include the default template.","title":"Include Default"}},"required":["cluster_id"],"title":"list_node_templatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_audit_events":{"post":{"operationId":"list_audit_events","summary":"List audit events (who did what to which resource, with severity and time) for a date range. Use for \"What changes were ","description":"List audit events (who did what to which resource, with severity and time) for a date range. Use for \"What changes were made to my Cast AI organization recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events at or after this RFC 3339 time.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events before this RFC 3339 time.","title":"To Date"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Free-text filter on events.","title":"Search"},"page_limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many events to return per page.","title":"Page Limit"},"page_cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous page to fetch the next one.","title":"Page Cursor"}},"title":"list_audit_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_platform_usage_report":{"post":{"operationId":"get_platform_usage_report","summary":"Get this month's platform usage by feature with units, credits total, used and remaining, and subscription periods. Use ","description":"Get this month's platform usage by feature with units, credits total, used and remaining, and subscription periods. Use for \"How much of my Cast AI credits have I used this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_platform_usage_reportArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}