linode Volumes API

Create and manage Block Storage volumes that can be attached to Linode instances for persistent data storage.

OpenAPI Specification

linode-volumes-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Linode API v4 Account Volumes API
  description: The Linode API v4 provides programmatic access to the full range of Akamai Connected Cloud (formerly Linode) products and services. It enables developers to create and manage compute instances, deploy Kubernetes clusters, configure NodeBalancers, manage DNS domains, provision Block Storage volumes, control Object Storage buckets, set up firewalls, and administer account settings. The RESTful API uses OAuth and personal access tokens for authentication and returns JSON responses, with support for filtering and sorting across all resource endpoints.
  version: 4.189.0
  contact:
    name: Linode Support
    url: https://www.linode.com/support/
  termsOfService: https://www.linode.com/legal-tos/
servers:
- url: https://api.linode.com/v4
  description: Production Server
security:
- personalAccessToken: []
- oauth: []
tags:
- name: Volumes
  description: Create and manage Block Storage volumes that can be attached to Linode instances for persistent data storage.
paths:
  /volumes:
    get:
      operationId: getVolumes
      summary: List volumes
      description: Returns a paginated list of Block Storage volumes on your account.
      tags:
      - Volumes
      parameters:
      - $ref: '#/components/parameters/pageParam'
      - $ref: '#/components/parameters/pageSizeParam'
      responses:
        '200':
          description: Volumes retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedVolumeList'
        '401':
          description: Unauthorized - invalid or missing authentication
    post:
      operationId: createVolume
      summary: Create a volume
      description: Creates a new Block Storage volume. The volume can be attached to a Linode instance immediately or left unattached.
      tags:
      - Volumes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VolumeRequest'
      responses:
        '200':
          description: Volume created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Volume'
        '400':
          description: Bad request - invalid parameters
        '401':
          description: Unauthorized - invalid or missing authentication
  /volumes/{volumeId}:
    get:
      operationId: getVolume
      summary: Get a volume
      description: Returns the details for a single Block Storage volume.
      tags:
      - Volumes
      parameters:
      - $ref: '#/components/parameters/volumeIdParam'
      responses:
        '200':
          description: Volume retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Volume'
        '401':
          description: Unauthorized - invalid or missing authentication
        '404':
          description: Volume not found
    put:
      operationId: updateVolume
      summary: Update a volume
      description: Updates the label and tags for a Block Storage volume.
      tags:
      - Volumes
      parameters:
      - $ref: '#/components/parameters/volumeIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VolumeUpdateRequest'
      responses:
        '200':
          description: Volume updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Volume'
        '400':
          description: Bad request - invalid parameters
        '401':
          description: Unauthorized - invalid or missing authentication
        '404':
          description: Volume not found
    delete:
      operationId: deleteVolume
      summary: Delete a volume
      description: Deletes a Block Storage volume. The volume must be detached from all Linode instances before it can be deleted.
      tags:
      - Volumes
      parameters:
      - $ref: '#/components/parameters/volumeIdParam'
      responses:
        '200':
          description: Volume deleted successfully
        '401':
          description: Unauthorized - invalid or missing authentication
        '404':
          description: Volume not found
  /volumes/{volumeId}/attach:
    post:
      operationId: attachVolume
      summary: Attach a volume
      description: Attaches a Block Storage volume to a Linode instance. The volume and instance must be in the same region.
      tags:
      - Volumes
      parameters:
      - $ref: '#/components/parameters/volumeIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - linode_id
              properties:
                linode_id:
                  type: integer
                  description: The ID of the Linode instance to attach the volume to.
                config_id:
                  type: integer
                  description: The ID of the configuration profile to attach to.
      responses:
        '200':
          description: Volume attached successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Volume'
        '400':
          description: Bad request - invalid parameters
        '401':
          description: Unauthorized - invalid or missing authentication
        '404':
          description: Volume not found
  /volumes/{volumeId}/detach:
    post:
      operationId: detachVolume
      summary: Detach a volume
      description: Detaches a Block Storage volume from a Linode instance.
      tags:
      - Volumes
      parameters:
      - $ref: '#/components/parameters/volumeIdParam'
      responses:
        '200':
          description: Volume detached successfully
        '401':
          description: Unauthorized - invalid or missing authentication
        '404':
          description: Volume not found
