Voltage Park Organization API

Read and update organization details, billing notification settings, and the organization address used for invoicing.

OpenAPI Specification

voltage-park-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Voltage Park On-Demand API
  description: >-
    The all-purpose management API for Voltage Park On-Demand, the GPU cloud
    offering on-demand and reserved NVIDIA H100 / H200 clusters as bare metal
    and virtual machines. The API lets developers deploy and manage instant
    VMs, bare-metal GPU rentals, SSH keys, shared storage, locations, billing,
    and organization settings. Requests authenticate with a bearer API token
    created on the Developers page of the Voltage Park dashboard; tokens are
    valid for one year. The On-Demand platform is served on TensorDock
    infrastructure.
  termsOfService: https://www.voltagepark.com/legal
  contact:
    name: Voltage Park Support
    url: https://support.voltagepark.com
  version: 0.0.1
servers:
  - url: https://cloud-api.voltagepark.com/api/v1
security:
  - apiTokenAuth: []
tags:
  - name: Virtual Machines
    description: Deploy and manage on-demand GPU virtual machines and instant VMs.
  - name: Bare Metal
    description: Provision and manage multi-node bare-metal GPU rentals and clusters.
  - name: Organization
    description: Organization details, address, and SSH keys.
  - name: Storage
    description: Shared storage volumes attachable to bare-metal rentals.
  - name: Locations
    description: Locations, host nodes, and instant-deploy presets.
  - name: Billing
    description: Hourly rates and historical billing transactions.
  - name: Validation
    description: Validate cloud-init scripts before deployment.
