Canonical Storage API

The storage API from Canonical — 29 operation(s) for storage.

Operations 52

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /1.0/storage-pools List storage pool URLs · Get the storage pools #
Ask an LLM
“Which storage pools exist on my LXD server, just as a list of URLs?”
“Can I list the storage pool paths available to one project?”
Tell an agent
List the URLs of every LXD storage pool.
Give me the storage pool URLs visible in project {project}.
POST /1.0/storage-pools Create a storage pool · Add a storage pool #
Ask an LLM
“How do I add a new storage pool to LXD with a specific driver like zfs or btrfs?”
“When clustered, do I have to create the pool on each member before the global create?”
Tell an agent
Create a storage pool named {name} using the {driver} driver.
Define pool {name} with driver {driver} on cluster member {target} first.
DELETE /1.0/storage-pools/{name}/buckets/{bucketName} Delete a storage bucket · Delete the storage bucket #
Ask an LLM
“How do I remove an object storage bucket from a pool?”
“Can I delete a bucket that belongs to another project?”
Tell an agent destructive · confirm first
Delete storage bucket {bucket} from pool {pool}.
Remove the bucket from project {project}.
PATCH /1.0/storage-pools/{name}/buckets/{bucketName} Change some bucket settings · Partially update the storage bucket #
Ask an LLM
“Can I change only a bucket's size limit without touching other settings?”
“How do I edit just the description on an existing bucket?”
Tell an agent
Patch only these config keys on bucket {bucket} in pool {pool}: {config}.
Update just the bucket description to {description}.
PUT /1.0/storage-pools/{name}/buckets/{bucketName} Replace a bucket's configuration · Update the storage bucket #
Ask an LLM
“How do I overwrite all of a bucket's settings at once?”
“Will a full bucket update reset config keys I omit?”
Tell an agent
Replace the entire configuration of bucket {bucket} in pool {pool} with {config}.
Overwrite the bucket settings and set its description to {description}.
DELETE /1.0/storage-pools/{name}/buckets/{bucketName}/keys/{keyName} Revoke a bucket access key · Delete the storage bucket key #
Ask an LLM
“How do I revoke an access key so it can no longer reach the bucket?”
“Can I delete a bucket key in a specific project?”
Tell an agent destructive · confirm first
Delete access key {key} from bucket {bucket} in pool {pool}.
Revoke the bucket key in project {project}.
PUT /1.0/storage-pools/{name}/buckets/{bucketName}/keys/{keyName} Update a bucket access key · Update the storage bucket key #
Ask an LLM
“How do I change the role on an existing bucket key?”
“Can I rotate the secret of a bucket key I already created?”
Tell an agent
Change the role of key {key} on bucket {bucket} in pool {pool} to {role}.
Rotate the bucket key to access key {access_key} and secret {secret_key}.
GET /1.0/storage-pools/{name}/resources Check storage pool usage · Get storage pool resources information #
Ask an LLM
“How much space is used and free in a storage pool?”
“Can I check disk and inode usage of a pool on a particular cluster member?”
Tell an agent
Show the capacity and usage figures for storage pool {pool}.
Report pool resource usage on cluster member {target}.
DELETE /1.0/storage-pools/{poolName} Delete a storage pool · Delete the storage pool #
Ask an LLM
“How do I remove a storage pool I no longer use?”
“Can a storage pool be deleted from within a specific project?”
Tell an agent destructive · confirm first
Delete storage pool {pool}.
Remove the storage pool in project {project}.
GET /1.0/storage-pools/{poolName} Get one storage pool · Get the storage pool #
Ask an LLM
“What driver and settings does a particular storage pool use?”
“Can I look up a single pool's details as seen by one cluster member?”
Tell an agent
Show me the details of storage pool {pool}.
Get that storage pool's configuration on cluster member {target}.
PATCH /1.0/storage-pools/{poolName} Change some storage pool settings · Partially update the storage pool #
Ask an LLM
“Can I tweak just one setting on a storage pool without resending everything?”
“How do I update only the description of an existing storage pool?”
Tell an agent
Patch storage pool {pool} with only these config keys: {config}.
Change just the pool's description to {description}, leaving config alone.
PUT /1.0/storage-pools/{poolName} Replace a storage pool's configuration · Update the storage pool #
Ask an LLM
“How do I overwrite a storage pool's entire config in one request?”
“Does replacing a pool's configuration drop keys I leave out?”
Tell an agent
Replace the whole configuration of storage pool {pool} with {config}.
Overwrite the pool's config and set its description to {description}.
GET /1.0/storage-pools/{poolName}/buckets List bucket URLs in a storage pool · Get the storage pool buckets #
Ask an LLM
“Which object storage buckets live in a given storage pool?”
“Can I list bucket URLs across all projects at once?”
Tell an agent
List the bucket URLs in storage pool {pool}.
List bucket URLs in the pool for project {project}.
POST /1.0/storage-pools/{poolName}/buckets Create an object storage bucket · Add a storage pool bucket #
Ask an LLM
“How do I create an S3-style bucket inside an LXD storage pool?”
“Can I set a size or other config when creating a new bucket?”
Tell an agent
Create a bucket named {name} in storage pool {pool}.
Add bucket {name} with config {config} in project {project}.
GET /1.0/storage-pools/{poolName}/buckets/{bucketName} Get one storage bucket · Get the storage pool bucket #
Ask an LLM
“What is the configuration and S3 endpoint of a specific bucket?”
“Can I look up a single bucket's details in a given project?”
Tell an agent
Show me the details of bucket {bucket} in pool {pool}.
Get the bucket record from project {project}.
GET /1.0/storage-pools/{poolName}/buckets/{bucketName}/keys List access key URLs for a bucket · Get the storage pool bucket keys #
Ask an LLM
“Which access keys have been issued for a bucket?”
“Can I get just the key paths for a bucket without the secrets?”
Tell an agent
List the access key URLs for bucket {bucket} in pool {pool}.
Give me the bucket's key URLs in project {project}.
POST /1.0/storage-pools/{poolName}/buckets/{bucketName}/keys Create a bucket access key · Add a storage pool bucket key #
Ask an LLM
“How do I generate a new access key for a storage bucket?”
“Can I give a bucket key a read-only role or supply my own secret?”
Tell an agent
Create a key named {name} for bucket {bucket} in pool {pool} with role {role}.
Add bucket key {name} using access key {access_key} and secret {secret_key}.
GET /1.0/storage-pools/{poolName}/buckets/{bucketName}/keys/{keyName} Get one bucket access key · Get the storage pool bucket key #
Ask an LLM
“What role and credentials does a particular bucket key have?”
“Can I retrieve a single bucket key by name?”
Tell an agent
Reveal the role and credentials of access key {key} on bucket {bucket} in pool {pool}.
Look up this single access key of the bucket in project {project}.
GET /1.0/storage-pools/{poolName}/buckets/{bucketName}/keys?recursion=1 List bucket keys with full details · Get the storage pool bucket keys #
Ask an LLM
“How do I see every bucket key with its role and credentials in one response?”
“Is there an expanded listing of bucket keys instead of URLs?”
Tell an agent
Fetch all keys for bucket {bucket} in pool {pool} as full records including role.
Expand every bucket key's details in project {project}.
GET /1.0/storage-pools/{poolName}/buckets?recursion=1 List buckets in a pool with full details · Get the storage pool buckets #
Ask an LLM
“How do I get complete bucket records, with config and S3 URL, for a pool?”
“Is there a recursive listing that expands each bucket instead of returning paths?”
Tell an agent
Fetch every bucket in pool {pool} as full objects rather than URLs.
Expand all bucket details in the pool for project {project}.
GET /1.0/storage-pools/{poolName}/volumes List volume URLs in a storage pool · Get the storage volumes #
Ask an LLM
“Which storage volumes are in one particular pool?”
“Can I filter the volumes in a pool with a filter expression?”
Tell an agent
List the volume URLs in storage pool {pool}.
List volume URLs in this pool matching filter {filter}.
POST /1.0/storage-pools/{poolName}/volumes Create a storage volume in a pool · Add a storage volume #
Ask an LLM
“How do I create a new custom volume in a storage pool?”
“Can I create a volume by copying from another volume as the source?”
Tell an agent
Create volume {name} of type {type} in storage pool {pool}.
Create volume {name} copied from source {source}.
GET /1.0/storage-pools/{poolName}/volumes/{type} List a pool's volume URLs of one type · Get the storage volumes #
Ask an LLM
“How do I list only the custom volumes, or only image volumes, in a pool?”
“Can I get the URLs of one volume type within a single pool?”
Tell an agent
List URLs of {volume_type} volumes in storage pool {pool}.
List this pool's volume URLs of this type in project {project}.
POST /1.0/storage-pools/{poolName}/volumes/{type} Create a volume via the type-specific path · Add a storage volume #
Ask an LLM
“Can I create a volume by posting to the path that already names its type?”
“How do I create a block content-type volume on the type-specific endpoint?”
Tell an agent
Using the type-specific path, create {volume_type} volume {name} in pool {pool} with content type {content_type}.
On the typed volume endpoint, create {name} with config {config}.
DELETE /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName} Delete a storage volume · Delete the storage volume #
Ask an LLM
“How do I delete a custom storage volume?”
“Can I remove a volume that sits on a specific cluster member?”
Tell an agent destructive · confirm first
Delete {volume_type} storage volume {volume} from pool {pool}.
Remove the volume from cluster member {target}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName} Get one storage volume · Get the storage volume #
Ask an LLM
“What configuration does a specific storage volume have?”
“Can I look up one volume's details on a particular cluster member?”
Tell an agent
Show me the details of {volume_type} volume {volume} in pool {pool}.
Get the volume record as seen on cluster member {target}.
PATCH /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName} Change some volume settings · Partially update the storage volume #
Ask an LLM
“Can I change just the size of a volume without resending its whole config?”
“How do I update only a volume's description?”
Tell an agent
Patch only these config keys on {volume_type} volume {volume} in pool {pool}: {config}.
Set just the volume description to {description}.
POST /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName} Rename, move or migrate a volume · Rename or move/migrate a storage volume #
Ask an LLM
“How do I rename a storage volume?”
“Can I move a volume to a different pool or migrate it to another server?”
Tell an agent
Rename {volume_type} volume {volume} in pool {pool} to {name}.
Move the volume into pool {pool}.
PUT /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName} Replace a volume's configuration · Update the storage volume #
Ask an LLM
“How do I overwrite all of a storage volume's settings?”
“Can a full volume update restore it from a snapshot?”
Tell an agent
Replace the entire config of {volume_type} volume {volume} in pool {pool} with {config}.
Overwrite the volume and restore it from snapshot {restore}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups List volume backup URLs · Get the storage volume backups #
Ask an LLM
“Which backups exist for a storage volume?”
“Can I list only the backup paths for a volume?”
Tell an agent
List backup URLs for {volume_type} volume {volume} in pool {pool}.
List the volume's backup URLs in project {project}.
POST /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups Back up a storage volume · Create a storage volume backup #
Ask an LLM
“How do I create a backup of a custom volume?”
“Can I set an expiry and compression algorithm on a volume backup?”
Tell an agent
Create a backup named {name} of {volume_type} volume {volume} in pool {pool}.
Back up the volume as {name}, compressed with {compression}, expiring {expires_at}.
DELETE /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName} Delete a volume backup · Delete a storage volume backup #
Ask an LLM
“How do I delete an old volume backup to free space?”
“Can I remove a volume backup in a specific project?”
Tell an agent destructive · confirm first
Delete backup {backup} of {volume_type} volume {volume} in pool {pool}.
Remove the volume backup in project {project}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName} Get one volume backup · Get the storage volume backup #
Ask an LLM
“When was a particular volume backup made and when does it expire?”
“Can I look up a single volume backup's metadata?”
Tell an agent
Show me backup {backup} of {volume_type} volume {volume} in pool {pool}.
Get the volume backup record in project {project}.
POST /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName} Rename a volume backup · Rename a storage volume backup #
Ask an LLM
“How do I rename an existing volume backup?”
“Can a volume backup be given a new name after it is created?”
Tell an agent
Rename backup {backup} of {volume_type} volume {volume} in pool {pool} to {name}.
Give the volume backup in project {project} the new name {name}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups/{backupName}/export Download a volume backup file · Get the raw backup file #
Ask an LLM
“How do I download the raw backup file of a storage volume?”
“Can I export a volume backup off the server as a tarball?”
Tell an agent
Download the raw file for backup {backup} of {volume_type} volume {volume} in pool {pool}.
Export the volume backup file from project {project}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/backups?recursion=1 List volume backups with full details · Get the storage volume backups #
Ask an LLM
“How do I see each volume backup with its creation and expiry dates?”
“Is there an expanded view of a volume's backups instead of URLs?”
Tell an agent
Fetch full records for all backups of {volume_type} volume {volume} in pool {pool}.
Expand the volume backups with expiry details in project {project}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots List volume snapshot URLs · Get the storage volume snapshots #
Ask an LLM
“Which snapshots have been taken of a storage volume?”
“Can I list just the snapshot paths for a volume?”
Tell an agent
List snapshot URLs for {volume_type} volume {volume} in pool {pool}.
List the volume's snapshot URLs on cluster member {target}.
POST /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots Snapshot a storage volume · Create a storage volume snapshot #
Ask an LLM
“How do I take a snapshot of a custom volume?”
“Can I make a volume snapshot expire automatically?”
Tell an agent
Take a snapshot named {name} of {volume_type} volume {volume} in pool {pool}.
Snapshot the volume as {name}, expiring at {expires_at}.
DELETE /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName} Delete a volume snapshot · Delete a storage volume snapshot #
Ask an LLM
“How do I delete a volume snapshot I no longer need?”
“Can I remove a volume snapshot on a particular cluster member?”
Tell an agent destructive · confirm first
Delete snapshot {snapshot} of {volume_type} volume {volume} in pool {pool}.
Remove the volume snapshot on cluster member {target}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName} Get one volume snapshot · Get the storage volume snapshot #
Ask an LLM
“What are the details of a particular volume snapshot?”
“Can I check when a specific volume snapshot expires?”
Tell an agent
Show me snapshot {snapshot} of {volume_type} volume {volume} in pool {pool}.
Get the volume snapshot record in project {project}.
PATCH /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName} Change a volume snapshot's expiry or description · Partially update the storage volume snapshot #
Ask an LLM
“Can I extend just the expiry date on a volume snapshot?”
“How do I edit only the description of an existing volume snapshot?”
Tell an agent
Patch only the expiry of snapshot {snapshot} on {volume_type} volume {volume} in pool {pool} to {expires_at}.
Change just the volume snapshot's description to {description}.
POST /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName} Rename a volume snapshot · Rename a storage volume snapshot #
Ask an LLM
“How do I rename a snapshot of a storage volume?”
“Can a volume snapshot be migrated to another target?”
Tell an agent
Rename snapshot {snapshot} of {volume_type} volume {volume} in pool {pool} to {name}.
Migrate the volume snapshot using target settings {target_spec}.
PUT /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots/{snapshotName} Replace a volume snapshot's settings · Update the storage volume snapshot #
Ask an LLM
“How do I overwrite both the description and expiry of a volume snapshot?”
“Does a full snapshot update clear the expiry if I leave it out?”
Tell an agent
Replace all settings of snapshot {snapshot} on {volume_type} volume {volume} in pool {pool}: description {description}, expiry {expires_at}.
Fully rewrite the volume snapshot with description {description}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/snapshots?recursion=1 List volume snapshots with full details · Get the storage volume snapshots #
Ask an LLM
“How do I see every volume snapshot with its description and expiry?”
“Is there an expanded listing of a volume's snapshots rather than URLs?”
Tell an agent
Fetch full records for all snapshots of {volume_type} volume {volume} in pool {pool}.
Expand the volume snapshots with expiry details in project {project}.
GET /1.0/storage-pools/{poolName}/volumes/{type}/{volumeName}/state Check a volume's usage · Get the storage volume state #
Ask an LLM
“How much disk space is a storage volume actually using?”
“Can I see a volume's current usage data on one cluster member?”
Tell an agent
Show the current usage state of {volume_type} volume {volume} in pool {pool}.
Report volume usage from cluster member {target}.
GET /1.0/storage-pools/{poolName}/volumes/{type}?recursion=1 List a pool's volumes of one type in full · Get the storage volumes #
Ask an LLM
“Can I get full objects for only the container volumes in one pool?”
“What does each volume of a given type in this pool look like in detail?”
Tell an agent
Expand every {volume_type} volume in pool {pool} into full records.
Fetch detailed pool volumes of this type on cluster member {target}.
GET /1.0/storage-pools/{poolName}/volumes?recursion=1 List a pool's volumes with full details · Get the storage volumes #
Ask an LLM
“How do I see every volume in a pool with its config and content type?”
“Can I expand all volume records in a pool and filter them at once?”
Tell an agent
Fetch full records for every volume in storage pool {pool}.
Expand volume details in this pool using filter {filter}.
GET /1.0/storage-pools?recursion=1 List storage pools with full details · Get the storage pools #
Ask an LLM
“How can I see every storage pool with its driver, config and status in one call?”
“Is there a way to fetch full storage pool objects instead of bare URLs?”
Tell an agent
Fetch the complete records for all storage pools, including driver and config.
Show full storage pool objects for project {project}.
GET /1.0/storage-volumes List volume URLs across all pools · Get the storage volumes #
Ask an LLM
“How do I list storage volumes from every pool at once?”
“Can I filter volumes server-wide regardless of which pool they are in?”
Tell an agent
List volume URLs across all storage pools.
List every pool's volume URLs matching filter {filter}.
GET /1.0/storage-volumes/{type} List volume URLs of one type across pools · Get the storage volumes #
Ask an LLM
“How do I list every custom volume on the server no matter which pool holds it?”
“Can I get URLs of one volume type across all pools and projects?”
Tell an agent
List URLs of {volume_type} volumes from all pools.
List server-wide volume URLs of this type, all projects: {all_projects}.
GET /1.0/storage-volumes/{type}?recursion=1 List one volume type across pools in full · Get the storage volumes #
Ask an LLM
“Can I get full details of every volume of one type, server-wide?”
“Which container-type volumes exist across all pools, with their config?”
Tell an agent
Expand every {volume_type} volume across all pools into full records.
Fetch detailed volumes of this type from all pools in project {project}.
GET /1.0/storage-volumes?recursion=1 List all pools' volumes with full details · Get the storage volumes #
Ask an LLM
“Can I fetch full volume records from every pool in one request?”
“What does every volume on the server look like, expanded, filtered by a condition?”
Tell an agent
Expand every volume on the server, from all pools, into full records.
Fetch detailed volumes from all pools where {filter}.

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/canonical:canonical-storage-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

canonical-storage-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    email: lxd@lists.canonical.com
    name: LXD upstream
    url: https://github.com/canonical/lxd
  description: 'This is the REST API used by all LXD clients.

    Internal endpoints aren''t included in this documentation.


    The LXD API is available over both a local unix+http and remote https API.

    Authentication for local users relies on group membership and access to the unix socket.

    For remote users, the default authentication method is TLS client.'
  license:
    name: AGPL-3.0-only
    url: https://www.gnu.org/licenses/agpl-3.0.en.html
  title: LXD external REST Storage API
  version: '1.0'
tags:


# --- truncated at 32 KB (104 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/canonical/refs/heads/main/openapi/canonical-storage-api-openapi.yml