{"openapi":"3.1.0","info":{"title":"Sakura Cloud (BYOK) API","version":"0.1.0","description":"Sakura Cloud (BYOK) lets an AI assistant read your own Sakura Cloud data through the Sakura Cloud API with a key you supply (Sakura Cloud API key (access token)). Read-only: 11 tools (list_servers, get_server, list_disks, list_switches, list_internet_routers, list_zones, list_server_plans, list_bills, list_bills_by_month, get_bill_details, list_coupons). 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-sakuracloud.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-sakuracloud/docs"},"termsOfService":"https://connectorbay.com/byok-sakuracloud/terms"},"servers":[{"url":"https://byok-sakuracloud.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-sakuracloud/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_servers":{"post":{"operationId":"list_servers","summary":"List servers in a zone with power status, plan (CPU and memory), host name, tags and creation time. Use for \"Which Sakur","description":"List servers in a zone with power status, plan (CPU and memory), host name, tags and creation time. Use for \"Which Sakura Cloud servers are running in zone is1a\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"}},"required":["zone"],"title":"list_serversArguments","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_server":{"post":{"operationId":"get_server","summary":"Get one server: power status, plan (CPU and memory), host name, tags, zone and creation time. Use for \"Is my Sakura Clou","description":"Get one server: power status, plan (CPU and memory), host name, tags, zone and creation time. Use for \"Is my Sakura Cloud server up and how many cores does it have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"},"server_id":{"description":"Id of the server, from list_servers.","title":"Server Id","type":"integer"}},"required":["zone","server_id"],"title":"get_serverArguments","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_disks":{"post":{"operationId":"list_disks","summary":"List disks in a zone with size, connection type, availability, service class and creation time. Use for \"How big are my ","description":"List disks in a zone with size, connection type, availability, service class and creation time. Use for \"How big are my Sakura Cloud disks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"}},"required":["zone"],"title":"list_disksArguments","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_switches":{"post":{"operationId":"list_switches","summary":"List switches (private networks) in a zone with the number of connected servers and appliances. Use for \"Which private n","description":"List switches (private networks) in a zone with the number of connected servers and appliances. Use for \"Which private networks do I have on Sakura Cloud\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"}},"required":["zone"],"title":"list_switchesArguments","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_internet_routers":{"post":{"operationId":"list_internet_routers","summary":"List internet routers (router plus switch) in a zone with bandwidth, network mask length and scope. Use for \"Which route","description":"List internet routers (router plus switch) in a zone with bandwidth, network mask length and scope. Use for \"Which routers and how much bandwidth do I have on Sakura Cloud\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"}},"required":["zone"],"title":"list_internet_routersArguments","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_zones":{"post":{"operationId":"list_zones","summary":"List the Sakura Cloud zones with their region. Use for \"Which Sakura Cloud zones exist\".","description":"List the Sakura Cloud zones with their region. Use for \"Which Sakura Cloud zones exist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"}},"required":["zone"],"title":"list_zonesArguments","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_server_plans":{"post":{"operationId":"list_server_plans","summary":"List the server plans (CPU cores, memory, availability) that can be ordered in a zone. Use for \"Which server plans does ","description":"List the server plans (CPU cores, memory, availability) that can be ordered in a zone. Use for \"Which server plans does Sakura Cloud offer in is1a\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"}},"required":["zone"],"title":"list_server_plansArguments","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_bills":{"post":{"operationId":"list_bills","summary":"List bills charged to a project with amount, bill date, payment due date and paid flag. Use for \"What did Sakura Cloud b","description":"List bills charged to a project with amount, bill date, payment due date and paid flag. Use for \"What did Sakura Cloud bill me and is it paid\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"},"account_id":{"description":"Id of the project (account) the bills are charged to, shown in the control panel.","maxLength":200,"title":"Account Id","type":"string"}},"required":["zone","account_id"],"title":"list_billsArguments","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_bills_by_month":{"post":{"operationId":"list_bills_by_month","summary":"List bills charged to a project in one year and month. Use for \"What was my Sakura Cloud bill in March 2026\".","description":"List bills charged to a project in one year and month. Use for \"What was my Sakura Cloud bill in March 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"},"account_id":{"description":"Id of the project (account) the bills are charged to, shown in the control panel.","maxLength":200,"title":"Account Id","type":"string"},"year":{"description":"Billing year.","maximum":2100,"minimum":2010,"title":"Year","type":"integer"},"month":{"description":"Billing month, 1 to 12.","maximum":12,"minimum":1,"title":"Month","type":"integer"}},"required":["zone","account_id","year","month"],"title":"list_bills_by_monthArguments","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_bill_details":{"post":{"operationId":"get_bill_details","summary":"List the line items of one bill with contract id, service class, usage and amount. Use for \"What are the line items of m","description":"List the line items of one bill with contract id, service class, usage and amount. Use for \"What are the line items of my Sakura Cloud bill 99999999\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"},"member_code":{"description":"Member id of the bill, from list_bills (MemberID).","maxLength":200,"title":"Member Code","type":"string"},"bill_no":{"description":"Bill number, from list_bills (BillID).","title":"Bill No","type":"integer"}},"required":["zone","member_code","bill_no"],"title":"get_bill_detailsArguments","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_coupons":{"post":{"operationId":"list_coupons","summary":"List the coupons applied to a project with remaining balance and expiry. Use for \"How much Sakura Cloud coupon balance d","description":"List the coupons applied to a project with remaining balance and expiry. Use for \"How much Sakura Cloud coupon balance do I have left\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone":{"description":"Zone of the Sakura Cloud API to ask: tk1a, tk1b, is1a, is1b, is1c or tk1v (sandbox). Resources exist per zone.","maxLength":200,"title":"Zone","type":"string"},"account_id":{"description":"Id of the project (account) the bills are charged to, shown in the control panel.","maxLength":200,"title":"Account Id","type":"string"}},"required":["zone","account_id"],"title":"list_couponsArguments","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}}}}