{"openapi":"3.1.0","info":{"title":"SF Compute (BYOK) API","version":"0.1.0","description":"SF Compute (BYOK) lets an AI assistant read your own SF Compute data through the SF Compute API with a key you supply (SF Compute API token (sk_live_...) with read grants). Read-only: 11 tools (list_instances, get_instance, list_pools, get_pool, list_orders, get_order, list_skus, list_sku_availability, list_workspaces, list_images, list_pool_transfers). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-sfcompute.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-sfcompute/docs"},"termsOfService":"https://connectorbay.com/byok-sfcompute/terms"},"servers":[{"url":"https://byok-sfcompute.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-sfcompute/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_instances":{"post":{"operationId":"list_instances","summary":"List GPU instances with state (awaiting_allocation, running, terminated, failed), SKU, image, private IP and creation ti","description":"List GPU instances with state (awaiting_allocation, running, terminated, failed), SKU, image, private IP and creation time. Use for \"Which SF Compute GPU instances are running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Limit to one workspace (id, resource path or name); omit to span every workspace you can read.","title":"Workspace"},"created_after":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only instances created at or after this Unix time in seconds.","title":"Created After"},"created_before":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only instances created before this Unix time in seconds.","title":"Created Before"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_instancesArguments","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_instance":{"post":{"operationId":"get_instance","summary":"Get one instance by id or name: state, SKU, image, private IP, public IP flag and creation time. Use for \"What state is ","description":"Get one instance by id or name: state, SKU, image, private IP, public IP flag and creation time. Use for \"What state is SF Compute instance inst_1 in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Instance id (inst_...) or name.","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_instanceArguments","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_pools":{"post":{"operationId":"list_pools","summary":"List pools (buckets of compute allocation over time) with their allocation schedule by node count. Use for \"How many GPU","description":"List pools (buckets of compute allocation over time) with their allocation schedule by node count. Use for \"How many GPU nodes do my SF Compute pools hold over time\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Limit to one workspace (id, resource path or name); omit to span every workspace you can read.","title":"Workspace"},"schedule_history_minutes":{"anyOf":[{"maximum":1440,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Minutes of past allocation schedule to include (0 to 1440).","title":"Schedule History Minutes"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_poolsArguments","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_pool":{"post":{"operationId":"get_pool","summary":"Get one pool by id, resource path or name with its allocation schedule. Use for \"What is the allocation of SF Compute po","description":"Get one pool by id, resource path or name with its allocation schedule. Use for \"What is the allocation of SF Compute pool pool_1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Pool id, resource path or name.","maxLength":200,"title":"Id","type":"string"},"schedule_history_minutes":{"anyOf":[{"maximum":1440,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Minutes of past schedule to include (0 to 1440).","title":"Schedule History Minutes"}},"required":["id"],"title":"get_poolArguments","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_orders":{"post":{"operationId":"list_orders","summary":"List buy and sell orders for compute time with side, state, SKU, limit price per node-hour and fills. Use for \"What comp","description":"List buy and sell orders for compute time with side, state, SKU, limit price per node-hour and fills. Use for \"What compute orders did I place on SF Compute\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Limit to one workspace (id, resource path or name); omit to span every workspace you can read.","title":"Workspace"},"pool":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only orders of this pool (id, resource path or name).","title":"Pool"},"side":{"anyOf":[{"enum":["buy","sell"],"type":"string"},{"type":"null"}],"default":null,"description":"buy or sell.","title":"Side"},"created_after":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only orders created at or after this Unix time in seconds.","title":"Created After"},"created_before":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only orders created before this Unix time in seconds.","title":"Created Before"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_ordersArguments","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_order":{"post":{"operationId":"get_order","summary":"Get one order by id with side, state, SKU, limit price, schedule and fills. Use for \"What happened with SF Compute order","description":"Get one order by id with side, state, SKU, limit price, schedule and fills. Use for \"What happened with SF Compute order ord_1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Order id (ord_...).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_orderArguments","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_skus":{"post":{"operationId":"list_skus","summary":"List the hardware SKUs offered with region, accelerator, form factor, vCPUs, memory and storage. Use for \"Which GPU hard","description":"List the hardware SKUs offered with region, accelerator, form factor, vCPUs, memory and storage. Use for \"Which GPU hardware does SF Compute offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"include_deleted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include SKUs that have been retired.","title":"Include Deleted"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_skusArguments","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_sku_availability":{"post":{"operationId":"list_sku_availability","summary":"List purchasable capacity per SKU over time (node counts by start and end time). Use for \"How many H100 nodes can I buy ","description":"List purchasable capacity per SKU over time (node counts by start and end time). Use for \"How many H100 nodes can I buy on SF Compute\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sku_query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Filter SKUs by a query such as an alias or accelerator name.","title":"Sku Query"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_sku_availabilityArguments","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_workspaces":{"post":{"operationId":"list_workspaces","summary":"List the workspaces (resource containers) of your account. Use for \"Which SF Compute workspaces do I have\".","description":"List the workspaces (resource containers) of your account. Use for \"Which SF Compute workspaces do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_workspacesArguments","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_images":{"post":{"operationId":"list_images","summary":"List machine images in a workspace with public flag and upload status. Use for \"Which custom images do I have on SF Comp","description":"List machine images in a workspace with public flag and upload status. Use for \"Which custom images do I have on SF Compute\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Limit to one workspace (id, resource path or name); omit to span every workspace you can read.","title":"Workspace"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_imagesArguments","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_pool_transfers":{"post":{"operationId":"list_pool_transfers","summary":"List transfers of compute allocation between pools with status and SKU. Use for \"Were any compute transfers between my S","description":"List transfers of compute allocation between pools with status and SKU. Use for \"Were any compute transfers between my SF Compute pools executed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["pending","executed","rejected"],"type":"string"},{"type":"null"}],"default":null,"description":"pending, executed or rejected.","title":"Status"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results after this id (from the previous page's last item).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor: return results before this id.","title":"Ending Before"}},"title":"list_pool_transfersArguments","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}}}}