components:
  schemas:
    PaginatedVolumeList:
      allOf:
      - $ref: '#/components/schemas/Pagination'
      - type: object
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/Volume'
    VolumeRequest:
      type: object
      required:
      - label
      - size
      - region
      properties:
        label:
          type: string
          minLength: 1
          maxLength: 32
          description: The label for the new volume.
        size:
          type: integer
          minimum: 10
          maximum: 10240
          description: The size of the volume in GB.
        region:
          type: string
          description: The region to create the volume in.
        linode_id:
          type: integer
          description: A Linode instance to attach the volume to.
        tags:
          type: array
          items:
            type: string
          description: Tags for the new volume.
    Volume:
      type: object
      properties:
        id:
          type: integer
          description: The unique ID of this volume.
        label:
          type: string
          description: The label of this volume.
        status:
          type: string
          enum:
          - creating
          - active
          - resizing
          - deleting
          description: The current status of this volume.
        size:
          type: integer
          description: The size of this volume in GB.
        region:
          type: string
          description: The region where this volume is located.
        linode_id:
          type: integer
          description: The ID of the Linode this volume is attached to, or null.
        linode_label:
          type: string
          description: The label of the Linode this volume is attached to.
        filesystem_path:
          type: string
          description: The filesystem path for this volume on the attached Linode.
        tags:
          type: array
          items:
            type: string
          description: Tags for this volume.
        created:
          type: string
          format: date-time
          description: When this volume was created.
        updated:
          type: string
          format: date-time
          description: When this volume was last updated.
    VolumeUpdateRequest:
      type: object
      properties:
        label:
          type: string
          minLength: 1
          maxLength: 32
          description: The new label for the volume.
        tags:
          type: array
          items:
            type: string
          description: Updated tags for the volume.
    Pagination:
      type: object
      properties:
        page:
          type: integer
          description: The current page number.
        pages:
          type: integer
          description: The total number of pages.
        results:
          type: integer
          description: The total number of results.
  parameters:
    pageParam:
      name: page
      in: query
      schema:
        type: integer
        minimum: 1
        default: 1
      description: The page number to return.
    pageSizeParam:
      name: page_size
      in: query
      schema:
        type: integer
        minimum: 25
        maximum: 500
        default: 100
      description: The number of items per page.
    volumeIdParam:
      name: volumeId
      in: path
      required: true
      schema:
        type: integer
      description: The ID of the volume.
  securitySchemes:
    personalAccessToken:
      type: http
      scheme: bearer
      description: A personal access token generated from the Linode Cloud Manager that grants access to the API based on the token's scopes.
    oauth:
      type: oauth2
      description: OAuth 2.0 authentication for third-party applications.
      flows:
        authorizationCode:
          authorizationUrl: https://login.linode.com/oauth/authorize
          tokenUrl: https://login.linode.com/oauth/token
          scopes:
            account:read_only: Read access to account information
            account:read_write: Read and write access to account information
            domains:read_only: Read access to domains
            domains:read_write: Read and write access to domains
            events:read_only: Read access to events
            events:read_write: Read and write access to events
            firewall:read_only: Read access to firewalls
            firewall:read_write: Read and write access to firewalls
            images:read_only: Read access to images
            images:read_write: Read and write access to images
            ips:read_only: Read access to IP addresses
            ips:read_write: Read and write access to IP addresses
            linodes:read_only: Read access to Linodes
            linodes:read_write: Read and write access to Linodes
            lke:read_only: Read access to LKE
            lke:read_write: Read and write access to LKE
            longview:read_only: Read access to Longview
            longview:read_write: Read and write access to Longview
            nodebalancers:read_only: Read access to NodeBalancers
            nodebalancers:read_write: Read and write access to NodeBalancers
            object_storage:read_only: Read access to Object Storage
            object_storage:read_write: Read and write access to Object Storage
            stackscripts:read_only: Read access to StackScripts
            stackscripts:read_write: Read and write access to StackScripts
            volumes:read_only: Read access to Volumes
            volumes:read_write: Read and write access to Volumes
            vpc:read_only: Read access to VPCs
            vpc:read_write: Read and write access to VPCs
externalDocs:
  description: Linode API v4 Documentation
  url: https://techdocs.akamai.com/linode-api/reference/api