{
  "swagger": "2.0",
  "basePath": "/api/v3/onepanel",
  "info": {
    "version": "20.02.13",
    "title": "Onepanel",
    "x-bash-codegen-description": "This is the RESTful API definition of **Onepanel** component of Onedata data\nmanagement system [http://onedata.org].\n\nThis API allows control and configuration of local Onedata deployment,\nin particular full control over the **Onezone** and **Oneprovider** services\nand their distribution and monitoring on the local resources.\n\nEach of these components is composed of the following services:\n\n**Worker services** - these are available under `/zone/workers` and\n                      `/provider/workers` paths,\n\n**Databases services** - each Onedata component stores it's metadata in a\n                         Couchbase backend, which can be distributed on any\n                         number of nodes, these are available under\n                         `/zone/databases` and `/provider/databases` paths,\n\n**Cluster manager services** - this is a service which controls other\n                               deployed processes in one site, these are\n                               availables under these are available under\n                               `/zone/managers` and `/provider/managers`\n                               paths.\n\n**Onezone** and **Oneprovider** components are composed of 3 types of\nservices: **managers**, **databases** and **workers**.\n\nUsing this API each of these components can be deployed, configured,\nstarted and stopped on a specified host in the local site, in the context of\neither **Onezone** or **Oneprovider** service.\n",
    "description": "# Overview\n\nThis is the RESTful API definition of **Onepanel** component of Onedata data\nmanagement system [onedata.org](http://onedata.org).\n\n> This API is defined using [Swagger](http://swagger.io/), the JSON\nspecification can be used to automatically generate client libraries -\n  [swagger.json](../../../swagger/onepanel/swagger.json).\n\nThis API allows control and configuration of local Onedata deployment, in\nparticular full control over the **Onezone** and **Oneprovider** services and\ntheir distribution and monitoring on the local resources.\n\nThe API is grouped into 3 categories of operations:\n  * **Onepanel** - for common operations\n  * **Oneprovider** - for Oneprovider specific administrative operations\n  * **Onezone** - for Onezone specific administrative operations\n\nEach of these components is composed of the following services:\n  * **Worker services** - these are available under `/zone/workers` and\n    `/provider/workers` paths,\n  * **Databases services** - each Onedata component stores it's metadata in a\n    Couchbase backend, which can be distributed on any number of nodes, these\n    are available under `/zone/databases` and `/provider/databases` paths,\n  * **Cluster manager services** - this is a service which controls other\n    deployed processes in one site, these are availables under these are\n    available under `/zone/managers` and `/provider/managers` paths.\n\n**Onezone** and **Oneprovider** components are composed of 3 types of\nservices: **managers**, **databases** and **workers**.\n\nUsing this API each of these components can be deployed, configured,\nstarted and stopped on a specified host in the local site, in the context\nof either **Onezone** or **Oneprovider** service.\n\nAll paths listed in this documentation are relative to the base Onepanel\nREST API which is `/api/v3/onepanel`, so complete URL for a request to\nOnepanel service is:\n\n```\nhttp://HOSTNAME:PORT/api/v3/onepanel/...\n```\n\n## Authentication\n\n### Token authentication\n\nThe recommended, safest way of authenticating requests to Onepanel API is using\nthe **Onedata access tokens**. The token should be present in `X-Auth-Token` or\n`Authorization: Bearer` header.\nSee [Onezone documentation](/#/home/api/latest/onezone?anchor=section/Overview/Authentication-and-authorization)\nfor detailed explanation of the token concepts.\n\nCurl examples:\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" [...]\ncurl -H \"Authorization: Bearer $TOKEN\" [...]\ncurl -H \"Macaroon: $TOKEN\" [...]   # DEPRECATED\n```\n\n\n### Passphrase authentication\n\nThe token authentication dependes on the Onezone service.\nIn special cases - during Onezone deployment or its outage -\nit is necessary to use the local **emergency passphrase**.\n\nThe passphrase should be provided in a Basic authentication header\nwith username `onepanel`. For curl users this means\n```bash\ncurl -u onepanel:TheEmergencyPassphrase\n```\n\nThe passphrase can also be sent without any username, as the whole\ncontent of base64-encoded string in Basic authorization header, e.g.\n```bash\ncurl -H \"Authorization: Basic $(echo -n TheEmergencyPassphrase | base64)\"\n```\n\nThe passphrase is set during deployment. It can be changed in the Onepanel GUI\nor with an API request:\n```bash\ncurl -X PUT 'https://$HOST:9443/api/v3/onepanel/emergency_passphrase' \\\n-u onepanel:TheEmergencyPassphrase -H 'Content-Type: application/json' \\\n-d '{\"currentPassphrase\": \"TheEmergencyPassphrase\", \"newPassphrase\": \"TheNewPassphrase\"}'\n```\n\n## API structure\n\nThe Onepanel API is structured to reflect that it can either be used to\ncontrol **Onezone** or **Oneprovider** deployment, each Onedata component\ndeployment has a separate Onepanel instance. In order to make the API calls\nexplicit, **Onezone** or **Oneprovider** specific requests have different\npaths, i.e.:\n  * Onezone specific operations start with `/api/v3/onepanel/zone/`\n  * Oneprovider specific operations start with `/api/v3/onepanel/provider/`\n  * Common operations paths include `/api/v3/onepanel/users`,\n    `/api/v3/onepanel/hosts` and `/api/v3/onepanel/tasks`\n\nThe overall configuration of each component can be controlled by updating\n`/api/v3/onepanel/zone/configuration` and\n`/api/v3/onepanel/provider/configuration` resources.\n\n## Examples\n\nBelow are some example requests to Onepanel using cURL:\n\n**Add storage resource to provider**\n```bash\ncurl -X POST -u onepanel:Passphrase1 -k -vvv -H \"content-type: application/json\" \\\n-d '{\"NFS\": {\"type\": \"posix\", \"mountPoint\": \"/mnt/vfs\"}}' \\\nhttps://172.17.0.4:9443/api/v3/onepanel/provider/storages\n```\n\n**Add a new Onezone worker**\n```bash\ncurl -X POST -u onepanel:Passphrase1 -k -vvv -H \"content-type: application/json\" \\\n-d '{\"hosts\": [\"node1.p1.1.dev\"]}' \\\nhttps://172.17.0.4:9443/api/v3/onepanel/zone/workers\n```\n",
    "contact": {
      "name": "Onedata support",
      "url": "https://onedata.org/support",
      "email": "info@onedata.org"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
    },
    "x-logo": {
      "url": "https://onedata.org/assets/images/api/onepanel-logo.svg",
      "backgroundColor": "#FFFFFF"
    }
  },
  "paths": {
    "/configuration": {
      "get": {
        "operationId": "get_configuration",
        "summary": "Get public configuration",
        "description": "Returns public configuration details.",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "configuration"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Configuration details.",
            "schema": {
              "$ref": "#/definitions/Configuration"
            }
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        }
      }
    },
    "/node": {
      "get": {
        "operationId": "get_node",
        "summary": "Get information about current onepanel node",
        "description": "Returns information about current onepanel node.\n",
        "x-onedata-gri": {
          "type": "onp_host",
          "aspect": "instance"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Details of this onepanel node.",
            "schema": {
              "$ref": "#/definitions/Node"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getHostname --host https://$HOST:9443"
          }
        ]
      }
    },
    "/cluster": {
      "get": {
        "operationId": "get_current_cluster",
        "summary": "Get details of this cluster",
        "description": "Returns details of this cluster.\n",
        "x-onedata-gri": {
          "type": "onp_cluster",
          "aspect": "current_cluster"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Details of the cluster.",
            "schema": {
              "$ref": "#/definitions/ClusterDetails"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCurrentCluster --host https://$HOST:9443"
          }
        ]
      }
    },
    "/cookie": {
      "get": {
        "operationId": "get_cluster_cookie",
        "summary": "Get cluster cookie",
        "description": "Returns cookie of a cluster this host belongs to. The cookie is a character sequence that is common for all the cluster nodes. The cookies are used for authentication between distributed Erlang Onedata processes.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "cookie"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The cookie of a cluster this host belongs to.",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getClusterCookie --host https://$HOST:9443"
          }
        ]
      }
    },
    "/hosts": {
      "get": {
        "operationId": "get_cluster_hosts",
        "summary": "Get cluster hosts",
        "description": "Returns the list of administrative cluster hosts.\n",
        "x-onedata-gri": {
          "type": "onp_host",
          "aspect": "list"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The list of administrative cluster hosts.",
            "schema": {
              "type": "array",
              "description": "List of cluster hosts.",
              "items": {
                "type": "string"
              },
              "example": [
                "host1.example.org",
                "host2.example.org",
                "host3.example.org"
              ]
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getClusterHosts --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_cluster_host",
        "summary": "Add given host to the cluster",
        "description": "Adds given host to the current cluster. The host can be specified by any address by which it is reachable. Upon success returns proper hostname used to address the new host in cluster management.\n",
        "x-onedata-gri": {
          "type": "onp_host",
          "aspect": "instance"
        },
        "tags": [
          "Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Host added.",
            "schema": {
              "$ref": "#/definitions/Host"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "HostAddRequest",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/HostAddRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE addClusterHost address==$HOSTNAME --host https://$HOST:9443"
          }
        ]
      }
    },
    "/invite_tokens": {
      "post": {
        "operationId": "create_invite_token",
        "summary": "Create node invite token",
        "description": "Creates node invite token.\nThe token can be used by other nodes to [join cluster](#operation/join_cluster).\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "invite_token"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Invite token created.",
            "schema": {
              "$ref": "#/definitions/InviteToken"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "409": {
            "description": "Operation forbidden. The node is already a part of a cluster."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE createInviteToken --host https://$HOST:9443"
          }
        ]
      }
    },
    "/join_cluster": {
      "post": {
        "operationId": "join_cluster",
        "summary": "Join existing cluster",
        "description": "Adds this host to administrative cluster.\nThe host handling this request has to be newly started or removed from previous cluster. It cannot have emergency passphrase or other configuration data set. Therefore this request does not need authorization.\n",
        "x-onedata-gri": {
          "type": "onp_host",
          "aspect": "join_cluster"
        },
        "tags": [
          "Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The node successfully joined the cluster."
          },
          "403": {
            "description": "Forbidden request."
          },
          "409": {
            "description": "Operation forbidden. The node is already a part of a cluster."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "InviteToken",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/InviteToken"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli joinCluster inviteToken==$INVITE_TOKEN --host https://$HOST:9443"
          }
        ]
      }
    },
    "/hosts/{host}": {
      "delete": {
        "operationId": "remove_cluster_host",
        "summary": "Remove host from cluster",
        "description": "Removes a node from the administrative cluster. This operation removes all user and configuration data from the host.\n",
        "x-onedata-gri": {
          "type": "onp_host",
          "id": "?BINDING(host)",
          "aspect": "instance"
        },
        "tags": [
          "Cluster"
        ],
        "responses": {
          "204": {
            "description": "Node has been successfully removed from the cluster."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Host not found."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "in": "path",
            "type": "string",
            "description": "Hostname of a node to be removed from the cluster.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE removeClusterHost host=$CLUSTER_HOST --host https://$HOST:9443"
          }
        ]
      }
    },
    "/progress": {
      "get": {
        "operationId": "get_progress",
        "summary": "Get deployment progress",
        "description": "Returns deployment markers state.",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "progress"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The progress markers.",
            "schema": {
              "$ref": "#/definitions/Progress"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        }
      },
      "patch": {
        "operationId": "modify_progress",
        "summary": "Modify progress markers",
        "description": "Sets or unsets markers for completed deployment stages.",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "progress"
        },
        "tags": [
          "Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Changes successfully saved."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "ProgressModify",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/ProgressModify"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE modifyProgress dnsCheck==true --host https://$HOST:9443"
          }
        ]
      }
    },
    "/tasks/{id}": {
      "get": {
        "operationId": "get_task_status",
        "summary": "Get background task result",
        "description": "Returns result of an asynchronous operation, e.g. database service configuration.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "{task, ?BINDING(id)}"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The requested task status.",
            "schema": {
              "$ref": "#/definitions/TaskStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "The task does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The requested task Id.",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getTaskStatus id=$TASK_ID --host https://$HOST:9443"
          }
        ]
      }
    },
    "/cluster/members_summary": {
      "get": {
        "operationId": "get_cluster_members_summary",
        "summary": "Get summary of members in this cluster",
        "description": "Returns aggregated counts of users and groups belonging to this cluster.\n",
        "x-onedata-gri": {
          "type": "onp_cluster",
          "aspect": "current_cluster_members_summary"
        },
        "tags": [
          "Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Members summary.",
            "schema": {
              "$ref": "#/definitions/ClusterMembersSummary"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getClusterMembersSummary --host https://$HOST:9443"
          }
        ]
      }
    },
    "/cluster/invite_user_token": {
      "post": {
        "operationId": "create_user_invite_token",
        "summary": "Generate cluster invitation token for a user",
        "description": "Returns a token which can be used to add a Onezone user as a member of this cluster.\n",
        "x-onedata-gri": {
          "type": "onp_cluster",
          "aspect": "invite_user_token"
        },
        "tags": [
          "Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The generated token.",
            "schema": {
              "$ref": "#/definitions/Token"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE createUserInviteToken --host https://$HOST:9443"
          }
        ]
      }
    },
    "/web_cert": {
      "get": {
        "operationId": "get_web_cert",
        "summary": "Get information about SSL certificates configuration and status",
        "description": "Returns information about SSL certificate status and renewal configuration.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "web_cert"
        },
        "tags": [
          "Security"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Details of the certificate.",
            "schema": {
              "$ref": "#/definitions/WebCert"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster hosts are not configured."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getWebCert --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_web_cert",
        "summary": "Modify SSL certificate configuration",
        "description": "Modifies configuration regarding certificate management. Allows enabling or disabling certificate autorenewal using Let's Encrypt service.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "web_cert"
        },
        "tags": [
          "Security"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Certificate configuration has been successfully modified."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "WebCertModifyRequest",
            "in": "body",
            "description": "New values for certificate management configuration.\n",
            "schema": {
              "$ref": "#/definitions/WebCertModifyRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE modifyWebCert letsEncrypt==true --host https://$HOST:9443"
          }
        ]
      }
    },
    "/emergency_passphrase": {
      "get": {
        "operationId": "get_emergency_passphrase_status",
        "summary": "Get emergency passphrase status",
        "description": "Returns information whether emergency passphrase is set.",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "emergency_passphrase"
        },
        "tags": [
          "Security"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The passphrase status.",
            "schema": {
              "$ref": "#/definitions/EmergencyPassphraseStatus"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli getEmergencyPassphraseStatus --host https://$HOST:9443"
          }
        ]
      },
      "put": {
        "operationId": "set_emergency_passphrase",
        "summary": "Set emergency passphrase",
        "description": "Sets passphrase which can be used to access the Onepanel REST API and emergency Onepanel GUI.\nMay be invoked without credentials when no passphrase is set.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "emergency_passphrase"
        },
        "tags": [
          "Security"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Changes successfully saved."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "EmergencyPassphrase",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/EmergencyPassphraseChangeRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:oldPassphrase setEmergencyPassphrase currentPassphrase==oldPassphrase newPassphrase==someNewPassphrase --host https://$HOST:9443"
          }
        ]
      }
    },
    "/dns_check/configuration": {
      "get": {
        "operationId": "get_dns_check_configuration",
        "summary": "Return settings used when performing the DNS check",
        "description": "Returns servers queried to check DNS configuration correctness.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "dns_check_configuration"
        },
        "tags": [
          "DNS"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The DNS check results.",
            "schema": {
              "$ref": "#/definitions/DnsCheckConfiguration"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster not yet deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getDnsCheckConfiguration --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_dns_check_configuration",
        "summary": "Configure dns check",
        "description": "Informs what DNS servers to use for checking external DNS records validity.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "dns_check_configuration"
        },
        "tags": [
          "DNS"
        ],
        "consumes": [
          "application/json",
          "application/x-yaml"
        ],
        "responses": {
          "204": {
            "description": "Changes successfully saved."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "dnsCheckConfiguration",
            "in": "body",
            "description": "The configuration changes.",
            "schema": {
              "$ref": "#/definitions/DnsCheckConfiguration"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "echo '{\"dnsServers\": [\"8.8.8.8\", \"8.8.4.4\"]}' | onepanel-rest-cli -u onepanel:$PASSPHRASE modifyDnsCheckConfiguration --host https://$HOST:9443\n"
          }
        ]
      }
    },
    "/dns_check": {
      "get": {
        "operationId": "check_dns",
        "summary": "Check correctness of DNS entries for the cluster's domain",
        "description": "Returns results of the last DNS check, verifying the validity of DNS configuration for cluster's domain. Unless 'forceCheck' flag is set, the results may be cached.\nIf the cluster is configured with an IP instead of a domain no results are returned.\nSettings used for the check, ie. DNS servers used can be modified using the dns_check/configuration endpoint.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "dns_check"
        },
        "tags": [
          "DNS"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The DNS check results.",
            "schema": {
              "$ref": "#/definitions/DnsCheck"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster not yet deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "forceCheck",
            "in": "query",
            "description": "If true the DNS check cache is overridden and check is performed during handling of the request.",
            "type": "boolean",
            "default": false,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE checkDns --host https://$HOST:9443"
          }
        ]
      }
    },
    "/user": {
      "get": {
        "operationId": "get_current_user",
        "summary": "Get details of authenticated user",
        "description": "Returns the details of the user performing the query.\n",
        "x-onedata-gri": {
          "type": "onp_user",
          "aspect": "current_user"
        },
        "tags": [
          "Current User"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "User details.",
            "schema": {
              "$ref": "#/definitions/CurrentUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Request client is not a Onezone member."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli getCurrentUser --host https://$HOST:9443 -H \"x-auth-token: $TOKEN\"\n"
          }
        ]
      }
    },
    "/user/clusters": {
      "get": {
        "operationId": "get_clusters",
        "summary": "List user's clusters",
        "description": "Lists clusters to which current user belongs.\n",
        "x-onedata-gri": {
          "type": "onp_user",
          "aspect": "current_user_clusters"
        },
        "tags": [
          "Current User"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "List of cluster ids.",
            "schema": {
              "$ref": "#/definitions/Ids"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Request client is not a Onezone member."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli getClusters --host https://$HOST:9443 -H \"x-auth-token: $TOKEN\"\n"
          }
        ]
      }
    },
    "/user/clusters/{id}": {
      "get": {
        "operationId": "get_cluster",
        "summary": "Get details of a user's cluster",
        "description": "Returns details of the specified cluster.\n",
        "x-onedata-gri": {
          "type": "onp_cluster",
          "id": "?BINDING(id)",
          "aspect": "instance"
        },
        "tags": [
          "Current User"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Information about the cluster.",
            "schema": {
              "$ref": "#/definitions/ClusterDetails"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Request client is not member of cluster with given Id."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Cluster Id which details should be returned.",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli getCluster --host https://$HOST:9443 -H \"x-auth-token: $TOKEN\"\n"
          }
        ]
      }
    },
    "/providers/{id}": {
      "get": {
        "operationId": "get_remote_provider",
        "summary": "Get details of a remote Oneprovider",
        "description": "Returns the details of given provider. Only users belonging to that Oneprovider's cluster can fetch its details.\n",
        "x-onedata-gri": {
          "type": "onp_provider",
          "id": "?BINDING(id)",
          "aspect": "remote_instance"
        },
        "tags": [
          "Internal"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The Oneprovider details.",
            "schema": {
              "$ref": "#/definitions/RemoteProviderDetails"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Request client is not member of given Oneprovider's cluster."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id of requested Oneprovider.",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli getRemoteProvider id=VAiDGZbs3k0FD8jPhyU1 --host https://$HOST:9443 -H \"x-auth-token: $TOKEN\"\n"
          }
        ]
      }
    },
    "/test_image": {
      "get": {
        "operationId": "test_image",
        "summary": "Get test image",
        "description": "This endpoint returns a dummy image in `.png` format. It is used internally by web applications across Onedata to check connectivity with certain services. This endpoint does not require authentication.\n",
        "x-onedata-gri": {
          "type": "onp_panel",
          "aspect": "test_image"
        },
        "tags": [
          "Internal"
        ],
        "produces": [
          "image/png"
        ],
        "responses": {
          "200": {
            "description": "Test image."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        }
      }
    },
    "/zone/configuration": {
      "get": {
        "operationId": "get_zone_configuration",
        "summary": "Get zone cluster configuration",
        "description": "Returns the zone cluster configuration.",
        "x-onedata-gri": {
          "type": "onp_zone",
          "aspect": "cluster"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The zone cluster configuration.",
            "schema": {
              "$ref": "#/definitions/ZoneConfigurationDetails"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "409": {
            "description": "Cluster already deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneConfiguration --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "configure_zone",
        "summary": "Configure zone deployment",
        "description": "Configures and starts zone services, such as database, cluster manager and cluster worker.\nThis request can be executed by unauthorized users as long as there are no admin users in the system.\n",
        "x-onedata-gri": {
          "type": "onp_zone",
          "aspect": "cluster"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "consumes": [
          "application/json",
          "application/x-yaml"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request - cluster already deployed.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "zoneConfiguration",
            "in": "body",
            "description": "The zone configuration description.",
            "schema": {
              "$ref": "#/definitions/ZoneConfiguration"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat zone_config.json | onepanel-rest-cli -u onepanel:$PASSPHRASE configureZone --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/cluster_ips": {
      "get": {
        "operationId": "get_zone_cluster_ips",
        "summary": "Get zone cluster nodes IPs",
        "description": "Returns IPs of nodes in zone cluster.",
        "x-onedata-gri": {
          "type": "onp_host",
          "id": "undefined",
          "aspect": "external_ips"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The IPs of zone nodes.",
            "schema": {
              "$ref": "#/definitions/ClusterIps"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneClusterIps --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_zone_cluster_ips",
        "summary": "Set external IPs of nodes in application config",
        "description": "Informs cluster nodes about external IPs which can be used to access them by other zones.\n",
        "x-onedata-gri": {
          "type": "onp_host",
          "id": "undefined",
          "aspect": "external_ips"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "consumes": [
          "application/json",
          "application/x-yaml"
        ],
        "responses": {
          "204": {
            "description": "IPs successfully saved."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "clusterIps",
            "in": "body",
            "description": "The zone configuration description.",
            "schema": {
              "$ref": "#/definitions/ModifyClusterIps"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat zone_config.json | onepanel-rest-cli -u onepanel:$PASSPHRASE modifyZoneClusterIps --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/nagios": {
      "get": {
        "operationId": "get_zone_nagios_report",
        "summary": "Get zone nagios report",
        "description": "Returns the zone nagios report.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{nagios, <<\"oz_worker\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "text/xml"
        ],
        "responses": {
          "200": {
            "description": "The zone nagios report."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "The service is stopped and cannot be queried for nagios report."
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneNagiosReport --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/databases": {
      "get": {
        "operationId": "get_zone_databases_status",
        "summary": "Get zone databases status",
        "description": "Returns status of database service on each host where it has been deployed.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{all_hosts_status, <<\"couchbase\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of database service on each host where it has been deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneDatabasesStatus --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_zone_databases",
        "summary": "Add zone databases",
        "description": "Deploys a database service on provided hosts.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "couchbase_instances"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "serviceHosts",
            "in": "body",
            "description": "The service hosts configuration where databases should be deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceDatabases"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat hosts.json | onepanel-rest-cli -u onepanel:$PASSPHRASE addZoneDatabases --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_zone_databases",
        "summary": "Start/stop zone databases",
        "description": "Starts or stops database service on all hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{start_stop_all, <<\"couchbase\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "responses": {
          "204": {
            "description": "Database service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the database service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopZoneDatabases started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/databases/{host}": {
      "get": {
        "operationId": "get_zone_database_status",
        "summary": "Get zone database status",
        "description": "Returns status of database service on the selected host.",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{host_status, <<\"couchbase\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of database service on the selected host.",
            "schema": {
              "$ref": "#/definitions/ServiceStatusHost"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed on the selected host."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which database service status should be returned.\n",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneDatabaseStatus host=db1.example.com --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_zone_databases_host",
        "summary": "Start/stop zone database",
        "description": "Starts or stops database service on the selected hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{start_stop, <<\"couchbase\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "responses": {
          "204": {
            "description": "Database service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed on the selected host."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which database service status should be changed.\n",
            "in": "path",
            "type": "string",
            "required": true
          },
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the database service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopZoneDatabasesHost host=db1.example.com started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/managers": {
      "get": {
        "operationId": "get_zone_managers_status",
        "summary": "Get zone cluster managers status",
        "description": "Returns status of cluster manager service on each host where it has been eployed.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{all_hosts_status, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster manager service on each host where it has been deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneManagersStatus --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_zone_managers",
        "summary": "Add zone cluster managers",
        "description": "Deploys a cluster manager service on provided hosts.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "cluster_manager_instances"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "managerHosts",
            "in": "body",
            "description": "The hosts specification where cluster managers should be deployed.\n",
            "schema": {
              "$ref": "#/definitions/ManagerHosts"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat hosts.json | onepanel-rest-cli -u onepanel:$PASSPHRASE addZoneManagers --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_zone_managers",
        "summary": "Start/stop zone cluster managers",
        "description": "Starts or stops cluster manager service on all hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{start_stop_all, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster manager service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster manager service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopZoneManagers started=true --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/managers/{host}": {
      "get": {
        "operationId": "get_zone_manager_status",
        "summary": "Get zone cluster manager status",
        "description": "Returns status of cluster manager service on the selected host.",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{host_status, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster manager service on the selected host.",
            "schema": {
              "$ref": "#/definitions/ServiceStatusHost"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed on the selected host.\n"
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster manager service status should be returned.\n",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneManagerStatus host=mng.example.com started=true --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_zone_manager",
        "summary": "Start/stop zone cluster manager",
        "description": "Starts or stops cluster manager service on the selected hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{start_stop, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster manager service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed on the selected host.\n"
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster manager service status should be changed.\n",
            "in": "path",
            "type": "string",
            "required": true
          },
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster manager service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopZoneManager host=mng.example.com started=true --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/workers": {
      "get": {
        "operationId": "get_zone_workers_status",
        "summary": "Get zone cluster workers status",
        "description": "Returns status of cluster worker service on each host where it has been deployed.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{all_hosts_status, <<\"oz_worker\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster worker service on each host where it has been deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneWorkersStatus --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_zone_workers",
        "summary": "Add zone cluster workers",
        "description": "Deploys a cluster worker service on provided hosts.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "oz_worker_instances"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "serviceHosts",
            "in": "body",
            "description": "The hosts specification where the workers should be deployed.",
            "schema": {
              "$ref": "#/definitions/ServiceHosts"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat hosts.json | onepanel-rest-cli -u onepanel:$PASSPHRASE addZoneWorkers --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_zone_workers",
        "summary": "Start/stop zone cluster workers",
        "description": "Starts or stops cluster worker service on all hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{start_stop_all, <<\"oz_worker\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster worker service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster worker service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopZoneWorkers started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/workers/{host}": {
      "get": {
        "operationId": "get_zone_worker_status",
        "summary": "Get zone cluster worker status",
        "description": "Returns status of cluster worker service on the selected host.",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{host_status, <<\"oz_worker\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster worker service on the selected host.",
            "schema": {
              "$ref": "#/definitions/ServiceStatusHost"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed on the selected host."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster worker service status should be returned.\n",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZoneWorkerStatus host=work.example.com --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_zone_worker",
        "summary": "Start/stop zone cluster worker",
        "description": "Starts or stops cluster worker service on the selected hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{start_stop, <<\"oz_worker\">>}"
        },
        "tags": [
          "Onezone Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster worker service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed on the selected host.\n"
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster worker service status should be changed.\n",
            "in": "path",
            "type": "string",
            "required": true
          },
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster worker service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopZoneWorker host=work.example.com started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/policies": {
      "get": {
        "operationId": "get_zone_policies",
        "summary": "Get Onezone policies",
        "description": "Returns restrictions placed on Onezone operations such as registering Oneproviders.\n",
        "x-onedata-gri": {
          "type": "onp_zone",
          "aspect": "policies"
        },
        "tags": [
          "Service Configuration"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Onezone policies configuration.",
            "schema": {
              "$ref": "#/definitions/ZonePolicies"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Onezone cluster is not configured."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getZonePolicies --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_zone_policies",
        "summary": "Modify current Onezone policies",
        "description": "Modifies restrictions placed on Onezone operations such as registering providers.\n",
        "x-onedata-gri": {
          "type": "onp_zone",
          "aspect": "policies"
        },
        "tags": [
          "Service Configuration"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Policies have been successfully modified."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Onezone cluster is not configured."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "ZonePolicies",
            "in": "body",
            "description": "New values for Onezone policies.",
            "schema": {
              "$ref": "#/definitions/ZonePolicies"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE modifyZonePolicies subdomainDelegation==true --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/gui_messages/{id}": {
      "get": {
        "operationId": "get_gui_message",
        "summary": "Get settings of a Onezone GUI message",
        "description": "Returns settings of a message displayed in Onezone GUI.",
        "x-onedata-gri": {
          "type": "onp_zone",
          "aspect": "{gui_message, ?BINDING(id)}"
        },
        "tags": [
          "Service Configuration"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The message settings.",
            "schema": {
              "$ref": "#/definitions/GuiMessage"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "required": true,
            "description": "Possible values are:\n  - cookie_consent_notification - for the contents of cookie consent popup\n  - privacy_policy - for the privacy policy\n  - signin_notification - for the message displayed on the Onezone sign in screen\n",
            "enum": [
              "cookie_consent_notification",
              "privacy_policy",
              "signin_notification"
            ]
          }
        ]
      },
      "patch": {
        "operationId": "modify_gui_message",
        "summary": "Modify settings of a Onezone GUI message",
        "description": "Enables, disables or modifies a message displayed in Onezone GUI.",
        "x-onedata-gri": {
          "type": "onp_zone",
          "aspect": "{gui_message, ?BINDING(id)}"
        },
        "tags": [
          "Service Configuration"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Changes successfully saved."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "required": true,
            "description": "Possible values are:\n  - cookie_consent_notification - for the contents of cookie consent popup\n  - privacy_policy - for the privacy policy\n  - signin_notification - for the message displayed on the Onezone sign in screen\n",
            "enum": [
              "cookie_consent_notification",
              "privacy_policy",
              "signin_notification"
            ]
          },
          {
            "name": "MessageChange",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/GuiMessage"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE modifyGuiMessage id=signin_notification enabled==true --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/users": {
      "get": {
        "operationId": "get_onezone_users",
        "summary": "List Onezone users",
        "description": "List Ids of Onezone users.\n\n***Example cURL requests***\n\n**Get Onezone user ids**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X GET https://$HOST/api/v3/onepanel/zone/users\n\n{\n    \"ids\": [\n        \"f891d1ddf693232bbf0c11fe3cd9f7e7cheda9\",\n        \"eefc8a11e1776d0797969ccf0b59c6dcch73dc\",\n        \"ec0a39261b325cdc74e9c2d6b54fa786ch0419\"\n    ]\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_user",
          "aspect": "list"
        },
        "tags": [
          "User Management"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "List of user Ids.",
            "schema": {
              "$ref": "#/definitions/Ids"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getOnezoneUsers --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_onezone_user",
        "summary": "Create Onezone user",
        "description": "Creates a new Onezone user account with Basic (username & password)\nauthentication enabled.\n\n***Example cURL requests***\n\n**Create Onezone user with username & password**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X POST https://$HOST/api/v3/onepanel/zone/users \\\n-H \"Content-Type: application/json\" -d '{\n    \"username\": \"someUser\",\n    \"password\": \"somePassword\"\n}'\n\n{\n    \"id\": \"b519b3ac46823b2b83b6cb85e1b16f4fchaa0f\"\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_user",
          "aspect": "instance"
        },
        "tags": [
          "User Management"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "201": {
            "$ref": "#/responses/Created"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "userCreateRequest",
            "in": "body",
            "description": "The user configuration details.",
            "schema": {
              "$ref": "#/definitions/OnezoneUserCreateRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE addOnezoneUser username==bob password==secret --host https://$HOST:9443"
          }
        ]
      }
    },
    "/zone/users/{id}": {
      "get": {
        "operationId": "get_onezone_user",
        "summary": "Get Onezone user details",
        "description": "Returns the configuration information of the Onezone user.\n\n***Example cURL requests***\n\n**Get Onezone user details**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X GET https://$HOST/api/v3/onepanel/zone/users/$USER_ID\n\n{\n    \"username\": \"someUser\",\n    \"userId\": \"b519b3ac46823b2b83b6cb85e1b16f4fchaa0f\",\n    \"fullName\": \"Unnamed User\"\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_user",
          "id": "?BINDING(id)",
          "aspect": "instance"
        },
        "tags": [
          "User Management"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Oneozne user details.",
            "schema": {
              "$ref": "#/definitions/OnezoneUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "The user does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id of the user to be described.",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getOnezoneUser id=$USER_ID --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "change_user_password",
        "summary": "Set password for Onezone user",
        "description": "Sets a new password for a Onezone user using Basic authentication.\n\n***Example cURL requests***\n\n**Set Onezone user password**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X PATCH https://$HOST/api/v3/onepanel/zone/users/$USER_ID \\\n-H \"Content-Type: application/json\" -d '{\"newPassword\": \"someNewPassword\"}'\n```\n",
        "x-onedata-gri": {
          "type": "onp_user",
          "id": "?BINDING(id)",
          "aspect": "instance"
        },
        "tags": [
          "User Management"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The user password has been successfully changed."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "The user does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id of the user whose password is changed.",
            "type": "string",
            "required": true
          },
          {
            "name": "PasswordChangeRequest",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/PasswordChangeRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE changeUserPassword id=$USER_ID newPassword==someNewPassword --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/configuration": {
      "get": {
        "operationId": "get_provider_configuration",
        "summary": "Get provider cluster configuration",
        "description": "Returns the provider cluster configuration.",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "cluster"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The provider cluster configuration.",
            "schema": {
              "$ref": "#/definitions/ProviderConfigurationDetails"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster is not fully deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderConfiguration --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "configure_provider",
        "summary": "Configure provider deployment",
        "description": "Configures and starts provider services, such as database, cluster manager and cluster worker. Depending on the configuration, sets up provider storage and registers in the zone.\nThis request can be executed unauthorized as long as there are no admin users.\n",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "cluster"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "consumes": [
          "application/json",
          "application/x-yaml"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "409": {
            "description": "Cluster already deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "providerConfiguration",
            "in": "body",
            "description": "The provider configuration description.",
            "schema": {
              "$ref": "#/definitions/ProviderConfiguration"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat provider_config.json | onepanel-rest-cli -u onepanel:$PASSPHRASE configureProvider --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/cluster_ips": {
      "get": {
        "operationId": "get_provider_cluster_ips",
        "summary": "Get provider cluster nodes IPs",
        "description": "Returns IPs of nodes in provider cluster.",
        "x-onedata-gri": {
          "type": "onp_host",
          "id": "undefined",
          "aspect": "external_ips"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The IPs of provider nodes.",
            "schema": {
              "$ref": "#/definitions/ClusterIps"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderClusterIps --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_provider_cluster_ips",
        "summary": "Set external IPs of nodes in application config",
        "description": "Informs cluster nodes about external IPs which can be used to access them by other providers.\n",
        "x-onedata-gri": {
          "type": "onp_host",
          "id": "undefined",
          "aspect": "external_ips"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "consumes": [
          "application/json",
          "application/x-yaml"
        ],
        "responses": {
          "204": {
            "description": "IPs successfully saved."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "clusterIps",
            "in": "body",
            "description": "The provider configuration description.",
            "schema": {
              "$ref": "#/definitions/ModifyClusterIps"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat provider_config.json | onepanel-rest-cli -u onepanel:$PASSPHRASE modifyProviderClusterIps --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/nagios": {
      "get": {
        "operationId": "get_provider_nagios_report",
        "summary": "Get provider nagios report",
        "description": "Returns the provider nagios report.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{nagios, <<\"op_worker\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "text/xml"
        ],
        "responses": {
          "200": {
            "description": "The provider nagios report."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "The service is stopped and cannot be queried for nagios report."
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderNagiosReport --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/databases": {
      "get": {
        "operationId": "get_provider_databases_status",
        "summary": "Get provider databases status",
        "description": "Returns status of database service on each host where it has been deployed.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{all_hosts_status, <<\"couchbase\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of database service on each host where it has been deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderDatabasesStatus --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_provider_databases",
        "summary": "Deploy provider databases",
        "description": "Deploys a database service on provided hosts.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "couchbase_instances"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "serviceHosts",
            "in": "body",
            "description": "The service hosts configuration where databases should be deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceDatabases"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat service_dbs.json | onepanel-rest-cli -u onepanel:$PASSPHRASE addProviderDatabases --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_provider_databases",
        "summary": "Start/stop provider databases",
        "description": "Starts or stops database service on all hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{start_stop_all, <<\"couchbase\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "responses": {
          "204": {
            "description": "Database service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the database service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopProviderDatabases started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/databases/{host}": {
      "get": {
        "operationId": "get_provider_database_status",
        "summary": "Get provider database status",
        "description": "Returns status of database service on the selected host.",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{host_status, <<\"couchbase\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of database service on the selected host.",
            "schema": {
              "$ref": "#/definitions/ServiceStatusHost"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed on the selected host."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which database service status should be returned.\n",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderDatabaseStatus host=db1.example.com --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_provider_database",
        "summary": "Start/stop provider database",
        "description": "Starts or stops database service on the selected hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{start_stop, <<\"couchbase\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "responses": {
          "204": {
            "description": "Database service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Database service has not been deployed on the selected host."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which database service status should be changed.\n",
            "in": "path",
            "type": "string",
            "required": true
          },
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the database service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopProviderDatabase host=db1.example.com --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/managers": {
      "get": {
        "operationId": "get_provider_managers_status",
        "summary": "Get provider cluster managers status",
        "description": "Returns status of cluster manager service on each host where it has been deployed.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{all_hosts_status, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster manager service on each host where it has been deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderManagersStatus --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_provider_managers",
        "summary": "Add provider cluster managers",
        "description": "Deploys a cluster manager service on provided hosts.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "cluster_manager_instances"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "managerHosts",
            "in": "body",
            "description": "The cluster manager service hosts configuration.",
            "schema": {
              "$ref": "#/definitions/ManagerHosts"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat mng_hosts.json | onepanel-rest-cli -u onepanel:$PASSPHRASE -ct json addProviderManagers --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_provider_managers",
        "summary": "Start/stop provider cluster managers",
        "description": "Starts or stops cluster manager service on all hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{start_stop_all, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster manager service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster manager service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopProviderManagers started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/managers/{host}": {
      "get": {
        "operationId": "get_provider_manager_status",
        "summary": "Get provider cluster manager status",
        "description": "Returns status of cluster manager service on the selected host.",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{host_status, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster manager service on the selected host.",
            "schema": {
              "$ref": "#/definitions/ServiceStatusHost"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed on the selected host.\n"
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster manager service status should be returned.\n",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderManagerStatus host=mng.example.com --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_provider_manager",
        "summary": "Start/stop provider cluster manager",
        "description": "Starts or stops cluster manager service on the selected hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{start_stop, <<\"cluster_manager\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster manager service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster manager service has not been deployed on the selected host.\n"
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster manager service status should be changed.\n",
            "in": "path",
            "type": "string",
            "required": true
          },
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster manager service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopProviderManager started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/workers": {
      "get": {
        "operationId": "get_provider_workers_status",
        "summary": "Get provider cluster workers status",
        "description": "Returns status of cluster worker service on each host where it has been deployed.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{all_hosts_status, <<\"op_worker\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster worker service on each host where it has been deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderWorkersStatus --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_provider_workers",
        "summary": "Add provider cluster workers",
        "description": "Deploys cluster worker services on provided hosts.",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "op_worker_instances"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "serviceHosts",
            "in": "body",
            "description": "The service hosts configuration where workers should be deployed.\n",
            "schema": {
              "$ref": "#/definitions/ServiceHosts"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat hosts.json | onepanel-rest-cli -u onepanel:$PASSPHRASE addProviderWorkers --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_provider_workers",
        "summary": "Start/stop provider cluster workers",
        "description": "Starts or stops cluster worker service on all hosts in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "aspect": "{start_stop_all, <<\"op_worker\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster worker service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster worker service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopProviderWorkers started=true --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/workers/{host}": {
      "get": {
        "operationId": "get_provider_worker_status",
        "summary": "Get provider cluster worker status",
        "description": "Returns status of cluster worker service on the selected host.",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{host_status, <<\"op_worker\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The status of cluster worker service on the selected host.",
            "schema": {
              "$ref": "#/definitions/ServiceStatusHost"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed on the selected host.\n"
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster worker service status should be returned.\n",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderWorkerStatus host=work.example.com --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "start_stop_provider_worker",
        "summary": "Start/stop provider cluster worker",
        "description": "Starts or stops cluster worker service on the selected host in the local deployment.\n",
        "x-onedata-gri": {
          "type": "onp_service",
          "id": "?BINDING(host)",
          "aspect": "{start_stop, <<\"op_worker\">>}"
        },
        "tags": [
          "Oneprovider Cluster"
        ],
        "responses": {
          "204": {
            "description": "Cluster worker service state changed successfully."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Cluster worker service has not been deployed on the selected host.\n"
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "description": "The name of a host for which cluster worker service status should be changed.\n",
            "in": "path",
            "type": "string",
            "required": true
          },
          {
            "name": "started",
            "in": "query",
            "description": "Defines the intended state of the cluster worker service. The service will be started or stopped in order to match the requested state.\n",
            "type": "boolean",
            "default": true,
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE startStopProviderWorker host=work.example.com started=false --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/onezone_info": {
      "get": {
        "operationId": "get_onezone_info",
        "summary": "Get Onezone information",
        "description": "Get information about a Onezone.\nBefore registration, this endpoint requires a registration token and returns information about the Onezone which issued the token.\nIf the Oneprovider is registered, returns information about the Onezone at which the provider is registered.\n",
        "x-onedata-gri": {
          "type": "onp_zone",
          "aspect": "instance"
        },
        "tags": [
          "Oneprovider Identity"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Information about Onezone.",
            "schema": {
              "$ref": "#/definitions/OnezoneInfo"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "type": "string",
            "description": "Oneprovider registration token obtained from Onezone. Required if the Oneprovider is not registered.",
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getOnezoneInfo --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider": {
      "get": {
        "operationId": "get_provider",
        "summary": "Get provider details",
        "description": "Returns the basic configuration information of the provider.",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "instance",
          "scope": "private"
        },
        "tags": [
          "Oneprovider Identity"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The provider configuration details.",
            "schema": {
              "$ref": "#/definitions/ProviderDetails"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProvider --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_provider",
        "summary": "Register provider",
        "description": "Registers provider in the zone.",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "instance"
        },
        "tags": [
          "Oneprovider Identity"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Provider has been successfully registered."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "409": {
            "description": "Provider already registered."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "providerRegisterRequest",
            "in": "body",
            "description": "The new provider details.",
            "schema": {
              "$ref": "#/definitions/ProviderRegisterRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat provider_details.json | onepanel-rest-cli -u onepanel:$PASSPHRASE addProvider --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_provider",
        "summary": "Modify provider details",
        "description": "Modifies basic provider details in the zone.",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "instance"
        },
        "tags": [
          "Oneprovider Identity"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Provider details has been successfully modified."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "providerModifyRequest",
            "in": "body",
            "description": "New values for provider configuration parameters which should be changed.\n",
            "schema": {
              "$ref": "#/definitions/ProviderModifyRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat provider_details.json | onepanel-rest-cli -u onepanel:$PASSPHRASE modifyProvider --host https://$HOST:9443"
          }
        ]
      },
      "delete": {
        "operationId": "remove_provider",
        "summary": "Unregister provider",
        "description": "Unregisters provider from the zone.",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "instance"
        },
        "tags": [
          "Oneprovider Identity"
        ],
        "responses": {
          "204": {
            "description": "Provider has been successfully unregistered."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE removeProvider --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages": {
      "get": {
        "operationId": "get_storages",
        "summary": "Get storages",
        "description": "Returns the list of provider storage resources and their details.\n\n***Example cURL requests***\n\n**Get provider storage ids**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X GET https://$HOST/api/v3/onepanel/provider/storages\n\n{\n    \"ids\": [\n        \"18a42a43b1b2d92455ffa09e9a15df7fch4f82\",\n        \"0a26877440f6ce457106c6958dfe7ecbch0ac6\",\n        \"b3d7d10504393556d9b1631a74c34520ch8359\"\n    ]\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "aspect": "list"
        },
        "tags": [
          "Storages"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The provider storage resources Ids.",
            "schema": {
              "$ref": "#/definitions/ProviderStorages"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getStorages --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_storage",
        "summary": "Add storage",
        "description": "Adds additional storage resources to the provider.\n\n***Example cURL requests***\n\n**Add storage**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X POST https://$HOST/api/v3/onepanel/provider/storages \\\n-H \"Content-Type: application/json\" -d '{\n    \"My S3 Storage\": {\n        \"type\": \"s3\",\n        \"hostname\": \"https://iam.example.com:443\",\n        \"bucketName\": \"bucket1.iam.example.com\",\n        \"skipStorageDetection\": true\n    }\n}'\n```\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "aspect": "instances"
        },
        "tags": [
          "Storages"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The storage resources have been successfully added to the provider deployment.\n"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "storageCreateRequest",
            "in": "body",
            "description": "The configuration details of storage resources to be added to the provider deployment. Must be an object with unique names for the storages as keys and their corresponding configuration (objects) as values - see the request body example.\n",
            "schema": {
              "$ref": "#/definitions/StorageCreateRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat storages.json | onepanel-rest-cli -u onepanel:$PASSPHRASE addStorage --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}": {
      "get": {
        "operationId": "get_storage_details",
        "summary": "Get storage details",
        "description": "Returns the details of the selected storage.\n\n***Example cURL requests***\n\n**Get Storage Details**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X GET https:/$HOST/api/v3/onepanel/provider/storages/$STORAGE_ID\n\n{\n    \"type\": \"s3\",\n    \"storagePathType\": \"flat\",\n    \"skipStorageDetection\": true,\n    \"signatureVersion\": 4,\n    \"scheme\": \"http\",\n    \"readonly\": false,\n    \"qosParameters\":{\n        \"storageId\": \"05b6c0a9b72e475c9d5061b0b7e16947chbcdc\",\n        \"providerId\": \"03c7e42a793912307b01b1bbb72a3a6bch4c1c\"\n    },\n    \"name\": \"My S3 Storage\",\n    \"maximumCanonicalObjectSize\": 67108864,\n    \"lumaFeed\": \"auto\",\n    \"importedStorage\": false,\n    \"id\": \"05b6c0a9b72e475c9d5061b0b7e16947chbcdc\",\n    \"hostname\": \"https://iam.exampele.com:443/\",\n    \"fileMode\": \"0664\",\n    \"dirMode\": \"0775\",\n    \"bucketName\": \"bucket1.iam.examplee.com\",\n    \"blockSize\": 10485760,\n    \"accessKey\": \"\"\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "instance"
        },
        "tags": [
          "Storages"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The details of a selected storage.",
            "schema": {
              "$ref": "#/definitions/StorageGetDetails"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage resource, which details should be returned.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getStorageDetails id=$STORAGE_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "patch": {
        "operationId": "modify_storage",
        "summary": "Modify storage config",
        "description": "Modifies storage configuration.\n\n***Example cURL requests***\n\n**Modify storage name. Notice, that current storage name is the map key.**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X PATCH https://$HOST/api/v3/onepanel/provider/storages/$STORAGE_ID \\\n-H \"Content-Type: application/json\" -d '{\n    \"My S3 Storage\": {\n        \"type\":\"s3\",\n        \"name\": \"My S3 Storage Updated\"\n    }\n}'\n\n{\n    \"type\": \"s3\",\n    \"storagePathType\": \"flat\",\n    \"skipStorageDetection\": \"true\",\n    \"signatureVersion\": \"4\",\n    \"scheme\": \"http\",\n    \"readonly\": false,\n    \"qosParameters\": {\n        \"storageId\": \"2456aa013af797dbef27743790a5f12cche680\",\n        \"providerId\": \"03c7e42a793912307b01b1bbb72a3a6bch4c1c\"\n    },\n    \"name\": \"My S3 Storage Updated\",\n    \"maximumCanonicalObjectSize\": \"67108864\",\n    \"lumaFeed\": \"auto\",\n    \"importedStorage\": false,\n    \"id\": \"2456aa013af797dbef27743790a5f12cche680\",\n    \"hostname\": \"https://iam.exampele.com:443/\",\n    \"fileMode\": \"0664\",\n    \"dirMode\": \"0775\",\n    \"bucketName\": \"bucket1.iam.examplee.com\",\n    \"blockSize\": \"10485760\",\n    \"accessKey\": \"\"\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "instance"
        },
        "tags": [
          "Storages"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The storage resources have been successfully modified.\nResponse contains current storage params and report of file creation test.\n",
            "schema": {
              "$ref": "#/definitions/StorageModifyDetails"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of the storage resource which details should be modified.\n",
            "required": true
          },
          {
            "name": "storageModifyRequest",
            "in": "body",
            "description": "An object with one key - the current name of the storage that is being modified - and its value set to an object with updated parameters.\n",
            "schema": {
              "$ref": "#/definitions/StorageModifyRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli id=$STORAGE_ID timeout==10000 -u onepanel:$PASSPHRASE --host https://$HOST:9443 modifyStorage\n"
          }
        ]
      },
      "delete": {
        "operationId": "remove_storage",
        "summary": "Remove storage",
        "description": "Removes storage from the cluster. Only storage not supporting\nany spaces can be removed.\n\n***Example cURL requests***\n\n**Remove storage**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X DELETE https://$HOST/api/v3/onepanel/provider/storages/$STORAGE_ID\n```\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "instance"
        },
        "tags": [
          "Storages"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Storage has been succesfully removed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage does not exist."
          },
          "409": {
            "description": "Storage supports a space and cannot be removed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of the storage to remove.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID removeStorage --host https://$HOST:9443\n"
          }
        ]
      }
    },
    "/provider/spaces": {
      "get": {
        "operationId": "get_provider_spaces",
        "summary": "Get provider spaces",
        "description": "Returns the list of spaces supported by the provider.\n\n***Example cURL requests***\n\n**Get provider space ids**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X GET https://$HOST/api/v3/onepanel/provider/spaces\n\n{\n    \"ids\": [\n        \"0614a7a1512271ceeae95539872eeeabched69\",\n        \"06911eba60e6ba947f86f799ce975042chad21\",\n        \"109b7d84c00cd45a88b6cdb852dba5b3ch84db\"\n    ]\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "list"
        },
        "tags": [
          "Space Support"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The provider spaces IDs.",
            "schema": {
              "$ref": "#/definitions/ProviderSpaces"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getProviderSpaces --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "support_space",
        "summary": "Support space",
        "description": "Supports an existing space.\n\n***Example cURL requests***\n\n**Support space**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X POST https://$HOST/api/v3/onepanel/provider/spaces \\\n-H \"Content-Type: application/json\" -d '{\n    \"token\": \"MDAU02QHLaaJ00go\",\n    \"size\": \"10000000\",\n    \"storageId\": \"18a42a43b1b2d9e9a1f82\"\n}'\n\n{\n    \"id\": \"16403a6c45105010dc7103e31874cb3echac41\"\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "aspect": "support"
        },
        "tags": [
          "Space Support"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "201": {
            "description": "Created space support relation.",
            "schema": {
              "$ref": "#/definitions/Id"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "spaceSupportRequest",
            "in": "body",
            "description": "Specification of the space support request including support size and token.\n",
            "schema": {
              "$ref": "#/definitions/SpaceSupportRequest"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE supportSpace token==ASDKJASKJDHKAJSHD size:=1073741824 --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/spaces/{id}": {
      "get": {
        "operationId": "get_space_details",
        "summary": "Get space details",
        "description": "Returns details of space specified by space Id in the path.\n\n***Example cURL requests***\n\n**Get space details**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X GET https://$HOST/api/v3/onepanel/provider/spaces/$SPACE_ID\n\n{\n    \"supportingProviders\": {\n        \"03c7e42a793912307b01b1bbb72a3a6bch4c1c\": 10000000\n    },\n    \"storageId\": \"18a42a43b1b2d92455ffa09e9a15df7fch4f82\",\n    \"spaceOccupancy\": 0,\n    \"name\": \"someSpace\",\n    \"localStorages\": [\"18a42a43b1b2d92455ffa09e9a15df7fch4f82\"],\n    \"importedStorage\": false,\n    \"id\": \"16403a6c45105010dc7103e31874cb3echac41\"\n}\n```\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "instance"
        },
        "tags": [
          "Space Support"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The space details.",
            "schema": {
              "$ref": "#/definitions/SpaceDetails"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Space does not exist or is not supported by the provider."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space which details should be returned.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getSpaceDetails id=$SPACE_ID --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_space",
        "summary": "Modify space details",
        "description": "Modifies the space import/update strategies.\n\n***Example cURL requests***\n\n**Modify space support size**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X PATCH https://$HOST/api/v3/onepanel/provider/spaces/$SPACE_ID \\\n-H \"Content-Type: application/json\" -d '{\"size\": \"30000000\"}'\n```\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "support"
        },
        "tags": [
          "Space Support"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The space details has been successfully changed."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "The user does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space which details should be modified.",
            "required": true
          },
          {
            "name": "spaceModifyRequest",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/SpaceModifyRequest"
            },
            "required": true
          }
        ]
      },
      "delete": {
        "operationId": "revoke_space_support",
        "summary": "Revoke space support for a space",
        "description": "Allows provider to revoke storage support for a specific space. Users with\naccess to this space will no longer be able to store data on the resources\nof this provider.\n\n***Example cURL requests***\n\n**Revoke space support**\n```bash\ncurl -H \"X-Auth-Token: $TOKEN\" -X DELETE https://$HOST/api/v3/onepanel/provider/spaces/$SPACE_ID\n```\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "support"
        },
        "tags": [
          "Space Support"
        ],
        "responses": {
          "204": {
            "description": "The space support has been successfully revoked."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Space does not exist or is not supported by the provider."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space to be removed.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE revokeSpaceSupport id=$SPACE_ID --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/spaces/{id}/storage-import/auto/info": {
      "get": {
        "operationId": "get_auto_storage_import_info",
        "summary": "Get information about auto storage import scan",
        "description": "Returns information about current or last finished auto storage import scan.",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "auto_storage_import_info"
        },
        "tags": [
          "Storage Import"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Information of auto storage import mechanism in given space.",
            "schema": {
              "$ref": "#/definitions/AutoStorageImportInfo"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space for which storage import stats should be returned.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 getAutoStorageImportInfo id=$SPACE_ID\n"
          }
        ]
      }
    },
    "/provider/spaces/{id}/storage-import/auto/stats": {
      "get": {
        "operationId": "get_auto_storage_import_stats",
        "summary": "Get statistics of auto storage import mechanism",
        "description": "Returns requested statistics of auto storage import mechanism for given space on this provider.\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "auto_storage_import_stats"
        },
        "tags": [
          "Storage Import"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Status and statistics of auto storage import mechanism in given space.",
            "schema": {
              "$ref": "#/definitions/AutoStorageImportStats"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space for which storage import stats should be returned.",
            "required": true
          },
          {
            "name": "period",
            "in": "query",
            "description": "Predefined time period for which the statistics should be fetched.",
            "type": "string",
            "enum": [
              "minute",
              "hour",
              "day"
            ],
            "required": true
          },
          {
            "name": "metrics",
            "in": "query",
            "description": "Specify which statistic metrics should be returned - strings delimited with comma. Accepted values are: `queueLength`, `createdFiles`, `modifiedFiles`, `deletedFiles`\n",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 getAutoStorageImportStats id=$SPACE_ID period=minute metrics='queueLength,createdFiles'\n"
          }
        ]
      }
    },
    "/provider/spaces/{id}/storage-import/auto/force-start": {
      "post": {
        "operationId": "force_start_auto_storage_import_scan",
        "summary": "Force start auto storage import scan",
        "description": "Forcefully starts scan of auto storage import mechanism in given space.",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "force_start_auto_storage_import_scan"
        },
        "tags": [
          "Storage Import"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Scan of auto storage import in given space has started."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "409": {
            "description": "Storage import scan is currently exectued in the space."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE forsceStartAutoStorageImportScan --host https://$HOST:9443 id=$SPACE_ID"
          }
        ]
      }
    },
    "/provider/spaces/{id}/storage-import/auto/force-stop": {
      "post": {
        "operationId": "force_stop_auto_storage_import_scan",
        "summary": "Force stop auto storage import scan",
        "description": "Forcefully stops current scan of auto storage import mechanism in given space.",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "force_stop_auto_storage_import_scan"
        },
        "tags": [
          "Storage Import"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Scan of auto storage import in given space has been stopped."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage import scan is not currently executed in the space."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE forceStopAutoStorageImportScan --host https://$HOST:9443 id=$SPACE_ID"
          }
        ]
      }
    },
    "/provider/spaces/{id}/storage-import/manual/example": {
      "get": {
        "operationId": "get_manual_storage_import_example",
        "summary": "Get manual storage import example",
        "description": "Returns example `curl` command that can be executed to manually import (register) file from storage.\n\nThe command is filled with correct host of the Oneprovider, space and storage ids.\nIn order to execute the command, user must set 3 variables:\n * `TOKEN` - Onedata access token.\n * `STORAGE_FILE_ID` - Identifier of the file on storage, relevant for given storage backend:\n   * path on POSIX-compatible or canonical object storages, e.g. /dir/file.txt,\n   * URL on HTTP based storages, e.g. https://www.example.org/data/21/run123.tar.\n * `DESTINATION_PATH` - An absolute path in space where file should be created.\n\nFor more info please read: https://onedata.org/#/home/api/stable/oneprovider?anchor=tag/File-registration\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "manual_storage_import_example"
        },
        "tags": [
          "Storage Import"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Example `curl` command.",
            "schema": {
              "$ref": "#/definitions/ManualStorageImportExample"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space for which the example command should be generated.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 getManualStorageImportExample id=$SPACE_ID\n"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/config": {
      "get": {
        "operationId": "luma_get_config",
        "summary": "Get LUMA DB configuration",
        "description": "Returns configuration of Local User Mapping database (LUMA DB) for the storage.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "luma_configuration"
        },
        "tags": [
          "LUMA DB"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The LUMA configuration.",
            "schema": {
              "$ref": "#/definitions/LumaConfig"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Space does not exist or is not supported by the provider."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which LUMA DB configuration should be returned.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE lumaGetConfig id=$STORAGE_ID --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/db": {
      "delete": {
        "operationId": "luma_clear_db",
        "summary": "Clear LUMA DB",
        "description": "Clears all LUMA DB entries for given storage. LUMA DB will be repopulated using currently setup feed.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "luma_db"
        },
        "tags": [
          "LUMA DB"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "LUMA DB has been successfully cleared."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which LUMA DB will be cleared",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 lumaClearDb id=$STORAGE_ID"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/db/display_credentials/all/default/{space_id}": {
      "get": {
        "operationId": "luma_get_display_credentials",
        "summary": "Lookup default display credentials",
        "description": "Returns default display credentials for the space support that are stored in LUMA DB. These are POSIX credentials (UID & GID) which are returned in getattr response. They are used to present file owners in the result of e.g. `ls` or `stat` operation in Oneclient or when fetching file attributes via REST API.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_display_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Default display credentials for given space support.",
            "schema": {
              "$ref": "#/definitions/PosixCompatibleCredentials"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support or mapping does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default display credentials should be returned.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default display credentials should be returned.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE lumaGetDisplayCredentials id=$STORAGE_ID space_id=$SPACE_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "delete": {
        "operationId": "luma_remove_display_credentials",
        "summary": "Remove default display credentials",
        "description": "Removes default display credentials for the space support from LUMA DB. Default display credentials will be acquired again using currently setup LUMA feed.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_display_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Default display credentials has been succesfully removed from LUMA DB."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support or mapping does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default display credentials should be removed.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default display credentials should be removed.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID space_id=$SPACE_ID lumaRemoveDisplayCredentials --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/db/storage_access/all/onedata_user_to_credentials/{onedata_user_id}": {
      "get": {
        "operationId": "luma_get_onedata_user_to_credentials_mapping",
        "summary": "Lookup Onedata user to credentials mapping",
        "description": "Returns mapping of the Onedata user to user on the specific storage stored in LUMA DB.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_onedata_user_to_credentials_mapping, ?BINDING(onedata_user_id)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Result of mapping the Onedata user to storage user.",
            "schema": {
              "$ref": "#/definitions/LumaStorageUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or user mapping does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which user mapping should be returned.\n",
            "required": true
          },
          {
            "name": "onedata_user_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a user for which mapping should be returned.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE lumaGetOnedataUserToCredentialsMapping id=$STORAGE_ID onedata_user_id=$ONEDATA_USER_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "delete": {
        "operationId": "luma_remove_onedata_user_to_credentials_mapping",
        "summary": "Remove Onedata user to credentials mapping",
        "description": "Removes mapping of the Onedata user to user on the specific storage from LUMA DB. Mapping will be acquired again using currently setup LUMA feed.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_onedata_user_to_credentials_mapping, ?BINDING(onedata_user_id)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Onedata user mapping for given storage was successfully removed from LUMA DB."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or user mapping does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which user mapping should be removed.\n",
            "required": true
          },
          {
            "name": "onedata_user_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a user for which mapping should be removed.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID onedata_user_id=$ONEDATA_USER_ID lumaRemoveOnedataUserToCredentialsMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/db/storage_access/posix_compatible/default_credentials/{space_id}": {
      "get": {
        "operationId": "luma_get_default_posix_credentials",
        "summary": "Lookup default posix credentials",
        "description": "Returns default storage credentials for the space supported by POSIX-compatible storage that are stored in LUMA DB. GID will be used as a component of storage credentials for each member of the space. Both UID and GID will be used as to represent owner of the space directory on storage. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_default_posix_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Default storage posix credentials for given space support.",
            "schema": {
              "$ref": "#/definitions/PosixCompatibleCredentials"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default storage credentials should be returned.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default storage credentials should be returned.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE lumaGetDefaultPosixCredentials id=$STORAGE_ID space_id=$SPACE_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "delete": {
        "operationId": "luma_remove_default_posix_credentials",
        "summary": "Remove default posix credentials",
        "description": "Removes default storage credentials for the space supported by POSIX-compatible storage from LUMA DB. Default storage credentials will be acquired again using currently setup LUMA feed. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_default_posix_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Default posix credentials has been succesfully removed from LUMA DB."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default storage credentials should be removed.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default storage credentials should be removed.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID space_id=$SPACE_ID lumaRemoveDefaultPosixCredentials --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/db/storage_import/posix_compatible/uid_to_onedata_user/{uid}": {
      "get": {
        "operationId": "luma_get_uid_to_onedata_user_mapping",
        "summary": "Lookup mapping of UID",
        "description": "Returns mapping of UID on the specific storage to Onedata user stored in LUMA DB. Mapping will be acquired again using currently setup LUMA feed. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_uid_to_onedata_user_mapping, ?BINDING(uid)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Mapping of UID to Onedata user.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for UID does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be returned.\n",
            "required": true
          },
          {
            "name": "uid",
            "in": "path",
            "type": "integer",
            "description": "The UID of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE lumaGetUidToOnedataUserMapping id=$STORAGE_ID uid=$UID --host https://$HOST:9443\n"
          }
        ]
      },
      "delete": {
        "operationId": "luma_remove_uid_to_onedata_user_mapping",
        "summary": "Remove mapping of UID",
        "description": "Removes mapping of UID on the specific storage to Onedata user from LUMA DB. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_uid_to_onedata_user_mapping, ?BINDING(uid)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully deleted from LUMA DB."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for UID does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be removed.\n",
            "required": true
          },
          {
            "name": "uid",
            "in": "path",
            "type": "integer",
            "description": "The UID of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID uid=$UID lumaRemoveUidToOnedataUserMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/db/storage_import/posix_compatible/acl_user_to_onedata_user/{username}": {
      "get": {
        "operationId": "luma_get_acl_user_to_onedata_user_mapping",
        "summary": "Lookup mapping of ACL user",
        "description": "Returns mapping of ACL user on the specific storage to Onedata user stored in LUMA DB. Mapping will be acquired again using currently setup LUMA feed. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_acl_user_to_onedata_user_mapping, ?BINDING(username)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Mapping of ACL user to Onedata user.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL user does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be returned.\n",
            "required": true
          },
          {
            "name": "username",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE lumaGetAclUserToOnedataUserMapping id=$STORAGE_ID username=$ACL_USER --host https://$HOST:9443\n"
          }
        ]
      },
      "delete": {
        "operationId": "luma_remove_acl_user_to_onedata_user_mapping",
        "summary": "Remove mapping of ACL user",
        "description": "Removes mapping of ACL user on the specific storage to Onedata user from LUMA DB. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_acl_user_to_onedata_user_mapping, ?BINDING(username)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully deleted from LUMA DB."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL user does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be removed.\n",
            "required": true
          },
          {
            "name": "username",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID username=$ACL_USER lumaRemoveAclUserToOnedataUserMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/db/storage_import/posix_compatible/acl_group_to_onedata_group/{groupname}": {
      "get": {
        "operationId": "luma_get_acl_group_to_onedata_group_mapping",
        "summary": "Lookup mapping of ACL group",
        "description": "Returns mapping of ACL group on the specific storage to Onedata group stored in LUMA DB. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_acl_group_to_onedata_group_mapping, ?BINDING(groupname)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Mapping of ACL group to Onedata group.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataGroup"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL group does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata group mapping should be returned.\n",
            "required": true
          },
          {
            "name": "groupname",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the group on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE lumaGetAclGroupToOnedataGroupMapping id=$STORAGE_ID groupname=$ACL_GROUP --host https://$HOST:9443\n"
          }
        ]
      },
      "delete": {
        "operationId": "luma_remove_acl_group_to_onedata_group_mapping",
        "summary": "Remove mapping of ACL group",
        "description": "Removes mapping of ACL group on the specific storage to Onedata group from LUMA DB. Mapping will be acquired again using currently setup LUMA feed. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{luma_acl_group_to_onedata_group_mapping, ?BINDING(groupname)}"
        },
        "tags": [
          "LUMA DB"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully deleted from LUMA DB."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL group does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata group mapping should be removed.\n",
            "required": true
          },
          {
            "name": "groupname",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the group on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID groupname=$ACL_GROUP lumaRemoveAclGroupToOnedataGroupMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/local_feed/display_credentials/all/default/{space_id}": {
      "get": {
        "operationId": "local_feed_get_display_credentials",
        "summary": "Lookup default display credentials in local feed",
        "description": "Returns default display credentials for the space support that are defined in local feed. These are POSIX credentials (UID & GID) which are returned in getattr response. They are used to present file owners in the result of e.g. `ls` or `stat` operation in Oneclient or when fetching file attributes via REST API. Returns an error if the storage has a different LUMA feed than `local`.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_display_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Default display credentials for given space support.",
            "schema": {
              "$ref": "#/definitions/PosixCompatibleCredentials"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support or mapping does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default display credentials should be returned.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default display credentials should be returned.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedGetDisplayCredentials id=$STORAGE_ID space_id=$SPACE_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "put": {
        "operationId": "local_feed_set_display_credentials",
        "summary": "Insert default display credentials into local feed",
        "description": "Sets default display credentials for the space support in local feed. Returns an error if the storage has a different LUMA feed than `local`.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_display_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Default display credentials were successfully set in local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support or mapping does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default display credentials should be set.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default display credentials should be set.\n",
            "required": true
          },
          {
            "name": "displayCredentials",
            "in": "body",
            "description": "New default display credentials for the space support.\n",
            "schema": {
              "$ref": "#/definitions/PosixCompatibleCredentials"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat display_credentials.json | onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 localFeedSetDisplayCredentials id=$STORAGE_ID space_id=$SPACE_ID\n"
          }
        ]
      },
      "delete": {
        "operationId": "local_feed_remove_display_credentials",
        "summary": "Remove default display credentials from local feed",
        "description": "Removes default display credentials for the space support from local feed. Returns an error if the storage has a different LUMA feed than `local`.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_display_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Default display credentials has been succesfully removed from local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support or mapping does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default display credentials should be removed.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default display credentials should be removed.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID space_id=$SPACE_ID localFeedRemoveDisplayCredentials --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/local_feed/storage_access/all/onedata_user_to_credentials": {
      "post": {
        "operationId": "local_feed_add_onedata_user_to_credentials_mapping",
        "summary": "Insert Onedata user to credentials mapping into local feed",
        "description": "Adds mapping of Onedata user to user on the specific storage to local feed. Returns an error if the storage has a different LUMA feed than `local`.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "local_feed_luma_onedata_user_to_credentials_mapping"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Onedata user mapping for given storage has been successfully added."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or user does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which user mapping should be added.\n",
            "required": true
          },
          {
            "name": "userMapping",
            "in": "body",
            "description": "New user mapping\n",
            "schema": {
              "$ref": "#/definitions/LumaUserMapping"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat user_mapping.json | onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedAddOnedataUserToCredentialsMapping id=$STORAGE_ID --host https://$HOST:9443\n"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/local_feed/storage_access/all/onedata_user_to_credentials/{onedata_user_id}": {
      "get": {
        "operationId": "local_feed_get_onedata_user_to_credentials_mapping",
        "summary": "Lookup Onedata user to credentials mapping in local feed",
        "description": "Returns mapping of the Onedata user to user on the specific storage defined in local feed. Returns an error if the storage has a different LUMA feed than `local`.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_onedata_user_to_credentials_mapping, ?BINDING(onedata_user_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Onedata user to storage user mapping defined in local feed",
            "schema": {
              "$ref": "#/definitions/LumaStorageUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or user mapping does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which user mapping should be returned.\n",
            "required": true
          },
          {
            "name": "onedata_user_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a user for which mapping should be returned.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedGetOnedataUserToCredentialsMapping id=$STORAGE_ID onedata_user_id=$ONEDATA_USER_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "patch": {
        "operationId": "local_feed_modify_onedata_user_to_credentials_mapping",
        "summary": "Update Onedata user to credentials mapping in local feed",
        "description": "Modifies mapping of the Onedata user to user on the specific storage in local feed. Returns an error if the storage has a different LUMA feed than `local`.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_onedata_user_to_credentials_mapping, ?BINDING(onedata_user_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Onedata user mapping for given storage has been successfully updated."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or user mapping does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which user mapping should be updated.\n",
            "required": true
          },
          {
            "name": "onedata_user_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a user for which mapping should be updated.\n",
            "required": true
          },
          {
            "name": "storageUser",
            "in": "body",
            "description": "New user mapping\n",
            "schema": {
              "$ref": "#/definitions/LumaStorageUser"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat storage_user.json | onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedModifyOnedataUserToCredentialsMapping id=$STORAGE_ID onedata_user_id=$ONEDATA_USER_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "delete": {
        "operationId": "local_feed_remove_onedata_user_to_credentials_mapping",
        "summary": "Remove Onedata user to credentials mapping from local feed",
        "description": "Removes mapping of the Onedata user to user on the specific storage local feed. Returns an error if the storage has a different LUMA feed than `local`.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_onedata_user_to_credentials_mapping, ?BINDING(onedata_user_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Onedata user mapping for given storage was successfully removed from local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or user mapping does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage for which user mapping should be removed.\n",
            "required": true
          },
          {
            "name": "onedata_user_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a user for which mapping should be removed.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID onedata_user_id=$ONEDATA_USER_ID localFeedRemoveOnedataUserToCredentialsMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/local_feed/storage_access/posix_compatible/default_credentials/{space_id}": {
      "get": {
        "operationId": "local_feed_get_default_posix_credentials",
        "summary": "Lookup default posix credentials in local feed",
        "description": "Returns default storage credentials for the space supported by POSIX-compatible storage that are defined in local feed. GID will be used as a component of storage credentials for each member of the space. Both UID and GID will be used as to represent owner of the space directory on storage. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_default_posix_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Default storage posix credentials for given space support.",
            "schema": {
              "$ref": "#/definitions/PosixCompatibleCredentials"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default storage credentials should be returned.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default storage credentials should be returned.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedGetDefaultPosixCredentials id=$STORAGE_ID space_id=$SPACE_ID --host https://$HOST:9443\n"
          }
        ]
      },
      "put": {
        "operationId": "local_feed_set_default_posix_credentials",
        "summary": "Insert default posix credentials into local feed",
        "description": "Sets default storage credentials for the space supported by POSIX-compatible storage in local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_default_posix_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Default storage credentials were successfully set in local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default storage credentials should be set.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default storage credentials should be set.\n",
            "required": true
          },
          {
            "name": "posixCredentials",
            "in": "body",
            "description": "New default storage credentials for the space support.\n",
            "schema": {
              "$ref": "#/definitions/PosixCompatibleCredentials"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat default_credentials.json | onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 localFeedSetDefaultPosixCredentials id=$STORAGE_ID space_id=$SPACE_ID\n"
          }
        ]
      },
      "delete": {
        "operationId": "local_feed_remove_default_posix_credentials",
        "summary": "Remove default posix credentials from local feed",
        "description": "Removes default storage credentials for the space supported by POSIX-compatible storage from local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_default_posix_credentials, ?BINDING(space_id)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Default posix credentials has been succesfully removed from local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Support does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which default storage credentials should be removed.\n",
            "required": true
          },
          {
            "name": "space_id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space constituting space support for which default storage credentials should be removed.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID space_id=$SPACE_ID localFeedRemoveDefaultPosixCredentials --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/local_feed/storage_import/posix_compatible/uid_to_onedata_user/{uid}": {
      "get": {
        "operationId": "local_feed_get_uid_to_onedata_user_mapping",
        "summary": "Lookup mapping of UID in local feed",
        "description": "Returns mapping of UID on the specific storage to Onedata user defined in local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_uid_to_onedata_user_mapping, ?BINDING(uid)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Mapping of UID to Onedata user.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for UID does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be returned.\n",
            "required": true
          },
          {
            "name": "uid",
            "in": "path",
            "type": "integer",
            "description": "The UID of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedGetUidToOnedataUserMapping id=$STORAGE_ID uid=$UID --host https://$HOST:9443\n"
          }
        ]
      },
      "put": {
        "operationId": "local_feed_set_uid_to_onedata_user_mapping",
        "summary": "Insert mapping of UID into local feed",
        "description": "Sets mapping of UID on the specific storage to Onedata user in local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_uid_to_onedata_user_mapping, ?BINDING(uid)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully set in local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for UID does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be set.\n",
            "required": true
          },
          {
            "name": "uid",
            "in": "path",
            "type": "integer",
            "description": "The UID of the user on the storage.\n",
            "required": true
          },
          {
            "name": "lumaOnedataUser",
            "in": "body",
            "description": "Credentials identifying user in the Onedata system.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataUser"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat user_credentials.json | onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 localFeedSetUidToOnedataUserMapping id=$STORAGE_ID uid=$UID\n"
          }
        ]
      },
      "delete": {
        "operationId": "local_feed_remove_uid_to_onedata_user_mapping",
        "summary": "Remove mapping of UID from local feed",
        "description": "Removes mapping of UID on the specific storage to Onedata user from local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_uid_to_onedata_user_mapping, ?BINDING(uid)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully deleted from local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for UID does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be removed.\n",
            "required": true
          },
          {
            "name": "uid",
            "in": "path",
            "type": "integer",
            "description": "The UID of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID uid=$UID localFeedRemoveUidToOnedataUserMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/local_feed/storage_import/posix_compatible/acl_user_to_onedata_user/{username}": {
      "get": {
        "operationId": "local_feed_get_acl_user_to_onedata_user_mapping",
        "summary": "Lookup mapping of ACL user in local feed",
        "description": "Returns mapping of ACL user on the specific storage to Onedata user defined in local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_acl_user_to_onedata_user_mapping, ?BINDING(username)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Mapping of ACL user to Onedata user.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataUser"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL user does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be returned.\n",
            "required": true
          },
          {
            "name": "username",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedGetAclUserToOnedataUserMapping id=$STORAGE_ID username=$ACL_USER --host https://$HOST:9443\n"
          }
        ]
      },
      "put": {
        "operationId": "local_feed_set_acl_user_to_onedata_user_mapping",
        "summary": "Insert mapping of ACL user into local feed",
        "description": "Sets mapping of ACL user on the specific storage to Onedata user in local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_acl_user_to_onedata_user_mapping, ?BINDING(username)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully set in local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL user does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for for which onedata user mapping should be set.\n",
            "required": true
          },
          {
            "name": "username",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the user on the storage.\n",
            "required": true
          },
          {
            "name": "lumaOnedataUser",
            "in": "body",
            "description": "Credentials identifying user in the Onedata system.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataUser"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat user_credentials.json | onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 localFeedSetAclUserToOnedataUserMapping id=$STORAGE_ID username=$ACL_USER\n"
          }
        ]
      },
      "delete": {
        "operationId": "local_feed_remove_acl_user_to_onedata_user_mapping",
        "summary": "Remove mapping of ACL user from local feed",
        "description": "Removes mapping of ACL user on the specific storage to Onedata user from local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_acl_user_to_onedata_user_mapping, ?BINDING(username)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully deleted from local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL user does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata user mapping should be removed.\n",
            "required": true
          },
          {
            "name": "username",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the user on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID username=$ACL_USER localFeedRemoveAclUserToOnedataUserMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/storages/{id}/luma/local_feed/storage_import/posix_compatible/acl_group_to_onedata_group/{groupname}": {
      "get": {
        "operationId": "local_feed_get_acl_group_to_onedata_group_mapping",
        "summary": "Lookup mapping of ACL group in local feed",
        "description": "Returns mapping of ACL group on the specific storage to Onedata group defined in local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_acl_group_to_onedata_group_mapping, ?BINDING(groupname)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Mapping of ACL group to Onedata group.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataGroup"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL group does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata group mapping should be returned.\n",
            "required": true
          },
          {
            "name": "groupname",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the group on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE localFeedGetAclGroupToOnedataGroupMapping id=$STORAGE_ID groupname=$ACL_GROUP --host https://$HOST:9443\n"
          }
        ]
      },
      "put": {
        "operationId": "local_feed_set_acl_group_to_onedata_group_mapping",
        "summary": "Insert mapping of ACL group into local feed",
        "description": "Sets mapping of ACL group on the specific storage to Onedata group in local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_acl_group_to_onedata_group_mapping, ?BINDING(groupname)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully set in local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL group does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata group mapping should be set.\n",
            "required": true
          },
          {
            "name": "groupname",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the group on the storage.\n",
            "required": true
          },
          {
            "name": "lumaOnedataGroup",
            "in": "body",
            "description": "Credentials identifying group in the Onedata system.",
            "schema": {
              "$ref": "#/definitions/LumaOnedataGroup"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat group_credentials.json | onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 localFeedSetAclGroupToOnedataGroupMapping id=$STORAGE_ID groupname=$ACL_GROUP\n"
          }
        ]
      },
      "delete": {
        "operationId": "local_feed_remove_acl_group_to_onedata_group_mapping",
        "summary": "Remove mapping of ACL group from local feed",
        "description": "Removes mapping of ACL group on the specific storage to Onedata group from local feed. Returns an error if the storage has a different LUMA feed than `local`. This endpoint is relevant **only for POSIX compatible storages**.\n",
        "x-onedata-gri": {
          "type": "onp_storage",
          "id": "?BINDING(id)",
          "aspect": "{local_feed_luma_acl_group_to_onedata_group_mapping, ?BINDING(groupname)}"
        },
        "tags": [
          "LUMA DB Local Feed"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The mapping was successfully deleted from local feed."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Storage or mapping for ACL group does not exist or LUMA feed is not `local`."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a storage constituting space support for which onedata group mapping should be removed.\n",
            "required": true
          },
          {
            "name": "groupname",
            "in": "path",
            "type": "integer",
            "description": "The ACL name of the group on the storage.\n",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE id=$STORAGE_ID groupname=$ACL_GROUP localFeedRemoveAclGroupToOnedataGroupMapping --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/spaces/{id}/file-popularity/configuration": {
      "get": {
        "operationId": "get_file_popularity_configuration",
        "summary": "Get file popularity configuration",
        "description": "Returns configuration of file popularity mechanism in the space specified by space Id in the path.\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "file_popularity_configuration"
        },
        "tags": [
          "File Popularity"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The file-popularity configuration.",
            "schema": {
              "$ref": "#/definitions/SpaceFilePopularityConfiguration"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Space does not exist or is not supported by the provider."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space of which file-popularity configuration should be returned.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getFilePopularityConfiguration id=$SPACE_ID --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "configure_file_popularity",
        "summary": "Configure file popularity mechanism in the space",
        "description": "Configures the file popularity mechanism in the space.\nThe mechanism is responsible for collecting file popularity usage statistics per space support.\nCreates a view which can be queried to fetch the least popular files.\nThe view is sorted in an increasing order by the popularity function value.\nThe popularity function is defined as\n\n```\nP(lastOpenHour, avgOpenCountPerDay) = w1 * lastOpenHour + w2 * min(avgOpenCountPerDay, MAX_AVG_OPEN_COUNT_PER_DAY)\nwhere:\n* lastOpenHour - parameter which is equal to timestamp (in hours since 01.01.1970) of last open operation on given file\n* w1 - weight of lastOpenHour parameter\n* avgOpenCountPerDay - parameter equal to moving average of number of open operations on given file per day. Value is calculated over last 30 days.\n* w2 - weight of avgOpenCountPerDay parameter\n* MAX_AVG_OPEN_COUNT_PER_DAY - upper boundary for avgOpenCountPerDay parameter\n```\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "file_popularity_configuration"
        },
        "tags": [
          "File Popularity"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          },
          {
            "name": "spaceFilePopularityConfiguration",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/SpaceFilePopularityConfiguration"
            },
            "description": "Configuration of the file-popularity mechanism in the space.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE configureFilePopularity --host https://$HOST:9443 enabled:=true"
          }
        ]
      }
    },
    "/provider/spaces/{id}/auto-cleaning/configuration": {
      "get": {
        "operationId": "get_space_auto_cleaning_configuration",
        "summary": "Get space auto-cleaning configuration",
        "description": "Returns configuration of auto-cleaning mechanism in the space specified by space Id in the path.\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "auto_cleaning_configuration"
        },
        "tags": [
          "Auto Cleaning"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The space auto-cleaning configuration.",
            "schema": {
              "$ref": "#/definitions/SpaceAutoCleaningConfiguration"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Space does not exist or is not supported by the provider."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space of which auto-cleaning configuration should be returned.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getSpaceAutoCleaningConfiguration id=$SPACE_ID --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "configure_space_auto_cleaning",
        "summary": "Configure space auto-cleaning mechanism",
        "description": "Configures space auto-cleaning mechanism in the space.\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "auto_cleaning_configuration"
        },
        "tags": [
          "Auto Cleaning"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Auto-cleaning configuration has been updated."
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          },
          {
            "name": "spaceAutoCleaningConfiguration",
            "in": "body",
            "description": "New configuration of space auto-cleaning mechanism.\n",
            "schema": {
              "$ref": "#/definitions/SpaceAutoCleaningConfiguration"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat new_auto_cleaning_config.json | onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 configureSpaceAutoCleaning id=$SPACE_ID -\n"
          }
        ]
      }
    },
    "/provider/spaces/{id}/auto-cleaning/reports": {
      "get": {
        "operationId": "get_provider_space_auto_cleaning_reports",
        "summary": "Get Ids of of the space auto-cleaning reports",
        "description": "Returns the list of Ids of space auto-cleaning reports. The list is sorted descending by start time of an auto-cleaning run (the newest report is first).\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "auto_cleaning_reports_list"
        },
        "tags": [
          "Auto Cleaning"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The list of Ids of space auto-cleaning reports.",
            "schema": {
              "$ref": "#/definitions/SpaceAutoCleaningReports"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          },
          {
            "name": "offset",
            "in": "query",
            "type": "integer",
            "description": "Allows to skip N first report Ids.",
            "required": false,
            "default": 0
          },
          {
            "name": "limit",
            "in": "query",
            "type": "integer",
            "description": "Allows to limit the number of returned report Ids up to N last reports. By default, all report Ids will be returned.\n",
            "required": false
          },
          {
            "name": "index",
            "in": "query",
            "type": "string",
            "description": "Allows to list the report Ids starting from the specific report.\n",
            "required": false
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 getProviderSpaceAutoCleaningReports id=$SPACE_ID offset=5 limit=10 index=1234148561abcdef\n"
          }
        ]
      }
    },
    "/provider/spaces/{id}/auto-cleaning/reports/{report_id}": {
      "get": {
        "operationId": "get_provider_space_auto_cleaning_report",
        "summary": "Get the report from a space auto-cleaning run",
        "description": "Returns the details of a specific auto-cleaning run.\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "{auto_cleaning_report, ?BINDING(report_id)}"
        },
        "tags": [
          "Auto Cleaning"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The report from a space auto-cleaning run.",
            "schema": {
              "$ref": "#/definitions/SpaceAutoCleaningReport"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          },
          {
            "name": "report_id",
            "in": "path",
            "type": "string",
            "description": "The Id of an auto-cleaning report.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 getProviderSpaceAutoCleaningReports id=$SPACE_ID report_id=$REPORT_ID\n"
          }
        ]
      }
    },
    "/provider/spaces/{id}/auto-cleaning/start": {
      "post": {
        "operationId": "trigger_auto_cleaning",
        "summary": "Trigger space auto-cleaning",
        "description": "Trigger one run of auto-cleaning mechanism for given space.",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "start_auto_cleaning"
        },
        "tags": [
          "Auto Cleaning"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "description": "Cleaning of given space has started.",
            "schema": {
              "type": "object",
              "properties": {
                "reportId": {
                  "type": "string"
                }
              }
            },
            "headers": {
              "Location": {
                "type": "string",
                "description": "Path of the cleaning report for the started run."
              }
            }
          },
          "204": {
            "description": "No action taken. Auto-cleaning is already running or there are no files to be cleaned."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE triggerAutoCleaning --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/spaces/{id}/auto-cleaning/cancel": {
      "post": {
        "operationId": "cancel_auto_cleaning",
        "summary": "Cancel space auto-cleaning",
        "description": "Cancel current run of auto-cleaning mechanism for given space.",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "cancel_auto_cleaning"
        },
        "tags": [
          "Auto Cleaning"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Cleaning of given space has been cancelled."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE cancelAutoCleaning --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/spaces/{id}/auto-cleaning/status": {
      "get": {
        "operationId": "get_provider_space_auto_cleaning_status",
        "summary": "Get status of space auto-cleaning mechanism",
        "description": "Returns status of current process of auto-cleaning for the space.\n",
        "x-onedata-gri": {
          "type": "onp_space",
          "id": "?BINDING(id)",
          "aspect": "auto_cleaning_status"
        },
        "tags": [
          "Auto Cleaning"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Information about current auto-cleaning process for the space.",
            "schema": {
              "$ref": "#/definitions/SpaceAutoCleaningStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "string",
            "description": "The Id of a space.",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE --host https://$HOST:9443 getProviderSpaceAutoCleaningStatus id=$SPACE_ID\n"
          }
        ]
      }
    },
    "/provider/ceph": {
      "get": {
        "operationId": "get_ceph_params",
        "summary": "Get global Ceph params",
        "description": "Returns settings global for the Ceph cluster.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "global_params"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The Ceph cluster configuration details.",
            "schema": {
              "$ref": "#/definitions/CephGlobalParams"
            }
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph cluster not deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephParams --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "configure_ceph",
        "summary": "Configure Ceph cluster",
        "description": "Configures Ceph services. Any services and pools specified in the request are deployed. This request IS NOT idempotent.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "cluster"
        },
        "tags": [
          "Ceph"
        ],
        "consumes": [
          "application/json",
          "application/x-yaml"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "cephCluster",
            "in": "body",
            "description": "The Ceph cluster specification.",
            "schema": {
              "$ref": "#/definitions/CephCluster"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "cat ceph_config.json | onepanel-rest-cli -u onepanel:$PASSPHRASE configureCeph --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/osds": {
      "get": {
        "operationId": "get_ceph_osds",
        "summary": "Get Ceph OSDs list",
        "description": "Return list of Ceph OSD configurations.\n",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "osds"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "List of OSDs.",
            "schema": {
              "$ref": "#/definitions/CephOsds"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph is not deployed in the cluster."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephOsds --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_ceph_osds",
        "summary": "Add OSDs to Ceph cluster",
        "description": "Deploys Ceph OSD services in the cluster.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "osds"
        },
        "tags": [
          "Ceph"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "CephOsds",
            "in": "body",
            "description": "List of OSD specifications.",
            "schema": {
              "$ref": "#/definitions/CephOsds"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "echo '{\"osds\": [{\"host\": \"n1.op.example.com\", \"type\": \"loopdevice\"}]}' | onepanel-rest-cli -u onepanel:$PASSPHRASE addCephOsds --host https://$HOST:9443\n"
          }
        ]
      }
    },
    "/provider/ceph/osds/{id}": {
      "get": {
        "operationId": "get_ceph_osd",
        "summary": "Get Ceph OSD",
        "description": "Returns details of a Ceph OSD instance.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "{osd, ?BINDING(id)}"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Ceph OSD specification.",
            "schema": {
              "$ref": "#/definitions/CephOsd"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph cluster not deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Id of the Ceph OSD to describe.",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephOsd --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/osds/{id}/usage": {
      "get": {
        "operationId": "get_ceph_osd_usage",
        "summary": "Get storage space usage details for specific OSD",
        "description": "Returns storage space usage statistics of given Ceph OSD.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "{osd_usage, ?BINDING(id)}"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The storage space usage information.",
            "schema": {
              "$ref": "#/definitions/DataUsage"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "OSD does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "The id of the OSD for usage check.",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephOsdUsage id=3 --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/managers": {
      "get": {
        "operationId": "get_ceph_managers",
        "summary": "List Ceph managers",
        "description": "Returns object with a list of Ceph manager instances.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "managers"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Object containing a list of Ceph manager daemons.",
            "schema": {
              "$ref": "#/definitions/CephManagers"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph cluster not deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephMonitors --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_ceph_managers",
        "summary": "Add managers to ceph cluster",
        "description": "Deploys Ceph manager services on given hosts.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "managers"
        },
        "tags": [
          "Ceph"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "CephManagers",
            "in": "body",
            "description": "Object with a list of Ceph manager configurations.",
            "schema": {
              "$ref": "#/definitions/CephManagers"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "echo '{\"managers\": [{\"host\": \"n1.op.example.com\"}]}' | onepanel-rest-cli -u onepanel:$PASSPHRASE addCephManagers --host https://$HOST:9443\n"
          }
        ]
      }
    },
    "/provider/ceph/managers/{id}": {
      "get": {
        "operationId": "get_ceph_manager",
        "summary": "Get Ceph manager",
        "description": "Returns Ceph manager configuration.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "{manager, ?BINDING(id)}"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Ceph manager specification.",
            "schema": {
              "$ref": "#/definitions/CephManager"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph manager with given id does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Id of the Ceph manager to be described.",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephManager --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/monitors": {
      "get": {
        "operationId": "get_ceph_monitors",
        "summary": "List Ceph monitors",
        "description": "Returns object with a list of Ceph monitor instances.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "monitors"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The Ceph monitors list.",
            "schema": {
              "$ref": "#/definitions/CephMonitors"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph cluster not deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephMonitors --host https://$HOST:9443"
          }
        ]
      },
      "post": {
        "operationId": "add_ceph_monitors",
        "summary": "Add monitors to Ceph cluster",
        "description": "Deploys Ceph monitor services on given hosts.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "monitors"
        },
        "tags": [
          "Ceph"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "202": {
            "$ref": "#/responses/TaskStarted"
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "CephMonitors",
            "in": "body",
            "description": "List of Ceph monitor specifications.",
            "schema": {
              "$ref": "#/definitions/CephMonitors"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "echo '{\"monitors\": [{\"host\": \"n1.op.example.com\"}]}' | onepanel-rest-cli -u onepanel:$PASSPHRASE addCephMonitors --host https://$HOST:9443\n"
          }
        ]
      }
    },
    "/provider/ceph/monitors/{id}": {
      "get": {
        "operationId": "get_ceph_monitor",
        "summary": "Get Ceph monitor",
        "description": "Returns details of a Ceph monitor instance.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "{monitor, ?BINDING(id)}"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Ceph monitor specification.",
            "schema": {
              "$ref": "#/definitions/CephMonitor"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph monitor with given id does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Id of the Ceph monitor to describe.",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephMonitor --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/status": {
      "get": {
        "operationId": "get_ceph_status",
        "summary": "Get Ceph cluster health",
        "description": "Returns Ceph cluster health.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "status"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Ceph status report.",
            "schema": {
              "$ref": "#/definitions/CephStatus"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph cluster is not deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephStatus --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/usage": {
      "get": {
        "operationId": "get_ceph_usage",
        "summary": "Get Ceph storage space usage.",
        "description": "Returns summary of storage space usage in the Ceph cluster.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "usage"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The usage statistics.",
            "schema": {
              "$ref": "#/definitions/CephUsage"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph cluster is not deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephUsage --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/pools": {
      "get": {
        "operationId": "get_ceph_pools",
        "summary": "List Ceph pools",
        "description": "Returns object containing list of Ceph pool details.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "pools"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The pools details.",
            "schema": {
              "$ref": "#/definitions/CephPools"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Ceph cluster not deployed."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephPools --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/pools/{name}": {
      "get": {
        "operationId": "get_ceph_pool",
        "summary": "Get details of a Ceph pool",
        "description": "Returns object describng single Ceph pool specified by name.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "{pool, ?BINDING(name)}"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The pool details.",
            "schema": {
              "$ref": "#/definitions/CephPool"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Pool with given name does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "name",
            "description": "The name of the pool to describe.",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephPool name=$POOL_NAME --host https://$HOST:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_ceph_pool",
        "summary": "Modify pool params",
        "description": "Modifies the pool redundancy settings.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "{pool, ?BINDING(name)}"
        },
        "tags": [
          "Ceph"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "The settings have been changed."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "The pool does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "503": {
            "description": "Services needed to fulfill this request are not running."
          }
        },
        "parameters": [
          {
            "name": "name",
            "description": "The name of the pool to describe.",
            "in": "path",
            "type": "string",
            "required": true
          },
          {
            "name": "poolModifyRequest",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/CephPool"
            },
            "required": true
          }
        ]
      }
    },
    "/provider/ceph/pools/{name}/usage": {
      "get": {
        "operationId": "get_ceph_pool_usage",
        "summary": "Get storage space usage details for specific pool",
        "description": "Returns storage space usage statistics of given Ceph pool.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "{pool_usage, ?BINDING(name)}"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The data usage information.",
            "schema": {
              "$ref": "#/definitions/CephPoolUsage"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "The Ceph pool does not exist."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "name",
            "description": "The name of the pool for usage check.",
            "in": "path",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getCephPoolUsage name=$POOL_NAME --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/ceph/preflight/block_devices": {
      "get": {
        "operationId": "get_block_devices",
        "summary": "Get block devices for Ceph OSD",
        "description": "Lists block devices available at given host. This list can be used to choose device to be formatted for use by Ceph Blockdevice OSD.",
        "x-onedata-gri": {
          "type": "onp_ceph",
          "aspect": "block_devices"
        },
        "tags": [
          "Ceph"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The block devices description.",
            "schema": {
              "$ref": "#/definitions/BlockDevices"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Host is not in the cluster."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "host",
            "in": "query",
            "description": "Host for which block devices should be returned.",
            "type": "string",
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getBlockDevices --host https://$HOST:9443"
          }
        ]
      }
    },
    "/provider/debug/transfers_mock": {
      "get": {
        "operationId": "get_transfers_mock",
        "summary": "Get transfers mock status",
        "description": "Returns information whether transfers mocking is enabled.\n",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "transfers_mock"
        },
        "tags": [
          "Debug"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Transfers mock configuration.",
            "schema": {
              "$ref": "#/definitions/TransfersMock"
            }
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Oneprovider cluster is not registered."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE getTransfersMock --host https://oz.example.com:9443"
          }
        ]
      },
      "patch": {
        "operationId": "modify_transfers_mock",
        "summary": "Modify transfers mock",
        "description": "Toggle transfers mock. When enabled, all transfers finish successfully without actually transferring data. WARNING: this is a debugging feature disrupting normal Oneprovider operation.\n",
        "x-onedata-gri": {
          "type": "onp_provider",
          "aspect": "transfers_mock"
        },
        "tags": [
          "Debug"
        ],
        "consumes": [
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Mock has been successfully set."
          },
          "400": {
            "description": "Invalid request.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "401": {
            "description": "Unauthorized request."
          },
          "403": {
            "description": "Forbidden request."
          },
          "404": {
            "description": "Oneprovider is not registered."
          },
          "500": {
            "description": "Internal server error.",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "parameters": [
          {
            "name": "TransfersMock",
            "in": "body",
            "description": "New value for the mock setting.",
            "schema": {
              "$ref": "#/definitions/TransfersMock"
            },
            "required": true
          }
        ],
        "x-code-samples": [
          {
            "lang": "Shell",
            "source": "onepanel-rest-cli -u onepanel:$PASSPHRASE modifyTransfersMock transfersMock==true --host https://oz.example.org:9443"
          }
        ]
      }
    }
  },
  "definitions": {
    "Configuration": {
      "type": "object",
      "description": "Public service configuration details.",
      "discriminator": "serviceType",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "op_configuration",
        "oz_configuration"
      ],
      "properties": {
        "clusterId": {
          "type": "string",
          "description": "The Id of cluster record for this cluster. `null` if the cluster is not registered."
        },
        "version": {
          "type": "string",
          "description": "Version of this Onepanel."
        },
        "build": {
          "type": "string",
          "description": "Build number of this Onepanel."
        },
        "deployed": {
          "type": "boolean",
          "default": true,
          "description": "True when cluster deployment is finished."
        }
      },
      "required": [
        "clusterId",
        "version",
        "build",
        "deployed"
      ]
    },
    "op_configuration": {
      "type": "object",
      "description": "Public Oneprovider configuration details.",
      "allOf": [
        {
          "$ref": "#/definitions/Configuration"
        },
        {
          "type": "object",
          "properties": {
            "serviceType": {
              "description": "Indicates that this is Oneprovider's panel.",
              "type": "string",
              "enum": [
                "oneprovider"
              ],
              "x-discriminator-value": "oneprovider"
            },
            "providerId": {
              "type": "string",
              "description": "This cluster's Oneprovider Id. `null` if the Oneprovider is not registered or Oneprovider worker is down.\n"
            },
            "zoneDomain": {
              "type": "string",
              "description": "The domain of the Onezone where this Oneprovider is registered. `null` if the Oneprovider is not registered.\n"
            },
            "isRegistered": {
              "type": "boolean",
              "description": "True if the Oneprovider has been registered at a Onezone.\n"
            }
          },
          "required": [
            "serviceType",
            "providerId",
            "zoneDomain"
          ]
        }
      ],
      "example": {
        "serviceType": "oneprovider",
        "providerId": "b4ceb5c9ac793e6b8b36c813b9068757",
        "zoneDomain": "onedata.org",
        "build": "155-gdf98e0f",
        "version": "20.02.13",
        "deployed": true,
        "isRegistered": true
      }
    },
    "oz_configuration": {
      "type": "object",
      "description": "Public Onezone configuration details.",
      "allOf": [
        {
          "$ref": "#/definitions/Configuration"
        },
        {
          "type": "object",
          "properties": {
            "serviceType": {
              "description": "Indicates that this is Onezone's panel.",
              "type": "string",
              "enum": [
                "onezone"
              ],
              "x-discriminator-value": "onezone"
            },
            "zoneDomain": {
              "type": "string",
              "description": "The domain of this Onezone cluster. `null` before cluster is configured.\n"
            },
            "zoneName": {
              "type": "string",
              "description": "The name of this Onezone cluster. `null` before cluster is configured.\n"
            }
          },
          "required": [
            "serviceType",
            "zoneDomain"
          ]
        }
      ],
      "example": {
        "serviceType": "onezone",
        "zoneDomain": "onedata.org",
        "zoneName": "OnedataZone",
        "build": "155-gdf98e0f",
        "version": "20.02.13",
        "deployed": true
      }
    },
    "VersionInfo": {
      "type": "object",
      "description": "Service version info.",
      "properties": {
        "release": {
          "type": "string",
          "description": "Release version."
        },
        "build": {
          "type": "string",
          "description": "Build number."
        },
        "gui": {
          "type": "string",
          "description": "GUI version indicated by a SHA256 hash."
        }
      },
      "required": [
        "release",
        "build",
        "gui"
      ],
      "example": {
        "release": "20.02.13",
        "build": "1-gfabf02d",
        "gui": "68e7e1472adb719ddf2d88908775091dfb10e5d0b916f06125ea1af4056044e3"
      }
    },
    "BlockDevices": {
      "type": "object",
      "description": "List of block device descriptions.",
      "properties": {
        "blockDevices": {
          "type": "array",
          "description": "List of available block devices.",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "description": "Device type, as returned by lsblk.",
                "enum": [
                  "disk",
                  "part"
                ]
              },
              "host": {
                "type": "string",
                "description": "Host on which the device is available."
              },
              "path": {
                "type": "string"
              },
              "size": {
                "type": "integer",
                "description": "Device size in bytes."
              },
              "mounted": {
                "type": "boolean",
                "description": "Result of heuristic attempt to detect whether a device or any of its children is mounted."
              }
            },
            "required": [
              "host",
              "path",
              "size",
              "mounted"
            ]
          }
        }
      },
      "required": [
        "block_devices"
      ],
      "example": {
        "block_devices": [
          {
            "path": "/dev/sda",
            "size": 10000000000,
            "mounted": false
          },
          {
            "path": "/dev/sdb",
            "size": 20000000000,
            "mounted": true
          },
          {
            "path": "/dev/sr0",
            "size": 1073741312,
            "mounted": false
          }
        ]
      }
    },
    "DataUsage": {
      "type": "object",
      "description": "Describes storage space usage level.",
      "properties": {
        "total": {
          "type": "integer",
          "description": "Total space (used and available) in bytes."
        },
        "used": {
          "type": "integer",
          "description": "Total used space in bytes."
        },
        "available": {
          "type": "integer",
          "description": "Total available space in bytes."
        }
      },
      "required": [
        "total",
        "used",
        "available"
      ]
    },
    "DnsCheck": {
      "type": "object",
      "description": "Gathers results of DNS checks for various aspects of the cluster domain.\nBoth Oneprovider and Onezone return field 'domain' for checking if cluster's domain can be resolved.\nIn Onezone there is additional field 'dnsZone' for checking whether DNS zone management for the Onezone's domain has been delegated to Onezone server (SOA and NS records) allowing for subdomain delegation.\nIf the cluster is configured with an IP neither 'domain' nor 'dnsZone' is returned.\n",
      "properties": {
        "domain": {
          "$ref": "#/definitions/DnsCheckResult"
        },
        "dnsZone": {
          "$ref": "#/definitions/DnsCheckResult"
        },
        "timestamp": {
          "type": "string",
          "description": "Time at which the DNS check was perfmormed. Formatted according to ISO 8601."
        }
      },
      "required": [
        "timestamp"
      ],
      "example": {
        "timestamp": "2018-10-20T21:39:37",
        "domain": {
          "summary": "ok",
          "expected": [
            "10.11.12.13"
          ],
          "got": [
            "10.11.12.13"
          ]
        },
        "dnsZone": {
          "summary": "bad_records",
          "expected": [
            "10.11.12.13"
          ],
          "got": [
            "100.100.102.102"
          ]
        }
      }
    },
    "DnsCheckResult": {
      "type": "object",
      "description": "Describes results obtained from a DNS check. DNS check involves querying DNS servers to ensure publicly visible records match expected values.",
      "properties": {
        "summary": {
          "description": "An interpretation of results obtained from DNS check.\nPossible values are:\n'unresolvable' - query returned empty results;\n'missing_records' - only some of the expected results were returned;\n'bad_records' - none of the expected results were returned;\n'ok' - all of expected values were present in obtained results.\n",
          "type": "string",
          "enum": [
            "unresolvable",
            "missing_records",
            "bad_records",
            "ok"
          ]
        },
        "expected": {
          "description": "List of expected query results.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "got": {
          "description": "List of obtained query results.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "recommended": {
          "description": "List of suggested DNS records to set at your DNS provider to fulfill this check.\nEach record is provided in the format of BIND server.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "summary",
        "expected",
        "got",
        "recommended"
      ],
      "example": {
        "missing_records": {
          "description": "Returned when only some of the expected values coule be obtaind.",
          "value": {
            "summary": "missing_records",
            "expected": [
              "149.156.11.33",
              "149.156.11.34"
            ],
            "got": [
              "149.156.11.33"
            ],
            "recommended": [
              "onedata.org. IN A 149.156.11.33",
              "onedata.org. IN A 149.156.11.35"
            ]
          }
        },
        "bad_records": {
          "description": "Returned when none of the expected values coule be obtaind.",
          "value": {
            "summary": "bad_records",
            "expected": [
              "149.156.11.33"
            ],
            "got": [
              "10.11.12.13"
            ],
            "recommended": [
              "onedata.org. IN A 149.156.1l.33"
            ]
          }
        }
      }
    },
    "DnsCheckConfiguration": {
      "type": "object",
      "description": "Configuration of the 'dns_check' method calls.",
      "properties": {
        "dnsServers": {
          "type": "array",
          "x-onedata-datatype": "[ip4]",
          "items": {
            "type": "string"
          },
          "description": "A collection of IP addresses for DNS servers used in checking DNS. If empty, local system configuration will be used."
        },
        "builtInDnsServer": {
          "type": "boolean",
          "description": "If true, DNS check will verify that control of DNS zone for Onezone's domain was delegated to the DNS server built into Onezone service.\nThis option is available only in Onezone service.\n"
        },
        "dnsCheckAcknowledged": {
          "type": "boolean",
          "description": "Flag indicating that user completed the DNS check step during interactive deployment.\n"
        }
      },
      "example": {
        "builtInDnsServer": false,
        "dnsServers": [
          "8.8.8.8",
          "8.8.4.4",
          "1.1.1.1"
        ],
        "dnsCheckAcknowledged": true
      }
    },
    "Error": {
      "type": "object",
      "description": "The generic error model for REST requests.",
      "properties": {
        "error": {
          "type": "object",
          "description": "Object describing an error.",
          "properties": {
            "id": {
              "type": "string",
              "description": "String identifying the error type. Does not change between error instances."
            },
            "description": {
              "type": "string",
              "description": "Human readable error description. May contain information specific to given error instance."
            },
            "details": {
              "type": "object",
              "x-onedata-datatype": "#{}",
              "description": "Details about the error instance. The object schema is specific to each error type."
            }
          },
          "required": [
            "id",
            "description"
          ]
        }
      },
      "required": [
        "error"
      ],
      "example": {
        "error": {
          "id": "badValueString",
          "details": {
            "key": "name"
          },
          "description": "Bad value: provided \"name\" must be a string."
        }
      }
    },
    "GuiMessage": {
      "type": "object",
      "description": "Settings of a message displayed in Onezone GUI.",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "True if the message should be displayed."
        },
        "body": {
          "type": "string",
          "description": "HTML content of the message to display."
        }
      }
    },
    "Id": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Resource Id."
        }
      },
      "required": [
        "id"
      ],
      "example": {
        "id": "26cbc2b20f92416eb9f3cba65e50c1d2"
      }
    },
    "Ids": {
      "type": "object",
      "properties": {
        "ids": {
          "type": "array",
          "description": "List of ids.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "ids"
      ],
      "example": {
        "ids": [
          "26cbc2b20f92416eb9f3cba65e50c1d2",
          "9ad94a9296d145a1a2b894f5fd7f48b0",
          "95ad2c09508f47198635e46a6ea4d005"
        ]
      }
    },
    "Token": {
      "type": "object",
      "description": "A token.",
      "properties": {
        "token": {
          "type": "string"
        }
      },
      "required": [
        "token"
      ]
    },
    "InviteToken": {
      "type": "object",
      "description": "An invite token.",
      "properties": {
        "inviteToken": {
          "type": "string"
        }
      },
      "required": [
        "inviteToken"
      ],
      "example": {
        "inviteToken": "AS2KLJH1231AJSHDKJBC12KS578A3SDA"
      }
    },
    "ClusterDetails": {
      "type": "object",
      "description": "Details of a cluster.",
      "properties": {
        "id": {
          "type": "string",
          "description": "Id of the cluster record."
        },
        "type": {
          "type": "string",
          "description": "Type of the cluster.",
          "enum": [
            "oneprovider",
            "onezone"
          ]
        },
        "serviceId": {
          "type": "string",
          "description": "The Id of the service hosted on this cluster - depending on the type equal to the Oneprovider Id or \"onezone\" in case of Onezone cluster\n"
        },
        "workerVersion": {
          "$ref": "#/definitions/VersionInfo"
        },
        "onepanelVersion": {
          "$ref": "#/definitions/VersionInfo"
        },
        "onepanelProxy": {
          "type": "boolean",
          "description": "Is Onepanel proxy enabled - if so, onepanel GUI is served on cluster's domain at port 443 (rather than 9443).\n"
        }
      },
      "required": [
        "id",
        "type",
        "serviceId",
        "workerVersion",
        "onepanelVersion",
        "onepanelProxy"
      ]
    },
    "ClusterMembersSummary": {
      "type": "object",
      "description": "Summary of cluster members, listing number of direct and effective users and groups.",
      "properties": {
        "usersCount": {
          "type": "integer",
          "description": "Number of users belonging directly to the cluster."
        },
        "effectiveUsersCount": {
          "type": "integer",
          "description": "Number of users belonging directly and indirectly to the cluster."
        },
        "groupsCount": {
          "type": "integer",
          "description": "Number of groups belonging directly to the cluster."
        },
        "effectiveGroupsCount": {
          "type": "integer",
          "description": "Number of groups belonging directly and indirectly to the cluster."
        }
      }
    },
    "RemoteProviderDetails": {
      "type": "object",
      "description": "Information about another Oneprovider.",
      "properties": {
        "id": {
          "type": "string",
          "description": "The Oneprovider Id assigned by Onezone."
        },
        "name": {
          "type": "string",
          "description": "The name under which the Oneprovider has been registered in Onezone."
        },
        "domain": {
          "type": "string",
          "description": "The fully qualified domain name of the Oneprovider."
        },
        "geoLongitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical longitude of the provider."
        },
        "geoLatitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical latitude of the provider."
        },
        "cluster": {
          "type": "string",
          "description": "The Id of the corresponding cluster record."
        },
        "online": {
          "type": "boolean",
          "description": "Indicates if the Oneprovider is currently online."
        }
      },
      "required": [
        "id",
        "name",
        "domain",
        "geoLongitude",
        "geoLatitude",
        "cluster",
        "online"
      ],
      "example": {
        "id": "VAiDGZbs3k0FD8jPhyU1",
        "name": "Provider 1",
        "domain": "provider.example.com",
        "geoLongitude": -24.3776025,
        "geoLatitude": -128.3519364,
        "cluster": "kas90GcjRa9352ndfCxhGyYY9dx",
        "online": true
      }
    },
    "EmergencyPassphraseChangeRequest": {
      "type": "object",
      "description": "Emergency passphrase to set and old passphrase to authorize the change.",
      "properties": {
        "newPassphrase": {
          "description": "New passphrase to be set.",
          "type": "string"
        },
        "currentPassphrase": {
          "description": "Currently set passphrase. Not required when setting the passphrase for the first time.",
          "type": "string"
        }
      },
      "required": [
        "newPassphrase"
      ]
    },
    "EmergencyPassphraseStatus": {
      "type": "object",
      "description": "Emergency passphrase status.",
      "properties": {
        "isSet": {
          "type": "boolean",
          "description": "True if the passphrase is set."
        }
      }
    },
    "Host": {
      "type": "object",
      "description": "Details of a cluster host.",
      "properties": {
        "hostname": {
          "type": "string",
          "description": "Host's hostname."
        }
      },
      "required": [
        "hostname"
      ]
    },
    "HostAddRequest": {
      "type": "object",
      "description": "Details of host added to cluster.",
      "properties": {
        "address": {
          "type": "string",
          "description": "Address at which the host is available, IP or hostname.\n"
        }
      },
      "required": [
        "address"
      ],
      "example": {
        "address": "node2.onedata.org"
      }
    },
    "OnezoneInfo": {
      "type": "object",
      "description": "Information which can be obtained about remote Onezone.",
      "properties": {
        "online": {
          "type": "boolean",
          "description": "True if connection to the Onezone was achieved.\nIf false, fields other than 'domain' will not be sent.\n"
        },
        "version": {
          "type": "string",
          "description": "Onezone cluster version."
        },
        "domain": {
          "type": "string",
          "description": "Domain of the Onezone."
        },
        "name": {
          "type": "string",
          "description": "Name of the Onezone cluster."
        },
        "compatible": {
          "type": "boolean",
          "description": "True if versions of this Oneprovider and the Onezone are compatible."
        },
        "subdomainDelegationSupported": {
          "type": "boolean",
          "description": "Whether given Onezone allows subdomain delegation."
        }
      },
      "required": [
        "domain",
        "online"
      ]
    },
    "OnezoneUser": {
      "type": "object",
      "description": "Describes a user account.",
      "properties": {
        "userId": {
          "type": "string",
          "description": "Unique user Id."
        },
        "fullName": {
          "type": "string",
          "description": "User's full name (given names + surname)."
        },
        "username": {
          "type": "string",
          "description": "User's human-readable identifier, unique across the system. Makes it easier to identify the user and can be used for signing in with password.\n"
        }
      },
      "required": [
        "userId",
        "fullName"
      ],
      "example": {
        "userId": "f1c8b1a37aa7447b22eb65a742d40524",
        "fullName": "Rudolf Lingens",
        "username": "r.lingens"
      }
    },
    "OnezoneUserCreateRequest": {
      "type": "object",
      "description": "The new Onezone user account details.",
      "properties": {
        "username": {
          "description": "User's human-readable identifier, unique across the system. Makes it easier to identify the user and can be used for signing in with password.\n",
          "type": "string"
        },
        "password": {
          "description": "User's password (in plaintext).",
          "type": "string"
        },
        "fullName": {
          "description": "User's full name (given names + surname).",
          "type": "string"
        },
        "groups": {
          "description": "Ids of Onezone groups to which the user should be added. The groups must already exist.\n",
          "type": "array",
          "x-onedata-default-value": "[]",
          "default": [],
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "username",
        "password"
      ],
      "example": {
        "username": "admin",
        "password": "somePassword",
        "groups": [
          "admins"
        ]
      }
    },
    "CurrentUser": {
      "type": "object",
      "description": "Information about the authenticated user.",
      "properties": {
        "userId": {
          "type": "string",
          "description": "The user Id."
        },
        "username": {
          "type": "string",
          "description": "User's full name (given names + surname)."
        },
        "clusterPrivileges": {
          "type": "array",
          "description": "List of cluster privileges held by the user in the current cluster.\n",
          "items": {
            "type": "string",
            "enum": [
              "cluster_view",
              "cluster_update",
              "cluster_delete",
              "cluster_view_privileges",
              "cluster_set_privileges",
              "cluster_add_user",
              "cluster_remove_user",
              "cluster_add_group",
              "cluster_remove_group"
            ]
          }
        }
      },
      "required": [
        "userId",
        "username",
        "clusterPrivileges"
      ],
      "example": {
        "userId": "i3h2bp4TjPVuOyvXulbW",
        "username": "admin",
        "clusterPrivileges": [
          "cluster_update"
        ]
      }
    },
    "PasswordChangeRequest": {
      "type": "object",
      "description": "Request to change user's password.",
      "properties": {
        "newPassword": {
          "type": "string",
          "description": "The new user password."
        }
      },
      "required": [
        "newPassword"
      ],
      "example": {
        "newPassword": "P@@$$W0RD2"
      }
    },
    "PanelConfiguration": {
      "type": "object",
      "description": "The panel configuration.",
      "properties": {
        "interactiveDeployment": {
          "type": "boolean",
          "default": true,
          "description": "Indicates that interactive deployment is being performed.\nIf false, users entering GUI will not be asked to complete the configuration. In that case default values will be used, available for change later via appropriate Onepanel GUI pages or REST.\n"
        },
        "guiDebugMode": {
          "type": "boolean",
          "default": false,
          "description": "When true, all GUIs hosted in this cluster will print debug logs to browser console.\n"
        }
      }
    },
    "ClusterWorkers": {
      "type": "object",
      "description": "The cluster worker service configuration.",
      "properties": {
        "nodes": {
          "type": "array",
          "description": "The list of aliases of cluster worker nodes.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "nodes"
      ]
    },
    "ClusterManagers": {
      "type": "object",
      "description": "The cluster manager service configuration.",
      "properties": {
        "mainNode": {
          "type": "string",
          "description": "The alias of the main cluster manager node."
        },
        "nodes": {
          "type": "array",
          "description": "The list of aliases of cluster manager nodes.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "mainNode",
        "nodes"
      ]
    },
    "ClusterDatabases": {
      "type": "object",
      "description": "The cluster database service configuration.",
      "properties": {
        "nodes": {
          "type": "array",
          "description": "The list of aliases of cluster database nodes.",
          "items": {
            "type": "string"
          }
        },
        "serverQuota": {
          "type": "integer",
          "description": "The server quota is the RAM memory in bytes that is allocated to the server when Couchbase Server is first installed. This sets the limit of RAM allocated by Couchbase for caching data for all buckets and is configured on a per-node basis.\n"
        },
        "bucketQuota": {
          "type": "integer",
          "description": "The bucket quota is the amount of RAM memory in bytes allocated to an individual bucket for caching data.\n"
        }
      },
      "required": [
        "nodes"
      ]
    },
    "ClusterIps": {
      "type": "object",
      "description": "External IPs used by cluster nodes.",
      "properties": {
        "isConfigured": {
          "type": "boolean",
          "description": "If true, user has already sent a request updating IPs thus marking them as accepted.\n"
        },
        "hosts": {
          "type": "object",
          "description": "The collection of cluster nodes associated with their IPs.",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "required": [
        "isConfigured",
        "hosts"
      ]
    },
    "ModifyClusterIps": {
      "type": "object",
      "description": "External IPs used by cluster nodes.",
      "properties": {
        "hosts": {
          "type": "object",
          "description": "The collection of cluster nodes associated with their IPs.",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "required": [
        "hosts"
      ]
    },
    "StorageCreateDetails": {
      "type": "object",
      "description": "The storage configuration.",
      "discriminator": "type",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "posix",
        "s3",
        "cephrados",
        "localceph",
        "swift",
        "glusterfs",
        "nulldevice",
        "webdav",
        "xrootd",
        "http"
      ],
      "properties": {
        "type": {
          "type": "string"
        },
        "timeout": {
          "type": "integer",
          "description": "Storage operation timeout in milliseconds."
        },
        "skipStorageDetection": {
          "type": "boolean",
          "description": "If true, detecting whether storage is directly accessible by the Oneclient will not be performed. This option should be set to true on readonly storages.\n",
          "default": false
        },
        "lumaFeed": {
          "type": "string",
          "description": "Type of feed for LUMA DB. Feed is a source of user/group mappings used to populate the LUMA DB. For more info please read: https://onedata.org/#/home/documentation/doc/administering_onedata/luma.html\n",
          "enum": [
            "auto",
            "local",
            "external"
          ],
          "default": "auto",
          "x-onedata-default-value": "<<\"auto\">>"
        },
        "lumaFeedUrl": {
          "type": "string",
          "description": "URL of external feed for LUMA DB. Relevant only if lumaFeed equals `external`."
        },
        "lumaFeedApiKey": {
          "type": "string",
          "description": "API key checked by external service used as feed for LUMA DB. Relevant only if lumaFeed equals `external`.\n"
        },
        "qosParameters": {
          "description": "Map with key-value pairs used for describing storage QoS parameters.",
          "type": "object",
          "x-onedata-default-value": "#{}",
          "default": {},
          "x-onedata-dictionary": true,
          "x-onedata-dictionary-value-type": "string",
          "additionalProperties": {
            "type": "string"
          }
        },
        "importedStorage": {
          "type": "boolean",
          "default": false,
          "description": "Defines whether storage contains existing data to be imported.\n"
        },
        "readonly": {
          "type": "boolean",
          "default": false,
          "description": "Defines whether the storage is readonly. If enabled, Oneprovider will block any operation that writes, modifies or deletes data on the storage. Such storage can only be used to import data into the space. Mandatory to ensure proper behaviour if the backend storage is actually configured as readonly. This option is available only for imported storages.\n"
        }
      }
    },
    "StorageGetDetails": {
      "type": "object",
      "description": "The storage configuration.",
      "discriminator": "type",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "posix",
        "s3",
        "ceph",
        "cephrados",
        "localceph",
        "swift",
        "glusterfs",
        "nulldevice",
        "webdav",
        "xrootd"
      ],
      "properties": {
        "type": {
          "type": "string",
          "readOnly": true
        },
        "id": {
          "type": "string",
          "readOnly": true,
          "description": "The Id of storage."
        },
        "name": {
          "type": "string",
          "readOnly": true,
          "description": "The name of storage."
        },
        "verificationPassed": {
          "type": "boolean",
          "readOnly": true,
          "description": "Result of storage verification (reading and writing a file). Returned only on PATCH requests for read-write storages."
        },
        "timeout": {
          "type": "integer",
          "x-onedata-storage-param": true,
          "readOnly": true,
          "description": "Storage operation timeout in milliseconds."
        },
        "skipStorageDetection": {
          "type": "boolean",
          "x-onedata-storage-param": true,
          "readOnly": true,
          "description": "If true, detecting whether storage is directly accessible by the Oneclient will not be performed. This option should be set to true on readonly storages.\n"
        },
        "lumaFeed": {
          "type": "string",
          "x-onedata-storage-param": true,
          "x-onedata-default-value": "<<\"auto\">>",
          "readOnly": true,
          "description": "Type of feed for LUMA DB. Feed is a source of user/group mappings used to populate the LUMA DB. For more info please read: https://onedata.org/#/home/documentation/doc/administering_onedata/luma.html\n",
          "enum": [
            "auto",
            "local",
            "external"
          ]
        },
        "lumaFeedUrl": {
          "type": "string",
          "x-onedata-storage-param": true,
          "readOnly": true,
          "description": "URL of external feed for LUMA DB. Relevant only if lumaFeed equals `external`."
        },
        "lumaFeedApiKey": {
          "type": "string",
          "x-onedata-storage-param": true,
          "readOnly": true,
          "description": "API key checked by external service used as feed for LUMA DB. Relevant only if lumaFeed equals `external`.\n"
        },
        "qosParameters": {
          "description": "Map with key-value pairs used for describing storage QoS parameters.",
          "type": "object",
          "x-onedata-default-value": "#{}",
          "default": {},
          "x-onedata-dictionary": true,
          "x-onedata-dictionary-value-type": "string",
          "additionalProperties": {
            "type": "string"
          },
          "readOnly": true
        },
        "importedStorage": {
          "type": "boolean",
          "x-onedata-storage-param": true,
          "readOnly": true,
          "default": false,
          "description": "Defines whether storage contains existing data to be imported."
        },
        "readonly": {
          "type": "boolean",
          "x-onedata-storage-param": true,
          "readOnly": true,
          "default": false,
          "description": "Defines whether the storage is readonly. If enabled, Oneprovider will block any operation that writes, modifies or deletes data on the storage. Such storage can only be used to import data into the space. Mandatory to ensure proper behaviour if the backend storage is actually configured as readonly. This option is available only for imported storages."
        }
      }
    },
    "StorageModifyDetails": {
      "type": "object",
      "description": "An object with new values for storage parameters to be updated.",
      "discriminator": "type",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "posix_modify",
        "s3_modify",
        "ceph_modify",
        "cephrados_modify",
        "localceph_modify",
        "swift_modify",
        "glusterfs_modify",
        "nulldevice_modify",
        "webdav_modify",
        "xrootd_modify",
        "http_modify"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of storage."
        },
        "timeout": {
          "type": "integer",
          "description": "Storage operation timeout in milliseconds."
        },
        "skipStorageDetection": {
          "type": "boolean",
          "description": "If true, detecting whether storage is directly accessible by the Oneclient will not be performed. This option should be set to true on readonly storages.\n"
        },
        "lumaFeed": {
          "type": "string",
          "description": "Type of feed for LUMA DB. Feed is a source of user/group mappings used to populate the LUMA DB. For more info please read: https://onedata.org/#/home/documentation/doc/administering_onedata/luma.html\n",
          "enum": [
            "auto",
            "local",
            "external"
          ]
        },
        "lumaFeedUrl": {
          "type": "string",
          "description": "URL of external feed for LUMA DB. Relevant only if lumaFeed equals `external`."
        },
        "lumaFeedApiKey": {
          "type": "string",
          "description": "API key checked by external service used as feed for LUMA DB. Relevant only if lumaFeed equals `external`.\n"
        },
        "qosParameters": {
          "description": "Map with key-value pairs used for describing storage QoS parameters. Overrides all previously set parameters.",
          "type": "object",
          "x-onedata-dictionary": true,
          "x-onedata-dictionary-value-type": "string",
          "additionalProperties": {
            "type": "string"
          }
        },
        "importedStorage": {
          "type": "boolean",
          "description": "Defines whether storage contains existing data to be imported.\n"
        },
        "readonly": {
          "type": "boolean",
          "description": "Defines whether the storage is readonly. If enabled, Oneprovider will block any operation that writes, modifies or deletes data on the storage. Such storage can only be used to import data into the space. Mandatory to ensure proper behaviour if the backend storage is actually configured as readonly. This option is available only for imported storages."
        }
      }
    },
    "PosixCompatibleCredentials": {
      "type": "object",
      "description": "Credentials on POSIX compatible storages.",
      "properties": {
        "uid": {
          "type": "integer",
          "description": "User identifier."
        },
        "gid": {
          "type": "integer",
          "description": "Group identifier."
        }
      },
      "example": {
        "uid": 1001,
        "gid": 1002
      }
    },
    "PosixCredentials": {
      "description": "Credentials on POSIX storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "$ref": "#/definitions/PosixCompatibleCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "posix"
              ],
              "x-discriminator-value": "posix"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "posix",
        "uid": 1001,
        "gid": 1002
      }
    },
    "Posix": {
      "description": "The POSIX storage configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"posix\"`\n\nAny POSIX compatible storage, typically attached over high-throughput\nlocal network, such as NFS.\n",
              "enum": [
                "posix"
              ],
              "x-discriminator-value": "posix"
            },
            "mountPoint": {
              "type": "string",
              "description": "The absolute path to the directory where the POSIX storage is mounted on the cluster nodes.\n"
            },
            "storagePathType": {
              "type": "string",
              "default": "canonical",
              "x-onedata-default-value": "<<\"canonical\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            },
            "rootUid": {
              "type": "integer",
              "default": 0,
              "description": "UID of the user on whose behalf operations in the admin context will be performed on the storage.",
              "x-onedata-default-value": 0
            },
            "rootGid": {
              "type": "integer",
              "default": 0,
              "description": "GID of the group on whose behalf operations in the admin context will be performed on the storage.",
              "x-onedata-default-value": 0
            }
          },
          "required": [
            "type",
            "mountPoint"
          ]
        }
      ],
      "example": {
        "type": "POSIX",
        "name": "SomePosix",
        "mountPoint": "/mnt/nfs"
      }
    },
    "PosixModify": {
      "description": "The POSIX storage configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"posix\"`\n\nAny POSIX compatible storage, typically attached over high-throughput\nlocal network, such as NFS.\n",
              "enum": [
                "posix"
              ],
              "x-discriminator-value": "posix"
            },
            "mountPoint": {
              "type": "string",
              "description": "The absolute path to the directory where the POSIX storage is mounted on the cluster nodes.\n"
            },
            "rootUid": {
              "type": "integer",
              "description": "UID of the user on whose behalf operations in the admin context will be performed on the storage."
            },
            "rootGid": {
              "type": "integer",
              "description": "GID of the group on whose behalf operations in the admin context will be performed on the storage."
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "posix",
        "timeout": 500
      }
    },
    "Localceph": {
      "description": "Configuration of a Ceph (librados) storage backed by a Ceph pool created in the local Ceph cluster.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "$ref": "#/definitions/CephPool"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"localceph\"`\n\nLocal Ceph cluster that has been deployed during deployment\nof Oneprovider. For more information on local Ceph deployment please\nsee [here](https://onedata.org/#/home/documentation/stable/doc/administering_onedata/ceph_cluster_deployment.html).\n",
              "enum": [
                "localceph"
              ],
              "x-discriminator-value": "localceph"
            },
            "blockSize": {
              "type": "integer",
              "description": "Storage block size in bytes.",
              "default": 4194304
            },
            "storagePathType": {
              "type": "string",
              "default": "flat",
              "x-onedata-default-value": "<<\"flat\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n",
              "enum": [
                "flat"
              ]
            }
          }
        }
      ],
      "example": {
        "type": "localceph",
        "name": "myceph",
        "copiesNumber": 2,
        "skipStorageDetection": false,
        "blockSize": 10485760
      }
    },
    "LocalcephModify": {
      "description": "Modifiable fields of a Ceph storage backed by a local pool.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "$ref": "#/definitions/CephPool"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"localceph\"`\n\nLocal Ceph cluster that has been deployed during deployment\nof Oneprovider. For more information on local Ceph deployment please\nsee [here](https://onedata.org/#/home/documentation/stable/doc/administering_onedata/ceph_cluster_deployment.html).\n",
              "enum": [
                "localceph"
              ],
              "x-discriminator-value": "localceph"
            },
            "name": {
              "type": "string",
              "readOnly": true,
              "description": "Name of the storage and corresponding Ceph pool."
            }
          }
        }
      ],
      "example": {
        "type": "localceph",
        "copiesNumber": 3
      }
    },
    "S3Credentials": {
      "description": "Credentials on the Simple Storage Service (S3).",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "s3"
              ],
              "x-discriminator-value": "s3"
            },
            "accessKey": {
              "type": "string",
              "description": "The access key to the S3 storage.",
              "default": "",
              "x-onedata-default-value": "<<\"\">>"
            },
            "secretKey": {
              "type": "string",
              "description": "The secret key to the S3 storage.",
              "default": "",
              "x-onedata-default-value": "<<\"\">>"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "s3",
        "accessKey": "4efb70ad3e1fc8dd73c721b8f683b2e831503892",
        "secretKey": "fdeac26aedd3a179f9551d7007cc6a6273165782"
      }
    },
    "S3": {
      "description": "The Simple Storage Service configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"s3\"`\n\n[Amazon S3](http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html)\ncompatible storage.\n",
              "enum": [
                "s3"
              ],
              "x-discriminator-value": "s3"
            },
            "hostname": {
              "type": "string",
              "description": "The hostname of a machine where S3 storage is installed."
            },
            "bucketName": {
              "type": "string",
              "description": "The storage bucket name."
            },
            "signatureVersion": {
              "type": "integer",
              "default": 4,
              "x-onedata-default-value": 4,
              "description": "The version of signature used to sign requests. One of: 2, 4. Default: 4.\n",
              "enum": [
                2,
                4
              ]
            },
            "blockSize": {
              "type": "integer",
              "description": "Storage block size in bytes. In case the block size is `0` and `canonical` path type is selected, each file is stored in a single S3 object. This value must be set to `0` to enable data import from an existing S3 bucket.\n",
              "default": 10485760,
              "x-onedata-default-value": 10485760
            },
            "maximumCanonicalObjectSize": {
              "type": "integer",
              "description": "Defines the maximum size for objects, which can be modified on the S3 storage in `canonical` path mode. In this mode, entire file needs to be downloaded to memory, modified and uploaded back, which is impractical for large files (default 64 MiB).\n",
              "default": 67108864,
              "x-onedata-default-value": 67108864
            },
            "fileMode": {
              "type": "string",
              "description": "Defines the file permissions, which files imported from S3 storage will have in Onedata. Values should be provided in octal format e.g. `0644`.\n",
              "default": "0664",
              "x-onedata-default-value": "<<\"0664\">>"
            },
            "dirMode": {
              "type": "string",
              "description": "Defines the directory mode which directories imported from S3 storage will have in Onedata. Values should be provided in octal format e.g. `0775`.\n",
              "default": "0775",
              "x-onedata-default-value": "<<\"0775\">>"
            },
            "storagePathType": {
              "type": "string",
              "default": "flat",
              "x-onedata-default-value": "<<\"flat\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            }
          },
          "required": [
            "type",
            "hostname",
            "bucketName"
          ]
        },
        {
          "$ref": "#/definitions/S3Credentials"
        }
      ],
      "example": {
        "type": "s3",
        "name": "SomeS3",
        "hostname": "https://s3.example.com:443/",
        "bucketName": "bucket1.iam.example.com",
        "accessKey": "4efb70ad3e1fc8dd73c721b8f683b2e831503892",
        "secretKey": "fdeac26aedd3a179f9551d7007cc6a6273165782"
      }
    },
    "S3Modify": {
      "description": "The Simple Storage Service configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"s3\"`\n\n[Amazon S3](http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html)\ncompatible storage.\n",
              "enum": [
                "s3"
              ],
              "x-discriminator-value": "s3"
            },
            "hostname": {
              "type": "string",
              "description": "The hostname of a machine where S3 storage is installed."
            },
            "bucketName": {
              "type": "string",
              "description": "The storage bucket name."
            },
            "accessKey": {
              "type": "string",
              "description": "The access key to the S3 storage."
            },
            "secretKey": {
              "type": "string",
              "description": "The secret key to the S3 storage."
            },
            "signatureVersion": {
              "type": "integer",
              "description": "The version of signature used to sign requests. One of: 2, 4. Default: 4.\n",
              "enum": [
                2,
                4
              ]
            },
            "maximumCanonicalObjectSize": {
              "type": "integer",
              "description": "Defines the maximum size for objects, which can be modified on the S3 storage in `canonical` path mode. In this mode, entire file needs to be downloaded to memory, modified and uploaded back, which is impractical for large files (default 64 MiB).\n"
            },
            "fileMode": {
              "type": "string",
              "description": "Defines the file permissions, which files imported from S3 storage will have in Onedata. Values should be provided in octal format e.g. `0644`.\n"
            },
            "dirMode": {
              "type": "string",
              "description": "Defines the directory mode which directories imported from S3 storage will have in Onedata. Values should be provided in octal format e.g. `0775`.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "s3",
        "name": "SomeS3",
        "hostname": "https://s3.example.com:443/",
        "bucketName": "bucket1.iam.example.com",
        "accessKey": "4efb70ad3e1fc8dd73c721b8f683b2e831503892",
        "secretKey": "fdeac26aedd3a179f9551d7007cc6a6273165782"
      }
    },
    "CephCredentials": {
      "description": "Credentials on the CEPH storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "ceph"
              ],
              "x-discriminator-value": "ceph"
            },
            "username": {
              "type": "string",
              "description": "The username of the Ceph cluster user. In case of configuring storage, this field must be equal to name of the Ceph cluster admin.\n"
            },
            "key": {
              "type": "string",
              "description": "The key to access the Ceph cluster. In case of configuring storage, the key must be the key of admin user passed in `username`.\n"
            }
          },
          "required": [
            "type",
            "username",
            "key"
          ]
        }
      ],
      "example": {
        "type": "ceph",
        "username": "user1",
        "key": "18109910d9cad490a723f8961cd0ae3a97b94db7"
      }
    },
    "Ceph": {
      "description": "The Ceph storage configuration (uses libradosstriper).",
      "allOf": [
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"ceph\"`\n\n(**DEPRECATED** - use Ceph RADOS instead) storage backend compatible\nwith [Ceph](http://ceph.com/ceph-storage/) object storage, using the\ndeprecated `libradosstriper` library.\n",
              "enum": [
                "ceph"
              ],
              "x-discriminator-value": "ceph"
            },
            "monitorHostname": {
              "type": "string",
              "description": "The monitor hostname."
            },
            "clusterName": {
              "type": "string",
              "description": "The Ceph cluster name."
            },
            "poolName": {
              "type": "string",
              "description": "The Ceph pool name."
            },
            "storagePathType": {
              "type": "string",
              "default": "flat",
              "x-onedata-default-value": "<<\"flat\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            }
          },
          "required": [
            "type",
            "monitorHostname",
            "clusterName",
            "poolName"
          ]
        },
        {
          "$ref": "#/definitions/CephCredentials"
        }
      ],
      "example": {
        "type": "ceph",
        "name": "SomeCeph",
        "username": "user1",
        "key": "4efb70ad3e1fc8dd73c721b8f683b2e831503892",
        "monitorHostname": "test.example.com",
        "clusterName": "CephCluster1",
        "poolName": "data"
      }
    },
    "CephModify": {
      "description": "The Ceph storage configuration (uses libradosstriper).",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type of the modified storage. Must be given explicitly and must match\nthe actual type of subject storage - this redundancy is needed\ndue to limitations of OpenAPI polymorphism.\n\n`type = \"ceph\"`\n\n(**DEPRECATED** - use Ceph RADOS instead) storage backend compatible\nwith [Ceph](http://ceph.com/ceph-storage/) object storage, using the\ndeprecated `libradosstriper` library.\n",
              "enum": [
                "ceph"
              ],
              "x-discriminator-value": "ceph"
            },
            "username": {
              "type": "string",
              "description": "The username of the Ceph cluster administrator."
            },
            "key": {
              "type": "string",
              "description": "The admin key to access the Ceph cluster."
            },
            "monitorHostname": {
              "type": "string",
              "description": "The monitor hostname."
            },
            "clusterName": {
              "type": "string",
              "description": "The Ceph cluster name."
            },
            "poolName": {
              "type": "string",
              "description": "The Ceph pool name."
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "ceph",
        "username": "user1",
        "key": "4efb70ad3e1fc8dd73c721b8f683b2e831503892"
      }
    },
    "CephradosCredentials": {
      "description": "Credentials on the Ceph storage (using librados).",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "cephrados"
              ],
              "x-discriminator-value": "cephrados"
            },
            "username": {
              "type": "string",
              "description": "The username of the Ceph cluster administrator."
            },
            "key": {
              "type": "string",
              "description": "The admin key to access the Ceph cluster."
            }
          },
          "required": [
            "type",
            "username",
            "key"
          ]
        }
      ],
      "example": {
        "type": "cephrados",
        "username": "user1",
        "key": "4efb70ad3e1fc8dd73c721b8f683b2e831503892"
      }
    },
    "Cephrados": {
      "description": "The Ceph storage configuration (uses librados).",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"cephrados\"`\n\nStorage backend compatible with [Ceph](http://ceph.com/ceph-storage/)\nobject storage.\n",
              "enum": [
                "cephrados"
              ],
              "x-discriminator-value": "cephrados"
            },
            "monitorHostname": {
              "type": "string",
              "description": "The monitor hostname."
            },
            "clusterName": {
              "type": "string",
              "description": "The Ceph cluster name."
            },
            "poolName": {
              "type": "string",
              "description": "The Ceph pool name."
            },
            "blockSize": {
              "type": "integer",
              "description": "Storage block size in bytes.",
              "default": 4194304,
              "x-onedata-default-value": 4194304
            },
            "storagePathType": {
              "type": "string",
              "default": "flat",
              "x-onedata-default-value": "<<\"flat\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n",
              "enum": [
                "flat"
              ]
            }
          },
          "required": [
            "type",
            "monitorHostname",
            "clusterName",
            "poolName"
          ]
        },
        {
          "$ref": "#/definitions/CephradosCredentials"
        }
      ],
      "example": {
        "type": "cephrados",
        "name": "SomeCeph",
        "username": "user1",
        "key": "4efb70ad3e1fc8dd73c721b8f683b2e831503892",
        "monitorHostname": "test.example.com",
        "clusterName": "CephCluster1",
        "poolName": "data",
        "blockSize": 10485760
      }
    },
    "CephradosModify": {
      "description": "The Ceph storage configuration (uses librados).",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"cephrados\"`\n\nStorage backend compatible with [Ceph](http://ceph.com/ceph-storage/)\nobject storage.\n",
              "enum": [
                "cephrados"
              ],
              "x-discriminator-value": "cephrados"
            },
            "username": {
              "type": "string",
              "description": "The username of the Ceph cluster administrator."
            },
            "key": {
              "type": "string",
              "description": "The admin key to access the Ceph cluster."
            },
            "monitorHostname": {
              "type": "string",
              "description": "The monitor hostname."
            },
            "clusterName": {
              "type": "string",
              "description": "The Ceph cluster name."
            },
            "poolName": {
              "type": "string",
              "description": "The Ceph pool name."
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "cephrados",
        "name": "SomeCeph",
        "username": "user1",
        "key": "4efb70ad3e1fc8dd73c721b8f683b2e831503892",
        "monitorHostname": "test.example.com",
        "clusterName": "CephCluster1",
        "poolName": "data"
      }
    },
    "SwiftCredentials": {
      "description": "Credentials on the SWIFT storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "swift"
              ],
              "x-discriminator-value": "swift"
            },
            "username": {
              "type": "string",
              "description": "The Keystone authentication username."
            },
            "password": {
              "type": "string",
              "description": "The Keystone authentication password."
            }
          },
          "required": [
            "type",
            "username",
            "password"
          ]
        }
      ],
      "example": {
        "type": "swift",
        "username": "user",
        "password": "p@$$w0rd"
      }
    },
    "Swift": {
      "description": "The OpenStack Swift configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"swift\"`\n\nStorage backend compatible with\n[OpenStack](http://docs.openstack.org/developer/swift/) SWIFT\nprotocol.\n",
              "enum": [
                "swift"
              ],
              "x-discriminator-value": "swift"
            },
            "authUrl": {
              "type": "string",
              "description": "The URL to OpenStack Keystone identity service."
            },
            "tenantName": {
              "type": "string",
              "description": "The name of the tenant to which the user belongs."
            },
            "containerName": {
              "type": "string",
              "description": "The name of the Swift storage container."
            },
            "blockSize": {
              "type": "integer",
              "description": "Storage block size in bytes.",
              "default": 10485760,
              "x-onedata-default-value": 10485760
            },
            "storagePathType": {
              "type": "string",
              "default": "flat",
              "x-onedata-default-value": "<<\"flat\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            }
          },
          "required": [
            "type",
            "authUrl",
            "tenantName",
            "containerName"
          ]
        },
        {
          "$ref": "#/definitions/SwiftCredentials"
        }
      ],
      "example": {
        "type": "swift",
        "name": "SomeSwift",
        "authUrl": "http://keystone2.example.com",
        "tenantName": "Project1",
        "containerName": "Container1",
        "username": "user",
        "password": "p@$$w0rd"
      }
    },
    "SwiftModify": {
      "description": "The OpenStack Swift configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"swift\"`\n\nStorage backend compatible with\n[OpenStack](http://docs.openstack.org/developer/swift/) SWIFT\nprotocol.\n",
              "enum": [
                "swift"
              ],
              "x-discriminator-value": "swift"
            },
            "authUrl": {
              "type": "string",
              "description": "The URL to OpenStack Keystone identity service."
            },
            "tenantName": {
              "type": "string",
              "description": "The name of the tenant to which the user belongs."
            },
            "containerName": {
              "type": "string",
              "description": "The name of the Swift storage container."
            },
            "username": {
              "type": "string",
              "description": "The Keystone authentication username."
            },
            "password": {
              "type": "string",
              "description": "The Keystone authentication password."
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "swift",
        "name": "SomeSwift",
        "authUrl": "http://keystone2.example.com",
        "tenantName": "Project1",
        "containerName": "Container1",
        "username": "user",
        "password": "p@$$w0rd"
      }
    },
    "GlusterfsCredentials": {
      "description": "Credentials on the GlusterFS storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "$ref": "#/definitions/PosixCompatibleCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "glusterfs"
              ],
              "x-discriminator-value": "glusterfs"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "glusterfs",
        "uid": 1001,
        "gid": 1002
      }
    },
    "Glusterfs": {
      "description": "The GlusterFS storage configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"glusterfs\"`\n\n[GlusterFS](https://www.gluster.org/) volume directly attached to\nthe Oneprovider.\n",
              "enum": [
                "glusterfs"
              ],
              "x-discriminator-value": "glusterfs"
            },
            "volume": {
              "type": "string",
              "description": "The name of the volume to use as a storage backend."
            },
            "hostname": {
              "type": "string",
              "description": "The hostname (IP address or FQDN) of GlusterFS volume server."
            },
            "port": {
              "type": "integer",
              "description": "The GlusterFS port on volume server.",
              "default": 24007,
              "x-onedata-default-value": 24007
            },
            "transport": {
              "type": "string",
              "description": "The transport protocol to use to connect to the volume server.",
              "enum": [
                "tcp",
                "rdma",
                "socket"
              ],
              "default": "tcp"
            },
            "mountPoint": {
              "type": "string",
              "description": "Relative mountpoint within the volume which should be used by Oneprovider.",
              "default": ""
            },
            "xlatorOptions": {
              "type": "string",
              "description": "Volume specific GlusterFS translator options, in the format:\n  TRANSLATOR1.OPTION1=VALUE1;TRANSLATOR2.OPTION2=VALUE2;...\n",
              "default": ""
            },
            "storagePathType": {
              "type": "string",
              "default": "canonical",
              "x-onedata-default-value": "<<\"canonical\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            }
          },
          "required": [
            "type",
            "volume",
            "hostname"
          ]
        }
      ],
      "example": {
        "type": "glusterfs",
        "name": "LocalGluster",
        "volume": "Volume1",
        "hostname": "volfileserver.example.com",
        "transport": "tcp",
        "port": 24007,
        "mountPoint": "",
        "xlatorOptions": "transport.socket.ssl-enabled=on"
      }
    },
    "GlusterfsModify": {
      "description": "The GlusterFS storage configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"glusterfs\"`\n\n[GlusterFS](https://www.gluster.org/) volume directly attached to\nthe Oneprovider.\n",
              "enum": [
                "glusterfs"
              ],
              "x-discriminator-value": "glusterfs"
            },
            "volume": {
              "type": "string",
              "description": "The name of the volume to use as a storage backend."
            },
            "hostname": {
              "type": "string",
              "description": "The hostname (IP address or FQDN) of GlusterFS volume server."
            },
            "port": {
              "type": "integer",
              "description": "The GlusterFS port on volume server."
            },
            "transport": {
              "type": "string",
              "description": "The transport protocol to use to connect to the volume server.",
              "enum": [
                "tcp",
                "rdma",
                "socket"
              ]
            },
            "mountPoint": {
              "type": "string",
              "description": "Relative mountpoint within the volume which should be used by Oneprovider."
            },
            "xlatorOptions": {
              "type": "string",
              "description": "Volume specific GlusterFS translator options, in the format:\n  TRANSLATOR1.OPTION1=VALUE1;TRANSLATOR2.OPTION2=VALUE2;...\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "glusterfs",
        "name": "LocalGluster",
        "volume": "Volume1",
        "hostname": "volfileserver.example.com",
        "transport": "tcp",
        "port": 24007,
        "mountPoint": "",
        "xlatorOptions": "transport.socket.ssl-enabled=on"
      }
    },
    "NulldeviceCredentials": {
      "description": "Credentials on the Null Device storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "$ref": "#/definitions/PosixCompatibleCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "nulldevice"
              ],
              "x-discriminator-value": "nulldevice"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "nulldevice",
        "uid": 1001,
        "gid": 1002
      }
    },
    "Nulldevice": {
      "description": "The Null Device storage configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"nulldevice\"`\n\nPOSIX compatible storage which emulates behavior of `/dev/null` on\nlocal filesystem. Allows running various performance tests, which are\nnot impacted by actual storage latency. Skip storage detection option\nis obligatory for this type of storage.\n",
              "enum": [
                "nulldevice"
              ],
              "x-discriminator-value": "nulldevice"
            },
            "latencyMin": {
              "type": "integer",
              "description": "Minimum latency in milliseconds, which should be simulated for\nselected operations.\n",
              "default": 0
            },
            "latencyMax": {
              "type": "integer",
              "description": "Maximum latency in milliseconds, which should be simulated for\nselected operations.\n",
              "default": 0
            },
            "timeoutProbability": {
              "type": "number",
              "format": "float",
              "description": "Probability (0.0, 1.0), with which an operation should return\na timeout error.\n",
              "default": 0
            },
            "filter": {
              "type": "string",
              "description": "Comma-separated list of filesystem operations, for which latency\nand timeout should be simulated. Empty or '*' mean all operations\nwill be affected.\n",
              "default": "*"
            },
            "storagePathType": {
              "type": "string",
              "default": "canonical",
              "x-onedata-default-value": "<<\"canonical\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            },
            "simulatedFilesystemParameters": {
              "type": "string",
              "default": "",
              "description": "Specifies the parameters for a simulated null device filesystem.\nFor example `2-2:2-2:0-1` will generate a filesystem tree which has 2\ndirectories (`0` and `1`) and 2 files (`2` and `3`) in the root of\nthe filesystem, each of these directories will have 2 subdirectories\n(`0` and `1`) and 2 files (`2` and `3`) and each of these\nsubdirectories has only a single file (`0`).\nDefault empty string disables the simulated filesystem feature.\n"
            },
            "simulatedFilesystemGrowSpeed": {
              "type": "number",
              "format": "float",
              "default": 0,
              "description": "Determines the simulated filesystem grow rate. Default 0.0 value\nwill cause all the files and directories defined by the\n`simulatedFilesystemParameters` specification to be visible immediately.\nFor example value of 0.01 will increase the number of the visible\nfilesystem entries by 1 file per 100 seconds, while 100.0 will increase it\nby 100 files per second.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "nulldevice",
        "name": "Slow storage",
        "latencyMin": 250,
        "latencyMax": 750,
        "timeoutProbability": 0.1,
        "filter": "read,write,open",
        "simulatedFilesystemParameters": "2-2:2-2:0-3",
        "simulatedFilesystemGrowSpeed": 5
      }
    },
    "NulldeviceModify": {
      "description": "The Null Device storage configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"nulldevice\"`\n\nPOSIX compatible storage which emulates behavior of `/dev/null` on\nlocal filesystem. Allows running various performance tests, which are\nnot impacted by actual storage latency. Skip storage detection option\nis obligatory for this type of storage.\n",
              "enum": [
                "nulldevice"
              ],
              "x-discriminator-value": "nulldevice"
            },
            "latencyMin": {
              "type": "integer",
              "description": "Minimum latency in milliseconds, which should be simulated for\nselected operations.\n"
            },
            "latencyMax": {
              "type": "integer",
              "description": "Maximum latency in milliseconds, which should be simulated for\nselected operations.\n"
            },
            "timeoutProbability": {
              "type": "number",
              "format": "float",
              "description": "Probability (0.0, 1.0), with which an operation should return\na timeout error.\n"
            },
            "filter": {
              "type": "string",
              "description": "Comma-separated list of filesystem operations, for which latency\nand timeout should be simulated. Empty or '*' mean all operations\nwill be affected.\n"
            },
            "simulatedFilesystemParameters": {
              "type": "string",
              "description": "Specifies the parameters for a simulated null device filesystem.\nFor example `2-2:2-2:0-1` will generate a filesystem tree which has 2\ndirectories (`0` and `1`) and 2 files (`2` and `3`) in the root of\nthe filesystem, each of these directories will have 2 subdirectories\n(`0` and `1`) and 2 files (`2` and `3`) and each of these\nsubdirectories has only a single file (`0`).\nDefault empty string disables the simulated filesystem feature.\n"
            },
            "simulatedFilesystemGrowSpeed": {
              "type": "number",
              "format": "float",
              "description": "Determines the simulated filesystem grow rate. Default 0.0 value\nwill cause all the files and directories defined by the\n`simulatedFilesystemParameters` specification to be visible immediately.\nFor example value of 0.01 will increase the number of the visible\nfilesystem entries by 1 file per 100 seconds, while 100.0 will increase it\nby 100 files per second.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "nulldevice",
        "name": "Slow storage",
        "latencyMin": 250,
        "latencyMax": 750,
        "timeoutProbability": 0.1,
        "filter": "read,write,open",
        "simulatedFilesystemParameters": "2-2:2-2:0-3",
        "simulatedFilesystemGrowSpeed": 5
      }
    },
    "WebdavCredentials": {
      "description": "Credentials on the WebDAV storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "webdav"
              ],
              "x-discriminator-value": "webdav"
            },
            "credentialsType": {
              "type": "string",
              "description": "Determines the types of credentials provided in the credentials field.\n",
              "enum": [
                "none",
                "basic",
                "token",
                "oauth2"
              ],
              "default": "none",
              "x-onedata-default-value": "<<\"none\">>"
            },
            "credentials": {
              "type": "string",
              "description": "The credentials to authenticate with the WebDAV server. `basic` credentials should be provided in the form `username:password`, for `token` just the token. In case of `oauth2`, this field should contain the username for the WebDAV, while the token will be obtained and refreshed automatically in the background. For `none` this field is ignored.\n"
            },
            "oauth2IdP": {
              "type": "string",
              "description": "In case `oauth2` credential type is selected and Onezone is configured with support for multiple external IdP's, this field must contain the name of the IdP which authenticates requests to the WebDAV endpoint. If Onezone has only one external IdP, it will be selected automatically.\n"
            },
            "onedataAccessToken": {
              "type": "string",
              "description": "When registering storage with feed of LUMA DB set to`auto` and with `oauth2` external IdP, this field must contain a valid Onedata access token of the user on whose behalf the WebDAV storage will be accessed by all users with access to any space supported by this storage.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "webdav",
        "credentialsType": "oauth2",
        "credentials": "eudat",
        "oauth2IdP": "b2access"
      }
    },
    "Webdav": {
      "description": "The WebDAV storage configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"webdav\"`\n\nStorage backend compatible with\n[WebDAV](https://tools.ietf.org/html/rfc4918) protocol.\n",
              "enum": [
                "webdav"
              ],
              "x-discriminator-value": "webdav"
            },
            "endpoint": {
              "type": "string",
              "description": "Full URL of the WebDAV server, including scheme (http or https) and path.\n"
            },
            "verifyServerCertificate": {
              "type": "boolean",
              "description": "Determines whether Oneprovider should verify the certificate of the WebDAV server.\n",
              "default": true,
              "x-onedata-default-value": true
            },
            "authorizationHeader": {
              "type": "string",
              "description": "The authorization header to be used for passing the access token. This field can contain any prefix that should be added to the header value. Default is `Authorization: Bearer {}`. The token will placed where `{}` is provided.\n",
              "default": "Authorization: Bearer {}",
              "x-onedata-default-value": "<<\"Authorization: Bearer {}\">>"
            },
            "rangeWriteSupport": {
              "type": "string",
              "description": "The type of partial write support enabled in the WebDAV server. Currently 2 types are supported `sabredav` which assumes the server supports the SabreDAV PartialUpdate extension via `PATCH` method, and `moddav` which assumes server supports partial `PUT` requests with `Content-Range` header. If `none` is selected no write support is available for this WebDAV storage.\n",
              "enum": [
                "none",
                "moddav",
                "sabredav"
              ],
              "default": "none",
              "x-onedata-default-value": "<<\"none\">>"
            },
            "connectionPoolSize": {
              "type": "integer",
              "description": "Defines the maximum number of parallel connections for a single WebDAV storage.\n",
              "default": 25,
              "x-onedata-default-value": 25
            },
            "maximumUploadSize": {
              "type": "integer",
              "description": "Defines the maximum upload size for a single `PUT` or `PATCH` request. If set to 0, assumes that the WebDAV server has no upload limit.\n",
              "default": 0,
              "x-onedata-default-value": 0
            },
            "fileMode": {
              "type": "string",
              "description": "Defines the file permissions, which files imported from WebDAV storage will have in Onedata. Values should be provided in octal format e.g. `0644`.\n",
              "default": "0664",
              "x-onedata-default-value": "<<\"0664\">>"
            },
            "dirMode": {
              "type": "string",
              "description": "Defines the directory mode which directories imported from WebDAV storage will have in Onedata. Values should be provided in octal format e.g. `0775`.\n",
              "default": "0775",
              "x-onedata-default-value": "<<\"0775\">>"
            },
            "storagePathType": {
              "type": "string",
              "default": "canonical",
              "x-onedata-default-value": "<<\"canonical\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            }
          },
          "required": [
            "type",
            "endpoint"
          ]
        },
        {
          "$ref": "#/definitions/WebdavCredentials"
        }
      ],
      "example": {
        "type": "webdav",
        "name": "SomeWebDAV",
        "endpoint": "https://192.168.1.2:8080/webdav",
        "verifyServerCertificate": false,
        "credentialsType": "oauth2",
        "credentials": "eudat",
        "oauth2IdP": "b2access",
        "rangeWriteSupport": "moddav",
        "connectionPoolSize": 25,
        "maximumUploadSize": 0,
        "skipStorageDetection": false
      }
    },
    "WebdavModify": {
      "description": "The WebDAV storage configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"webdav\"`\n\nStorage backend compatible with\n[WebDAV](https://tools.ietf.org/html/rfc4918) protocol.\n",
              "enum": [
                "webdav"
              ],
              "x-discriminator-value": "webdav"
            },
            "endpoint": {
              "type": "string",
              "description": "Full URL of the WebDAV server, including scheme (http or https) and path.\n"
            },
            "verifyServerCertificate": {
              "type": "boolean",
              "description": "Determines whether Oneprovider should verify the certificate of the WebDAV server.\n"
            },
            "credentialsType": {
              "type": "string",
              "description": "Determines the types of credentials provided in the credentials field.\n",
              "enum": [
                "none",
                "basic",
                "token"
              ]
            },
            "credentials": {
              "type": "string",
              "description": "The credentials to authenticate with the WebDAV server. `basic` credentials should be provided in the form `username:password`, for `token` just the token. For `none` this field is ignored.\n"
            },
            "authorizationHeader": {
              "type": "string",
              "description": "The authorization header to be used for passing the access token. This field can contain any prefix that should be added to the header value. Default is `Authorization: Bearer {}`. The token will placed where `{}` is provided.\n"
            },
            "rangeWriteSupport": {
              "type": "string",
              "description": "The type of partial write support enabled in the WebDAV server. Currently 2 types are supported `sabredav` which assumes the server supports the SabreDAV PartialUpdate extension via `PATCH` method, and `moddav` which assumes server supports partial `PUT` requests with `Content-Range` header. If `none` is selected no write support is available for this WebDAV storage.\n",
              "enum": [
                "none",
                "moddav",
                "sabredav"
              ]
            },
            "connectionPoolSize": {
              "type": "integer",
              "description": "Defines the maximum number of parallel connections for a single WebDAV storage.\n"
            },
            "maximumUploadSize": {
              "type": "integer",
              "description": "Defines the maximum upload size for a single `PUT` or `PATCH` request. If set to 0, assumes that the WebDAV server has no upload limit.\n"
            },
            "fileMode": {
              "type": "string",
              "description": "Defines the file permissions, which files imported from WebDAV storage will have in Onedata. Values should be provided in octal format e.g. `0644`.\n"
            },
            "dirMode": {
              "type": "string",
              "description": "Defines the directory mode which directories imported from WebDAV storage will have in Onedata. Values should be provided in octal format e.g. `0775`.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "webdav",
        "name": "SomeWebDAV",
        "endpoint": "https://192.168.1.2:8080/webdav",
        "verifyServerCertificate": false,
        "credentialsType": "basic",
        "credentials": "admin:password",
        "rangeWriteSupport": "moddav",
        "connectionPoolSize": 25,
        "maximumUploadSize": 0
      }
    },
    "XRootDCredentials": {
      "description": "Credentials on the XRootD storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "xrootd"
              ],
              "x-discriminator-value": "xrootd"
            },
            "credentialsType": {
              "type": "string",
              "description": "Determines the types of credentials provided in the credentials field.\n",
              "enum": [
                "none",
                "pwd"
              ],
              "default": "none",
              "x-onedata-default-value": "<<\"none\">>"
            },
            "credentials": {
              "type": "string",
              "description": "The credentials to authenticate with the XRootD server. For `pwd` credentials type, this field should contain simply user and password, e.g. `admin:password`. For `none` this field is ignored.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "xrootd",
        "credentialsType": "pwd",
        "credentials": "admin:password"
      }
    },
    "XRootD": {
      "description": "The XRootD storage configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"xrootd\"`\n\nStorage backend compatible with [XRootD](http://www.xrootd.org/)\nprotocol.\n",
              "enum": [
                "xrootd"
              ],
              "x-discriminator-value": "xrootd"
            },
            "url": {
              "type": "string",
              "description": "Full URL of the XRootD server, including scheme (root or http) and path, e.g. `root://192.168.0.1//data`. Please note, that XRootD URL format requires double slash after host to indicate absolute path.\n"
            },
            "fileModeMask": {
              "type": "string",
              "description": "Defines the file permissions mask, which is used to map XRootD file mode to POSIX mode. For instance a fileModeMask `0664` for readable file on XRootD would result in a file which is readable for all users, but file which is writeable in XRootD will be only writeable by user and group.\n",
              "default": "0664",
              "x-onedata-default-value": "<<\"0664\">>"
            },
            "dirModeMask": {
              "type": "string",
              "description": "Defines the directory permissions mask, which is used to map XRootD dir mode to POSIX mode. For instance a dirModeMask `0770` for readable directory on XRootD would result in a directory which is readable for owner and group but not for others.\n",
              "default": "0775",
              "x-onedata-default-value": "<<\"0775\">>"
            },
            "storagePathType": {
              "type": "string",
              "default": "canonical",
              "x-onedata-default-value": "<<\"canonical\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            }
          },
          "required": [
            "type",
            "url"
          ]
        },
        {
          "$ref": "#/definitions/XRootDCredentials"
        }
      ],
      "example": {
        "type": "xrootd",
        "name": "SomeXRootD",
        "url": "root://192.168.1.2//data",
        "credentialsType": "pwd",
        "credentials": "admin:password",
        "fileModeMask": "0664",
        "fileDirMask": "0775",
        "skipStorageDetection": false
      }
    },
    "XRootDModify": {
      "description": "The XRootD storage configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"xrootd\"`\n\nStorage backend compatible with [XRootD](http://www.xrootd.org/)\nprotocol.\n",
              "enum": [
                "xrootd"
              ],
              "x-discriminator-value": "xrootd"
            },
            "url": {
              "type": "string",
              "description": "Full URL of the XRootD server, including scheme (root or http) and path, e.g. `root://192.168.0.1//data`. Please note, that XRootD URL format requires double slash after host to indicate absolute path.\n"
            },
            "credentialsType": {
              "type": "string",
              "description": "Determines the types of credentials provided in the credentials field.\n",
              "enum": [
                "none",
                "pwd"
              ]
            },
            "credentials": {
              "type": "string",
              "description": "The credentials to authenticate with the XRootD server. For `pwd` credentials type, this field should contain simply user and password, e.g. `admin:password`. For `none` this field is ignored.\n"
            },
            "fileModeMask": {
              "type": "string",
              "description": "Defines the file permissions mask, which is used to map XRootD file mode to POSIX mode. For instance a fileModeMask `0664` for readable file on XRootD would result in a file which is readable for all users, but file which is writeable in XRootD will be only writeable by user and group.\n"
            },
            "dirModeMask": {
              "type": "string",
              "description": "Defines the directory permissions mask, which is used to map XRootD dir mode to POSIX mode. For instance a dirModeMask `0770` for readable directory on XRootD would result in a directory which is readable for owner and group but not for others.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "xrootd",
        "name": "SomeXRootD",
        "credentialsType": "pwd",
        "credentials": "admin:password"
      }
    },
    "HTTPCredentials": {
      "description": "Credentials on the HTTP storage.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "description": "Type of the storage. Must be given explicitly and must match the actual type of subject storage - this redundancy is needed due to limitations of OpenAPI polymorphism.\n",
              "type": "string",
              "enum": [
                "http"
              ],
              "x-discriminator-value": "http"
            },
            "credentialsType": {
              "type": "string",
              "description": "Determines the types of credentials provided in the credentials field.\n",
              "enum": [
                "none",
                "basic",
                "token",
                "oauth2"
              ],
              "default": "none",
              "x-onedata-default-value": "<<\"none\">>"
            },
            "credentials": {
              "type": "string",
              "description": "The credentials to authenticate with the HTTP server. `basic` credentials should be provided in the form `username:password`, for `token` just the token. In case of `oauth2`, this field should contain the username for the HTTP, while the token will be obtained and refreshed automatically in the background. For `none` this field is ignored.\n"
            },
            "oauth2IdP": {
              "type": "string",
              "description": "In case `oauth2` credential type is selected and Onezone is configured with support for multiple external IdP's, this field must contain the name of the IdP which authenticates requests to the HTTP endpoint. If Onezone has only one external IdP, it will be selected automatically.\n"
            },
            "onedataAccessToken": {
              "type": "string",
              "description": "When registering storage with feed of LUMA DB set to`auto` and with `oauth2` external IdP, this field must contain a valid Onedata access token of the user on whose behalf the HTTP storage will be accessed by all users with access to any space supported by this storage.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "http",
        "credentialsType": "oauth2",
        "credentials": "eudat",
        "oauth2IdP": "b2access"
      }
    },
    "HTTP": {
      "description": "The HTTP storage configuration.",
      "x-onedata-storage": true,
      "allOf": [
        {
          "$ref": "#/definitions/StorageGetDetails"
        },
        {
          "$ref": "#/definitions/StorageCreateDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"http\"`\n\nAny [HTTP](https://tools.ietf.org/html/rfc7231) or HTTPS compatible\nserver. Supported only with Readonly option enabled and in manual\nimport mode.\n",
              "enum": [
                "http"
              ],
              "x-discriminator-value": "http"
            },
            "endpoint": {
              "type": "string",
              "description": "Full URL of the HTTP server, including scheme (http or https) and path.\n"
            },
            "verifyServerCertificate": {
              "type": "boolean",
              "description": "Determines whether Oneprovider should verify the certificate of the HTTP server.\n",
              "default": true,
              "x-onedata-default-value": true
            },
            "authorizationHeader": {
              "type": "string",
              "description": "The authorization header to be used for passing the access token. This field can contain any prefix that should be added to the header value. Default is `Authorization: Bearer {}`. The token will placed where `{}` is provided.\n",
              "default": "Authorization: Bearer {}",
              "x-onedata-default-value": "<<\"Authorization: Bearer {}\">>"
            },
            "connectionPoolSize": {
              "type": "integer",
              "description": "Defines the maximum number of parallel connections for a single HTTP storage.\n",
              "default": 150,
              "x-onedata-default-value": 150
            },
            "fileMode": {
              "type": "string",
              "description": "Defines the file permissions, which files imported from HTTP storage will have in Onedata. Values should be provided in octal format e.g. `0664`.\n",
              "default": "0664"
            },
            "storagePathType": {
              "type": "string",
              "default": "canonical",
              "x-onedata-default-value": "<<\"canonical\">>",
              "description": "Determines how the logical file paths will be mapped on the storage.\n'canonical' paths reflect the logical file names and directory structure,\nhowever each rename operation will require renaming the files on the storage.\n'flat' paths are based on unique file UUID's and do not require on-storage\nrename when logical file name is changed.\n"
            }
          },
          "required": [
            "type",
            "endpoint"
          ]
        },
        {
          "$ref": "#/definitions/HTTPCredentials"
        }
      ],
      "example": {
        "type": "http",
        "name": "SomeHTTP",
        "endpoint": "https://192.168.1.2:8080/storage",
        "verifyServerCertificate": false,
        "credentialsType": "oauth2",
        "credentials": "eudat",
        "oauth2IdP": "b2access",
        "connectionPoolSize": 25,
        "skipStorageDetection": false
      }
    },
    "HTTPModify": {
      "description": "The HTTP storage configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/StorageModifyDetails"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "The type of storage.\n\n`type = \"http\"`\n\nAny [HTTP](https://tools.ietf.org/html/rfc7231) or HTTPS compatible\nserver. Supported only with Readonly option enabled and in manual\nimport mode.\n",
              "enum": [
                "http"
              ],
              "x-discriminator-value": "http"
            },
            "endpoint": {
              "type": "string",
              "description": "Full URL of the HTTP server, including scheme (http or https) and path.\n"
            },
            "verifyServerCertificate": {
              "type": "boolean",
              "description": "Determines whether Oneprovider should verify the certificate of the HTTP server.\n"
            },
            "credentialsType": {
              "type": "string",
              "description": "Determines the types of credentials provided in the credentials field.\n",
              "enum": [
                "none",
                "basic",
                "token"
              ]
            },
            "credentials": {
              "type": "string",
              "description": "The credentials to authenticate with the HTTP server. `basic` credentials should be provided in the form `username:password`, for `token` just the token. For `none` this field is ignored.\n"
            },
            "authorizationHeader": {
              "type": "string",
              "description": "The authorization header to be used for passing the access token. This field can contain any prefix that should be added to the header value. Default is `Authorization: Bearer {}`. The token will placed where `{}` is provided.\n"
            },
            "connectionPoolSize": {
              "type": "integer",
              "description": "Defines the maximum number of parallel connections for a single HTTP storage.\n"
            },
            "fileMode": {
              "type": "string",
              "description": "Defines the file permissions, which files imported from HTTP storage will have in Onedata. Values should be provided in octal format e.g. `0664`.\n"
            }
          },
          "required": [
            "type"
          ]
        }
      ],
      "example": {
        "type": "http",
        "name": "SomeHTTP",
        "endpoint": "https://192.168.1.2:8080/http",
        "verifyServerCertificate": false,
        "credentialsType": "basic",
        "credentials": "admin:password",
        "connectionPoolSize": 25
      }
    },
    "LumaConfig": {
      "type": "object",
      "description": "Configuration of Local User Mapping database (LUMA DB).",
      "properties": {
        "lumaFeed": {
          "type": "string",
          "description": "Type of feed for LUMA DB. Feed is a source of user/group mappings used to populate the LUMA DB. For more info please read: https://onedata.org/#/home/documentation/doc/administering_onedata/luma.html\n",
          "enum": [
            "auto",
            "local",
            "external"
          ]
        },
        "lumaFeedUrl": {
          "type": "string",
          "description": "URL of external feed for LUMA DB. Relevant only if lumaFeed equals `external`.\n"
        },
        "lumaFeedApiKey": {
          "type": "string",
          "description": "API key checked by external service used as feed for LUMA DB. Relevant only if lumaFeed equals `external`.\n"
        }
      },
      "required": [
        "lumaFeed"
      ],
      "example": {
        "lumaFeed": "external",
        "lumaFeedUrl": "http://example.external.luma.feed.com:8080",
        "lumaFeedApiKey": "ab9f4a57f303704ee75aa25808b898fd"
      }
    },
    "LumaUserMapping": {
      "type": "object",
      "description": "Mapping that will be stored in LUMA DB.",
      "properties": {
        "onedataUser": {
          "$ref": "#/definitions/LumaOnedataUser"
        },
        "storageUser": {
          "$ref": "#/definitions/LumaStorageUser"
        }
      },
      "required": [
        "onedataUser",
        "storageUser"
      ]
    },
    "LumaStorageUser": {
      "type": "object",
      "description": "Credentials identifying user on the local storage resources.",
      "properties": {
        "storageCredentials": {
          "$ref": "#/definitions/LumaStorageCredentials"
        },
        "displayUid": {
          "type": "integer",
          "description": "This value will be used in the Oneclient to display it's owner UID if the corresponding user is owner of the file.\n"
        }
      },
      "required": [
        "storageCredentials"
      ]
    },
    "LumaStorageCredentials": {
      "type": "object",
      "description": "Credentials that will be used to perform actions on the local storage resources in the context of the Onedata user.\n",
      "discriminator": "type",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "posix_credentials",
        "s3_credentials",
        "ceph_credentials",
        "cephrados_credentials",
        "swift_credentials",
        "glusterfs_credentials",
        "nulldevice_credentials",
        "webdav_credentials",
        "xrootd_credentials",
        "http_credentials"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Type of the storage. Must match the type of existing storage, needed only for OpenAPI polymorphism disambiguation.\n"
        }
      }
    },
    "LumaOnedataUserScheme": {
      "description": "Representation of Onedata user in the Onedata system.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaOnedataUser"
        },
        {
          "type": "object",
          "properties": {
            "mappingScheme": {
              "type": "string",
              "description": "Name of scheme used to represent user identity.",
              "enum": [
                "onedataUser"
              ],
              "x-discriminator-value": "onedataUser"
            },
            "onedataUserId": {
              "type": "string",
              "description": "The id of user in Onedata system."
            }
          },
          "required": [
            "mappingScheme",
            "onedataUserId"
          ]
        }
      ]
    },
    "LumaIdpUserScheme": {
      "description": "Representation of Onedata user in an external identity provider.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaOnedataUser"
        },
        {
          "type": "object",
          "properties": {
            "mappingScheme": {
              "type": "string",
              "description": "Name of scheme used to represent user identity.",
              "enum": [
                "idpUser"
              ],
              "x-discriminator-value": "idpUser"
            },
            "idp": {
              "type": "string",
              "description": "The id of an external identity provider."
            },
            "subjectId": {
              "type": "string",
              "description": "The id of the user understood by the external identity provider."
            },
            "onedataUserId": {
              "type": "string",
              "description": "The id of user in Onedata system."
            }
          },
          "required": [
            "mappingScheme",
            "idp",
            "subjectId"
          ]
        }
      ]
    },
    "LumaOnedataUser": {
      "type": "object",
      "description": "Representation of Onedata user.",
      "discriminator": "mappingScheme",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "luma_onedata_user_scheme",
        "luma_idp_user_scheme"
      ],
      "properties": {
        "mappingScheme": {
          "type": "string",
          "description": "Name of scheme used to represent user identity."
        }
      }
    },
    "LumaOnedataGroupScheme": {
      "description": "Representation of Onedata group in the Onedata system.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaOnedataGroup"
        },
        {
          "type": "object",
          "properties": {
            "mappingScheme": {
              "type": "string",
              "description": "Name of scheme used to represent group identity.",
              "enum": [
                "onedataGroup"
              ],
              "x-discriminator-value": "onedataGroup"
            },
            "onedataGroupId": {
              "type": "string",
              "description": "The id of group in the Onedata system."
            }
          },
          "required": [
            "mappingScheme",
            "onedataGroupId"
          ]
        }
      ]
    },
    "LumaIdpEntitlementScheme": {
      "description": "Representation of Onedata group in an external identity provider.",
      "allOf": [
        {
          "$ref": "#/definitions/LumaOnedataGroup"
        },
        {
          "type": "object",
          "properties": {
            "mappingScheme": {
              "type": "string",
              "description": "Name of scheme used to represent group identity.",
              "enum": [
                "idpEntitlement"
              ],
              "x-discriminator-value": "idpEntitlement"
            },
            "idp": {
              "type": "string",
              "description": "The id of an external identity provider."
            },
            "idpEntitlement": {
              "type": "string",
              "description": "The id of the group understood by the external identity provider, in the same format as received during OIDC/SAML login flow.\n"
            },
            "onedataGroupId": {
              "type": "string",
              "description": "The id of group in the Onedata system."
            }
          },
          "required": [
            "mappingScheme",
            "idp",
            "idpEntitlement"
          ]
        }
      ]
    },
    "LumaOnedataGroup": {
      "type": "object",
      "description": "Representation of Onedata group.",
      "discriminator": "mappingScheme",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "luma_onedata_group_scheme",
        "luma_idp_entitlement_scheme"
      ],
      "properties": {
        "mappingScheme": {
          "type": "string",
          "description": "Name of scheme used to represent group identity."
        }
      }
    },
    "CephCluster": {
      "description": "Describes whole of Ceph configuration.",
      "allOf": [
        {
          "$ref": "#/definitions/CephGlobalParams"
        },
        {
          "$ref": "#/definitions/CephOsds"
        },
        {
          "$ref": "#/definitions/CephMonitors"
        },
        {
          "$ref": "#/definitions/CephManagers"
        }
      ]
    },
    "CephGlobalParams": {
      "type": "object",
      "description": "Describes global Ceph cluster configuration.",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the cluster.",
          "default": "ceph"
        },
        "fsid": {
          "type": "string",
          "description": "Unique UUID of the cluster. Autogenerated when cluster is deployed if not specified."
        }
      }
    },
    "CephManager": {
      "type": "object",
      "description": "Ceph manager specification.",
      "properties": {
        "host": {
          "type": "string",
          "description": "Host on which given manager should be deployed."
        },
        "id": {
          "type": "string",
          "readOnly": true,
          "description": "Manager identifier. Equal to the hostname."
        }
      }
    },
    "CephManagers": {
      "type": "object",
      "description": "Object containing a list of Ceph manager daemons.",
      "properties": {
        "managers": {
          "type": "array",
          "description": "List of Ceph manager configurations.",
          "items": {
            "$ref": "#/definitions/CephManager"
          }
        }
      }
    },
    "CephMonitor": {
      "type": "object",
      "description": "Ceph monitor specification.",
      "properties": {
        "host": {
          "type": "string",
          "description": "Host on which given monitor should be deployed. There may be only one monitor per host. Attempts at creating additional monitors at the same host will be ignored."
        },
        "ip": {
          "type": "string",
          "description": "Local IP to be used for communication between Ceph nodes. If not specified it will be autodetected."
        },
        "id": {
          "type": "string",
          "readOnly": true,
          "description": "Monitor identifier. Equal to the hostname of the node where monitor is deployed."
        }
      },
      "required": [
        "host"
      ]
    },
    "CephMonitors": {
      "type": "object",
      "description": "Object containing a list of Ceph monitor daemons.",
      "properties": {
        "monitors": {
          "type": "array",
          "description": "List of Ceph monitor specifications.",
          "items": {
            "$ref": "#/definitions/CephMonitor"
          }
        }
      }
    },
    "CephOsd": {
      "type": "object",
      "description": "The cluster storage configuration.",
      "discriminator": "type",
      "x-onedata-oneof": true,
      "x-onedata-subclasses": [
        "blockdevice",
        "loopdevice"
      ],
      "properties": {
        "host": {
          "type": "string",
          "description": "Host on which given OSD should be deployed. It must be the full host name and not an \"alias\" as used in Oneprovider cluster deployment."
        },
        "id": {
          "type": "integer",
          "readOnly": true,
          "description": "Id of the OSD."
        },
        "uuid": {
          "type": "string",
          "description": "UUID of the OSD daemon. If provided, will be used to skip deployment of existing OSDs (identified by the UUID). Must be a 32-character hex string. By default will be generated automatically."
        }
      },
      "required": [
        "host",
        "id"
      ]
    },
    "blockdevice": {
      "description": "Blockdevice OSD specification. Blockdevice means OSD is backed by a whole block device formatted to its needs.",
      "allOf": [
        {
          "$ref": "#/definitions/CephOsd"
        },
        {
          "type": "object",
          "x-discriminator-value": "blockdevice",
          "properties": {
            "type": {
              "description": "Type of the OSD. Available types are:\n- blockdevice - formats a raw block device to store the data\n- loopdevice - stores data in a file mounted as loop device\n",
              "type": "string",
              "enum": [
                "blockdevice"
              ],
              "x-discriminator-value": "blockdevice",
              "x-discriminator": true
            },
            "device": {
              "type": "string",
              "description": "Specifies block device to be ERASED and FORMATTED for use as the main data store of this OSD.\n"
            }
          },
          "required": [
            "type",
            "device"
          ]
        }
      ],
      "example": {
        "type": "blockdevice",
        "host": "node1.example.com",
        "uuid": "b816e26e-5890-4ffe-ba6b-929f45b2ebfb",
        "device": "/dev/sdb"
      }
    },
    "loopdevice": {
      "description": "Loopdevice OSD specification. This is a Blockdevice OSD backed by a loopdevice backed by a file in given directory.",
      "allOf": [
        {
          "$ref": "#/definitions/CephOsd"
        },
        {
          "type": "object",
          "x-discriminator-value": "loopdevice",
          "properties": {
            "type": {
              "description": "Type of the OSD. Available types are:\n- blockdevice - formats a raw block device to store the data\n- loopdevice - stores data in a file mounted as loop device\n",
              "type": "string",
              "enum": [
                "loopdevice"
              ],
              "x-discriminator-value": "loopdevice",
              "x-discriminator": true
            },
            "path": {
              "type": "string",
              "description": "Path of the loopdevice file to be created. If omitted, default path will be generated according to following template:\n/volumes/persistence/ceph-loopdevices/osd-{uuid}.loop\n"
            },
            "size": {
              "type": "integer",
              "description": "Size in bytes of the loopdevice file."
            }
          },
          "required": [
            "type",
            "size"
          ]
        }
      ]
    },
    "CephOsds": {
      "type": "object",
      "description": "Object containing a list of Ceph OSD specifications.",
      "properties": {
        "osds": {
          "type": "array",
          "description": "List of Ceph OSD specifications.",
          "items": {
            "$ref": "#/definitions/CephOsd"
          }
        }
      }
    },
    "CephUsage": {
      "type": "object",
      "description": "Summary of storage space usage in the ceph cluster.",
      "properties": {
        "total": {
          "$ref": "#/definitions/DataUsage"
        },
        "osds": {
          "type": "object",
          "description": "Dictionary of OSDs with associated usage data.",
          "additionalProperties": {
            "$ref": "#/definitions/DataUsage"
          }
        },
        "pools": {
          "type": "object",
          "description": "Dictionary of pools with associated usage data.",
          "additionalProperties": {
            "$ref": "#/definitions/CephPoolUsage"
          }
        }
      },
      "required": [
        "total",
        "osds",
        "pools"
      ]
    },
    "CephPoolUsage": {
      "type": "object",
      "description": "Space usage of a single Ceph pool.",
      "properties": {
        "used": {
          "type": "integer",
          "description": "Total size of objects in the pool in bytes."
        },
        "maxAvailable": {
          "type": "integer",
          "description": "Projected size in bytes of data which may be written to the pool. See \"Checking a Cluster’s Usage Stats\" in the Ceph documentation."
        }
      },
      "required": [
        "used",
        "max_available"
      ]
    },
    "CephPool": {
      "type": "object",
      "description": "Describes a Ceph pool.",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the pool.",
          "readOnly": true
        },
        "copiesNumber": {
          "type": "integer",
          "minimum": 1,
          "description": "Desired number of object replicas in the pool. When below this number the pool still may be used in 'degraded' mode. Defaults to `2` if there are at least 2 OSDs, `1` otherwise."
        },
        "minCopiesNumber": {
          "type": "integer",
          "minimum": 1,
          "description": "Minimum number of object replicas in the pool. Below this threshold any I/O for the pool is disabled. Must be lower or equal to 'copiesNumber'. Defaults to `min(2, copiesNumber)` if there are at least 2 OSDs, `1` otherwise."
        }
      }
    },
    "CephPools": {
      "type": "object",
      "description": "Object containing a list of Ceph pools.",
      "properties": {
        "pools": {
          "type": "array",
          "description": "List of Ceph pools.",
          "items": {
            "$ref": "#/definitions/CephPool"
          }
        }
      }
    },
    "CephStatus": {
      "type": "object",
      "description": "Status report of the Ceph cluster.",
      "properties": {
        "level": {
          "type": "string",
          "description": "General health status.",
          "enum": [
            "ok",
            "warning",
            "error"
          ]
        },
        "messages": {
          "type": "array",
          "description": "List of Ceph status messages.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "level",
        "messages"
      ]
    },
    "StorageCreateRequest": {
      "type": "object",
      "description": "The configuration details required to add storage resources.\n",
      "x-onedata-dictionary": true,
      "x-onedata-dictionary-value-type": "storage_create_details",
      "additionalProperties": {
        "$ref": "#/definitions/StorageCreateDetails"
      },
      "example": {
        "s3": {
          "type": "s3",
          "s3Hostname": "https://s3.example.com",
          "iamHostname": "iam.example.com",
          "bucketName": "bucket1.iam.example.com",
          "accessKey": "4efb70ad3e1fc8dd73c721b8f683b2e831503892",
          "secretKey": "fdeac26aedd3a179f9551d7007cc6a6273165782"
        },
        "swift": {
          "type": "swift",
          "authUrl": "http://keystone2.example.com",
          "tenantName": "Project1",
          "containerName": "Container1",
          "username": "user",
          "password": "p@$$w0rd"
        }
      }
    },
    "StorageModifyRequest": {
      "type": "object",
      "description": "The storage parameters to be changed. Should be a single-valued dictionary with storage name as the key and parameters to be changed as the value. If changing the storage name, use old name as dictionary key and provide new name among the changed params.",
      "x-onedata-dictionary": true,
      "x-onedata-dictionary-value-type": "storage_modify_details",
      "additionalProperties": {
        "$ref": "#/definitions/StorageModifyDetails"
      },
      "example": {
        "Old storage name": {
          "type": "s3",
          "name": "New storage name",
          "accessKey": "4efb70ad3e1fc8dd73c721b8f683b2e831503892"
        }
      }
    },
    "ZoneConfiguration": {
      "type": "object",
      "description": "The Onezone deployment configuration.",
      "properties": {
        "cluster": {
          "$ref": "#/definitions/ZoneClusterConfiguration"
        },
        "onezone": {
          "type": "object",
          "description": "The Onezone custom configuration.",
          "properties": {
            "domainName": {
              "description": "The domain of Onezone cluster.",
              "type": "string"
            },
            "name": {
              "description": "The Onezone cluster name.",
              "type": "string"
            },
            "letsEncryptEnabled": {
              "type": "boolean",
              "default": false,
              "description": "If enabled the zone will use Let's Encrypt service to obtain SSL certificates. Otherwise certificates must be manually provided.\nBy enabling this option you agree to the Let's Encrypt Subscriber Agreement.\n"
            },
            "builtInDnsServer": {
              "type": "boolean",
              "description": "If true, DNS check will verify that control of DNS zone for Onezone's domain was delegated to the DNS server built into Onezone service.\n"
            },
            "policies": {
              "$ref": "#/definitions/ZonePolicies"
            },
            "users": {
              "type": "array",
              "description": "List of Onezone user specifications.",
              "x-onedata-default-value": "[]",
              "default": [],
              "items": {
                "$ref": "#/definitions/OnezoneUserCreateRequest"
              }
            }
          },
          "required": [
            "domainName",
            "name"
          ]
        },
        "onepanel": {
          "$ref": "#/definitions/PanelConfiguration"
        }
      },
      "required": [
        "cluster",
        "onezone"
      ],
      "example": {
        "cluster": {
          "domainName": "onezone.onedata.example.com",
          "nodes": {
            "node1": {
              "hostname": "node1"
            }
          },
          "manager": {
            "mainNode": "node1",
            "nodes": [
              "node1"
            ]
          },
          "worker": {
            "nodes": [
              "node1"
            ]
          },
          "database": {
            "nodes": [
              "node1"
            ]
          }
        },
        "onezone": {
          "domainName": "example.com",
          "name": "example",
          "letsEncryptEnabled": true,
          "users": [
            {
              "username": "ozadmin",
              "password": "somepassword",
              "groups": [
                "admins"
              ]
            }
          ]
        }
      }
    },
    "ZoneConfigurationDetails": {
      "type": "object",
      "description": "The zone cluster configuration.",
      "properties": {
        "cluster": {
          "$ref": "#/definitions/ClusterConfigurationDetails"
        },
        "onezone": {
          "type": "object",
          "description": "The zone custom configuration.",
          "properties": {
            "domainName": {
              "description": "Onezone's domain.",
              "type": "string"
            },
            "name": {
              "description": "The name of a zone.",
              "type": "string"
            },
            "configured": {
              "description": "True if all steps of cluster deployment and configuration have been performed.",
              "type": "boolean"
            }
          },
          "required": [
            "domainName",
            "name",
            "configured"
          ]
        }
      },
      "required": [
        "cluster",
        "onezone"
      ],
      "example": {
        "cluster": {
          "master": "node1.onezone.onedata.example.com",
          "managers": {
            "mainHost": "node1.onezone.onedata.example.com",
            "hosts": [
              "node1.onezone.onedata.example.com"
            ]
          },
          "workers": {
            "hosts": [
              "node1.onezone.onedata.example.com"
            ]
          },
          "databases": {
            "hosts": [
              "node1.onezone.onedata.example.com"
            ]
          }
        },
        "onezone": {
          "domainName": "example.com",
          "name": "example",
          "configured": true
        }
      }
    },
    "ZoneClusterConfiguration": {
      "type": "object",
      "description": "The zone cluster configuration.",
      "properties": {
        "domainName": {
          "type": "string",
          "default": "",
          "description": "Hostname suffix common for all services in the cluster. Together with a node hostname constitutes a fully qualified domain name (FQDN) of the node. May be skipped to allow unrelated hostnames for each node.\n"
        },
        "nodes": {
          "type": "object",
          "description": "The collection of nodes aliases associated with nodes properties.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "hostname": {
                "type": "string",
                "description": "The name of a host."
              },
              "externalIp": {
                "type": "string",
                "description": "External IP of the node."
              }
            },
            "required": [
              "hostname"
            ]
          }
        },
        "databases": {
          "$ref": "#/definitions/ClusterDatabases"
        },
        "managers": {
          "$ref": "#/definitions/ClusterManagers"
        },
        "workers": {
          "$ref": "#/definitions/ClusterWorkers"
        }
      },
      "required": [
        "nodes",
        "databases",
        "managers",
        "workers"
      ]
    },
    "ProviderConfiguration": {
      "type": "object",
      "description": "The provider deployment configuration.",
      "properties": {
        "cluster": {
          "$ref": "#/definitions/ProviderClusterConfiguration"
        },
        "ceph": {
          "$ref": "#/definitions/CephCluster"
        },
        "oneprovider": {
          "type": "object",
          "description": "The provider registration data.",
          "properties": {
            "register": {
              "type": "boolean",
              "description": "Defines whether the provider should be registered in a zone."
            },
            "tokenProvisionMethod": {
              "type": "string",
              "description": "Indicates how the Oneprovider registration token will be provided:\n* `\"inline\"` - the registration token must be placed in the **token**\n  field (consult for more information).\n* `\"fromFile\"` - the registration token will be read from given file,\n  specified in the **tokenFile** field (consult for more information).\n",
              "enum": [
                "inline",
                "fromFile"
              ],
              "default": "inline",
              "x-onedata-default-value": "<<\"inline\">>"
            },
            "token": {
              "type": "string",
              "description": "Registration token obtained from Onezone. This token identifies the Onezone service where the Oneprovider will be registered and authorizes the registration request. Required when the `tokenProvisionMethod` is set to `\"inline\"`.\n"
            },
            "tokenFile": {
              "type": "string",
              "description": "Absolute path to the file containing the Oneprovider registration token. The token (and nothing else) should be placed in the file as plaintext. The file does not have to pre-exist - it may be created after this request is made (Onepanel will wait for the file to appear for some time). Required when the `tokenProvisionMethod` is set to `\"fromFile\"`.\n"
            },
            "name": {
              "type": "string",
              "description": "The name under which the provider will be registered in a zone."
            },
            "subdomainDelegation": {
              "type": "boolean",
              "description": "If enabled, the storage provider will be assigned a subdomain in onezone's domain and 'subdomain' property must be provided. If disabled, 'domain' property should be provided.\n",
              "default": false
            },
            "subdomain": {
              "type": "string",
              "description": "Unique subdomain in onezone's domain for the provider. Required if subdomain delegation is enabled.\n"
            },
            "letsEncryptEnabled": {
              "type": "boolean",
              "default": false,
              "description": "If enabled the provider will use Let's Encrypt service to obtain SSL certificates. Otherwise certificates must be manually provided. This option cannot be enabled if subdomainDelegation is false. By enabling this option you agree to the Let's Encrypt Subscriber Agreement.\n"
            },
            "domain": {
              "type": "string",
              "description": "The fully qualified domain name of the provider or its IP address (only for single-node deployments or clusters with a reverse proxy). Required if subdomain delegation is disabled.\n"
            },
            "geoLongitude": {
              "type": "number",
              "format": "float",
              "description": "The geographical longitude of the provider."
            },
            "geoLatitude": {
              "type": "number",
              "format": "float",
              "description": "The geographical latitude of the provider."
            },
            "adminEmail": {
              "type": "string",
              "description": "Email address of the oneprovider administrator."
            }
          },
          "required": [
            "register",
            "name",
            "adminEmail"
          ]
        },
        "onepanel": {
          "$ref": "#/definitions/PanelConfiguration"
        }
      },
      "required": [
        "cluster"
      ],
      "example": {
        "cluster": {
          "domainName": "oneprovider.onedata.example.com",
          "nodes": {
            "node1": {
              "hostname": "node1",
              "externalIp": "128.128.64.64"
            },
            "node2": {
              "hostname": "node2"
            }
          },
          "manager": {
            "mainNode": "node1",
            "nodes": [
              "node1",
              "node2"
            ]
          },
          "worker": {
            "nodes": [
              "node1"
            ]
          },
          "database": {
            "nodes": [
              "node1"
            ]
          },
          "storage": {
            "NFS": {
              "type": "posix",
              "mountPoint": "/volumes/storage"
            }
          }
        },
        "oneprovider": {
          "register": true,
          "token": "MDAzM2xvY2F00aW9uIGRldi1vbmV6b25lLmRlZmF1...",
          "name": "example",
          "subdomainDelegation": "false,",
          "letsEncryptEnabled": "false,",
          "domain": "provider.example.com",
          "adminEmail": "admin@example.eu",
          "geoLongitude": -24.3776025,
          "geoLatitude": -128.3519364
        }
      }
    },
    "ProviderConfigurationDetails": {
      "type": "object",
      "description": "The provider deployment configuration.",
      "properties": {
        "cluster": {
          "$ref": "#/definitions/ClusterConfigurationDetails"
        },
        "oneprovider": {
          "type": "object",
          "description": "The provider custom configuration.",
          "properties": {
            "name": {
              "description": "The name of a provider. `null` if not registered.",
              "type": "string"
            },
            "configured": {
              "description": "True if all steps of cluster deployment and configuration have been performed.",
              "type": "boolean"
            }
          },
          "required": [
            "name",
            "configured"
          ]
        },
        "ceph": {
          "$ref": "#/definitions/CephCluster"
        }
      },
      "required": [
        "cluster",
        "oneprovider"
      ],
      "example": {
        "cluster": {
          "master": "node1.oneprovider.onedata.example.com",
          "managers": {
            "mainHost": "node1.oneprovider.onedata.example.com",
            "hosts": [
              "node1.oneprovider.onedata.example.com"
            ]
          },
          "workers": {
            "hosts": [
              "node1.oneprovider.onedata.example.com"
            ]
          },
          "databases": {
            "hosts": [
              "node1.oneprovider.onedata.example.com"
            ]
          }
        },
        "oneprovider": {
          "name": "example",
          "configured": true
        }
      }
    },
    "ProviderClusterConfiguration": {
      "type": "object",
      "description": "The provider cluster configuration.",
      "properties": {
        "domainName": {
          "type": "string",
          "default": "",
          "description": "Hostname suffix common for all services in the cluster. Together with a node hostname constitutes a fully qualified domain name (FQDN) of the node. May be skipped to allow unrelated hostnames for each node.\n"
        },
        "nodes": {
          "type": "object",
          "description": "The collection of nodes aliases associated with nodes properties.",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "hostname": {
                "type": "string",
                "description": "The name of a host."
              },
              "externalIp": {
                "type": "string",
                "description": "External IP of the node."
              }
            },
            "required": [
              "hostname"
            ]
          }
        },
        "databases": {
          "$ref": "#/definitions/ClusterDatabases"
        },
        "managers": {
          "$ref": "#/definitions/ClusterManagers"
        },
        "workers": {
          "$ref": "#/definitions/ClusterWorkers"
        },
        "storages": {
          "$ref": "#/definitions/StorageCreateRequest"
        }
      },
      "required": [
        "nodes",
        "databases",
        "managers",
        "workers"
      ]
    },
    "ProviderDetails": {
      "type": "object",
      "description": "The Oneprovider configuration details.",
      "properties": {
        "id": {
          "type": "string",
          "description": "The Id assigned by a zone."
        },
        "name": {
          "type": "string",
          "description": "The name under which the Oneprovider has been registered in a zone."
        },
        "subdomainDelegation": {
          "type": "boolean",
          "description": "If enabled, the storage Oneprovider has a subdomain in onezone's domain and 'subdomain' property must be provided.\n"
        },
        "subdomain": {
          "type": "string",
          "description": "Unique subdomain in onezone's domain for the Oneprovider. Required if subdomain delegation is enabled.\n"
        },
        "domain": {
          "type": "string",
          "description": "The fully qualified domain name of the Oneprovider or its IP address (only for single-node deployments or clusters with a reverse proxy).\n"
        },
        "adminEmail": {
          "type": "string",
          "description": "Email address of the Oneprovider administrator. Omitted if it could not be retrievied."
        },
        "geoLongitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical longitude of the Oneprovider."
        },
        "geoLatitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical latitude of the Oneprovider."
        },
        "onezoneDomainName": {
          "type": "string",
          "description": "The domain name of a zone where this storage Oneprovider is registered."
        }
      },
      "required": [
        "id",
        "name",
        "subdomainDelegation",
        "domain",
        "geoLongitude",
        "geoLatitude",
        "onezoneDomainName"
      ],
      "example": {
        "id": "VAiDGZbs3k0FD8jPhyU1",
        "name": "Provider1",
        "subdomainDelegation": false,
        "domain": "provider.example.com",
        "geoLongitude": -24.3776025,
        "geoLatitude": -128.3519364,
        "onezoneDomainName": "onezone2.example.com"
      }
    },
    "ProviderSpaces": {
      "type": "object",
      "description": "The provider spaces details.",
      "properties": {
        "ids": {
          "type": "array",
          "description": "The list of IDs of spaces supported by a provider.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "ids"
      ],
      "example": {
        "ids": [
          "x7It3cpgNgLZ8RwOrOoW",
          "Q1boCClpCS5mUNhM7YCy"
        ]
      }
    },
    "ProviderStorages": {
      "type": "object",
      "description": "The cluster storage resources.",
      "properties": {
        "ids": {
          "type": "array",
          "description": "The list of Ids of cluster storage resources.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "ids"
      ],
      "example": {
        "ids": [
          "x7It3cpgNgLZ8RwOrOoW",
          "Q1boCClpCS5mUNhM7YCy"
        ]
      }
    },
    "ProviderRegisterRequest": {
      "type": "object",
      "description": "The storage provider configuration details required for registration process.\n",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name under which the provider should be registered in a zone.\n"
        },
        "tokenProvisionMethod": {
          "type": "string",
          "description": "Indicates how the Oneprovider registration token will be provided:\n* `\"inline\"` - the registration token must be placed in the **token**\n  field (consult for more information).\n* `\"fromFile\"` - the registration token will be read from given file,\n  specified in the **tokenFile** field (consult for more information).\n",
          "enum": [
            "inline",
            "fromFile"
          ],
          "default": "inline",
          "x-onedata-default-value": "<<\"inline\">>"
        },
        "token": {
          "type": "string",
          "description": "Registration token obtained from Onezone. This token identifies the Onezone service where the Oneprovider will be registered and authorizes the registration request. Required when the `tokenProvisionMethod` is set to `\"inline\"`.\n"
        },
        "tokenFile": {
          "type": "string",
          "description": "Absolute path to the file containing the Oneprovider registration token. The token (and nothing else) should be placed in the file as plaintext. The file does not have to pre-exist - it may be created after this request is made (Onepanel will wait for the file to appear for some time). Required when the `tokenProvisionMethod` is set to `\"fromFile\"`.\n"
        },
        "subdomainDelegation": {
          "type": "boolean",
          "description": "If enabled, the storage provider will be assigned a subdomain in onezone's domain and 'subdomain' property must be provided. If disabled, 'domain' property should be provided.\n",
          "default": false
        },
        "subdomain": {
          "type": "string",
          "description": "Unique subdomain in onezone's domain for the storage provider. Required if subdomain delegation is enabled.\n"
        },
        "domain": {
          "type": "string",
          "description": "The fully qualified domain name of the storage provider or its IP address (only for single-node deployments or clusters with a reverse proxy). Required if subdomain delegation is disabled.\n"
        },
        "geoLongitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical longitude of the storage provider.\n"
        },
        "geoLatitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical latitude of the storage provider.\n"
        },
        "adminEmail": {
          "type": "string",
          "description": "Email address of the Oneprovider administrator."
        }
      },
      "required": [
        "name",
        "subdomainDelegation",
        "adminEmail"
      ],
      "example": {
        "name": "Provider1",
        "token": "MDAzM2xvY2F00aW9uIGRldi1vbmV6b25lLmRlZmF1...",
        "subdomainDelegation": false,
        "domain": "provider.example.com",
        "geoLongitude": -24.3776025,
        "geoLatitude": -128.3519364
      }
    },
    "ProviderModifyRequest": {
      "type": "object",
      "description": "The provider configuration details that can be modified.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name under which the provider has been registered in a zone."
        },
        "subdomainDelegation": {
          "type": "boolean",
          "description": "If enabled, the storage provider will be assigned a subdomain in onezone's domain and 'subdomain' property must be provided. If disabled, 'domain' property should be provided.\n"
        },
        "subdomain": {
          "type": "string",
          "description": "Unique subdomain in onezone's domain for the provider. This property is required only if subdomain delegation is enabled. Otherwise it is ignored.\n"
        },
        "domain": {
          "type": "string",
          "description": "The fully qualified domain name of the provider or its IP address (only for single-node deployments or clusters with a reverse proxy). This property is required only if subdomain delegation is disabled. Otherwise it is ignored.\n"
        },
        "geoLongitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical longitude of the provider."
        },
        "geoLatitude": {
          "type": "number",
          "format": "float",
          "description": "The geographical latitude of the provider."
        },
        "adminEmail": {
          "type": "string",
          "description": "Email address of the oneprovider administrator."
        }
      },
      "example": {
        "name": "Provider1",
        "subdomainDelegation": false,
        "domain": "provider.example.com",
        "geoLongitude": -24.3776025,
        "geoLatitude": -128.3519364
      }
    },
    "Progress": {
      "type": "object",
      "description": "Progress markers indicating which steps of interactive deployment were reached by the admin performing cluster setup.",
      "properties": {
        "clusterNodes": {
          "type": "boolean",
          "readOnly": true,
          "description": "True after user assigned services to cluster nodes and they were deployed."
        },
        "clusterIps": {
          "type": "boolean",
          "description": "True after user provided public IPs of cluster nodes or confirmed autodetected defaults. Also true if interactiveDeployment was disabled."
        },
        "webCertificate": {
          "type": "boolean",
          "description": "True after user decided whether to use Let's Encrypt certificates or if interactiveDeployment was disabled."
        },
        "dnsCheck": {
          "type": "boolean",
          "description": "True after user reviewed results of DNS check or if interactiveDeployment was disabled."
        },
        "storageSetup": {
          "type": "boolean",
          "readOnly": true,
          "description": "True after at least one storage was added to op_worker. Omitted in Onezone panel."
        },
        "isRegistered": {
          "type": "boolean",
          "readOnly": true,
          "description": "True if the Oneprovider is registered at Onezone. Omitted in Onezone panel."
        }
      }
    },
    "ProgressModify": {
      "type": "object",
      "description": "Progress markers which can be set or unset by the GUI.",
      "properties": {
        "clusterIps": {
          "type": "boolean",
          "description": "True after user confirmed detected external IPs or if interactiveDeployment was disabled."
        },
        "webCertificate": {
          "type": "boolean",
          "description": "True after user decided whether to use Let's Encrypt certificates or if interactiveDeployment was disabled."
        },
        "dnsCheck": {
          "type": "boolean",
          "description": "True after user reviewed results of DNS check or if interactiveDeployment was disabled."
        }
      }
    },
    "ServiceStatus": {
      "type": "object",
      "description": "The collection of hosts with associated service status, for each host\nwhere given service has been deployed.\n",
      "x-onedata-dictionary": true,
      "x-onedata-dictionary-value-type": "service_status_host",
      "additionalProperties": {
        "$ref": "#/definitions/ServiceStatusHost"
      },
      "example": {
        "node1.oneprovider.onedata.example.com": "healthy",
        "node2.oneprovider.onedata.example.com": "stopped"
      }
    },
    "ServiceStatusHost": {
      "type": "string",
      "description": "The service status.",
      "enum": [
        "starting",
        "healthy",
        "unhealthy",
        "stopping",
        "stopped",
        "missing"
      ]
    },
    "ServiceHosts": {
      "type": "object",
      "description": "The service hosts configuration.",
      "properties": {
        "hosts": {
          "type": "array",
          "description": "The list of hosts where service should be deployed.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "hosts"
      ],
      "example": {
        "hosts": [
          "node1.example.com",
          "node2.example.com",
          "node3.example.com"
        ]
      }
    },
    "ServiceDatabases": {
      "type": "object",
      "description": "The service hosts configuration.",
      "properties": {
        "hosts": {
          "type": "array",
          "description": "The list of hosts where service should be deployed.",
          "items": {
            "type": "string"
          }
        },
        "serverQuota": {
          "type": "integer",
          "description": "The server quota is the RAM memory in bytes that is allocated to the server when Couchbase Server is first installed. This sets the limit of RAM allocated by Couchbase for caching data for all buckets and is configured on a per-node basis.\n"
        },
        "bucketQuota": {
          "type": "integer",
          "description": "The bucket quota is the amount of RAM memory in bytes allocated to an individual bucket for caching data.\n"
        }
      },
      "required": [
        "hosts"
      ],
      "example": {
        "hosts": [
          "node1.example.com",
          "node2.example.com",
          "node3.example.com"
        ]
      }
    },
    "DatabaseHosts": {
      "type": "object",
      "description": "The cluster database service hosts configuration.",
      "properties": {
        "hosts": {
          "type": "array",
          "description": "The list of service hosts.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "hosts"
      ],
      "example": {
        "hosts": [
          "node1.example.com",
          "node2.example.com",
          "node3.example.com"
        ]
      }
    },
    "ManagerHosts": {
      "type": "object",
      "description": "The cluster manager service hosts configuration.",
      "properties": {
        "mainHost": {
          "type": "string",
          "description": "The main cluster manager host. Main cluster manager node is responsible for monitoring cluster worker nodes. Other nodes, which are redundant, are suspended. In case of main cluster manager node failure one of redundant nodes is resumed and takes over main node responsibilities.\n"
        },
        "hosts": {
          "type": "array",
          "description": "The list of service hosts.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "mainHost",
        "hosts"
      ],
      "example": {
        "mainHost": "node1.example.com",
        "hosts": [
          "node1.example.com",
          "node2.example.com",
          "node3.example.com"
        ]
      }
    },
    "WorkerHosts": {
      "type": "object",
      "description": "The cluster worker service hosts configuration.",
      "properties": {
        "hosts": {
          "type": "array",
          "description": "The list of service hosts.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "hosts"
      ],
      "example": {
        "hosts": [
          "node1.example.com",
          "node2.example.com",
          "node3.example.com"
        ]
      }
    },
    "Node": {
      "type": "object",
      "description": "Details of a onepanel node.",
      "properties": {
        "hostname": {
          "type": "string",
          "description": "Hostname of the node."
        },
        "clusterType": {
          "type": "string",
          "description": "Type of Onedata cluster managed by this onepanel.",
          "enum": [
            "oneprovider",
            "onezone"
          ]
        }
      },
      "required": [
        "hostname",
        "clusterType"
      ]
    },
    "ClusterConfigurationDetails": {
      "type": "object",
      "description": "The cluster configuration.",
      "properties": {
        "master": {
          "type": "string",
          "description": "Host responsible for deploying cluster and coordinating cluster restarts."
        },
        "hosts": {
          "type": "array",
          "description": "List of hosts belonging to the Onepanel cluster.",
          "items": {
            "type": "string"
          }
        },
        "databases": {
          "$ref": "#/definitions/DatabaseHosts"
        },
        "managers": {
          "$ref": "#/definitions/ManagerHosts"
        },
        "workers": {
          "$ref": "#/definitions/WorkerHosts"
        }
      },
      "required": [
        "master",
        "hosts",
        "databases",
        "managers",
        "workers"
      ]
    },
    "TaskId": {
      "type": "object",
      "description": "Object providing task Id of the started task.",
      "properties": {
        "taskId": {
          "type": "string"
        }
      },
      "example": {
        "taskId": "aAyV_mtGINPFuLxkqdn4oGeW2JlRmxIw8YKaUZnWDK8"
      }
    },
    "TaskStatus": {
      "type": "object",
      "description": "The result of a scheduled operation, e.g. database service configuration.\n",
      "properties": {
        "status": {
          "type": "string",
          "description": "The operation status.",
          "enum": [
            "ok",
            "error",
            "running"
          ]
        },
        "steps": {
          "type": "array",
          "description": "The list of operation steps that have been executed successfully.",
          "items": {
            "type": "string"
          }
        },
        "totalSteps": {
          "type": "integer",
          "description": "Total number of steps to be executed."
        },
        "error": {
          "$ref": "#/definitions/Error"
        }
      },
      "required": [
        "status",
        "steps",
        "totalSteps"
      ],
      "example": {
        "status": "running",
        "steps": [
          "configuring"
        ],
        "totalSteps": 3
      }
    },
    "SpaceDetails": {
      "type": "object",
      "description": "The space details.",
      "properties": {
        "id": {
          "type": "string",
          "description": "The Id of the space."
        },
        "name": {
          "type": "string",
          "description": "The name of the space."
        },
        "storageId": {
          "type": "string",
          "description": "Id of storage that supports this space on provider that is associated with this panel.\n"
        },
        "localStorages": {
          "type": "array",
          "description": "The list of IDs of cluster storage resources.",
          "items": {
            "type": "string"
          }
        },
        "supportingProviders": {
          "type": "object",
          "description": "The collection of provider IDs with associated supported storage space in bytes.\n",
          "additionalProperties": {
            "type": "integer",
            "description": "Supported storage space in bytes."
          }
        },
        "storageImport": {
          "$ref": "#/definitions/StorageImport"
        },
        "spaceOccupancy": {
          "type": "integer",
          "description": "Amount of storage [b] used by data from given space on that storage."
        }
      },
      "required": [
        "id",
        "name",
        "storageId",
        "localStorages",
        "supportingProviders",
        "spaceOccupancy"
      ]
    },
    "SpaceSupportRequest": {
      "type": "object",
      "description": "The configuration details required to create or support a space by a provider.\n",
      "properties": {
        "token": {
          "type": "string",
          "description": "The token for space creation or support."
        },
        "size": {
          "type": "integer",
          "description": "The storage space size in bytes that provider is willing to assign to the space.\n"
        },
        "storageId": {
          "type": "string",
          "description": "The Id of the storage resource where the space data should be stored.\n"
        },
        "storageImport": {
          "$ref": "#/definitions/StorageImport"
        }
      },
      "required": [
        "token",
        "size",
        "storageId"
      ],
      "example": {
        "token": "ASDJNASD87687ASDMNBMNASD87786asd",
        "size": 1024000,
        "storageId": "x7It3cpgNgLZ8RwOrOoW"
      }
    },
    "SpaceModifyRequest": {
      "type": "object",
      "description": "The space configuration details that can be modified.",
      "properties": {
        "size": {
          "type": "integer",
          "description": "The storage space size in bytes that provider is willing to assign to the space.\n"
        },
        "autoStorageImportConfig": {
          "$ref": "#/definitions/AutoStorageImportConfig"
        }
      }
    },
    "AutoStorageImportConfig": {
      "type": "object",
      "description": "Configuration of auto storage import mechanism. The auto import is based on scans - gradual traversing of the file system and registration of files and directories.\n",
      "properties": {
        "maxDepth": {
          "type": "integer",
          "description": "Maximum depth of filesystem tree that will be traversed during the scan.\n",
          "default": 65535
        },
        "syncAcl": {
          "type": "boolean",
          "description": "Flag that enables synchronization of NFSv4 ACLs.\n",
          "default": false
        },
        "continuousScan": {
          "description": "With this option enabled the storage will be scanned periodically and direct changes on the storage will be reflected in the assigned Onedata space (upon the consecutive scan).\n",
          "type": "boolean",
          "default": false
        },
        "scanInterval": {
          "type": "integer",
          "description": "Period between subsequent scans in seconds (counted from end of one scan till beginning of the following). This parameter is relevant only for continuous scans.\n",
          "default": 60
        },
        "detectModifications": {
          "type": "boolean",
          "description": "Flag determining that modifications of files on the synchronized storage will be detected. If disabled, the storage will be treated as immutable (only creations and deletions of files on storage will be detected). This parameter is relevant only for continuous scans.\n",
          "default": true
        },
        "detectDeletions": {
          "type": "boolean",
          "description": "Flag determining that deletions of files from the synchronized storage will be detected. This parameter is relevant only for continuous scans.\n",
          "default": true
        }
      }
    },
    "AutoStorageImportStats": {
      "type": "object",
      "description": "Statistics of auto storage import mechanism in given space over specified time.\n",
      "properties": {
        "queueLength": {
          "description": "Statistics of auto storage import jobs queue length.",
          "$ref": "#/definitions/TimeStats"
        },
        "createdFiles": {
          "description": "Statistics of count of created files (both directories and regular files) detected by auto storage import.",
          "$ref": "#/definitions/TimeStats"
        },
        "modifiedFiles": {
          "description": "Statistics of count of modified files (both directories and regular files) detected by auto storage import.",
          "$ref": "#/definitions/TimeStats"
        },
        "deletedFiles": {
          "description": "Statistics of count of deleted files (both directories and regular files) detected by auto storage import.",
          "$ref": "#/definitions/TimeStats"
        }
      },
      "example": {
        "queueLength": {
          "lastValueDate": "2017-06-22T13:29:39.654Z",
          "values": [
            4,
            8,
            12,
            16,
            20,
            10,
            4,
            2,
            0,
            0,
            0,
            0
          ]
        },
        "createdFiles": {
          "lastValueDate": "2017-06-22T13:29:39.654Z",
          "values": [
            4,
            8,
            12,
            16,
            20,
            10,
            4,
            2,
            0,
            0,
            0,
            0
          ]
        }
      }
    },
    "AutoStorageImportInfo": {
      "type": "object",
      "description": "Information about current (or last finished) auto storage import scan in given space.",
      "properties": {
        "status": {
          "type": "string",
          "description": "Describes status of current (or last finished) auto storage import scan in given space.",
          "enum": [
            "enqueued",
            "running",
            "aborting",
            "completed",
            "failed",
            "aborted"
          ]
        },
        "start": {
          "type": "integer",
          "description": "Time at which current (or last finished) scan has been started."
        },
        "stop": {
          "type": "integer",
          "description": "Time at which current (or last finished) scan has been stopped."
        },
        "createdFiles": {
          "type": "integer",
          "description": "Counter of created files (both directories and regular files) that has been detected during current (or last finished) scan."
        },
        "modifiedFiles": {
          "type": "integer",
          "description": "Counter of modified files (both directories and regular files) that has been detected during current (or last finished) scan."
        },
        "deletedFiles": {
          "type": "integer",
          "description": "Counter of deleted files (both directories and regular files) that has been detected during current (or last finished) scan."
        },
        "unmodifiedFiles": {
          "type": "integer",
          "description": "Counter of unmodified files (both directories and regular files) that has been detected during current (or last finished) scan."
        },
        "failedFiles": {
          "type": "integer",
          "description": "Counter of files (both directories and regular files) for which the processing has failed during current (or last finished) scan."
        },
        "nextScan": {
          "type": "integer",
          "description": "Estimated time at which next scan will be enqueued."
        },
        "totalScans": {
          "type": "integer",
          "description": "Total number of performed scans."
        }
      },
      "required": [
        "status",
        "start",
        "stop",
        "createdFiles",
        "modifiedFiles",
        "deletedFiles",
        "unmodifiedFiles",
        "failedFiles",
        "totalScans"
      ],
      "example": {
        "status": "done",
        "start": 1598871401,
        "stop": 1598871427,
        "createdFiles": 1146,
        "modifiedFiles": 191,
        "deletedFiles": 303,
        "unmodifiedFiles": 1350,
        "failedFiles": 1,
        "nextScan": 1598871487
      }
    },
    "ManualStorageImportExample": {
      "type": "object",
      "description": "Example `curl` command that can be executed to manually import (register) file from storage. For more info please read: https://onedata.org/#/home/api/stable/oneprovider?anchor=tag/File-registration\n",
      "properties": {
        "curl": {
          "type": "string"
        }
      },
      "required": [
        "curl"
      ],
      "example": {
        "curl": "curl -X POST -H \"X-Auth-Token:$TOKEN\" -H \"content-type:application/json\" \\ -d '{\"storageId\":\"'$STORAGE_ID'\", \"spaceId\":\"'$SPACE_ID'\", \"storageFileId\":\"'$STORAGE_FILE_ID'\", \"destinationPath\":\"'$DESTINATION_PATH'\"}' $ONEPROVIDER_HOST/api/v3/oneprovider/data/register"
      }
    },
    "StorageImport": {
      "type": "object",
      "description": "Configuration of the storage import within the space.\n",
      "properties": {
        "mode": {
          "description": "Mode of the storage import within the space.\n\nIn case of `auto` mode, the storage will be automatically scanned and data will be imported\nfrom storage into the assigned Onedata space without need for copying the data.\n\nConfiguration of the auto storage import can be passed in the `autoStorageImportConfig` parameter.\nIt is possible to enable periodical scans for automatic detection of changes on the storage\n(refer to the option `continuousScan` in the config).\n\nIn case of `manual` mode, the files must be registered manually by the space users with REST API.\nRegistration of directories is not supported.\nFor more info please read: https://onedata.org/#/home/api/stable/oneprovider?anchor=tag/File-registration\n",
          "type": "string",
          "enum": [
            "auto",
            "manual"
          ],
          "default": "auto",
          "x-onedata-default-value": "<<\"auto\">>"
        },
        "autoStorageImportConfig": {
          "$ref": "#/definitions/AutoStorageImportConfig"
        }
      }
    },
    "TimeStats": {
      "type": "object",
      "description": "Statistics of single metric over specified time.",
      "properties": {
        "lastValueDate": {
          "type": "string",
          "description": "Date of last measurement value in this object in ISO 8601 format."
        },
        "values": {
          "type": "array",
          "description": "List of sample values for given metric. The used period is divided into array-length number of parts. E.g. if the used period is an hour, and if there are 12 values in this array, every value is a value for 1/12 of day, which gives value for every hour of the day. If the value is null, there is no sample for given time part.\n",
          "items": {
            "type": "number"
          }
        }
      },
      "required": [
        "lastValueDate",
        "values"
      ],
      "example": {
        "lastValueDate": "2017-06-22T13:29:39.654Z",
        "values": [
          4,
          8,
          12,
          16,
          20,
          10,
          4,
          2,
          0,
          0,
          0,
          0
        ]
      }
    },
    "TransfersMock": {
      "type": "object",
      "description": "State of transfers mock.",
      "properties": {
        "transfersMock": {
          "type": "boolean",
          "description": "If true, transfers are marked as successful without actually transmiting any data."
        }
      },
      "example": {
        "transfersMock": true
      }
    },
    "SpaceFilePopularityConfiguration": {
      "type": "object",
      "description": "Configuration of the file-popularity mechanism in the space.",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "If true, collecting file-popularity mechanism in the space is enabled."
        },
        "exampleQuery": {
          "type": "string",
          "description": "Example `curl` command that can be executed to query the file-popularity view in the space.\n"
        },
        "lastOpenHourWeight": {
          "type": "number",
          "format": "float",
          "description": "Weight of `lastOpenHour` parameter.\n",
          "default": 1
        },
        "avgOpenCountPerDayWeight": {
          "type": "number",
          "format": "float",
          "description": "Weight of `avgOpenCountPerDayWeight` parameter.\n",
          "default": 20
        },
        "maxAvgOpenCountPerDay": {
          "type": "number",
          "format": "float",
          "description": "Maximal value of average open count per day taken to calculate the value of popularity function.\n",
          "default": 100
        }
      },
      "example": {
        "enabled": true,
        "exampleQuery": "curl -sS -k -H 'X-Auth-Token: $TOKEN' -X GET https://$HOST/api/v3/oneprovider/spaces/example_space_id/views/file-popularity?limit=10&stale=false",
        "lastOpenHourWeight": 1,
        "avgOpenCountPerDayWeight": 20,
        "maxAvgOpenCountPerDay": 100
      }
    },
    "SpaceAutoCleaningConfiguration": {
      "type": "object",
      "description": "Settings for space auto-cleaning mechanism. Setting enabled to `false` disables given parameter. It will be ignored by auto-cleaning mechanism. All presented parameters' ranges are inclusive.\n",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "If true, auto-cleaning mechanism is enabled in the space."
        },
        "threshold": {
          "type": "integer",
          "description": "Amount of data [b], which should trigger the auto-cleaning in the space. Only replicas maintained by this storage provider will be removed.  This parameter is required to enable auto-cleaning.\n"
        },
        "target": {
          "type": "integer",
          "description": "Amount of data [b], at which the auto-cleaning process should stop. This parameter is required to enable auto-cleaning.\n"
        },
        "rules": {
          "description": "Rules used to select certain list of file replicas that can be evicted by auto-cleaning mechanism.\n",
          "$ref": "#/definitions/SpaceAutoCleaningRules"
        }
      },
      "example": {
        "enabled": true,
        "target": 1073741824,
        "threshold": 1099511627776,
        "rules": {
          "enabled": true,
          "maxOpenCount": {
            "enabled": true,
            "value": 1000
          },
          "minHoursSinceLastOpen": {
            "enabled": true,
            "value": 10
          },
          "minFileSize": {
            "enabled": true,
            "value": 1
          },
          "maxFileSize": {
            "enabled": true,
            "value": 1024
          },
          "maxHourlyMovingAverage": {
            "enabled": true,
            "value": 10
          },
          "maxDailyMovingAverage": {
            "enabled": false,
            "value": 100
          },
          "maxMonthlyMovingAverage": {
            "enabled": false
          }
        }
      }
    },
    "SpaceAutoCleaningRules": {
      "type": "object",
      "description": "Rules used to select certain list of file replicas that can be evicted by auto-cleaning mechanism. A rule is enabled by setting its `enabled` field to `true`. By default all rules are disabled (ignored). A rule can be enabled without specifying its value. In that case previous value is used. If the rule is enabled for the first time a default value will be used. All rules' values are inclusive.\n",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Informs whether selective rules should be used by auto-cleaning mechanism.\n"
        },
        "maxOpenCount": {
          "$ref": "#/definitions/SpaceAutoCleaningRuleSetting",
          "description": "Files that have been opened less than `maxOpenCount` times may be cleaned. The default value is `9007199254740991 (2^53-1)`.\n"
        },
        "minHoursSinceLastOpen": {
          "$ref": "#/definitions/SpaceAutoCleaningRuleSetting",
          "description": "Files that haven't been opened for longer than or equal to given period [h] may be cleaned. The default value is `0`.\n"
        },
        "minFileSize": {
          "$ref": "#/definitions/SpaceAutoCleaningRuleSetting",
          "description": "Only files which size [b] is greater than given value may be cleaned. The default value is `1`.\n"
        },
        "maxFileSize": {
          "$ref": "#/definitions/SpaceAutoCleaningRuleSetting",
          "description": "Only files which size [b] is less than given value may be cleaned. The default value is `1125899906842624 (1 PiB)`.\n"
        },
        "maxHourlyMovingAverage": {
          "$ref": "#/definitions/SpaceAutoCleaningRuleSetting",
          "description": "Files that have moving average of open operations count per hour less than given value may be cleaned. The average is calculated in 24 hours window. The default value is `9007199254740991 (2^53-1)`.\n"
        },
        "maxDailyMovingAverage": {
          "$ref": "#/definitions/SpaceAutoCleaningRuleSetting",
          "description": "Files that have moving average of open operations count per day less than given value may be cleaned. The average is calculated in 30 days window. The default value is `9007199254740991 (2^53-1)`.\n"
        },
        "maxMonthlyMovingAverage": {
          "$ref": "#/definitions/SpaceAutoCleaningRuleSetting",
          "description": "Files that have moving average of open operations count per month less than given value may be cleaned. The average is calculated in 12 months window. The default value is `9007199254740991 (2^53-1)`."
        }
      }
    },
    "SpaceAutoCleaningRuleSetting": {
      "type": "object",
      "description": "Rule setting for a space auto-cleaning mechanism. Setting field `enabled` to `false` disables the rule.\n",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Informs whether given setting is enabled.\n"
        },
        "value": {
          "type": "integer",
          "description": "Integer value of a given setting."
        }
      },
      "example": {
        "enabled": true,
        "value": 1024
      }
    },
    "SpaceAutoCleaningStatus": {
      "type": "object",
      "description": "Status of current auto-cleaning process for given space.",
      "properties": {
        "lastRunStatus": {
          "type": "string",
          "description": "Status of the last auto-cleaning run.",
          "enum": [
            "active",
            "cancelling",
            "completed",
            "failed",
            "cancelled"
          ]
        },
        "spaceOccupancy": {
          "type": "integer",
          "description": "Amount of storage [b] used by data from given space on that storage."
        }
      },
      "required": [
        "lastRunStatus",
        "spaceOccupancy"
      ],
      "example": {
        "lastRunStatus": "completed",
        "spaceOccupancy": 100200
      }
    },
    "SpaceAutoCleaningReports": {
      "type": "object",
      "description": "The space auto-cleaning reports.",
      "properties": {
        "ids": {
          "type": "array",
          "description": "The list of Ids of space auto-cleaning reports.",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "ids"
      ],
      "example": {
        "ids": [
          "x7It3cpgNgLZ8RwOrOoW",
          "Q1boCClpCS5mUNhM7YCy"
        ]
      }
    },
    "SpaceAutoCleaningReport": {
      "type": "object",
      "description": "Report from an auto-cleaning run.",
      "properties": {
        "id": {
          "type": "string",
          "description": "Id of an auto-cleaning report."
        },
        "index": {
          "type": "string",
          "description": "Index of an auto-cleaning report. It can be used to list report Ids starting from given report.\n"
        },
        "startedAt": {
          "type": "string",
          "description": "Start time of an auto-cleaning run in ISO 8601 format."
        },
        "stoppedAt": {
          "type": "string",
          "description": "Finish time of an auto-cleaning run in ISO 8601 format."
        },
        "releasedBytes": {
          "type": "integer",
          "description": "Number of bytes deleted during an auto-cleaning run."
        },
        "bytesToRelease": {
          "type": "integer",
          "description": "Number of bytes that should be deleted."
        },
        "filesNumber": {
          "type": "integer",
          "description": "Number of deleted files."
        },
        "status": {
          "type": "string",
          "description": "Status of an auto-cleaning run.",
          "enum": [
            "active",
            "cancelling",
            "completed",
            "failed",
            "cancelled"
          ]
        }
      },
      "required": [
        "id",
        "index",
        "startedAt",
        "stoppedAt",
        "releasedBytes",
        "bytesToRelease",
        "filesNumber",
        "status"
      ],
      "example": {
        "id": "asdfhLfgPDGSDFASDHgI",
        "index": "1290736458asdfhL",
        "startedAt": "2017-06-22T13:29:39.654Z",
        "stoppedAt": "2017-06-22T15:57:41.958Z",
        "releasedBytes": 60000,
        "bytesToRelease": 500,
        "filesNumber": 10,
        "status": "completed"
      }
    },
    "WebCert": {
      "type": "object",
      "description": "The SSL certificate details.",
      "properties": {
        "letsEncrypt": {
          "type": "boolean",
          "description": "If true, the certificate is obtained from Let's Encrypt service and renewed automatically. Otherwise, the certificate management is up to the administrator.\n"
        },
        "expirationTime": {
          "type": "string",
          "description": "Installed certificate's expiration time in ISO 8601 format.\n"
        },
        "creationTime": {
          "type": "string",
          "description": "Installed certificate's creation time in ISO 8601 format.\n"
        },
        "status": {
          "type": "string",
          "description": "Describes certificate validity status.",
          "enum": [
            "valid",
            "near_expiration",
            "expired",
            "domain_mismatch",
            "regenerating",
            "unknown"
          ]
        },
        "paths": {
          "type": "object",
          "description": "Paths to certificate-related files.",
          "properties": {
            "cert": {
              "type": "string",
              "description": "Path to the certificate PEM file."
            },
            "key": {
              "type": "string",
              "description": "Path to the corresponding private key PEM file."
            },
            "chain": {
              "type": "string",
              "description": "Path to the file containing certificate chain."
            }
          },
          "required": [
            "cert",
            "key",
            "chain"
          ]
        },
        "domain": {
          "type": "string",
          "description": "The domain (Common Name) for which current certificate was issued.\n"
        },
        "issuer": {
          "type": "string",
          "description": "Issuer value of the current certificate.\n"
        },
        "lastRenewalSuccess": {
          "type": "string",
          "description": "Date and time in ISO 8601 format. Represents last successful Let's Encrypt certification. If there are no successful attempts its value is null. This property is omitted if letsEncrypt is off.\n"
        },
        "lastRenewalFailure": {
          "type": "string",
          "description": "Date and time in ISO 8601 format. Represents last unsuccessful Let's Encrypt certification. If there are no successful attempts its value is null. This property is omitted if letsEncrypt is off.\n"
        }
      },
      "required": [
        "letsEncrypt",
        "expirationTime",
        "creationTime",
        "paths",
        "domain",
        "issuer",
        "status"
      ],
      "example": {
        "paths": {
          "cert": "/etc/oz_panel/certs/web_cert.pem",
          "key": "/etc/oz_panel/certs/web_key.pem",
          "chain": "/etc/oz_panel/certs/web_chain.pem"
        },
        "obtainedTime": "2018-07-11T13:11:05Z",
        "letsEncrypt": true,
        "issuer": "LE Intermediate X3",
        "expirationTime": "2018-10-09T13:11:05Z",
        "domain": "onedata.org"
      }
    },
    "WebCertModifyRequest": {
      "type": "object",
      "description": "The SSL certificate configuration details that can be modified.",
      "properties": {
        "letsEncrypt": {
          "type": "boolean",
          "description": "If enabled Let's Encrypt service will be used to obtain SSL certificates and renew them before expiration. Otherwise certificates must be manually provided.\n"
        }
      },
      "required": [
        "letsEncrypt"
      ],
      "example": {
        "letsEncrypt": true
      }
    },
    "ZonePolicies": {
      "type": "object",
      "description": "State of Onezone operation policies.",
      "properties": {
        "oneproviderRegistration": {
          "type": "string",
          "enum": [
            "open",
            "restricted"
          ],
          "description": "Indicates policy enforced during provider registration. Possible options are:\nopen - anyone can acquire a registration token and register a new Oneprovider\nrestricted - requires an administrative privilege 'oz_providers_invite'\n             to generate a Oneprovider registration token. The token\n             can be issued for someone else.\n"
        },
        "subdomainDelegation": {
          "type": "boolean",
          "description": "If true, Oneproviders are allowed to request subdomains of the Onezone domain for use as their domains."
        },
        "guiPackageVerification": {
          "type": "boolean",
          "default": true,
          "description": "When this value is true, GUI packages uploaded by services operating under Onezone or by harvester admins are checked against known SHA-256 checksums using the compatibility registry. Setting this value to false disables the verification.\nWARNING: disabling GUI package verification poses a severe security threat, allowing Oneprovider owners to upload arbitrary GUI to Onezone (which is then hosted in Onezone's domain).\n"
        },
        "harvesterGuiPackageVerification": {
          "type": "boolean",
          "default": true,
          "description": "This policy can be used to disable GUI package verification for harvester plugins only. See \"guiPackageVerification\" for detailed description.\nThis setting has no effect if \"guiPackageVerification\" is set to false.\n"
        }
      },
      "example": {
        "subdomainDelegation": true,
        "guiPackageVerification": true,
        "harvesterGuiPackageVerification": false
      }
    }
  },
  "responses": {
    "TaskStarted": {
      "description": "Process successfully started.",
      "schema": {
        "$ref": "#/definitions/TaskId"
      },
      "headers": {
        "Location": {
          "type": "string",
          "description": "The path to the task resource, which can be queried to check operation status.\n"
        }
      }
    },
    "Created": {
      "description": "Resource successfully created.",
      "schema": {
        "$ref": "#/definitions/Id"
      },
      "headers": {
        "Location": {
          "type": "string",
          "description": "The path of the created resource."
        }
      }
    }
  },
  "tags": [
    {
      "name": "Cluster",
      "description": "Endpoints for cluster management."
    },
    {
      "name": "Security",
      "description": "Endpoints related to security."
    },
    {
      "name": "DNS",
      "description": "Tools for DNS diagnostics."
    },
    {
      "name": "Current User",
      "description": "Endpoints for serving information about the currently authenticated user."
    },
    {
      "name": "Internal",
      "description": "Endpoints used internally by Onedata components."
    },
    {
      "name": "Onezone Cluster",
      "description": "Endpoints for managing Onezone cluster and underlying services."
    },
    {
      "name": "Service Configuration",
      "description": "Endpoints for configuring the Onezone service."
    },
    {
      "name": "User Management",
      "description": "Endpoints for managing users in Onezone."
    },
    {
      "name": "Oneprovider Cluster",
      "description": "Endpoints for managing Oneprovider cluster and services."
    },
    {
      "name": "Oneprovider Identity",
      "description": "Endpoints for Oneprovider registration and identity management."
    },
    {
      "name": "Storages",
      "description": "Endpoints for managing storages."
    },
    {
      "name": "Storage Import",
      "description": "Endpoints for storage import management."
    },
    {
      "name": "Space Support",
      "description": "Endpoints for space support management."
    },
    {
      "name": "LUMA DB",
      "description": "Endpoints for LUMA DB for the specific storage resource management."
    },
    {
      "name": "LUMA DB Local Feed",
      "description": "Endpoints for managing local feed of LUMA DB for the specific storage resource. All operations in this group return error if the storage has a different LUMA feed than `local`.\n"
    },
    {
      "name": "File Popularity",
      "description": "Endpoints for managing the file popularity mechanisms."
    },
    {
      "name": "Auto Cleaning",
      "description": "Endpoints for managing the auto-cleaning mechanisms."
    },
    {
      "name": "Ceph",
      "description": "Endpoints for managing the local Ceph cluster."
    },
    {
      "name": "Debug",
      "description": "Endpoints for debugging purposes."
    }
  ],
  "x-tagGroups": [
    {
      "name": "ONEPANEL COMMON",
      "tags": [
        "Cluster",
        "Security",
        "DNS",
        "Current User",
        "Internal"
      ]
    },
    {
      "name": "ONEZONE ADMINISTRATION",
      "tags": [
        "Onezone Cluster",
        "Service Configuration",
        "User Management"
      ]
    },
    {
      "name": "ONEPROVIDER ADMINISTRATION",
      "tags": [
        "Oneprovider Cluster",
        "Oneprovider Identity",
        "Storages",
        "Space Support",
        "Storage Import",
        "LUMA DB",
        "LUMA DB Local Feed",
        "File Popularity",
        "Auto Cleaning",
        "Ceph",
        "Debug"
      ]
    }
  ],
  "securityDefinitions": {
    "basic": {
      "type": "basic"
    },
    "api_key1": {
      "type": "apiKey",
      "name": "X-Auth-Token",
      "in": "header"
    },
    "api_key2": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header"
    }
  },
  "security": [
    {
      "basic": []
    },
    {
      "api_key1": []
    },
    {
      "api_key2": []
    }
  ]
}
