{
  "openapi": "3.1.0",
  "info": {
    "title": "Block Storage API Product - v1",
    "description": "Block Storage API Product",
    "contact": {
      "name": "IaaS Products",
      "url": "https://github.com/luizalabs",
      "email": "kassio.junqueira@luizalabs.com"
    },
    "version": "v1"
  },
  "paths": {
    "/v1/attachments": {
      "post": {
        "tags": [
          "attachments"
        ],
        "summary": "Attach a volume to an instance.",
        "description": "Attach a Volume to a Virtual Machine instance for the currently\n authenticated tenant.\n\nThe Volume attachment will be completed when the Volume status returns to\n\"completed\", and the state becomes \"in-use\".\n\n#### Rules\n- The Volume and the Virtual Machine must belong to the same tenant.\n- Both the Volume and Virtual Machine must have the status \"completed\".\n- The Volume's state must be \"available\".\n- The Virtual Machine's state must be \"stopped\" or \"running\".\n\n#### Notes\n- Verify the state and status of your Volume using the\n **block-storage volume get --id [uuid]** command.\n- Verify the state and status of your Virtual Machine using the\n**virtual-machine instances get --id [uuid]** command\".",
        "operationId": "create_attachment_v1_v1_attachments_post",
        "parameters": [
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAttachmentRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Create Attachment V1 V1 Attachments Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Create Attachment V1 V1 Attachments Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Create Attachment V1 V1 Attachments Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_attach"
      }
    },
    "/v1/attachments/{id}": {
      "delete": {
        "tags": [
          "attachments"
        ],
        "summary": "Delete an attachment.",
        "description": "Detach a Volume from a Virtual Machine instance for the\n currently authenticated tenant.\n\nThe Volume detachment will be completed when the Volume state returns to\n \"available,\" and the status becomes \"completed\".\n\n#### Rules\n- The Volume and the Virtual Machine must belong to the same tenant.\n- Both the Volume and Virtual Machine must have the status \"completed\".\n- The Volume's state must be \"in-use\".\n- The Virtual Machine's state must be \"stopped\".\n\n#### Notes\n- Verify the state and status of your Volume using the\n **block-storage volume get --id [uuid]** command.\n- Verify the state and status of your Virtual Machine using the\n **virtual-machine instances get --id [uuid]** command.\n- Ensure that any file systems on the device within your operating system are\n unmounted before detaching the Volume.\n\n#### Troubleshooting\n- A failure during detachment can result in the Volume becoming stuck in the\n busy state. If this occurs, detachment may be delayed indefinitely until you\n unmount the Volume, force detachment, reboot the instance, or perform all\n three.",
        "operationId": "delete_attachment_v1_v1_attachments__id__delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Delete Attachment V1 V1 Attachments  Id  Delete"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Delete Attachment V1 V1 Attachments  Id  Delete"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Delete Attachment V1 V1 Attachments  Id  Delete"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_detach"
      }
    },
    "/v1/schedulers": {
      "get": {
        "tags": [
          "schedulers"
        ],
        "summary": "List all schedulers.",
        "description": "Retrieve a list of Schedulers for the currently authenticated tenant.\n\n#### Notes\n- Use the expand argument to obtain additional details about the Volume.",
        "operationId": "get_list_schedulers_v1_schedulers_get",
        "parameters": [
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ExpandSchedulers"
              },
              "default": [],
              "title": "Expand"
            }
          },
          {
            "name": "_limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "default": 50,
              "title": " Limit"
            }
          },
          {
            "name": "_offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": " Offset"
            }
          },
          {
            "name": "_sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(^[\\w-]+:(asc|desc)(,[\\w-]+:(asc|desc))*)?$",
              "default": "created_at:asc",
              "title": " Sort"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchedulerListResponse"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Get List Schedulers V1 Schedulers Get"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Get List Schedulers V1 Schedulers Get"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Get List Schedulers V1 Schedulers Get"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_scheduler_list"
      },
      "post": {
        "tags": [
          "schedulers"
        ],
        "summary": "Create a scheduler.",
        "description": "Creates a schedule for snapshot creation.",
        "operationId": "create_scheduler_v1_schedulers_post",
        "parameters": [
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulerPayload"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdResponse"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Create Scheduler V1 Schedulers Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Create Scheduler V1 Schedulers Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Create Scheduler V1 Schedulers Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_scheduler_create"
      }
    },
    "/v1/schedulers/{id}": {
      "delete": {
        "tags": [
          "schedulers"
        ],
        "summary": "Delete a scheduler.",
        "description": "Delete a scheduler for the currently authenticated tenant.\n\n#### Notes\n- Utilize the **block-storage schedulers** list command to retrieve a list of\n all schedulers and obtain the ID of the scheduler you wish to delete.",
        "operationId": "delete_scheduler_v1_schedulers__id__delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Delete Scheduler V1 Schedulers  Id  Delete"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Delete Scheduler V1 Schedulers  Id  Delete"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Delete Scheduler V1 Schedulers  Id  Delete"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_scheduler_delete"
      },
      "get": {
        "tags": [
          "schedulers"
        ],
        "summary": "Retrieve the details of a specific scheduler.",
        "description": "Retrieve details of a Scheduler for the currently authenticated tenant.\n\n#### Notes\n- Use the **expand** argument to obtain additional details about the Volume.\n- Utilize the **block-storage schedulers list** command to retrieve a list of\n all Schedulers and obtain the ID of the Scheduler for which you want to\n retrieve details.",
        "operationId": "get_scheduler_by_id_v1_schedulers__id__get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ExpandSchedulers"
              },
              "default": [],
              "title": "Expand"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchedulerResponse"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Get Scheduler By Id V1 Schedulers  Id  Get"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Get Scheduler By Id V1 Schedulers  Id  Get"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Get Scheduler By Id V1 Schedulers  Id  Get"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_scheduler_get"
      }
    },
    "/v1/schedulers/{id}/attach": {
      "post": {
        "tags": [
          "schedulers"
        ],
        "summary": "Attach volume on scheduler",
        "description": "Attach volume on scheduler.",
        "operationId": "scheduler_attach_volume_v1_schedulers__id__attach_post",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulerVolumeIdentifierPayload"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Scheduler Attach Volume V1 Schedulers  Id  Attach Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Scheduler Attach Volume V1 Schedulers  Id  Attach Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Scheduler Attach Volume V1 Schedulers  Id  Attach Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_scheduler_attach"
      }
    },
    "/v1/schedulers/{id}/detach": {
      "post": {
        "tags": [
          "schedulers"
        ],
        "summary": "Detach volume on scheduler",
        "description": "Detach volume on scheduler.",
        "operationId": "scheduler_detach_volume_v1_schedulers__id__detach_post",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulerVolumeIdentifierPayload"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Scheduler Detach Volume V1 Schedulers  Id  Detach Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Scheduler Detach Volume V1 Schedulers  Id  Detach Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Scheduler Detach Volume V1 Schedulers  Id  Detach Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_scheduler_detach"
      }
    },
    "/v1/snapshots": {
      "get": {
        "tags": [
          "snapshots"
        ],
        "summary": "List all snapshots.",
        "description": "Retrieve a list of Snapshots for the currently authenticated tenant.\n\n#### Notes\n- Use the expand argument to obtain additional details about the Volume used to\n create each Snapshot.",
        "operationId": "list_snapshot_v1_snapshots_get",
        "parameters": [
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ExpandSnapshots"
              },
              "default": [],
              "title": "Expand"
            }
          },
          {
            "name": "_limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "default": 50,
              "title": " Limit"
            }
          },
          {
            "name": "_offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": " Offset"
            }
          },
          {
            "name": "_sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(^[\\w-]+:(asc|desc)(,[\\w-]+:(asc|desc))*)?$",
              "default": "created_at:asc",
              "title": " Sort"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Name"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/SnapshotType"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnapshotListResponse"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 List Snapshot V1 Snapshots Get"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 List Snapshot V1 Snapshots Get"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 List Snapshot V1 Snapshots Get"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_snapshot_list"
      },
      "post": {
        "tags": [
          "snapshots"
        ],
        "summary": "Create a snapshot.",
        "description": "Create a Snapshot for the currently authenticated tenant.\n\nThe Snapshot can be used when it reaches the \"available\" state and the\n \"completed\" status.\n\n#### Rules\n- The Snapshot name must be unique; otherwise, the creation will be disallowed.\n- Creating Snapshots from restored Volumes may lead to future conflicts as\n you can't delete a Volume with an Snapshot and can't delete a Snapshot with a\n restored Volume, so we recommend avoiding it.\n\n#### Notes\n- Use the **block-storage volume list** command to retrieve a list of all\n Volumes and obtain the ID of the Volume that will be used to create the\n Snapshot.",
        "operationId": "create_snapshot_v1_snapshots_post",
        "parameters": [
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SnapshotCreationRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdResponse"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Create Snapshot V1 Snapshots Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Create Snapshot V1 Snapshots Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Create Snapshot V1 Snapshots Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_snapshot_create"
      }
    },
    "/v1/snapshots/{id}": {
      "delete": {
        "tags": [
          "snapshots"
        ],
        "summary": "Delete a snapshot.",
        "description": "Delete a Snapshot for the currently authenticated tenant.\n\n#### Rules\n- The Snapshot's status must be \"completed\".\n- The Snapshot's state must be \"available\".\n- Deleting a Snapshot that has been restored is not possible. If necessary,\n delete the restored Volume first and then proceed to delete the Snapshot.\n\n#### Notes\n- Utilize the **block-storage snapshots** list command to retrieve a list of\n all Snapshots and obtain the ID of the Snapshot you wish to delete.\n- If needed, you can use the **block-storage volume list** command to retrieve\n a list of all Volumes and obtain the ID of the restored Volume.",
        "operationId": "delete_snapshot_v1_snapshots__id__delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Delete Snapshot V1 Snapshots  Id  Delete"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Delete Snapshot V1 Snapshots  Id  Delete"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Delete Snapshot V1 Snapshots  Id  Delete"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_snapshot_delete"
      },
      "get": {
        "tags": [
          "snapshots"
        ],
        "summary": "Retrieve the details of a specific snapshot.",
        "description": "Retrieve details of a Snapshot for the currently authenticated tenant.\n\n#### Notes\n- Use the **expand** argument to obtain additional details about the Volume\n used to create the Snapshot.\n- Utilize the **block-storage snapshots list** command to retrieve a list of\n all Snapshots and obtain the ID of the Snapshot for which you want to retrieve\n details.",
        "operationId": "get_snapshot_v1_snapshots__id__get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ExpandSnapshots"
              },
              "default": [],
              "title": "Expand"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SnapshotResponse"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Get Snapshot V1 Snapshots  Id  Get"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Get Snapshot V1 Snapshots  Id  Get"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Get Snapshot V1 Snapshots  Id  Get"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_snapshot_get"
      }
    },
    "/v1/snapshots/{id}/copy": {
      "post": {
        "tags": [
          "snapshots"
        ],
        "summary": "Copy a object snapshot to another region.",
        "description": "Copy a object snapshot cross region for the currently authenticated tenant.\n\n#### Rules\n- The copy only be accepted when the destiny region is different from origin region.\n- The copy only be accepted if the snapshot name in destiny region is different from input name.\n- The copy only be accepted if the user has access to destiny region.\n\n#### Notes\n- Utilize the **block-storage snapshots list** command to retrieve a list of\n all Snapshots and obtain the ID of the Snapshot you wish to copy across different region.",
        "operationId": "copy_snapshot_cross_region_v1_snapshots__id__copy_post",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CopyCrossRegionRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Copy Snapshot Cross Region V1 Snapshots  Id  Copy Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Copy Snapshot Cross Region V1 Snapshots  Id  Copy Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Copy Snapshot Cross Region V1 Snapshots  Id  Copy Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_snapshot_copy"
      }
    },
    "/v1/snapshots/{id}/rename": {
      "patch": {
        "tags": [
          "snapshots"
        ],
        "summary": "Rename a snapshot.",
        "description": "Rename a Snapshot for the currently authenticated tenant.\n\n#### Rules\n- The Snapshot name must be unique; otherwise, renaming will not be allowed.\n\n#### Notes\n- Utilize the **block-storage snapshots list** command to retrieve a list of\n all Snapshots and obtain the ID of the Snapshot you wish to rename.",
        "operationId": "rename_snapshot_v1_snapshots__id__rename_patch",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SnapshotRenameRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Rename Snapshot V1 Snapshots  Id  Rename Patch"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Rename Snapshot V1 Snapshots  Id  Rename Patch"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Rename Snapshot V1 Snapshots  Id  Rename Patch"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_snapshot_rename"
      }
    },
    "/v1/volume-types": {
      "get": {
        "tags": [
          "volume-types"
        ],
        "summary": "List all volume types.",
        "description": "List Volume Types allowed in the current region.\n\n#### Notes\n\n- Volume types are managed internally. If you wish to use a Volume Type that\n is not yet available, please contact our support team for assistance.",
        "operationId": "list_volume_types_v1_v1_volume_types_get",
        "parameters": [
          {
            "name": "availability-zone",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Availability-Zone"
            }
          },
          {
            "name": "allows-encryption",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Allows-Encryption"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Name"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericVolumeTypeList_VolumeTypeResponseWithAzs_"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_type_list"
      }
    },
    "/v1/volumes": {
      "get": {
        "tags": [
          "volumes"
        ],
        "summary": "List all volumes.",
        "description": "Retrieve a list of Volumes for the currently authenticated tenant.\n\n#### Notes\n- Use the expand argument to obtain additional details about the Volume Type.",
        "operationId": "list_volume_v1_v1_volumes_get",
        "parameters": [
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "You can get more detailed info about: ['volume_type', 'attachment']",
              "default": [],
              "title": "Expand"
            },
            "description": "You can get more detailed info about: ['volume_type', 'attachment']"
          },
          {
            "name": "_limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "default": 50,
              "title": " Limit"
            }
          },
          {
            "name": "_offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0,
              "title": " Offset"
            }
          },
          {
            "name": "_sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(^[\\w-]+:(asc|desc)(,[\\w-]+:(asc|desc))*)?$",
              "default": "created_at:asc",
              "title": " Sort"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Name"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VolumesResponseV1"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 List Volume V1 V1 Volumes Get"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 List Volume V1 V1 Volumes Get"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_list"
      },
      "post": {
        "tags": [
          "volumes"
        ],
        "summary": "Create a new volume.",
        "description": "Create a Volume for the currently authenticated tenant.\n\nThe Volume can be used when it reaches the \"available\" state and \"completed\"\n status.\n\n#### Rules\n- The Volume name must be unique; otherwise, the creation will be disallowed.\n- The Volume type must be available to use.\n\n#### Notes\n- Utilize the **block-storage volume-types list** command to retrieve a list\n of all available Volume Types.\n- Verify the state and status of your Volume using the\n**block-storage volume get --id [uuid]** command\".",
        "operationId": "create_volume_v1_v1_volumes_post",
        "parameters": [
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VolumeCreateRequestV1"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdResponse"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Create Volume V1 V1 Volumes Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Create Volume V1 V1 Volumes Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Create Volume V1 V1 Volumes Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_create"
      }
    },
    "/v1/volumes/{id}": {
      "delete": {
        "tags": [
          "volumes"
        ],
        "summary": "Delete a volume.",
        "description": "Delete a Volume for the currently authenticated tenant.\n\n#### Rules\n- The Volume cannot be attached to a Virtual Machine, i.e., its state cannot\n be \"in-use\". If necessary, detach the Volume from the Virtual Machine before\n proceeding with deletion.\n- The Volume must not have any snapshots. If necessary, delete the Volume's\n  snapshots before proceeding with deletion.\n- The Volume must have the status \"completed\", i.e., must not have any\n  actions in progress.\n\n\n#### Notes\n- Check the state and status of your Volume using the\n**block-storage volume get --id [uuid]** command\".",
        "operationId": "delete_volume_v1_v1_volumes__id__delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Delete Volume V1 V1 Volumes  Id  Delete"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Delete Volume V1 V1 Volumes  Id  Delete"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Delete Volume V1 V1 Volumes  Id  Delete"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_delete"
      },
      "get": {
        "tags": [
          "volumes"
        ],
        "summary": "Retrieve the details of a specific volume.",
        "description": "Retrieve details of a Volume for the currently authenticated tenant.\n\n#### Notes\n- Use the **expand** argument to obtain additional details about the Volume\n Type.\n- Utilize the **block-storage volume list** command to retrieve a list of all\n Volumes and obtain the ID of the Volume for which you want to retrieve\n details.",
        "operationId": "get_volume_v1_v1_volumes__id__get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "expand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "You can get more detailed info about: ['volume_type', 'attachment']",
              "default": [],
              "title": "Expand"
            },
            "description": "You can get more detailed info about: ['volume_type', 'attachment']"
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VolumeResponseV1"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Get Volume V1 V1 Volumes  Id  Get"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Get Volume V1 V1 Volumes  Id  Get"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_get"
      }
    },
    "/v1/volumes/{id}/attach/{virtual_machine_id}": {
      "post": {
        "tags": [
          "volumes"
        ],
        "summary": "Attach the volume to an instance.",
        "description": "Attach a Volume to a Virtual Machine instance for the currently\n authenticated tenant.\n\nThe Volume attachment will be completed when the Volume status returns to\n\"completed\", and the state becomes \"in-use\".\n\n#### Rules\n- The Volume and the Virtual Machine must belong to the same tenant.\n- Both the Volume and Virtual Machine must have the status \"completed\".\n- The Volume's state must be \"available\".\n- The Virtual Machine's state must be \"stopped\" or \"running\".\n\n#### Notes\n- Verify the state and status of your Volume using the\n **block-storage volume get --id [uuid]** command.\n- Verify the state and status of your Virtual Machine using the\n**virtual-machine instances get --id [uuid]** command\".",
        "operationId": "attach_volume_v1_v1_volumes__id__attach__virtual_machine_id__post",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "virtual_machine_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Virtual Machine Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Attach Volume V1 V1 Volumes  Id  Attach  Virtual Machine Id  Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Attach Volume V1 V1 Volumes  Id  Attach  Virtual Machine Id  Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Attach Volume V1 V1 Volumes  Id  Attach  Virtual Machine Id  Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_attach"
      }
    },
    "/v1/volumes/{id}/detach": {
      "post": {
        "tags": [
          "volumes"
        ],
        "summary": "Detach the volume from an instance.",
        "description": "Detach a Volume from a Virtual Machine instance for the\n currently authenticated tenant.\n\nThe Volume detachment will be completed when the Volume state returns to\n \"available,\" and the status becomes \"completed\".\n\n#### Rules\n- The Volume and the Virtual Machine must belong to the same tenant.\n- Both the Volume and Virtual Machine must have the status \"completed\".\n- The Volume's state must be \"in-use\".\n- The Virtual Machine's state must be \"stopped\".\n\n#### Notes\n- Verify the state and status of your Volume using the\n **block-storage volume get --id [uuid]** command.\n- Verify the state and status of your Virtual Machine using the\n **virtual-machine instances get --id [uuid]** command.\n- Ensure that any file systems on the device within your operating system are\n unmounted before detaching the Volume.\n\n#### Troubleshooting\n- A failure during detachment can result in the Volume becoming stuck in the\n busy state. If this occurs, detachment may be delayed indefinitely until you\n unmount the Volume, force detachment, reboot the instance, or perform all\n three.",
        "operationId": "detach_volume_v1_v1_volumes__id__detach_post",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Detach Volume V1 V1 Volumes  Id  Detach Post"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Detach Volume V1 V1 Volumes  Id  Detach Post"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Detach Volume V1 V1 Volumes  Id  Detach Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_detach"
      }
    },
    "/v1/volumes/{id}/extend": {
      "post": {
        "tags": [
          "volumes"
        ],
        "summary": "Extend the size of a volume.",
        "description": "Extend the size of an existing Volume for the currently\n authenticated tenant.\n\nThe Volume extension will be completed when the Volume status returns to\n \"completed\".\n\n#### Rules\n- The Volume state must be \"available\".\n- The Volume status must be \"completed\" or \"extend_error\".\n- The new Volume size must be larger than the current size.\n\n#### Notes\n- Utilize the block-storage volume list command to retrieve a list of all\n Volumes and obtain the ID of the Volume you want to extend.\n- Storage quotas are managed internally. If the operation fails due to quota\n restrictions, please contact our support team for assistance.",
        "operationId": "extend_volume_v1_volumes__id__extend_post",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VolumeExtendRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Extend Volume V1 Volumes  Id  Extend Post"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Extend Volume V1 Volumes  Id  Extend Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_extend"
      }
    },
    "/v1/volumes/{id}/rename": {
      "patch": {
        "tags": [
          "volumes"
        ],
        "summary": "Rename a volume.",
        "description": "Rename a Volume for the currently authenticated tenant.\n\n#### Rules\n- The Volume name must be unique; otherwise, renaming will not be allowed.\n\n#### Notes\n- Utilize the **block-storage volume list** command to retrieve a list of all\n Volumes and obtain the ID of the Volume you wish to rename.",
        "operationId": "rename_volume_v1_v1_volumes__id__rename_patch",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RenameVolumeRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Rename Volume V1 V1 Volumes  Id  Rename Patch"
                }
              }
            },
            "description": "Not Found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 409 Rename Volume V1 V1 Volumes  Id  Rename Patch"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Rename Volume V1 V1 Volumes  Id  Rename Patch"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_rename"
      }
    },
    "/v1/volumes/{id}/retype": {
      "post": {
        "tags": [
          "volumes"
        ],
        "summary": "Change the type of a volume.",
        "description": "Change the Volume Type of an existing Volume for the currently\n authenticated tenant.\n\nThe Volume retype will be completed when the Volume status returns to\n \"completed\".\n\n#### Rules\n- The Volume state must be \"available\".\n- The Volume status must be \"completed\" or \"retype_error\".\n- The new Volume Type must belong to the same region as the Volume.\n\n#### Notes\n- Utilize the **block-storage volume list** command to retrieve a list of all\n Volumes and obtain the ID of the Volume you want to retype.\n- Utilize the **block-storage volume-types list** command to retrieve a list of\n all Volume Types and obtain the ID of the Volume Type you want to use.",
        "operationId": "retype_volume_v1_volumes__id__retype_post",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Id"
            }
          },
          {
            "name": "x-tenant-id",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "title": "X-Tenant-Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VolumeRetypeRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 404 Retype Volume V1 Volumes  Id  Retype Post"
                }
              }
            },
            "description": "Not Found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ErrorResponse"
                  },
                  "title": "Response 422 Retype Volume V1 Volumes  Id  Retype Post"
                }
              }
            },
            "description": "Unprocessable Entity"
          }
        },
        "x-viveiro": true,
        "x-permission-name": "bs_volume_retype"
      }
    }
  },
  "components": {
    "schemas": {
      "AttachmentMachine": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InstanceStatus"
              },
              {
                "type": "string"
              }
            ],
            "title": "Status"
          },
          "state": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InstanceState"
              },
              {
                "type": "string"
              }
            ],
            "title": "State"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Created At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Updated At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "status",
          "state",
          "created_at",
          "updated_at"
        ],
        "title": "AttachmentMachine",
        "example": {
          "created_at": "2022-01-01T00:00:10Z",
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "name": "machine name",
          "state": "running",
          "status": "completed",
          "updated_at": "2022-01-01T00:00:10Z"
        }
      },
      "AttachmentResponseV1": {
        "properties": {
          "instance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AttachmentMachine"
              },
              {
                "$ref": "#/components/schemas/IdRequest"
              }
            ],
            "title": "Instance"
          },
          "attached_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Attached At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          },
          "device": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Device"
          }
        },
        "type": "object",
        "required": [
          "instance",
          "attached_at"
        ],
        "title": "AttachmentResponseV1",
        "example": {
          "attached_at": "2022-01-01T00:00:10Z",
          "device": "/dev/vdb",
          "instance": {
            "created_at": "2022-01-01T00:00:10Z",
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "name": "machine name",
            "state": "running",
            "status": "completed",
            "updated_at": "2022-01-01T00:00:10Z"
          }
        }
      },
      "CopyCrossRegionRequest": {
        "properties": {
          "destination_region": {
            "$ref": "#/components/schemas/Regions"
          }
        },
        "type": "object",
        "required": [
          "destination_region"
        ],
        "title": "CopyCrossRegionRequest",
        "example": {
          "destination_region": "br-se1"
        }
      },
      "CreateAttachmentRequest": {
        "properties": {
          "volume": {
            "$ref": "#/components/schemas/IdRequest"
          },
          "instance": {
            "$ref": "#/components/schemas/IdRequest"
          },
          "device": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Device"
          }
        },
        "type": "object",
        "required": [
          "volume",
          "instance"
        ],
        "title": "CreateAttachmentRequest",
        "example": {
          "device": "/dev/vdc",
          "instance": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          },
          "volume": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        }
      },
      "DailyFrequency": {
        "properties": {
          "start_time": {
            "type": "string",
            "format": "time",
            "title": "Start Time"
          }
        },
        "type": "object",
        "required": [
          "start_time"
        ],
        "title": "DailyFrequency"
      },
      "DiskType": {
        "type": "string",
        "enum": [
          "nvme",
          "hdd"
        ],
        "title": "DiskType"
      },
      "ErrorResponse": {
        "properties": {
          "slug": {
            "type": "string",
            "title": "Slug"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "detail": {
            "type": "object",
            "title": "Detail"
          }
        },
        "type": "object",
        "required": [
          "slug",
          "message",
          "detail"
        ],
        "title": "ErrorResponse",
        "example": {
          "detail": {},
          "message": "Something went wrong",
          "slug": "generic"
        }
      },
      "ExpandSchedulers": {
        "type": "string",
        "enum": [
          "volume"
        ],
        "title": "ExpandSchedulers"
      },
      "ExpandSnapshots": {
        "type": "string",
        "enum": [
          "volume"
        ],
        "title": "ExpandSnapshots"
      },
      "Frequency": {
        "properties": {
          "daily": {
            "$ref": "#/components/schemas/DailyFrequency"
          }
        },
        "type": "object",
        "required": [
          "daily"
        ],
        "title": "Frequency"
      },
      "GenericVolumeTypeList_VolumeTypeResponseWithAzs_": {
        "properties": {
          "types": {
            "items": {
              "$ref": "#/components/schemas/VolumeTypeResponseWithAzs"
            },
            "type": "array",
            "title": "Types"
          }
        },
        "type": "object",
        "required": [
          "types"
        ],
        "title": "GenericVolumeTypeList[VolumeTypeResponseWithAzs]",
        "example": {
          "types": [
            {
              "allows_encryption": true,
              "availability_zones": [
                "a"
              ],
              "disk_type": "nvme",
              "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "iops": {
                "read": 1000,
                "total": 1000,
                "write": 1000
              },
              "name": "my_volume_type",
              "status": "active"
            }
          ]
        }
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "IdRequest": {
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "title": "Id"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "IdRequest",
        "example": {
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
      },
      "IdResponse": {
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "title": "Id"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "IdResponse",
        "example": {
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
      },
      "InstanceState": {
        "type": "string",
        "enum": [
          "new",
          "running",
          "stopped",
          "suspended",
          "deleted"
        ],
        "title": "InstanceState"
      },
      "InstanceStatus": {
        "type": "string",
        "enum": [
          "provisioning",
          "creating",
          "creating_error",
          "creating_error_quota",
          "completed",
          "retyping_pending",
          "retyping",
          "retyping_confirmed",
          "retyping_error",
          "retyping_error_quota",
          "stopping_pending",
          "stopping",
          "suspending_pending",
          "suspending",
          "rebooting_pending",
          "rebooting",
          "starting_pending",
          "starting",
          "deleting_pending",
          "deleting",
          "deleting_error",
          "deleted"
        ],
        "title": "InstanceStatus"
      },
      "Metadata": {
        "properties": {
          "page": {
            "$ref": "#/components/schemas/PageMetadata"
          }
        },
        "type": "object",
        "required": [
          "page"
        ],
        "title": "Metadata"
      },
      "Name": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 255,
            "minLength": 1,
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "Name",
        "example": {
          "name": "some_resource_name"
        }
      },
      "PageMetadata": {
        "properties": {
          "offset": {
            "type": "integer",
            "title": "Offset"
          },
          "limit": {
            "type": "integer",
            "title": "Limit"
          },
          "count": {
            "type": "integer",
            "title": "Count"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "max_limit": {
            "type": "integer",
            "title": "Max Limit"
          }
        },
        "type": "object",
        "required": [
          "offset",
          "limit",
          "count",
          "total",
          "max_limit"
        ],
        "title": "PageMetadata"
      },
      "Policy-Input": {
        "properties": {
          "retention_in_days": {
            "type": "integer",
            "minimum": 1,
            "title": "Retention In Days"
          },
          "frequency": {
            "$ref": "#/components/schemas/Frequency"
          }
        },
        "type": "object",
        "required": [
          "retention_in_days",
          "frequency"
        ],
        "title": "Policy"
      },
      "Policy-Output": {
        "properties": {
          "retention_in_days": {
            "type": "integer",
            "minimum": 1,
            "title": "Retention In Days"
          },
          "frequency": {
            "$ref": "#/components/schemas/Frequency"
          }
        },
        "type": "object",
        "required": [
          "retention_in_days",
          "frequency"
        ],
        "title": "Policy"
      },
      "Regions": {
        "type": "string",
        "enum": [
          "br-se1",
          "br-mgl1",
          "br-ne1"
        ],
        "title": "Regions"
      },
      "RenameVolumeRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 50,
            "minLength": 3,
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "RenameVolumeRequest",
        "example": {
          "name": "volume-name"
        }
      },
      "SchedulerListResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/Metadata"
          },
          "schedulers": {
            "items": {
              "$ref": "#/components/schemas/SchedulerResponse"
            },
            "type": "array",
            "title": "Schedulers"
          }
        },
        "type": "object",
        "required": [
          "meta",
          "schedulers"
        ],
        "title": "SchedulerListResponse",
        "example": {
          "meta": {
            "page": {
              "count": 0,
              "limit": 20,
              "max_limit": 100,
              "offset": 0,
              "total": 0
            }
          },
          "schedulers": [
            {
              "created_at": "2024-10-14T19:56:13Z",
              "description": "some description",
              "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "name": "scheduler-name",
              "policy": {
                "frequency": {
                  "daily": {
                    "start_time": "14:10:00"
                  }
                },
                "retention_in_days": 1
              },
              "snapshot": {
                "type": "instant"
              },
              "state": "available",
              "updated_at": "2024-10-14T19:56:14Z",
              "volumes": [
                "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"
              ]
            }
          ]
        }
      },
      "SchedulerPayload": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "snapshot": {
            "$ref": "#/components/schemas/Snapshot"
          },
          "policy": {
            "$ref": "#/components/schemas/Policy-Input"
          }
        },
        "type": "object",
        "required": [
          "name",
          "snapshot",
          "policy"
        ],
        "title": "SchedulerPayload",
        "example": {
          "description": "example",
          "name": "scheduler-name",
          "policy": {
            "frequency": {
              "daily": {
                "start_time": "14:10:00"
              }
            },
            "retention_in_days": 1
          },
          "snapshot": {
            "type": "instant"
          }
        }
      },
      "SchedulerResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "volumes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volumes"
          },
          "snapshot": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Snapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "$ref": "#/components/schemas/SchedulerState"
          },
          "policy": {
            "$ref": "#/components/schemas/Policy-Output"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Created At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Updated At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "state",
          "policy",
          "created_at",
          "updated_at"
        ],
        "title": "SchedulerResponse",
        "example": {
          "created_at": "2024-10-14T19:56:13Z",
          "description": "some value",
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "name": "scheduler-name",
          "policy": {
            "frequency": {
              "daily": {
                "start_time": "14:10:00"
              }
            },
            "retention_in_days": 1
          },
          "snapshot": {
            "type": "instant"
          },
          "state": "available",
          "updated_at": "2024-10-14T19:56:14Z",
          "volumes": [
            "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"
          ]
        }
      },
      "SchedulerState": {
        "type": "string",
        "enum": [
          "available",
          "deleted"
        ],
        "title": "SchedulerState"
      },
      "SchedulerVolumeIdentifierPayload": {
        "properties": {
          "volume": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdRequest"
              },
              {
                "$ref": "#/components/schemas/Name"
              }
            ],
            "title": "Volume"
          }
        },
        "type": "object",
        "required": [
          "volume"
        ],
        "title": "SchedulerVolumeIdentifierPayload",
        "example": {
          "volume": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        }
      },
      "Snapshot": {
        "properties": {
          "type": {
            "$ref": "#/components/schemas/SnapshotType"
          }
        },
        "type": "object",
        "required": [
          "type"
        ],
        "title": "Snapshot"
      },
      "SnapshotCreationRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 50,
            "minLength": 3,
            "title": "Name"
          },
          "volume": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdRequest"
              },
              {
                "$ref": "#/components/schemas/Name"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume"
          },
          "source_snapshot": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdRequest"
              },
              {
                "$ref": "#/components/schemas/Name"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Snapshot"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "type": {
            "$ref": "#/components/schemas/SnapshotType",
            "default": "instant"
          }
        },
        "type": "object",
        "required": [
          "name",
          "description"
        ],
        "title": "SnapshotCreationRequest",
        "example": {
          "description": "my-snapshot",
          "name": "snapshot-name",
          "source_snapshot": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          },
          "type": "instant",
          "volume": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        }
      },
      "SnapshotCreationType": {
        "type": "string",
        "enum": [
          "manual",
          "scheduled"
        ],
        "title": "SnapshotCreationType"
      },
      "SnapshotListResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/Metadata"
          },
          "snapshots": {
            "items": {
              "$ref": "#/components/schemas/SnapshotResponse"
            },
            "type": "array",
            "title": "Snapshots"
          }
        },
        "type": "object",
        "required": [
          "meta",
          "snapshots"
        ],
        "title": "SnapshotListResponse",
        "example": {
          "meta": {
            "page": {
              "count": 0,
              "limit": 20,
              "max_limit": 100,
              "offset": 0,
              "total": 0
            }
          },
          "snapshots": [
            {
              "availability_zones": [
                "br-ne1-a"
              ],
              "created_at": "2022-01-01T00:00:10Z",
              "creation_type": "manual",
              "description": "my snapshot for testing",
              "encrypted": false,
              "error": {
                "message": "You have reached the limit of allowed snapshots. Please, remove unused snapshots or contact support to increase your quota.",
                "slug": "creating_error_quota"
              },
              "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "name": "My snapshot",
              "size": 10,
              "state": "available",
              "status": "completed",
              "type": "object",
              "updated_at": "2022-01-01T00:00:10Z",
              "volume": {
                "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
              }
            }
          ]
        }
      },
      "SnapshotRenameRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 50,
            "minLength": 3,
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "SnapshotRenameRequest",
        "example": {
          "name": "snapshot-name"
        }
      },
      "SnapshotResponse": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "size": {
            "type": "integer",
            "title": "Size"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "state": {
            "$ref": "#/components/schemas/SnapshotStateV1"
          },
          "status": {
            "$ref": "#/components/schemas/SnapshotStatusV1"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Created At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Updated At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          },
          "volume": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdResponse"
              },
              {
                "$ref": "#/components/schemas/SnapshotVolume"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume"
          },
          "error": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SnapshotResponseError"
              },
              {
                "type": "null"
              }
            ]
          },
          "availability_zones": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Availability Zones"
          },
          "type": {
            "type": "string",
            "title": "Type"
          },
          "encrypted": {
            "type": "boolean",
            "title": "Encrypted"
          },
          "creation_type": {
            "$ref": "#/components/schemas/SnapshotCreationType"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "size",
          "description",
          "state",
          "status",
          "created_at",
          "updated_at",
          "volume",
          "availability_zones",
          "type",
          "encrypted",
          "creation_type"
        ],
        "title": "SnapshotResponse",
        "example": {
          "availability_zones": [
            "br-ne1-a"
          ],
          "created_at": "2022-01-01T00:00:10Z",
          "creation_type": "manual",
          "description": "my snapshot for testing",
          "encrypted": false,
          "error": {
            "message": "You have reached the limit of allowed snapshots. Please, remove unused snapshots or contact support to increase your quota.",
            "slug": "creating_error_quota"
          },
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "name": "My snapshot",
          "size": 10,
          "state": "available",
          "status": "completed",
          "type": "object",
          "updated_at": "2022-01-01T00:00:10Z",
          "volume": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        }
      },
      "SnapshotResponseError": {
        "properties": {
          "slug": {
            "type": "string",
            "title": "Slug"
          },
          "message": {
            "type": "string",
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "slug",
          "message"
        ],
        "title": "SnapshotResponseError",
        "example": {
          "message": "You have reached the limit of allowed snapshots. Please, remove unused snapshots or contact support to increase your quota.",
          "slug": "creating_error_quota"
        }
      },
      "SnapshotStateV1": {
        "type": "string",
        "enum": [
          "new",
          "available",
          "deleted"
        ],
        "title": "SnapshotStateV1"
      },
      "SnapshotStatusV1": {
        "type": "string",
        "enum": [
          "provisioning",
          "creating",
          "creating_error",
          "creating_error_quota",
          "completed",
          "deleting",
          "deleted",
          "deleted_error",
          "replicating",
          "replicating_error",
          "replicating_error_quota",
          "restoring",
          "restoring_error",
          "copying"
        ],
        "title": "SnapshotStatusV1"
      },
      "SnapshotType": {
        "type": "string",
        "enum": [
          "instant",
          "object"
        ],
        "title": "SnapshotType"
      },
      "SnapshotVolume": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "size": {
            "type": "integer",
            "title": "Size"
          },
          "type": {
            "$ref": "#/components/schemas/SnapshotVolumeType"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "size",
          "type"
        ],
        "title": "SnapshotVolume",
        "example": {
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "name": "My volume",
          "size": 10,
          "type": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "name": "My volume type"
          }
        }
      },
      "SnapshotVolumeType": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "title": "SnapshotVolumeType",
        "example": {
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "name": "My volume type"
        }
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "VolumeCreateRequestV1": {
        "properties": {
          "availability_zone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Availability Zone"
          },
          "name": {
            "type": "string",
            "maxLength": 50,
            "minLength": 3,
            "title": "Name"
          },
          "size": {
            "type": "integer",
            "maximum": 2147483648,
            "minimum": 10,
            "title": "Size",
            "description": "Gibibytes (GiB)"
          },
          "type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdRequest"
              },
              {
                "$ref": "#/components/schemas/Name"
              }
            ],
            "title": "Type"
          },
          "snapshot": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdRequest"
              },
              {
                "$ref": "#/components/schemas/Name"
              },
              {
                "type": "null"
              }
            ],
            "title": "Snapshot"
          },
          "encrypted": {
            "type": "boolean",
            "title": "Encrypted",
            "description": "Indicates if the volume is encrypted. Default is False.",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "name",
          "size",
          "type"
        ],
        "title": "VolumeCreateRequestV1",
        "example": {
          "availability_zone": "br-se1-a",
          "encrypted": false,
          "name": "volume-name",
          "size": 10,
          "snapshot": {
            "name": "my_snapshot_name"
          },
          "type": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        }
      },
      "VolumeExtendRequest": {
        "properties": {
          "size": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "title": "Size",
            "description": "New volume size in GB"
          }
        },
        "type": "object",
        "required": [
          "size"
        ],
        "title": "VolumeExtendRequest",
        "example": {
          "size": 20
        }
      },
      "VolumeResponseError": {
        "properties": {
          "slug": {
            "type": "string",
            "title": "Slug"
          },
          "message": {
            "type": "string",
            "title": "Message"
          }
        },
        "type": "object",
        "required": [
          "slug",
          "message"
        ],
        "title": "VolumeResponseError",
        "example": {
          "message": "You have reached the limit of allowed disks. Please, remove unused disks or contact support to increase your quota.",
          "slug": "creating_error_quota"
        }
      },
      "VolumeResponseV1": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "size": {
            "type": "integer",
            "title": "Size"
          },
          "status": {
            "$ref": "#/components/schemas/VolumeStatusV1"
          },
          "state": {
            "$ref": "#/components/schemas/VolumeStateV1"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Created At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "string",
                "format": "date-time"
              }
            ],
            "title": "Updated At",
            "examples": [
              "2022-01-01T00:00:10Z"
            ]
          },
          "type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdRequest"
              },
              {
                "$ref": "#/components/schemas/VolumeTypeResponse"
              }
            ],
            "title": "Type"
          },
          "error": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/VolumeResponseError"
              },
              {
                "type": "null"
              }
            ]
          },
          "attachment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AttachmentResponseV1"
              },
              {
                "type": "null"
              }
            ]
          },
          "availability_zone": {
            "type": "string",
            "title": "Availability Zone"
          },
          "encrypted": {
            "type": "boolean",
            "title": "Encrypted",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "size",
          "status",
          "state",
          "created_at",
          "updated_at",
          "type",
          "availability_zone"
        ],
        "title": "VolumeResponseV1",
        "example": {
          "attachment": {
            "attached_at": "2022-01-01T00:00:10Z",
            "device": "/dev/vdb",
            "instance": {
              "created_at": "2022-01-01T00:00:10Z",
              "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "name": "machine name",
              "state": "running",
              "status": "completed",
              "updated_at": "2022-01-01T00:00:10Z"
            }
          },
          "availability_zone": "br-ne1-a",
          "created_at": "2022-01-01T00:00:10Z",
          "encrypted": false,
          "error": {
            "message": "You have reached the limit of allowed disks. Please, remove unused disks or contact support to increase your quota.",
            "slug": "creating_error_quota"
          },
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "name": "volume name",
          "size": 10,
          "state": "in-use",
          "status": "completed",
          "type": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          },
          "updated_at": "2022-01-01T00:00:10Z"
        }
      },
      "VolumeRetypeRequest": {
        "properties": {
          "new_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IdRequest"
              },
              {
                "$ref": "#/components/schemas/Name"
              }
            ],
            "title": "New Type"
          }
        },
        "type": "object",
        "required": [
          "new_type"
        ],
        "title": "VolumeRetypeRequest",
        "example": {
          "new_type": {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        }
      },
      "VolumeStateV1": {
        "type": "string",
        "enum": [
          "new",
          "available",
          "in-use",
          "deleted",
          "legacy"
        ],
        "title": "VolumeStateV1"
      },
      "VolumeStatusV1": {
        "type": "string",
        "enum": [
          "provisioning",
          "creating",
          "creating_error",
          "creating_error_quota",
          "completed",
          "extend_pending",
          "extending",
          "extend_error",
          "extend_error_quota",
          "attaching_pending",
          "attaching_error",
          "attaching",
          "detaching_pending",
          "detaching_error",
          "detaching",
          "retype_pending",
          "retyping",
          "retype_error",
          "retype_error_quota",
          "deleting_pending",
          "deleting",
          "deleted",
          "deleted_error"
        ],
        "title": "VolumeStatusV1"
      },
      "VolumeTypeResponse": {
        "properties": {
          "iops": {
            "$ref": "#/components/schemas/VolumeTypeSpec"
          },
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "disk_type": {
            "$ref": "#/components/schemas/DiskType"
          },
          "status": {
            "$ref": "#/components/schemas/VolumeTypeStatus"
          }
        },
        "type": "object",
        "required": [
          "iops",
          "id",
          "name",
          "disk_type",
          "status"
        ],
        "title": "VolumeTypeResponse",
        "example": {
          "disk_type": "nvme",
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "iops": {
            "read": 1000,
            "total": 1000,
            "write": 1000
          },
          "name": "my_volume_type",
          "status": "active"
        }
      },
      "VolumeTypeResponseWithAzs": {
        "properties": {
          "iops": {
            "$ref": "#/components/schemas/VolumeTypeSpec"
          },
          "id": {
            "type": "string",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "disk_type": {
            "$ref": "#/components/schemas/DiskType"
          },
          "status": {
            "$ref": "#/components/schemas/VolumeTypeStatus"
          },
          "availability_zones": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Availability Zones"
          },
          "allows_encryption": {
            "type": "boolean",
            "title": "Allows Encryption",
            "default": false
          }
        },
        "type": "object",
        "required": [
          "iops",
          "id",
          "name",
          "disk_type",
          "status",
          "availability_zones"
        ],
        "title": "VolumeTypeResponseWithAzs",
        "example": {
          "allows_encryption": true,
          "availability_zones": [
            "a"
          ],
          "disk_type": "nvme",
          "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "iops": {
            "read": 1000,
            "total": 1000,
            "write": 1000
          },
          "name": "my_volume_type",
          "status": "active"
        }
      },
      "VolumeTypeSpec": {
        "properties": {
          "read": {
            "type": "integer",
            "title": "Read"
          },
          "write": {
            "type": "integer",
            "title": "Write"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          }
        },
        "type": "object",
        "required": [
          "read",
          "write",
          "total"
        ],
        "title": "VolumeTypeSpec",
        "example": {
          "read": 1000,
          "total": 1000,
          "write": 1000
        }
      },
      "VolumeTypeStatus": {
        "type": "string",
        "enum": [
          "active",
          "deprecated",
          "deleted"
        ],
        "title": "VolumeTypeStatus"
      },
      "VolumesResponseV1": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/Metadata"
          },
          "volumes": {
            "items": {
              "$ref": "#/components/schemas/VolumeResponseV1"
            },
            "type": "array",
            "title": "Volumes"
          }
        },
        "type": "object",
        "required": [
          "meta",
          "volumes"
        ],
        "title": "VolumesResponseV1",
        "example": {
          "meta": {
            "page": {
              "count": 0,
              "limit": 20,
              "max_limit": 100,
              "offset": 0,
              "total": 0
            }
          },
          "volumes": [
            {
              "attachment": {
                "attached_at": "2022-01-01T00:00:10Z",
                "device": "/dev/vdb",
                "instance": {
                  "created_at": "2022-01-01T00:00:10Z",
                  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                  "name": "machine name",
                  "state": "running",
                  "status": "completed",
                  "updated_at": "2022-01-01T00:00:10Z"
                }
              },
              "availability_zone": "br-ne1-a",
              "created_at": "2022-01-01T00:00:10Z",
              "encrypted": false,
              "error": {
                "message": "You have reached the limit of allowed disks. Please, remove unused disks or contact support to increase your quota.",
                "slug": "creating_error_quota"
              },
              "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "name": "volume name",
              "size": 10,
              "state": "in-use",
              "status": "completed",
              "type": {
                "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
              },
              "updated_at": "2022-01-01T00:00:10Z"
            }
          ]
        }
      }
    }
  },
  "tags": [
    {
      "name": "volumes",
      "description": "Operations with volumes, including create, delete, extend, retype, list and other actions."
    },
    {
      "name": "volume-types",
      "description": "Operations with volume types for volumes."
    },
    {
      "name": "snapshots",
      "description": "Operations with snapshots for volumes."
    },
    {
      "name": "schedulers",
      "description": "Operations with schedulers for snapshot creation and retention."
    }
  ]
}