{"openapi":"3.0.3","info":{"title":"SCP (Server Control Panel) REST API","description":"The version number is updated with each SCP release, regardless of whether the API has changed. Breaking changes are handled by versioning individual endpoints in the request path.","version":"2026.0422.091554"},"externalDocs":{"description":"netcup Forum","url":"https://forum.netcup.de/netcup-anwendungen/scp-server-control-panel/scp-server-control-panel-rest-api/"},"servers":[{"url":"/scp-core"}],"tags":[{"name":"Miscellaneous"},{"name":"Server Disks","description":"Operations related to disks, drivers, formatting, cloud-init"},{"name":"Server Firewalls","description":"Operations for configuring Firewalls and managing Firewall Policies"},{"name":"Server ISO","description":"Operations for managing ISO Images"},{"name":"Server Images","description":"Operations related to Images and Flavours"},{"name":"Server Metrics","description":"Operations to load the Metrics of a Server"},{"name":"Server Networking","description":"Operations related to Networking"},{"name":"Server Snapshots","description":"Operations for server snapshots"},{"name":"Servers","description":"Operations for managing Servers"},{"name":"Tasks","description":"Operations related to Tasks"},{"name":"Users","description":"Operations related to Users"}],"paths":{"/api/ping":{"get":{"tags":["Miscellaneous"],"summary":"Check if application is available","responses":{"200":{"description":"Application available.","content":{"text/plain":{"example":"OK"}}}}}},"/api/v1/maintenance":{"get":{"tags":["Miscellaneous"],"summary":"Get maintenance information for system","responses":{"200":{"description":"Maintenance successfully loaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Maintenance"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Maintenance"}}}}},"description":""}},"/api/v1/openapi":{"get":{"tags":["Miscellaneous"],"summary":"Get openapi spec","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}},"application/hal+json":{"schema":{"type":"object"}}}}},"description":""}},"/api/v1/openapi/mcp":{"post":{"tags":["Miscellaneous"],"summary":"SCP OpenAPI Spec MCP Server","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}},"application/hal+json":{"schema":{"type":"object"}}}}},"description":"SCP (Server Control Panel) API Explorer - OpenAPI Specification Explorer for netcup SCP REST API - Provides comprehensive documentation, schema definitions, and implementation guidance for building SCP API clients and scripts. Does not execute API calls directly."}},"/api/v1/rdns/ipv4":{"post":{"tags":["Server Networking"],"summary":"Set an rDNS entry for an IPv4.","responses":{"200":{"description":"rDNS set successfully."},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetRdnsIpv4"}}}},"description":""}},"/api/v1/rdns/ipv4/{ip}":{"delete":{"tags":["Server Networking"],"summary":"Delete an rDNS entry of an IPv4.","responses":{"204":{"description":"rDNS deleted successfully."},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"ip","in":"path","required":true,"schema":{"pattern":"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$","type":"string"}}],"description":""},"get":{"tags":["Server Networking"],"summary":"Get rDNS for an IPv4.","responses":{"200":{"description":"rDNS returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rdns"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Rdns"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"ip","in":"path","required":true,"schema":{"pattern":"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$","type":"string"}}],"description":""}},"/api/v1/rdns/ipv6":{"post":{"tags":["Server Networking"],"summary":"Set an rDNS entry for an IPv6.","responses":{"200":{"description":"rDNS set successfully."},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetRdnsIpv6"}}}},"description":""}},"/api/v1/rdns/ipv6/{ip}":{"delete":{"tags":["Server Networking"],"summary":"Delete an rDNS entry of an IPv6.","responses":{"204":{"description":"rDNS deleted successfully."},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"ip","in":"path","required":true,"schema":{"pattern":"(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,6}:[0-9a-fA-F]{1,4})|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$","type":"string"}}],"description":""},"get":{"tags":["Server Networking"],"summary":"Get rDNS for an IPv6.","responses":{"200":{"description":"rDNS returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rdns"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Rdns"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"ip","in":"path","required":true,"schema":{"pattern":"(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,6}:[0-9a-fA-F]{1,4})|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$","type":"string"}}],"description":""}},"/api/v1/servers":{"get":{"tags":["Servers"],"summary":"Get servers","responses":{"200":{"description":"Servers successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServerListMinimal"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServerListMinimal"}}}}}},"parameters":[{"name":"firewallPolicyId","in":"query","description":"Filter by assigned firewall policy","schema":{"type":"integer","format":"int32"}},{"name":"ip","in":"query","description":"Filter by ip","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"name","in":"query","description":"Filter by server name","schema":{"type":"string"}},{"name":"offset","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"q","in":"query","description":"Search ignoring case within the property name, nickname, or ipv4Addresses","schema":{"type":"string"}}],"description":""}},"/api/v1/servers/{serverId}":{"patch":{"tags":["Servers"],"summary":"Start - stop server or update attributes like hostname, nickname, uefi, bootorder, ...","responses":{"200":{"description":"Server patched successfully."},"202":{"description":"Server patch successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"requestBody":{"required":true,"content":{"application/merge-patch+json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ServerStatePatch"},{"$ref":"#/components/schemas/ServerAutostartPatch"},{"$ref":"#/components/schemas/ServerBootorderPatch"},{"$ref":"#/components/schemas/ServerOsOptimizationPatch"},{"$ref":"#/components/schemas/ServerCpuTopologyPatch"},{"$ref":"#/components/schemas/ServerUEFIPatch"},{"$ref":"#/components/schemas/ServerHostnamePatch"},{"$ref":"#/components/schemas/ServerNicknamePatch"},{"$ref":"#/components/schemas/ServerKeyboardLayoutPatch"},{"$ref":"#/components/schemas/ServerSetRootPasswordPatch"}]}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"stateOption","in":"query","description":"Only applicable if ServerStatePatch is used. Valid values for state ON: POWERCYCLE, RESET. Valid values for state OFF: POWEROFF.","schema":{"type":"string"}}],"description":"Only one attribute at a time."},"get":{"tags":["Servers"],"summary":"Get one server","responses":{"200":{"description":"Server successfully returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Server"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Server"}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"loadServerLiveInfo","in":"query","schema":{"type":"boolean","default":true}}],"description":""}},"/api/v1/servers/{serverId}/disks":{"patch":{"tags":["Server Disks"],"summary":"Patch disk driver of a server.","responses":{"202":{"description":"Disks patch successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}}},"requestBody":{"required":true,"content":{"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/EditDisksDriver"}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Disks"],"summary":"Get disks of a server","responses":{"200":{"description":"Disks successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Disk"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Disk"}}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/disks/supported-drivers":{"get":{"tags":["Server Disks"],"summary":"Get a list of supported storage drivers for this server","responses":{"200":{"description":"Supported storage drivers successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StorageDriver"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StorageDriver"}}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/disks/{diskName}":{"get":{"tags":["Server Disks"],"summary":"Get a disk of a server","responses":{"200":{"description":"Disk successfully loaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Disk"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Disk"}}}}},"parameters":[{"name":"diskName","in":"path","required":true,"schema":{"type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/disks/{diskName}:format":{"post":{"tags":["Server Disks"],"summary":"Format disk of a server. Attention: All data will be lost during formatting!","responses":{"202":{"description":"Disk format successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"Disk format only possible if server state is SHUTOFF","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"Disk not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"diskName","in":"path","required":true,"schema":{"type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/gpu-driver":{"get":{"tags":["Servers"],"summary":"Generate presigned download URL for GPU driver if available","responses":{"200":{"description":"Presigned download URL for GPU driver successfully generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3DownloadInfos"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/S3DownloadInfos"}}}},"400":{"description":"GPU driver or vGPU not available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"serverId","in":"path","description":"Server id","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/guest-agent":{"get":{"tags":["Servers"],"summary":"Get guest agent data for server","responses":{"200":{"description":"Guest agent data for server successfully loaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuestAgentData"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/GuestAgentData"}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"serverId","in":"path","description":"Server id","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/image":{"post":{"tags":["Server Images"],"summary":"Setup image for a server. Attention: All data will be lost during formatting on selected disk!","responses":{"202":{"description":"Server image setup successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerImageSetup"}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/imageflavours":{"get":{"tags":["Server Images"],"summary":"Get available image flavours for server image setup. Images whose storage driver is not supported by the server's machine type are not shown.","responses":{"200":{"description":"Server image flavours successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImageFlavour"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImageFlavour"}}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/interfaces":{"post":{"tags":["Server Networking"],"summary":"Create an interface in a server.","responses":{"202":{"description":"NIC creation successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"Maximum amount of interfaces per server is 10","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ServerCreateNicVlan"}]}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Networking"],"summary":"Get all interfaces and IPs of a server including routed IPs and rDNS entries.","responses":{"200":{"description":"Server interfaces of server successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Interface"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Interface"}}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"loadRdns","in":"query","schema":{"type":"boolean","default":true}}],"description":""}},"/api/v1/servers/{serverId}/interfaces/{mac}":{"put":{"tags":["Server Networking"],"summary":"Update interface attributes.","responses":{"202":{"description":"Interface update started successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"204":{"description":"Nothing to change."},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerInterfaceUpdate"}}}},"parameters":[{"name":"mac","in":"path","required":true,"schema":{"pattern":"^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$","type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"delete":{"tags":["Server Networking"],"responses":{"202":{"description":"Interface deletion successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"mac","in":"path","required":true,"schema":{"type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Networking"],"summary":"Get an interface and IPs of a server including routed IPs and rDNS entries.","responses":{"200":{"description":"IPv4s of server successfully loaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Interface"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Interface"}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"mac","in":"path","required":true,"schema":{"pattern":"^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$","type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"loadRdns","in":"query","schema":{"type":"boolean","default":true}}],"description":""}},"/api/v1/servers/{serverId}/interfaces/{mac}/firewall":{"put":{"tags":["Server Firewalls"],"summary":"Configure firewall","responses":{"202":{"description":"Firewall update successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"404":{"description":"Firewall not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerFirewallSave"}}}},"parameters":[{"name":"mac","in":"path","required":true,"schema":{"pattern":"^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$","type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Firewalls"],"summary":"Get firewall","responses":{"200":{"description":"Firewall successfully loaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerFirewall"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ServerFirewall"}}}},"404":{"description":"Firewall not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"mac","in":"path","required":true,"schema":{"pattern":"^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$","type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"consistencyCheck","in":"query","description":"Check that the firewall rules have been applied. This will set the consistent attribute to true or false.","schema":{"type":"boolean","default":false}}],"description":""}},"/api/v1/servers/{serverId}/interfaces/{mac}/firewall:reapply":{"post":{"tags":["Server Firewalls"],"summary":"Reapply firewall. Necessary if policy update timed out due to long running write operation on server (f.e. storage optimization)","responses":{"202":{"description":"Firewall reapply successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}}},"parameters":[{"name":"mac","in":"path","required":true,"schema":{"pattern":"^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$","type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/interfaces/{mac}/firewall:restore-copied-policies":{"post":{"tags":["Server Firewalls"],"summary":"Restore copied firewall policies.","responses":{"202":{"description":"Firewall copied policies restore successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"404":{"description":"Firewall not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"mac","in":"path","required":true,"schema":{"pattern":"^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$","type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/iso":{"post":{"tags":["Server ISO"],"summary":"Attach an ISO to a server.","responses":{"202":{"description":"ISO attaching successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerAttachIso"}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"delete":{"tags":["Server ISO"],"summary":"Detach an ISO from a server.","responses":{"204":{"description":"ISO detached successfully."}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server ISO"],"summary":"Get attached ISO of a server.","responses":{"200":{"description":"ISO returned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Iso"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Iso"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/isoimages":{"get":{"tags":["Server ISO"],"summary":"Get available ISO images for server","responses":{"200":{"description":"Server iso images successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IsoImage"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IsoImage"}}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/logs":{"get":{"tags":["Servers"],"summary":"Get server logs ","responses":{"200":{"description":"Servers logs successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Log"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Log"}}}}}},"parameters":[{"name":"serverId","in":"path","description":"Server id","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"offset","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/metrics/cpu":{"get":{"tags":["Server Metrics"],"summary":"Get CPU metrics of a server.","responses":{"200":{"description":"Metrics returned successfully.","content":{"application/json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of cpu to metric value."}},"application/hal+json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of cpu to metric value."}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"hours","in":"query","schema":{"maximum":1440,"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/metrics/disk":{"get":{"tags":["Server Metrics"],"summary":"Get disk metrics of a server.","responses":{"200":{"description":"Metrics returned successfully.","content":{"application/json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of disk to metric value."}},"application/hal+json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of disk to metric value."}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"hours","in":"query","schema":{"maximum":1440,"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/metrics/network":{"get":{"tags":["Server Metrics"],"summary":"Get network metrics of a server.","responses":{"200":{"description":"Metrics returned successfully.","content":{"application/json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of interface to metric value."}},"application/hal+json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of interface to metric value."}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"hours","in":"query","schema":{"maximum":1440,"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/metrics/network/packet":{"get":{"tags":["Server Metrics"],"summary":"Get network packet metrics of a server.","responses":{"200":{"description":"Metrics returned successfully.","content":{"application/json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of interface to metric value."}},"application/hal+json":{"schema":{"type":"object","description":"A map where the key is an ISO-8601 timestamp and the value is another map of interface to metric value."}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"hours","in":"query","schema":{"maximum":1440,"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/rescuesystem":{"post":{"tags":["Servers"],"summary":"Activate rescue system for a server.","responses":{"202":{"description":"Rescue system activation successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"Rescue system currently active.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"delete":{"tags":["Servers"],"summary":"Deactivate rescue system for a server.","responses":{"202":{"description":"Rescue system deactivation successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"Rescue system currently deactivated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Servers"],"summary":"Get rescue system status for a server.","responses":{"200":{"description":"Load rescue system status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RescueSystemStatus"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/RescueSystemStatus"}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/snapshots":{"post":{"tags":["Server Snapshots"],"summary":"Create a snapshot","responses":{"202":{"description":"Creation of snapshot successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"Error code: server.snapshot.create.error.online.uefi","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerSnapshotCreate"}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Snapshots"],"summary":"Get all snapshots of a server.","responses":{"200":{"description":"Server snapshots successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SnapshotMinimal"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SnapshotMinimal"}}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/snapshots/{name}":{"delete":{"tags":["Server Snapshots"],"summary":"Delete a snapshot of a server","responses":{"202":{"description":"Deletion of snapshot successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"404":{"description":"Server or snapshot not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Snapshots"],"summary":"Get a snapshot of a server.","responses":{"200":{"description":"Server snapshot successfully loaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Snapshot"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/Snapshot"}}}},"404":{"description":"Server or snapshot not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/snapshots/{name}/export":{"post":{"tags":["Server Snapshots"],"summary":"Export a snapshot of a server","responses":{"202":{"description":"Export of snapshot successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"No more snapshots left or server is not in state shutoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"Server or snapshot not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/snapshots/{name}/revert":{"post":{"tags":["Server Snapshots"],"summary":"Revert a snapshot of a server","responses":{"202":{"description":"Revert of snapshot successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"404":{"description":"Server or snapshot not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/snapshots:dryrun":{"post":{"tags":["Server Snapshots"],"summary":"Check if creating a snapshot is possible.","responses":{"200":{"description":"Return empty list. Snapshot creation is possible with the chosen parameter.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResponseError"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResponseError"}}}}},"400":{"description":"Return list of response errors that would be returned, if a snapshot would be created for this disk. Possible response codes: server.snapshot.create.error.disk, server.snapshot.create.error.template, server.snapshot.create.error.iso, server.snapshot.create.error.storageoptimization, server.snapshot.create.error.storagelimit, server.snapshot.create.error.online.diskselected, server.snapshot.create.error.online.uefi","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResponseError"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResponseError"}}}}},"404":{"description":"Server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerSnapshotCreateCheck"}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/servers/{serverId}/storageoptimization":{"post":{"tags":["Servers"],"summary":"Optimize storage of a server.","responses":{"202":{"description":"Server storage optimization successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"503":{"description":"Node is in maintenance mode.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"disks","in":"query","schema":{"type":"array","items":{"type":"string"}}},{"name":"startAfterOptimization","in":"query","schema":{"type":"boolean","default":false}}],"description":""}},"/api/v1/servers/{serverId}/user-image":{"post":{"tags":["Server Images"],"summary":"Setup user image for a server.","responses":{"202":{"description":"Server user image setup successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerUserImageSetup"}}}},"parameters":[{"name":"serverId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/tasks":{"get":{"tags":["Tasks"],"summary":"Get all tasks","responses":{"200":{"description":"Tasks successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TaskInfoMinimal"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TaskInfoMinimal"}}}}}},"parameters":[{"name":"limit","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"offset","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"q","in":"query","description":"Search ignoring case within the properties name, uuid, server name, server nickname and server uuid","schema":{"type":"string"}},{"name":"serverId","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"state","in":"query","description":"Filter by state (ROLLBACK is not supported)","schema":{"$ref":"#/components/schemas/TaskState"}}],"description":""}},"/api/v1/tasks/{uuid}":{"get":{"tags":["Tasks"],"summary":"Get one task","responses":{"200":{"description":"Task information successfully returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"404":{"description":"Task not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string"}}],"description":""}},"/api/v1/tasks/{uuid}:cancel":{"put":{"tags":["Tasks"],"summary":"Cancel a running task","responses":{"202":{"description":"Task information successfully returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"204":{"description":"Task is already finished or cancelled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}}},"parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string"}}],"description":""}},"/api/v1/users/{userId}":{"put":{"tags":["Users"],"summary":"Update a user","responses":{"200":{"description":"User successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSave"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/UserSave"}}}},"404":{"description":"User, reseller or admin not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSave"}}}},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Users"],"summary":"Get one user","responses":{"200":{"description":"User successfully returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/User"}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}},"/api/v1/users/{userId}/failoverips/v4":{"get":{"tags":["Server Networking"],"summary":"Get all failover IPv4s of this user.","responses":{"200":{"description":"Failover IPv4s successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FailoverIPv4"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FailoverIPv4"}}}}}},"parameters":[{"name":"ip","in":"query","schema":{"type":"string"}},{"name":"serverId","in":"query","description":"Filter failover IPv4s of this user by server id","schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/failoverips/v4/{id}":{"patch":{"tags":["Server Networking"],"summary":"Route a failover IPv4.","responses":{"202":{"description":"Routing of a failover IPv4 successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"Routing is limited to servers within the same site as the failover IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"Failover IPv4 or server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteFailoverIp"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/RouteFailoverIp"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/failoverips/v6":{"get":{"tags":["Server Networking"],"summary":"Get all failover IPv6s of this user.","responses":{"200":{"description":"Failover IPv6s successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FailoverIPv6"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FailoverIPv6"}}}}}},"parameters":[{"name":"ip","in":"query","schema":{"type":"string"}},{"name":"serverId","in":"query","description":"Filter failover IPv6s of this user by server id","schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/failoverips/v6/{id}":{"patch":{"tags":["Server Networking"],"summary":"Route a failover IPv6.","responses":{"202":{"description":"Routing of a failover IPv6 successfully started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/TaskInfo"}}}},"400":{"description":"Routing is limited to servers within the same site as the failover IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"Failover IPv6 or server not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteFailoverIp"}},"application/merge-patch+json":{"schema":{"$ref":"#/components/schemas/RouteFailoverIp"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/firewall-policies":{"post":{"tags":["Server Firewalls"],"summary":"Create firewall policy","responses":{"201":{"headers":{"Location":{"description":"URI of created entity.","schema":{"type":"string"}}},"description":"Firewall policy successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallPolicy"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/FirewallPolicy"}}}},"400":{"description":"A maximum of 500 firewall rules can be created. Each source or destination counts as a separate rule.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallPolicySave"}}}},"description":""},"get":{"tags":["Server Firewalls"],"summary":"Get firewall policies","responses":{"200":{"description":"Firewall policies successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FirewallPolicy"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FirewallPolicy"}}}}}},"parameters":[{"name":"limit","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"offset","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"q","in":"query","description":"Search by name or description","schema":{"type":"string"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/firewall-policies/{id}":{"put":{"tags":["Server Firewalls"],"summary":"Update firewall policy","responses":{"202":{"description":"Firewall policy successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallPolicyUpdateResult"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/FirewallPolicyUpdateResult"}}}},"400":{"description":"A maximum of 500 firewall rules can be created. Each source or destination counts as a separate rule.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallPolicySave"}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"delete":{"tags":["Server Firewalls"],"summary":"Delete firewall policy","responses":{"204":{"description":"Firewall policy successfully deleted."},"404":{"description":"Firewall policy not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Firewalls"],"summary":"Get firewall policy","responses":{"200":{"description":"Firewall policies successfully loaded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallPolicy"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/FirewallPolicy"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/images":{"get":{"tags":["Server Images"],"summary":"Get all available user images","responses":{"200":{"description":"Images successfully loaded.","content":{"application/json":{"example":[{"key":"example.img","lastModified":"2022-12-12T06:15:05.939Z","size":"10485760"}],"schema":{"type":"array","items":{"$ref":"#/components/schemas/S3Object"}}},"application/hal+json":{"example":[{"key":"example.img","lastModified":"2022-12-12T06:15:05.939Z","size":"10485760"}],"schema":{"type":"array","items":{"$ref":"#/components/schemas/S3Object"}}}}}},"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/images/{key}":{"post":{"tags":["Server Images"],"summary":"Prepares an upload for an image","responses":{"201":{"headers":{"Location":{"description":"URI of created entity.","schema":{"type":"string"}}},"description":"Successfully created a multipart upload","content":{"application/json":{"example":{"uploadId":"ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjJmMDRhZTk5LTg3MGMtNDhkZi04ZjE4LWM4OGYxOTlmMTQ5Ng=="},"schema":{"$ref":"#/components/schemas/S3Upload"}},"application/hal+json":{"example":{"uploadId":"ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjJmMDRhZTk5LTg3MGMtNDhkZi04ZjE4LWM4OGYxOTlmMTQ5Ng=="},"schema":{"$ref":"#/components/schemas/S3Upload"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"multipart","in":"query","schema":{"type":"boolean","default":true}}],"description":"If \"multipart=true\", returns \"uploadId\" that is used to fetch upload URLs for each part with\n \"GET /api/v1/users/{userId}/images/{key}/{uploadId}/parts/{partNumber}\". Use this URL to upload individual parts and\n get an \"ETag\" for each part. To finish, call \"PUT /api/v1/users/{userId}/images/{key}/{uploadId}\"\n with the list of all uploaded parts, containing \"ETag\" and \"partNumber\" for each part. Part numbers start at 1.\n\nIf \"multipart=false\", returns \"presignedUrl\" that is used to upload the image at once.\n"},"delete":{"tags":["Server Images"],"summary":"Delete an image","responses":{"204":{"description":"Image successfully deleted."}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"description":""},"get":{"tags":["Server Images"],"summary":"Get download informations for an image","responses":{"200":{"description":"URL successfully signed.","content":{"application/json":{"example":"https://s3.anexia-it.com/example-bucket/share/f%3A9382f7fe-1225-4c10-8831-9d633eb0e805%3AendUser/iso/9c5c0d92-db43-40e3-8f1c-7a397863cdd2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T151511Z&X-Amz-SignedHeaders=host%3Bx-amz-te&X-Amz-Expires=3600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=e1007631a4a747e3d225c60000d661403d4c34c3c62ca10f92fa89465f08ccb7","schema":{"$ref":"#/components/schemas/S3DownloadInfos"}},"application/hal+json":{"example":"https://s3.anexia-it.com/example-bucket/share/f%3A9382f7fe-1225-4c10-8831-9d633eb0e805%3AendUser/iso/9c5c0d92-db43-40e3-8f1c-7a397863cdd2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T151511Z&X-Amz-SignedHeaders=host%3Bx-amz-te&X-Amz-Expires=3600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=e1007631a4a747e3d225c60000d661403d4c34c3c62ca10f92fa89465f08ccb7","schema":{"$ref":"#/components/schemas/S3DownloadInfos"}}}},"404":{"description":"Image not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/images/{key}/{uploadId}":{"put":{"tags":["Server Images"],"summary":"Completes a multipart upload for an image","responses":{"204":{"description":"Successfully completed"},"404":{"description":"No such upload found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3NoSuchUploadError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/S3NoSuchUploadError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/S3CompletedPart"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"uploadId","in":"path","required":true,"schema":{"type":"string"}}],"description":"Call this endpoint after uploading all parts. The body must include a list of parts \"ETag\" and \"partNumber\" in order.\n This finishes the upload and makes the image available with the provided \"key\".\n"},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/images/{key}/{uploadId}/parts/{partNumber}":{"get":{"tags":["Server Images"],"summary":"Get a presigned upload URL for a single part","responses":{"200":{"description":"Successfully signed","content":{"application/json":{"example":{"url":"https://s3.anexia-it.com/example-bucket/share/johndoe/iso/example.img?partNumber=1&uploadId=ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjM0ZThiMzY2LTU2N2EtNDZkZC04YzA3LTViYzhmYjZlZWY3Nw%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T062156Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=fb3494434700f8df675eb7e5cd382c6141c171712f217b21bb0de9a83a6fe36e"},"schema":{"$ref":"#/components/schemas/S3SignPartURL"}},"application/hal+json":{"example":{"url":"https://s3.anexia-it.com/example-bucket/share/johndoe/iso/example.img?partNumber=1&uploadId=ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjM0ZThiMzY2LTU2N2EtNDZkZC04YzA3LTViYzhmYjZlZWY3Nw%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T062156Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=fb3494434700f8df675eb7e5cd382c6141c171712f217b21bb0de9a83a6fe36e"},"schema":{"$ref":"#/components/schemas/S3SignPartURL"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"partNumber","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"uploadId","in":"path","required":true,"schema":{"type":"string"}}],"description":"Call this endpoint for every part. Use the returned URL to upload the part and get an \"ETag\" from the HTTP headers in return.\nOnce all parts are uploaded, call \"PUT /api/v1/users/{userId}/images/{key}/{uploadId}\" with the list of all uploaded parts,\n containing \"ETag\" and \"partNumber\" for each part.\n"},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/isos":{"get":{"tags":["Server ISO"],"summary":"Get all available ISOs","responses":{"200":{"description":"ISOs successfully loaded.","content":{"application/json":{"example":[{"key":"example.iso","lastModified":"2022-12-12T06:15:05.939Z","size":"10485760"}],"schema":{"type":"array","items":{"$ref":"#/components/schemas/S3Object"}}},"application/hal+json":{"example":[{"key":"example.iso","lastModified":"2022-12-12T06:15:05.939Z","size":"10485760"}],"schema":{"type":"array","items":{"$ref":"#/components/schemas/S3Object"}}}}}},"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/isos/{key}":{"post":{"tags":["Server ISO"],"summary":"Prepares an upload for an ISO","responses":{"201":{"headers":{"Location":{"description":"URI of created entity.","schema":{"type":"string"}}},"description":"Successfully created a multipart upload","content":{"application/json":{"example":{"uploadId":"ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjJmMDRhZTk5LTg3MGMtNDhkZi04ZjE4LWM4OGYxOTlmMTQ5Ng=="},"schema":{"$ref":"#/components/schemas/S3Upload"}},"application/hal+json":{"example":{"uploadId":"ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjJmMDRhZTk5LTg3MGMtNDhkZi04ZjE4LWM4OGYxOTlmMTQ5Ng=="},"schema":{"$ref":"#/components/schemas/S3Upload"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"multipart","in":"query","schema":{"type":"boolean","default":true}}],"description":"If \"multipart=true\", returns \"uploadId\" that is used to fetch upload URLs for each part with\n \"GET /api/v1/users/{userId}/isos/{key}/{uploadId}/parts/{partNumber}\". Use this URL to upload individual parts and\n get an \"ETag\" for each part. To finish, call \"PUT /api/v1/users/{userId}/isos/{key}/{uploadId}\"\n with the list of all uploaded parts, containing \"ETag\" and \"partNumber\" for each part. Part numbers start at 1.\n\nIf \"multipart=false\", returns \"presignedUrl\" that is used to upload the ISO at once.\n"},"delete":{"tags":["Server ISO"],"summary":"Delete an ISO","responses":{"204":{"description":"ISO successfully deleted."}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"description":""},"get":{"tags":["Server ISO"],"summary":"Get presigned URL for an ISO","responses":{"200":{"description":"URL successfully signed.","content":{"application/json":{"example":"https://s3.anexia-it.com/example-bucket/share/f%3A9382f7fe-1225-4c10-8831-9d633eb0e805%3AendUser/iso/9c5c0d92-db43-40e3-8f1c-7a397863cdd2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T151511Z&X-Amz-SignedHeaders=host%3Bx-amz-te&X-Amz-Expires=3600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=e1007631a4a747e3d225c60000d661403d4c34c3c62ca10f92fa89465f08ccb7","schema":{"$ref":"#/components/schemas/S3DownloadInfos"}},"application/hal+json":{"example":"https://s3.anexia-it.com/example-bucket/share/f%3A9382f7fe-1225-4c10-8831-9d633eb0e805%3AendUser/iso/9c5c0d92-db43-40e3-8f1c-7a397863cdd2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T151511Z&X-Amz-SignedHeaders=host%3Bx-amz-te&X-Amz-Expires=3600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=e1007631a4a747e3d225c60000d661403d4c34c3c62ca10f92fa89465f08ccb7","schema":{"$ref":"#/components/schemas/S3DownloadInfos"}}}},"404":{"description":"ISO not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/isos/{key}/{uploadId}":{"put":{"tags":["Server ISO"],"summary":"Completes a multipart upload for an ISO","responses":{"204":{"description":"Successfully completed"},"404":{"description":"No such upload found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3NoSuchUploadError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/S3NoSuchUploadError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/S3CompletedPart"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"uploadId","in":"path","required":true,"schema":{"type":"string"}}],"description":"Call this endpoint after uploading all parts. The body must include a list of parts \"ETag\" and \"partNumber\" in order.\n This finishes the upload and makes the ISO available with the provided \"key\".\n"},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/isos/{key}/{uploadId}/parts/{partNumber}":{"get":{"tags":["Server ISO"],"summary":"Get a presigned upload URL for a single part","responses":{"200":{"description":"Successfully signed","content":{"application/json":{"example":{"url":"https://s3.anexia-it.com/example-bucket/share/johndoe/iso/example.img?partNumber=1&uploadId=ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjM0ZThiMzY2LTU2N2EtNDZkZC04YzA3LTViYzhmYjZlZWY3Nw%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T062156Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=fb3494434700f8df675eb7e5cd382c6141c171712f217b21bb0de9a83a6fe36e"},"schema":{"$ref":"#/components/schemas/S3SignPartURL"}},"application/hal+json":{"example":{"url":"https://s3.anexia-it.com/example-bucket/share/johndoe/iso/example.img?partNumber=1&uploadId=ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjM0ZThiMzY2LTU2N2EtNDZkZC04YzA3LTViYzhmYjZlZWY3Nw%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221212T062156Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=admin%2F20221212%2Fignored%2Fs3%2Faws4_request&X-Amz-Signature=fb3494434700f8df675eb7e5cd382c6141c171712f217b21bb0de9a83a6fe36e"},"schema":{"$ref":"#/components/schemas/S3SignPartURL"}}}}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"partNumber","in":"path","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"uploadId","in":"path","required":true,"schema":{"type":"string"}}],"description":"Call this endpoint for every part. Use the returned URL to upload the part and get an \"ETag\" from the HTTP headers in return.\nOnce all parts are uploaded, call \"PUT /api/v1/users/{userId}/isos/{key}/{uploadId}\" with the list of all uploaded parts,\n containing \"ETag\" and \"partNumber\" for each part.\n"},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/logs":{"get":{"tags":["Users"],"summary":"Get user logs ","responses":{"200":{"description":"User logs successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Log"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Log"}}}}}},"parameters":[{"name":"userId","in":"path","description":"User id","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}},{"name":"offset","in":"query","schema":{"maximum":2147483647,"minimum":0,"type":"integer","format":"int32"}}],"description":""}},"/api/v1/users/{userId}/ssh-keys":{"post":{"tags":["Users"],"summary":"Create SSH key","responses":{"201":{"headers":{"Location":{"description":"URI of created entity.","schema":{"type":"string"}}},"description":"SSH key successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKey"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/SSHKey"}}}},"422":{"description":"Validation error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKey"}}}},"description":""},"get":{"tags":["Users"],"summary":"Get SSH keys","responses":{"200":{"description":"SSH keys successfully loaded.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SSHKey"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SSHKey"}}}}}},"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/ssh-keys/{id}":{"delete":{"tags":["Users"],"summary":"Delete SSH key","responses":{"204":{"description":"SSH key successfully deleted."},"403":{"description":"You are not authorized to delete this SSH key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"SSH key not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/vlans":{"get":{"tags":["Server Networking"],"summary":"Get VLans of a user","responses":{"200":{"description":"VLans successfully returned.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VLan"}}},"application/hal+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VLan"}}}}}},"parameters":[{"name":"serverId","in":"query","description":"Filter VLans of a user by server id","schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/users/{userId}/vlans/{vlanId}":{"put":{"tags":["Server Networking"],"summary":"Update a VLan","responses":{"202":{"description":"Update of VLan successfully started."},"400":{"description":"Server must be in state SHUTOFF.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/ResponseError"}}}},"404":{"description":"VLan with id and user not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VLanSave"}}}},"parameters":[{"name":"vlanId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"get":{"tags":["Server Networking"],"summary":"Get a VLan of a user","responses":{"200":{"description":"VLan successfully returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VLan"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/VLan"}}}},"404":{"description":"VLan with id and user not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"vlanId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""},"parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}]},"/api/v1/vlans/{vlanId}":{"get":{"tags":["Server Networking"],"summary":"Get a VLan","responses":{"200":{"description":"VLan successfully returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VLan"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/VLan"}}}},"404":{"description":"VLan with id not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}},"application/hal+json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}}}},"parameters":[{"name":"vlanId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"description":""}}},"components":{"schemas":{"OsOptimization":{"type":"string","enum":["LINUX","WINDOWS","BSD","LINUX_LEGACY","UNKNOWN"]},"ImageMinimal":{"required":["name"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"maxLength":255,"pattern":"\\S","type":"string"}}},"ImplicitRule":{"type":"string","enum":["ACCEPT_ALL","DROP_ALL"]},"SSHKey":{"required":["name","key"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"maxLength":255,"pattern":"\\S","type":"string"},"key":{"maxLength":4096,"pattern":"\\S","type":"string"},"createdAt":{"type":"string","format":"date-time","nullable":true,"example":"2022-03-10T16:15:50Z"}}},"FirewallPolicySave":{"required":["name"],"type":"object","properties":{"name":{"maxLength":255,"pattern":"\\S","type":"string"},"description":{"maxLength":255,"type":"string"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/FirewallRule"}}}},"ServerFirewallSave":{"required":["copiedPolicies","userPolicies"],"type":"object","properties":{"copiedPolicies":{"type":"array","items":{"$ref":"#/components/schemas/IdentifierInt"}},"userPolicies":{"type":"array","items":{"$ref":"#/components/schemas/IdentifierInt"}},"active":{"type":"boolean","description":"If not set, by default the firewall will be active."}}},"SetRdnsIpv4":{"required":["ip","rdns"],"type":"object","properties":{"ip":{"pattern":"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$","type":"string"},"rdns":{"maxLength":255,"pattern":"^(?=.{1,253}$)((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z]{2,63}$","type":"string"}}},"Server":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"hostname":{"type":"string","nullable":true},"nickname":{"type":"string","nullable":true},"disabled":{"type":"boolean"},"template":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/ServerTemplateMinimal"}]},"serverLiveInfo":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/ServerInfo"}]},"ipv4Addresses":{"type":"array","items":{"$ref":"#/components/schemas/IPv4AddressMinimal"}},"ipv6Addresses":{"type":"array","items":{"$ref":"#/components/schemas/IPv6AddressMinimal"}},"site":{"$ref":"#/components/schemas/Site"},"snapshotCount":{"type":"integer","format":"int32"},"maxCpuCount":{"type":"integer","format":"int32"},"disksAvailableSpaceInMiB":{"type":"integer","format":"int64"},"rescueSystemActive":{"type":"boolean"},"snapshotAllowed":{"type":"boolean"},"architecture":{"$ref":"#/components/schemas/Architecture"},"gpuDriverAvailable":{"type":"boolean"}}},"ResponseError":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}},"FirewallAction":{"type":"string","enum":["ACCEPT","DROP"]},"FirewallProtocol":{"type":"string","enum":["TCP","UDP","ICMP","ICMPv6"]},"FieldError":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}},"ServerMinimal":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"}}},"FirewallRuleDirection":{"type":"string","enum":["INGRESS","EGRESS"]},"TaskInfo":{"type":"object","properties":{"uuid":{"type":"string"},"name":{"type":"string"},"state":{"$ref":"#/components/schemas/TaskState"},"startedAt":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"finishedAt":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"executingUser":{"$ref":"#/components/schemas/UserMinimal"},"taskProgress":{"$ref":"#/components/schemas/TaskProgress"},"message":{"type":"string","nullable":true},"onRollback":{"type":"boolean"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/TaskInfoStep"}},"result":{"type":"object"},"responseError":{"$ref":"#/components/schemas/ResponseError"}}},"IPv4AddressMinimal":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"ip":{"type":"string"},"netmask":{"type":"string"},"gateway":{"type":"string","nullable":true},"broadcast":{"type":"string","nullable":true}}},"ServerListMinimal":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"hostname":{"type":"string","nullable":true},"nickname":{"type":"string","nullable":true},"disabled":{"type":"boolean"},"template":{"type":"object","nullable":true,"allOf":[{"$ref":"#/components/schemas/ServerTemplateMinimal"}]}}},"ServerKeyboardLayoutPatch":{"type":"object","properties":{"keyboardLayout":{"type":"string"}}},"ServerUserImageSetup":{"required":["userImageName"],"type":"object","properties":{"userImageName":{"pattern":"\\S","type":"string"},"diskName":{"type":"string","nullable":true},"emailNotification":{"type":"boolean","nullable":true}}},"ServerIpType":{"type":"string","enum":["IP","ROUTED_IP"]},"ValidationError":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldError"}}}},"ServerIpv6":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"interfaceMac":{"type":"string"},"type":{"$ref":"#/components/schemas/ServerIpType"},"networkPrefix":{"type":"string"},"cidr":{"type":"string"},"gateway":{"type":"string","nullable":true},"linkLocal":{"type":"boolean"},"rdns":{"type":"object","additionalProperties":{"type":"string"}},"destinationIp":{"type":"string","nullable":true},"editable":{"type":"boolean"}}},"Disk":{"type":"object","properties":{"name":{"type":"string"},"allocationInMiB":{"type":"integer","format":"int64"},"capacityInMiB":{"type":"integer","format":"int64"},"storageDriver":{"$ref":"#/components/schemas/StorageDriver"}}},"EditDisksDriver":{"required":["driver"],"type":"object","properties":{"driver":{"$ref":"#/components/schemas/StorageDriver"}}},"ServerIpv4":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"interfaceMac":{"type":"string"},"type":{"$ref":"#/components/schemas/ServerIpType"},"ip":{"type":"string"},"cidr":{"type":"string"},"gateway":{"type":"string","nullable":true},"rdns":{"type":"string","nullable":true},"destinationIp":{"type":"string","nullable":true},"editable":{"type":"boolean"}}},"TaskInfoStep":{"type":"object","properties":{"uuid":{"type":"string"},"name":{"type":"string"},"state":{"$ref":"#/components/schemas/TaskState"},"startedAt":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"finishedAt":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"}}},"ServerState1":{"type":"string","enum":["ON","OFF","SUSPENDED"]},"StorageOptimization":{"type":"string","enum":["INCONSISTENT","COMPAT","SLOW","FAST","NO"]},"Bootorder":{"type":"string","enum":["HDD","CDROM","NETWORK"]},"NetworkDriver":{"type":"string","enum":["VIRTIO","E1000","E1000E","RTL8139","VMXNET3"]},"ServerInterface":{"type":"object","properties":{"mac":{"type":"string"},"driver":{"type":"string"},"mtu":{"type":"integer","format":"int32"},"speedInMBits":{"type":"integer","format":"int32"},"rxMonthlyInMiB":{"type":"integer","format":"int32"},"txMonthlyInMiB":{"type":"integer","format":"int32"},"ipv4Addresses":{"type":"array","items":{"type":"string"}},"ipv6LinkLocalAddresses":{"type":"array","items":{"type":"string"}},"ipv6NetworkPrefixes":{"type":"array","items":{"type":"string"}},"trafficThrottled":{"type":"boolean"},"vlanInterface":{"type":"boolean"},"vlanId":{"type":"integer","format":"int32"}}},"Architecture":{"type":"string","enum":["AMD64","ARM64"]},"RescueSystemStatus":{"type":"object","properties":{"active":{"type":"boolean"},"password":{"type":"string","nullable":true}}},"Log":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/LogType"},"executingUser":{"$ref":"#/components/schemas/UserMinimal"},"date":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"logKey":{"type":"string"},"message":{"type":"string"}}},"ServerHostnamePatch":{"type":"object","properties":{"hostname":{"type":"string"}}},"S3Upload":{"type":"object","properties":{"uploadId":{"type":"string"},"presignedUrl":{"type":"string"}}},"Maintenance":{"type":"object","properties":{"startAt":{"type":"string","format":"date-time","nullable":true,"example":"2022-03-10T16:15:50Z"},"finishAt":{"type":"string","format":"date-time","nullable":true,"example":"2022-03-10T16:15:50Z"}}},"ServerStatePatch":{"type":"object","description":"Optional query parameters: stateOption.","properties":{"state":{"$ref":"#/components/schemas/ServerState1"}}},"IPv6AddressMinimal":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"networkPrefix":{"type":"string"},"networkPrefixLength":{"type":"integer","format":"int32"},"gateway":{"type":"string","nullable":true}}},"FirewallPolicyUpdateResult":{"type":"object","properties":{"firewallPolicy":{"$ref":"#/components/schemas/FirewallPolicy"},"taskInfo":{"$ref":"#/components/schemas/TaskInfo"}}},"ServerImageSetup":{"type":"object","properties":{"imageFlavourId":{"type":"integer","format":"int32"},"diskName":{"type":"string"},"rootPartitionFullDiskSize":{"type":"boolean"},"hostname":{"pattern":"(?=^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])(\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9]))*$).{1,255}","type":"string","nullable":true},"locale":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"additionalUserUsername":{"pattern":"^[a-z][a-z0-9_]{0,30}$","type":"string","nullable":true},"additionalUserPassword":{"pattern":"^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9!-~]{8,}$","type":"string","nullable":true},"sshKeyIds":{"type":"array","nullable":true,"items":{"type":"integer","format":"int32"}},"sshPasswordAuthentication":{"type":"boolean","nullable":true},"customScript":{"type":"string","nullable":true},"emailToExecutingUser":{"type":"boolean","nullable":true}}},"Rdns":{"type":"object","properties":{"rdns":{"type":"string","nullable":true}}},"Snapshot":{"type":"object","properties":{"uuid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"disks":{"type":"array","items":{"type":"string"}},"creationTime":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"state":{"$ref":"#/components/schemas/ServerState"},"online":{"type":"boolean"},"exported":{"type":"boolean"},"exportedSizeInKiB":{"type":"integer","format":"int64","nullable":true},"downloadInfos":{"$ref":"#/components/schemas/S3DownloadInfos"}}},"BandwidthClass":{"required":["name","speedInMBit"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"maxLength":255,"pattern":"\\S","type":"string"},"speedInMBit":{"type":"integer","format":"int32"}}},"IsoImage":{"required":["name","filename","architecture"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"maxLength":255,"pattern":"\\S","type":"string"},"description":{"maxLength":10000,"type":"string","nullable":true},"architecture":{"$ref":"#/components/schemas/Architecture"}}},"ServerTemplateMinimal":{"required":["name"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"maxLength":100,"minLength":3,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9 _,.\\/|()+-]{2,99}$","type":"string"}}},"VLanSave":{"type":"object","properties":{"name":{"maxLength":255,"type":"string"}}},"SetRdnsIpv6":{"required":["ip","rdns"],"type":"object","properties":{"ip":{"pattern":"(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,6}:[0-9a-fA-F]{1,4})|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))$","type":"string"},"rdns":{"maxLength":255,"pattern":"^(?=.{1,253}$)((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z]{2,63}$","type":"string"}}},"ImageFlavour":{"required":["name","alias","text"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"maxLength":255,"pattern":"\\S","type":"string"},"alias":{"maxLength":255,"pattern":"\\S","type":"string"},"text":{"maxLength":10000,"pattern":"\\S","type":"string"},"image":{"$ref":"#/components/schemas/ImageMinimal"}}},"Site":{"required":["name","city"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"city":{"maxLength":255,"pattern":"\\S","type":"string"}}},"User":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"username":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"company":{"type":"string","nullable":true},"language":{"type":"string"},"timeZone":{"type":"string","nullable":true},"showNickname":{"type":"boolean"},"passwordlessMode":{"type":"boolean"},"secureMode":{"type":"boolean"},"secureModeAppAccess":{"type":"boolean"},"apiIpLoginRestrictions":{"type":"string","nullable":true}}},"FailoverIPv6":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"networkPrefix":{"type":"string"},"networkPrefixLength":{"type":"integer","format":"int32"},"user":{"$ref":"#/components/schemas/UserMinimal"},"editable":{"type":"boolean"},"site":{"$ref":"#/components/schemas/Site"},"server":{"$ref":"#/components/schemas/ServerMinimal"}}},"S3NoSuchUploadError":{"type":"object","example":{"message":"Upload of example.img with uploadId ODJmZWRkZGYtOTNlNC00MjE4LWFjYmItZmZiMmFkODdmOTE2LjJmMDRhZTk5LTg3MGMtNDhkZi04ZjE4LWM4OGYxOTlmMTQ5Ng== not found."},"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"ServerInfo":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/ServerState"},"autostart":{"type":"boolean"},"uefi":{"type":"boolean"},"interfaces":{"type":"array","items":{"$ref":"#/components/schemas/ServerInterface"}},"disks":{"type":"array","items":{"$ref":"#/components/schemas/ServerDisk"}},"bootorder":{"type":"array","items":{"$ref":"#/components/schemas/Bootorder"}},"requiredStorageOptimization":{"$ref":"#/components/schemas/StorageOptimization"},"template":{"type":"string","nullable":true},"uptimeInSeconds":{"type":"integer","format":"int32"},"currentServerMemoryInMiB":{"type":"integer","format":"int64"},"maxServerMemoryInMiB":{"type":"integer","format":"int64"},"cpuCount":{"type":"integer","format":"int32"},"cpuMaxCount":{"type":"integer","format":"int32"},"sockets":{"type":"integer","format":"int32"},"coresPerSocket":{"type":"integer","format":"int32"},"latestQemu":{"type":"boolean"},"configChanged":{"type":"boolean"},"osOptimization":{"$ref":"#/components/schemas/OsOptimization"},"nestedGuest":{"type":"boolean"},"machineType":{"type":"string"},"keyboardLayout":{"type":"string"},"cloudinitAttached":{"type":"boolean"}}},"ServerSnapshotCreateCheck":{"type":"object","properties":{"diskName":{"type":"string","description":"Must be set if attribute onlineSnapshot is false."},"onlineSnapshot":{"type":"boolean"}}},"ServerAutostartPatch":{"type":"object","properties":{"autostart":{"type":"boolean"}}},"FailoverIPv4":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"ip":{"type":"string"},"cidrSuffix":{"type":"integer","format":"int32"},"user":{"$ref":"#/components/schemas/UserMinimal"},"editable":{"type":"boolean"},"site":{"$ref":"#/components/schemas/Site"},"server":{"$ref":"#/components/schemas/ServerMinimal"}}},"ServerNicknamePatch":{"type":"object","properties":{"nickname":{"maxLength":255,"type":"string"}}},"TaskProgress":{"type":"object","properties":{"expectedFinishedAt":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"progressInPercent":{"type":"number","format":"float"}}},"VLan":{"type":"object","properties":{"vlanId":{"type":"integer","format":"int32"},"name":{"type":"string","nullable":true},"user":{"$ref":"#/components/schemas/UserMinimal"},"site":{"$ref":"#/components/schemas/Site"},"bandwidthClass":{"$ref":"#/components/schemas/BandwidthClass"}}},"ServerInterfaceUpdate":{"type":"object","properties":{"driver":{"$ref":"#/components/schemas/NetworkDriver"}}},"FirewallPolicy":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"rules":{"type":"array","items":{"$ref":"#/components/schemas/FirewallRule"}}}},"S3CompletedPart":{"type":"object","properties":{"ETag":{"type":"string"},"partNumber":{"type":"integer","format":"int32"}}},"TaskInfoMinimal":{"type":"object","properties":{"uuid":{"type":"string"},"name":{"type":"string"},"state":{"$ref":"#/components/schemas/TaskState"},"startedAt":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"finishedAt":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"executingUser":{"$ref":"#/components/schemas/UserMinimal"},"taskProgress":{"$ref":"#/components/schemas/TaskProgress"},"message":{"type":"string","nullable":true},"onRollback":{"type":"boolean"}}},"ServerDisk":{"type":"object","properties":{"dev":{"type":"string"},"driver":{"type":"string"},"capacityInMiB":{"type":"integer","format":"int64"},"allocationInMiB":{"type":"integer","format":"int64"}}},"StorageDriver":{"type":"string","enum":["VIRTIO","VIRTIO_SCSI","IDE","SATA"]},"ServerSetRootPasswordPatch":{"type":"object","properties":{"rootPassword":{"type":"string"}}},"ServerBootorderPatch":{"required":["bootorder"],"type":"object","properties":{"bootorder":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/Bootorder"}}}},"S3Object":{"type":"object","properties":{"key":{"type":"string"},"lastModified":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"sizeInB":{"type":"integer","format":"int64"}}},"SnapshotMinimal":{"type":"object","properties":{"uuid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"disks":{"type":"array","items":{"type":"string"}},"creationTime":{"type":"string","format":"date-time","example":"2022-03-10T16:15:50Z"},"state":{"$ref":"#/components/schemas/ServerState"},"online":{"type":"boolean"},"exported":{"type":"boolean"},"exportedSizeInKiB":{"type":"integer","format":"int64","nullable":true}}},"FirewallRule":{"required":["direction","protocol","action"],"type":"object","properties":{"numberOfEffectiveRules":{"type":"integer","format":"int32"},"description":{"maxLength":255,"type":"string","nullable":true},"direction":{"$ref":"#/components/schemas/FirewallRuleDirection"},"protocol":{"$ref":"#/components/schemas/FirewallProtocol"},"action":{"$ref":"#/components/schemas/FirewallAction"},"sources":{"uniqueItems":true,"type":"array","description":"Valid configurations are any IP (null or empty array), IPv4/IPv6 address (f.e. 192.168.10.1 or 0092:e10f:cb66:35a9::) or IPv4 network / IPv6 prefix (f.e. 192.168.10.0/24 or 0092:e10f:cb66:35a9::/64). If more than one IP/network is specified for the source, the destination must be empty (any) or contain only a single IP/network. If IPv4 addresses and IPv6 addresses are mixed in sources, destinations must empty (any).","items":{"type":"string"}},"sourcePorts":{"pattern":"^(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:-(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$","type":"string","description":"Valid configurations are any port (null), single port (f.e. 1234) or port range (f.e. 1024-65535)."},"destinations":{"uniqueItems":true,"type":"array","description":"Valid configurations are any IP (null or empty array), IPv4/IPv6 address (f.e. 192.168.10.1 or 0092:e10f:cb66:35a9::) or IPv4 network / IPv6 prefix (f.e. 192.168.10.0/24 or 0092:e10f:cb66:35a9::/64). If more than one IP/network is specified for the destination, the source must be empty (any) or contain only a single IP/network. If IPv4 addresses and IPv6 addresses are mixed in destinations, sources must be empty (any).","items":{"type":"string"}},"destinationPorts":{"pattern":"^(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:-(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$","type":"string","description":"Valid configurations are any port (null), single port (f.e. 1234) or port range (f.e. 1024-65535)."}}},"ServerFirewall":{"type":"object","properties":{"copiedPolicies":{"type":"array","items":{"$ref":"#/components/schemas/FirewallPolicy"}},"userPolicies":{"type":"array","items":{"$ref":"#/components/schemas/FirewallPolicy"}},"ingressImplicitRule":{"$ref":"#/components/schemas/ImplicitRule"},"egressImplicitRule":{"$ref":"#/components/schemas/ImplicitRule"},"consistent":{"type":"boolean"},"active":{"type":"boolean"}}},"ServerUEFIPatch":{"type":"object","properties":{"uefi":{"type":"boolean"}}},"S3DownloadInfos":{"type":"object","properties":{"filename":{"type":"string"},"presignedUrl":{"type":"string"},"presignedUrlValidityDurationInHours":{"type":"integer","format":"int32"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"Iso":{"type":"object","properties":{"isoAttached":{"type":"boolean"},"iso":{"type":"string","nullable":true}}},"ServerState":{"type":"string","enum":["NOSTATE","RUNNING","BLOCKED","PAUSED","SHUTDOWN","SHUTOFF","CRASHED","PMSUSPENDED","DISK_SNAPSHOT"]},"RouteFailoverIp":{"type":"object","properties":{"serverId":{"type":"integer","format":"int32"}}},"LogType":{"type":"string","enum":["ERROR","WARNING","INFO"]},"UserMinimal":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"username":{"type":"string"},"firstname":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"company":{"type":"string","nullable":true}}},"NotFoundError":{"type":"object","example":{"message":"Entity Ticket with id 42 not found."},"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"ServerAttachIso":{"type":"object","properties":{"isoId":{"type":"integer","format":"int32"},"userIsoName":{"type":"string"},"changeBootDeviceToCdrom":{"type":"boolean"}}},"ServerOsOptimizationPatch":{"type":"object","properties":{"os_optimization":{"$ref":"#/components/schemas/OsOptimization"}}},"CpuTopology":{"type":"object","properties":{"socketCount":{"type":"integer","format":"int32"},"coresPerSocketCount":{"type":"integer","format":"int32"}}},"ServerSnapshotCreate":{"required":["name"],"type":"object","properties":{"name":{"maxLength":255,"type":"string"},"description":{"maxLength":255,"type":"string","nullable":true},"diskName":{"type":"string","nullable":true},"onlineSnapshot":{"type":"boolean"}}},"IdentifierInt":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"}}},"GuestAgentData":{"type":"object","properties":{"guestAgentAvailable":{"type":"boolean"},"guestAgentData":{"type":"object","description":"Information in json format about the qemu guest agent, which may change depending on the version. We do not guarantee backwards compatibility for this data."}}},"ServerCreateNicVlan":{"required":["vlanId","networkDriver"],"type":"object","properties":{"vlanId":{"type":"integer","format":"int32"},"networkDriver":{"$ref":"#/components/schemas/NetworkDriver"}}},"S3SignPartURL":{"type":"object","properties":{"url":{"type":"string"}}},"ServerCpuTopologyPatch":{"type":"object","properties":{"cpuTopology":{"$ref":"#/components/schemas/CpuTopology"}}},"TaskState":{"type":"string","enum":["PENDING","RUNNING","FINISHED","ERROR","WAITING_FOR_CANCEL","CANCELED","ROLLBACK"]},"Interface":{"type":"object","properties":{"mac":{"type":"string"},"driver":{"type":"string"},"speedInMBits":{"type":"integer","format":"int32"},"ipv4Addresses":{"type":"array","items":{"$ref":"#/components/schemas/ServerIpv4"}},"ipv6Addresses":{"type":"array","items":{"$ref":"#/components/schemas/ServerIpv6"}}}},"UserSave":{"required":["language","timeZone"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"language":{"pattern":"(en|de)","type":"string"},"timeZone":{"pattern":"\\S","type":"string"},"apiIpLoginRestrictions":{"maxLength":255,"type":"string"},"password":{"maxLength":255,"type":"string","nullable":true},"oldPassword":{"maxLength":255,"type":"string","nullable":true},"soapWebservicePassword":{"maxLength":255,"type":"string","nullable":true},"showNickname":{"type":"boolean"},"passwordlessMode":{"type":"boolean"},"secureMode":{"type":"boolean"},"secureModeAppAccess":{"type":"boolean"}}}},"securitySchemes":{"Authorization":{"type":"openIdConnect","description":"The netcup customer number originates from the Customer Control Panel (CCP). Server Control Panel (SCP) maintains a separate user base. The CCP customer number is used as the SCP username for authentication. The SCP userId is not equal to the CCP customer number; it is a unique internal identifier assigned by SCP.","openIdConnectUrl":"/realms/scp/.well-known/openid-configuration"}}},"x-endpoints":{"/scp-core":["/api/ping","/api/v1/admins","/api/v1/admins/{adminId}/firewall-policies","/api/v1/admins/{adminId}/firewall-policies/{id}","/api/v1/admins/{id}","/api/v1/bandwidthclasses","/api/v1/bandwidthclasses/{id}","/api/v1/clusters","/api/v1/clusters/mcp","/api/v1/clusters/{uuid}","/api/v1/clusters/{uuid}/load","/api/v1/db/mcp","/api/v1/defaultimages","/api/v1/defaultimages/{id}","/api/v1/defaultimages/{imageId}/flavours","/api/v1/defaultimages/{imageId}/flavours/{id}","/api/v1/failoverips/v4","/api/v1/failoverips/v6","/api/v1/ipv4","/api/v1/ipv4/{id}","/api/v1/ipv6","/api/v1/ipv6/{id}","/api/v1/isoimages","/api/v1/isoimages/{id}","/api/v1/maintenance","/api/v1/networks","/api/v1/networks/{id}","/api/v1/newsletters","/api/v1/newsletters/:dryrun","/api/v1/newsletters/templates","/api/v1/newsletters/templates/{id}","/api/v1/nodes","/api/v1/nodes/{id}","/api/v1/nodes/{id}/evacuations","/api/v1/nodes/{id}/evacuations/{evacuationId}","/api/v1/nodes/{id}/evacuations/{evacuationId}:cancel","/api/v1/nodes/{id}/servers/unreachable","/api/v1/nodes/{id}/servers/unreferenced","/api/v1/nodes/{id}/servers/unreferenced/{name}","/api/v1/nodes/{id}/stats","/api/v1/openapi","/api/v1/openapi/mcp","/api/v1/rdns/ipv4","/api/v1/rdns/ipv4/{ip}","/api/v1/rdns/ipv6","/api/v1/rdns/ipv6/{ip}","/api/v1/resellers","/api/v1/resellers/{id}","/api/v1/resellers/{id}/imageflavours","/api/v1/resellers/{resellerId}/email-templates","/api/v1/resellers/{resellerId}/servertemplates","/api/v1/resellers/{resellerId}/servertemplates/{id}","/api/v1/resellers/{resellerId}/settings","/api/v1/resellers/{resellerId}/smtp","/api/v1/servers","/api/v1/servers/history","/api/v1/servers/{serverId}","/api/v1/servers/{serverId}/cloud-init","/api/v1/servers/{serverId}/disks","/api/v1/servers/{serverId}/disks/supported-drivers","/api/v1/servers/{serverId}/disks/{diskName}","/api/v1/servers/{serverId}/disks/{diskName}:format","/api/v1/servers/{serverId}/gpu-driver","/api/v1/servers/{serverId}/guest-agent","/api/v1/servers/{serverId}/image","/api/v1/servers/{serverId}/imageflavours","/api/v1/servers/{serverId}/interfaces","/api/v1/servers/{serverId}/interfaces/{mac}","/api/v1/servers/{serverId}/interfaces/{mac}/firewall","/api/v1/servers/{serverId}/interfaces/{mac}/firewall:reapply","/api/v1/servers/{serverId}/interfaces/{mac}/firewall:restore-copied-policies","/api/v1/servers/{serverId}/interfaces/{mac}/ipv4/{id}","/api/v1/servers/{serverId}/interfaces/{mac}/ipv6","/api/v1/servers/{serverId}/interfaces/{mac}/ipv6/{id}","/api/v1/servers/{serverId}/iso","/api/v1/servers/{serverId}/isoimages","/api/v1/servers/{serverId}/logs","/api/v1/servers/{serverId}/metrics/cpu","/api/v1/servers/{serverId}/metrics/disk","/api/v1/servers/{serverId}/metrics/network","/api/v1/servers/{serverId}/metrics/network/packet","/api/v1/servers/{serverId}/node-repair","/api/v1/servers/{serverId}/rescuesystem","/api/v1/servers/{serverId}/snapshots","/api/v1/servers/{serverId}/snapshots/{name}","/api/v1/servers/{serverId}/snapshots/{name}/export","/api/v1/servers/{serverId}/snapshots/{name}/revert","/api/v1/servers/{serverId}/snapshots:dryrun","/api/v1/servers/{serverId}/storageoptimization","/api/v1/servers/{serverId}/target-nodes","/api/v1/servers/{serverId}/user-image","/api/v1/servers/{serverId}:clone","/api/v1/sites","/api/v1/sites/{id}","/api/v1/static-routes/v4","/api/v1/static-routes/v6","/api/v1/tasks","/api/v1/tasks/{uuid}","/api/v1/tasks/{uuid}/details","/api/v1/tasks/{uuid}:cancel","/api/v1/users","/api/v1/users/password","/api/v1/users/{userId}","/api/v1/users/{userId}/failoverips/v4","/api/v1/users/{userId}/failoverips/v4/{id}","/api/v1/users/{userId}/failoverips/v6","/api/v1/users/{userId}/failoverips/v6/{id}","/api/v1/users/{userId}/firewall-policies","/api/v1/users/{userId}/firewall-policies/{id}","/api/v1/users/{userId}/images","/api/v1/users/{userId}/images/{key}","/api/v1/users/{userId}/images/{key}/{uploadId}","/api/v1/users/{userId}/images/{key}/{uploadId}/parts/{partNumber}","/api/v1/users/{userId}/isos","/api/v1/users/{userId}/isos/{key}","/api/v1/users/{userId}/isos/{key}/{uploadId}","/api/v1/users/{userId}/isos/{key}/{uploadId}/parts/{partNumber}","/api/v1/users/{userId}/logs","/api/v1/users/{userId}/ssh-keys","/api/v1/users/{userId}/ssh-keys/{id}","/api/v1/users/{userId}/vlans","/api/v1/users/{userId}/vlans/{vlanId}","/api/v1/vlans/{vlanId}"]}}