paths:
  /virtual-machines/instant/locations:
    get:
      tags: [Virtual Machines]
      operationId: getInstantVmLocations
      summary: List available locations for instant VMs
      responses:
        '200':
          description: Paginated list of instant-deploy locations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedInstantDeployLocation'
  /virtual-machines/instant/locations/{location_id}:
    get:
      tags: [Virtual Machines]
      operationId: getInstantVmLocationDetails
      summary: Location details for instant VMs
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Instant-deploy location details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantDeployLocation'
  /virtual-machines/instant:
    post:
      tags: [Virtual Machines]
      operationId: deployInstantVm
      summary: Deploy an instant virtual machine
      description: >-
        Using a preset found at `/virtual-machines/instant/locations`, deploy a
        preconfigured virtual machine in seconds.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InstantVMConfig'
      responses:
        '201':
          description: Instant VM deployed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantVMResult'
  /virtual-machines/:
    get:
      tags: [Virtual Machines]
      operationId: listVirtualMachines
      summary: List of owned, unterminated virtual machines
      responses:
        '200':
          description: Paginated list of virtual machines.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedVirtualMachine'
  /virtual-machines/{virtual_machine_id}:
    get:
      tags: [Virtual Machines]
      operationId: getVirtualMachine
      summary: Details for an unterminated virtual machine
      parameters:
        - $ref: '#/components/parameters/VirtualMachineId'
      responses:
        '200':
          description: Virtual machine details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineDetails'
    patch:
      tags: [Virtual Machines]
      operationId: modifyVirtualMachine
      summary: Modify a virtual machine's details
      parameters:
        - $ref: '#/components/parameters/VirtualMachineId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchVirtualMachine'
      responses:
        '200':
          description: Updated virtual machine details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualMachineDetails'
    delete:
      tags: [Virtual Machines]
      operationId: terminateVirtualMachine
      summary: Terminate a virtual machine
      parameters:
        - $ref: '#/components/parameters/VirtualMachineId'
      responses:
        '204':
          description: Virtual machine terminated.
  /virtual-machines/{virtual_machine_id}/power-status:
    put:
      tags: [Virtual Machines]
      operationId: setVirtualMachinePowerStatus
      summary: Start or stop a virtual machine
      parameters:
        - $ref: '#/components/parameters/VirtualMachineId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VMPowerSchema'
      responses:
        '200':
          description: Power status change accepted.
  /virtual-machines/{virtual_machine_id}/relocate:
    post:
      tags: [Virtual Machines]
      operationId: relocateVirtualMachine
      summary: Relocate a stopped-disassociated virtual machine to a new hostnode
      parameters:
        - $ref: '#/components/parameters/VirtualMachineId'
      responses:
        '200':
          description: Relocation accepted.
  /virtual-machines/{virtual_machine_id}/port-forward:
    post:
      tags: [Virtual Machines]
      operationId: createPortForward
      summary: Request port forwarding for a virtual machine
      parameters:
        - $ref: '#/components/parameters/VirtualMachineId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortForwardConfig'
      responses:
        '201':
          description: Port forwarding created.
    delete:
      tags: [Virtual Machines]
      operationId: deletePortForward
      summary: Delete port forwarding(s) for a virtual machine
      parameters:
        - $ref: '#/components/parameters/VirtualMachineId'
      responses:
        '204':
          description: Port forwarding deleted.
  /bare-metal/locations:
    get:
      tags: [Bare Metal]
      operationId: listBareMetalLocations
      summary: List of available baremetal locations
      responses:
        '200':
          description: Paginated list of bare-metal locations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedBareMetalLocation'
  /bare-metal/detailed-locations:
    get:
      tags: [Bare Metal]
      operationId: listDetailedBareMetalLocations
      summary: Get more detailed information about baremetal locations
      responses:
        '200':
          description: Detailed bare-metal location information.
  /bare-metal/:
    post:
      tags: [Bare Metal]
      operationId: provisionBareMetal
      summary: Provision a new bare-metal server rental
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BareMetalDeployConfig'
      responses:
        '201':
          description: Bare-metal rental provisioned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeployBareResult'
    get:
      tags: [Bare Metal]
      operationId: listBareMetalRentals
      summary: List of owned, unterminated baremetal machines
      responses:
        '200':
          description: Paginated list of bare-metal rentals.
  /bare-metal/kubernetes:
    get:
      tags: [Bare Metal]
      operationId: listKubernetes
      summary: Information about kubernetes deployments
      responses:
        '200':
          description: Kubernetes deployment information.
  /bare-metal/kubernetes/{cluster_id}/health:
    get:
      tags: [Bare Metal]
      operationId: getKubernetesHealth
      summary: Get the health status of a kubernetes cluster
      parameters:
        - $ref: '#/components/parameters/ClusterId'
      responses:
        '200':
          description: Kubernetes cluster health.
  /bare-metal/kubernetes/{cluster_id}/slurm-user:
    post:
      tags: [Bare Metal]
      operationId: upsertSlurmUser
      summary: Add or update Slurm user for a Kubernetes cluster
      parameters:
        - $ref: '#/components/parameters/ClusterId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SlurmUserRequest'
      responses:
        '200':
          description: Slurm user added or updated.
  /bare-metal/kubernetes/{cluster_id}/addons/{addon}:
    get:
      tags: [Bare Metal]
      operationId: getKubernetesAddon
      summary: Get details for a specific addon for a Kubernetes cluster
      parameters:
        - $ref: '#/components/parameters/ClusterId'
        - name: addon
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Addon details.
  /bare-metal/{baremetal_rental_id}:
    get:
      tags: [Bare Metal]
      operationId: getBareMetalRental
      summary: Get details for a baremetal rental
      parameters:
        - $ref: '#/components/parameters/BareMetalRentalId'
      responses:
        '200':
          description: Bare-metal rental details.
    delete:
      tags: [Bare Metal]
      operationId: terminateBareMetalRental
      summary: Terminate a bare-metal rental
      parameters:
        - $ref: '#/components/parameters/BareMetalRentalId'
      responses:
        '204':
          description: Bare-metal rental terminated.
    patch:
      tags: [Bare Metal]
      operationId: modifyBareMetalRental
      summary: Modify baremetal rental details
      parameters:
        - $ref: '#/components/parameters/BareMetalRentalId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchBareMetalRental'
      responses:
        '200':
          description: Updated bare-metal rental details.
  /bare-metal/{baremetal_rental_id}/power-status:
    put:
      tags: [Bare Metal]
      operationId: setBareMetalPowerStatus
      summary: Start or stop the nodes in a baremetal rental
      parameters:
        - $ref: '#/components/parameters/BareMetalRentalId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BaremetalPowerSchema'
      responses:
        '200':
          description: Power status change accepted.
  /bare-metal/{baremetal_rental_id}/reboot:
    post:
      tags: [Bare Metal]
      operationId: rebootBareMetalNodes
      summary: Reboot specific nodes in a baremetal rental
      parameters:
        - $ref: '#/components/parameters/BareMetalRentalId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RebootBaremetalSchema'
      responses:
        '200':
          description: Reboot accepted.
  /bare-metal/{baremetal_rental_id}/remove-nodes:
    patch:
      tags: [Bare Metal]
      operationId: removeBareMetalNodes
      summary: Remove certain nodes in a rental
      parameters:
        - $ref: '#/components/parameters/BareMetalRentalId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemoveNodesSchema'
      responses:
        '200':
          description: Nodes removed.
  /organization/:
    get:
      tags: [Organization]
      operationId: getOrganization
      summary: Organization details
      responses:
        '200':
          description: Organization details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationDetails'
    patch:
      tags: [Organization]
      operationId: updateOrganization
      summary: Update organization details
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrganizationUpdate'
      responses:
        '200':
          description: Updated organization details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationDetails'
  /organization/ssh-keys:
    get:
      tags: [Organization]
      operationId: listSshKeys
      summary: List of SSH public keys under your organization
      responses:
        '200':
          description: Paginated list of SSH keys.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedSshKey'
    post:
      tags: [Organization]
      operationId: addSshKey
      summary: Add new SSH public key to your organization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSshKeyConfig'
      responses:
        '201':
          description: SSH key added.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SshKeyDetails'
  /organization/ssh-keys/{ssh_key_id}:
    delete:
      tags: [Organization]
      operationId: removeSshKey
      summary: Remove an SSH key from your organization
      parameters:
        - name: ssh_key_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '204':
          description: SSH key removed.
  /organization/address:
    get:
      tags: [Organization]
      operationId: getOrganizationAddress
      summary: Organization address
      responses:
        '200':
          description: Organization address.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationAddressDetails'
    put:
      tags: [Organization]
      operationId: setOrganizationAddress
      summary: Set organization address
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrganizationAddressSet'
      responses:
        '200':
          description: Organization address set.
  /storage/hourly-rate:
    get:
      tags: [Storage]
      operationId: getStorageHourlyRate
      summary: Fetch hourly rate for storage
      responses:
        '200':
          description: Storage hourly rate.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageRate'
  /storage/:
    post:
      tags: [Storage]
      operationId: createStorage
      summary: Create shared storage volume
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorageCreate'
      responses:
        '201':
          description: Storage volume created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageDetails'
    get:
      tags: [Storage]
      operationId: listStorage
      summary: List of available storage
      responses:
        '200':
          description: Paginated list of storage volumes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedStorage'
  /storage/{storage_id}:
    get:
      tags: [Storage]
      operationId: getStorage
      summary: Get storage by id
      parameters:
        - $ref: '#/components/parameters/StorageId'
      responses:
        '200':
          description: Storage volume details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageDetails'
    patch:
      tags: [Storage]
      operationId: updateStorage
      summary: Update storage volume
      parameters:
        - $ref: '#/components/parameters/StorageId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorageUpdate'
      responses:
        '200':
          description: Updated storage volume details.
    delete:
      tags: [Storage]
      operationId: terminateStorage
      summary: Terminate a storage volume
      parameters:
        - $ref: '#/components/parameters/StorageId'
      responses:
        '204':
          description: Storage volume terminated.
  /storage/{storage_id}/nfs-squash:
    patch:
      tags: [Storage]
      operationId: updateNfsSquash
      summary: Update NFS squash for a storage volume
      parameters:
        - $ref: '#/components/parameters/StorageId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NFSSquashUpdate'
      responses:
        '200':
          description: NFS squash updated.
  /locations/:
    get:
      tags: [Locations]
      operationId: listLocations
      summary: List of available locations and available HostNodes
      responses:
        '200':
          description: Paginated list of locations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedLocation'
  /locations/{location_id}:
    get:
      tags: [Locations]
      operationId: getLocation
      summary: Details for a given location by ID
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Location details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FullLocationDetails'
  /hostnodes/{hostnode_id}:
    get:
      tags: [Locations]
      operationId: getHostNode
      summary: Details and available resources for a given HostNode
      parameters:
        - name: hostnode_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Host node details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostNodeDetails'
  /instant-deploy-presets/:
    get:
      tags: [Locations]
      operationId: listInstantDeployPresets
      summary: List Instant Deploy Presets
      responses:
        '200':
          description: Instant deploy presets.
  /instant-deploy-presets/{instant_deploy_preset_id}:
    get:
      tags: [Locations]
      operationId: getInstantDeployPreset
      summary: Get Instant Deploy Preset
      parameters:
        - name: instant_deploy_preset_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Instant deploy preset details.
  /billing/hourly-rate:
    get:
      tags: [Billing]
      operationId: getHourlyRate
      summary: Current rate for active rentals
      responses:
        '200':
          description: Combined hourly rate for active rentals.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HourlyRateDetails'
  /billing/transactions:
    get:
      tags: [Billing]
      operationId: listTransactions
      summary: Historical organization billing log
      responses:
        '200':
          description: Paginated historical billing transactions.
  /billing/reports/{year}/{month}/transactions:
    get:
      tags: [Billing]
      operationId: getMonthlyTransactions
      summary: Monthly billing log
      parameters:
        - name: year
          in: path
          required: true
          schema:
            type: integer
        - name: month
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Monthly billing transactions report.
  /validate/cloudinit:
    post:
      tags: [Validation]
      operationId: validateCloudInit
      summary: Validate a cloud init script
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CloudinitValidationConfig'
      responses:
        '200':
          description: Cloud-init validation result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CloudInitValidationResult'
