{"openapi":"3.1.0","info":{"title":"Hetzner Storage Box (BYOK) API","version":"0.1.0","description":"Hetzner Storage Box (BYOK) lets an AI assistant read your own Hetzner Storage Box data through the Hetzner Storage Box API with a key you supply (Hetzner Console project API token (Security, API Tokens)). Read-only: 8 tools (list_storage_boxes, get_storage_box, list_storage_box_types, get_storage_box_type, list_snapshots, list_subaccounts, list_folders, list_box_actions). 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-hetzner-storage-box.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-hetzner-storage-box/docs"},"termsOfService":"https://connectorbay.com/byok-hetzner-storage-box/terms"},"servers":[{"url":"https://byok-hetzner-storage-box.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-hetzner-storage-box/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_storage_boxes":{"post":{"operationId":"list_storage_boxes","summary":"List the Storage Boxes of the project with status, type, location, sizes in bytes, access settings (SSH, Samba, WebDAV, ","description":"List the Storage Boxes of the project with status, type, location, sizes in bytes, access settings (SSH, Samba, WebDAV, ZFS) and labels. Use for \"Which Hetzner Storage Boxes do I have and how full are they\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only boxes with exactly this name.","title":"Name"},"label_selector":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Label filter such as 'env=production' or 'env in (a,b)'.","title":"Label Selector"},"per_page":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 50).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_storage_boxesArguments","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_storage_box":{"post":{"operationId":"get_storage_box","summary":"Get one Storage Box: status, type, location, host name, usage in bytes (data and snapshots), protection and access setti","description":"Get one Storage Box: status, type, location, host name, usage in bytes (data and snapshots), protection and access settings. Use for \"How much space is used on my Storage Box 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"storage_box_id":{"description":"Numeric id of the Storage Box, as returned by list_storage_boxes.","minimum":1,"title":"Storage Box Id","type":"integer"}},"required":["storage_box_id"],"title":"get_storage_boxArguments","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_storage_box_types":{"post":{"operationId":"list_storage_box_types","summary":"List the Storage Box product types (for example bx11) with capacity in bytes, snapshot and subaccount limits and prices ","description":"List the Storage Box product types (for example bx11) with capacity in bytes, snapshot and subaccount limits and prices per location. Use for \"Which Storage Box sizes does Hetzner offer and what do they cost\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":50,"type":"string"},{"type":"null"}],"default":null,"description":"Only the type with exactly this name, for example bx11.","title":"Name"},"per_page":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 50).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_storage_box_typesArguments","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_storage_box_type":{"post":{"operationId":"get_storage_box_type","summary":"Get one Storage Box product type: capacity in bytes, limits, prices per location and deprecation notice. Use for \"What a","description":"Get one Storage Box product type: capacity in bytes, limits, prices per location and deprecation notice. Use for \"What are the limits of the bx11 Storage Box type\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type_id":{"description":"Numeric id of the Storage Box type, as returned by list_storage_box_types.","minimum":1,"title":"Type Id","type":"integer"}},"required":["type_id"],"title":"get_storage_box_typeArguments","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_snapshots":{"post":{"operationId":"list_snapshots","summary":"List the snapshots of a Storage Box with name, description, whether it is automatic, size in bytes and creation time. Us","description":"List the snapshots of a Storage Box with name, description, whether it is automatic, size in bytes and creation time. Use for \"When was the last snapshot of my Storage Box taken\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"storage_box_id":{"description":"Numeric id of the Storage Box, as returned by list_storage_boxes.","minimum":1,"title":"Storage Box Id","type":"integer"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only snapshots with exactly this name.","title":"Name"},"is_automatic":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for automatic snapshots only, false for manual ones.","title":"Is Automatic"},"sort":{"anyOf":[{"enum":["id","id:asc","id:desc","name","name:asc","name:desc","created","created:asc","created:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order such as created:desc or name:asc.","title":"Sort"}},"required":["storage_box_id"],"title":"list_snapshotsArguments","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_subaccounts":{"post":{"operationId":"list_subaccounts","summary":"List the subaccounts of a Storage Box with user name, host, home directory and which protocols are allowed. Passwords ar","description":"List the subaccounts of a Storage Box with user name, host, home directory and which protocols are allowed. Passwords are never returned. Use for \"Which subaccounts exist on my Storage Box and where do they point\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"storage_box_id":{"description":"Numeric id of the Storage Box, as returned by list_storage_boxes.","minimum":1,"title":"Storage Box Id","type":"integer"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only subaccounts with exactly this name.","title":"Name"},"username":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only the subaccount with this user name.","title":"Username"},"label_selector":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Label filter such as 'env=production' or 'env in (a,b)'.","title":"Label Selector"}},"required":["storage_box_id"],"title":"list_subaccountsArguments","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_folders":{"post":{"operationId":"list_folders","summary":"List the folder names directly below a path on a Storage Box (default: the root). Use for \"Which top-level folders does ","description":"List the folder names directly below a path on a Storage Box (default: the root). Use for \"Which top-level folders does my Storage Box contain\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"storage_box_id":{"description":"Numeric id of the Storage Box, as returned by list_storage_boxes.","minimum":1,"title":"Storage Box Id","type":"integer"},"path":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Relative path to list, for example ./documents (default is the root).","title":"Path"}},"required":["storage_box_id"],"title":"list_foldersArguments","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_box_actions":{"post":{"operationId":"list_box_actions","summary":"List recent asynchronous actions of a Storage Box (snapshots, resizes, access changes) with status, progress and error. ","description":"List recent asynchronous actions of a Storage Box (snapshots, resizes, access changes) with status, progress and error. Use for \"Did the last action on my Storage Box succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"storage_box_id":{"description":"Numeric id of the Storage Box, as returned by list_storage_boxes.","minimum":1,"title":"Storage Box Id","type":"integer"},"status":{"anyOf":[{"enum":["running","success","error"],"type":"string"},{"type":"null"}],"default":null,"description":"Only actions in this state.","title":"Status"},"sort":{"anyOf":[{"enum":["id","id:asc","id:desc","command","command:asc","command:desc","status","status:asc","status:desc","started","started:asc","started:desc","finished","finished:asc","finished:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order such as started:desc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 50).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["storage_box_id"],"title":"list_box_actionsArguments","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}}}}