components:
  securitySchemes:
    apiTokenAuth:
      type: http
      scheme: bearer
      description: >-
        Bearer API token created on the Developers page of the Voltage Park
        dashboard. Tokens are valid for one year before expiring.
  parameters:
    VirtualMachineId:
      name: virtual_machine_id
      in: path
      required: true
      schema:
        type: string
        format: uuid
    BareMetalRentalId:
      name: baremetal_rental_id
      in: path
      required: true
      schema:
        type: string
        format: uuid
    ClusterId:
      name: cluster_id
      in: path
      required: true
      schema:
        type: string
        format: uuid
    LocationId:
      name: location_id
      in: path
      required: true
      schema:
        type: string
        format: uuid
    StorageId:
      name: storage_id
      in: path
      required: true
      schema:
        type: string
        format: uuid
  schemas:
    InstantVMConfig:
      type: object
      required: [config_id, name]
      properties:
        config_id:
          type: string
          format: uuid
        name:
          type: string
          example: My Instant Virtual Machine
        password:
          type: string
          minLength: 8
          nullable: true
        cloudinit_script:
          type: string
          nullable: true
    InstantVMResult:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        status:
          type: string
    VirtualMachineDetails:
      type: object
      properties:
        id:
          type: string
          format: uuid
        hostnode_id:
          type: string
          format: uuid
        type:
          type: string
          enum: [ondem, spot, subscription]
        status:
          type: string
          enum: [Running, StoppedDisassociated, Stopped, Terminated, Outbid, Relocating]
        name:
          type: string
        operating_system:
          type: string
          enum:
            - Ubuntu 20.04 LTS
            - Ubuntu 22.04 LTS
            - Ubuntu 24.04 LTS
            - TensorML 20 PyTorch
            - TensorML 24 PyTorch
            - Windows 10
        public_ip:
          type: string
          nullable: true
        pricing:
          $ref: '#/components/schemas/VirtualMachinePricing'
    VirtualMachinePricing:
      type: object
      properties:
        rate_hourly:
          type: string
          example: '2.500000'
    PatchVirtualMachine:
      type: object
      properties:
        name:
          type: string
    VMPowerSchema:
      type: object
      required: [action]
      properties:
        action:
          type: string
          enum: [start, stop]
    PortForwardConfig:
      type: object
      properties:
        internal_port:
          type: integer
        external_port:
          type: integer
    BareMetalDeployConfig:
      type: object
      required: [location_id, gpu_count, name]
      properties:
        location_id:
          type: string
          format: uuid
        gpu_count:
          type: integer
          multipleOf: 8
          minimum: 8
          description: Number of GPUs, in multiples of eight.
        name:
          type: string
          example: My Baremetal Rental
    DeployBareResult:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        status:
          type: string
    PatchBareMetalRental:
      type: object
      properties:
        name:
          type: string
    BaremetalPowerSchema:
      type: object
      required: [action]
      properties:
        action:
          type: string
          enum: [start, stop]
        node_ids:
          type: array
          items:
            type: string
            format: uuid
    RebootBaremetalSchema:
      type: object
      properties:
        node_ids:
          type: array
          items:
            type: string
            format: uuid
    RemoveNodesSchema:
      type: object
      properties:
        node_ids:
          type: array
          items:
            type: string
            format: uuid
    SlurmUserRequest:
      type: object
      required: [username]
      properties:
        username:
          type: string
        public_key:
          type: string
    OrganizationDetails:
      type: object
      required: [id, name, billing_notification_target_emails, low_balance_emails_enabled]
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          example: My VPOD Organization
        billing_notification_target_emails:
          type: array
          items:
            type: string
        low_balance_emails_enabled:
          type: boolean
    OrganizationUpdate:
      type: object
      properties:
        name:
          type: string
        billing_notification_target_emails:
          type: array
          items:
            type: string
        low_balance_emails_enabled:
          type: boolean
    OrganizationAddressDetails:
      type: object
      properties:
        line1:
          type: string
        line2:
          type: string
          nullable: true
        city:
          type: string
        state:
          type: string
        postal_code:
          type: string
        country:
          type: string
    OrganizationAddressSet:
      allOf:
        - $ref: '#/components/schemas/OrganizationAddressDetails'
    CreateSshKeyConfig:
      type: object
      required: [name, content]
      properties:
        name:
          type: string
          minLength: 3
          maxLength: 64
          description: >-
            Label for this SSH public key. Up to 64 characters; alphanumeric,
            hyphens, or spaces only.
          example: My-SSH-Public-Key
        content:
          type: string
          description: The SSH public key contents.
          example: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAKOgHv82A6Oi7AWLvBC9N...
    SshKeyDetails:
      type: object
      required: [id, name, content]
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          example: My-SSH-Public-Key
        content:
          type: string
    StorageCreate:
      type: object
      required: [size_in_gb, name]
      properties:
        size_in_gb:
          type: integer
          minimum: 1
          description: Number of gigabytes to allocate for the storage volume.
          example: 100
        name:
          type: string
          minLength: 1
          maxLength: 60
          pattern: '^[a-z0-9]([a-z0-9._-]*[a-z0-9])?$'
          description: >-
            Lowercase alphanumerics, '-', '_', or '.'; must start and end with
            an alphanumeric. At most 60 characters. Duplicate names not allowed.
        order_ids:
          type: array
          description: Active bare-metal rental IDs to attach this volume to on creation.
          items:
            type: string
            format: uuid
    StorageDetails:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        size_in_gb:
          type: integer
        status:
          type: string
    StorageUpdate:
      type: object
      properties:
        name:
          type: string
        size_in_gb:
          type: integer
    StorageRate:
      type: object
      properties:
        rate_hourly:
          type: string
    NFSSquashUpdate:
      type: object
      required: [mode]
      properties:
        mode:
          type: string
          enum: [none, root, all]
    HourlyRateDetails:
      type: object
      required: [rate_hourly]
      properties:
        rate_hourly:
          type: string
          example: '2.500000'
    InstantDeployLocation:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
    FullLocationDetails:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
    HostNodeDetails:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
    BareMetalLocation:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
    CloudinitValidationConfig:
      type: object
      required: [script]
      properties:
        script:
          type: string
    CloudInitValidationResult:
      type: object
      properties:
        valid:
          type: boolean
        errors:
          type: array
          items:
            type: string
    Pagination:
      type: object
      properties:
        total:
          type: integer
        page:
          type: integer
        per_page:
          type: integer
    PaginatedVirtualMachine:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/VirtualMachineDetails'
        pagination:
          $ref: '#/components/schemas/Pagination'
    PaginatedInstantDeployLocation:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/InstantDeployLocation'
        pagination:
          $ref: '#/components/schemas/Pagination'
    PaginatedBareMetalLocation:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/BareMetalLocation'
        pagination:
          $ref: '#/components/schemas/Pagination'
    PaginatedSshKey:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/SshKeyDetails'
        pagination:
          $ref: '#/components/schemas/Pagination'
    PaginatedStorage:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/StorageDetails'
        pagination:
          $ref: '#/components/schemas/Pagination'
    PaginatedLocation:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/FullLocationDetails'
        pagination:
          $ref: '#/components/schemas/Pagination'