Canonical · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Canonical Images API
32 actions
32 updates
phrasing
extends
openapi/canonical-images-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for Canonical's API. It is a proposal applied on top of the contract, not a document Canonical publishes.
What the actions change
x-apievangelist-phrasing
Targets 32 · first 16 shown; the file carries all of them
$.info
$.paths['/1.0/images'].get
$.paths['/1.0/images'].post
$.paths['/1.0/images/'].post
$.paths['/1.0/images/{id_or_name}'].get
$.paths['/1.0/images/{id}'].delete
$.paths['/1.0/images/{id}'].patch
$.paths['/1.0/images/{id}/'].patch
$.paths['/1.0/images/{id}/{version}'].delete
$.paths['/1.0/images?recursion=1'].get
$.paths['/1.0/images/{fingerprint}'].get
$.paths['/1.0/images/{fingerprint}'].put
$.paths['/1.0/images/{fingerprint}'].delete
$.paths['/1.0/images/{fingerprint}'].patch
$.paths['/1.0/images/{fingerprint}/export'].get
$.paths['/1.0/images/{fingerprint}/export'].post
OpenAPI Overlay
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
title: API Evangelist conversational phrasing for Canonical Images API
version: 1.0.0
extends: openapi/canonical-images-api-openapi.yml
actions:
- target: $.info
update:
x-apievangelist-phrasing:
method: generated
generated: '2026-10-01'
generator: build-phrasing.py
label: Generated by API Evangelist
operations: 31
- target: $.paths['/1.0/images'].get
update:
x-apievangelist-phrasing:
intent: List images in the Anbox cluster
effect: read
questions:
- Which Android images are available in my AMS cluster?
- Can I get just the image names from Anbox Management Service without full details?
instructions:
- text: List the images stored in my AMS cluster.
- text: Show AMS cluster images with recursion level {recursion}.
slots:
recursion: query.recursion
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images'].post
update:
x-apievangelist-phrasing:
intent: Import an image from an image server into AMS
effect: write
questions:
- How do I pull an Anbox image into AMS from an image server by name?
- Can an imported AMS image be made the default image right away?
instructions:
- text: Import image {name} into AMS from the image server.
slots:
name: requestBody.name
- text: Import AMS image {name} from the image server and mark it as the default image.
slots:
name: requestBody.name
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/'].post
update:
x-apievangelist-phrasing:
intent: Upload a package to create a new AMS image
effect: write
questions:
- How do I create an Anbox image in AMS by uploading a gzip, bzip2 or xz package?
- What compression formats does AMS accept when I upload a brand-new image package?
instructions:
- text: Upload this image package to AMS to create a new image using request metadata {request}.
slots:
request: header.X-AMS-Request
- text: Create an AMS image from the uploaded package with fingerprint {fingerprint} and request {request}.
slots:
fingerprint: header.X-AMS-Fingerprint
request: header.X-AMS-Request
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/{id_or_name}'].get
update:
x-apievangelist-phrasing:
intent: Get details of an AMS image by id or name
effect: read
questions:
- Can I look up an AMS image using either its id or its name?
- What versions and status does a specific image stored in AMS have?
instructions:
- text: Show the AMS image {image}.
slots:
image: path.id_or_name
- text: Get details of AMS image {image} of type {type}.
slots:
image: path.id_or_name
type: query.type
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/{id}'].delete
update:
x-apievangelist-phrasing:
intent: Delete an image stored in AMS
effect: destructive
questions:
- Is there a way to remove an Android image from my AMS cluster entirely?
- Can I force-delete an AMS image that is still in use?
instructions:
- text: Delete AMS image {id} with all its versions.
slots:
id: path.id
- text: Force-delete AMS image {id}.
slots:
id: path.id
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/{id}'].patch
update:
x-apievangelist-phrasing:
intent: Upload a new package version to an existing AMS image
effect: write
questions:
- How do I push a new package version to an image that already exists in AMS?
- Does uploading an updated package to an AMS image create a new image version?
instructions:
- text: Upload a new package to existing AMS image {id} with request metadata {request}.
slots:
id: path.id
request: header.X-AMS-Request
- text: Add a new package version to AMS image {id}, fingerprint {fingerprint}, request {request}.
slots:
id: path.id
fingerprint: header.X-AMS-Fingerprint
request: header.X-AMS-Request
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/{id}/'].patch
update:
x-apievangelist-phrasing:
intent: Update an AMS image's metadata
effect: write
questions:
- Can I change an AMS image's settings without re-uploading its package?
- How do I make an existing AMS image the default or force a resync to nodes?
instructions:
- text: Make AMS image {id} the default image.
slots:
id: path.id
- text: Force AMS image {id} metadata to sync across the cluster.
slots:
id: path.id
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/{id}/{version}'].delete
update:
x-apievangelist-phrasing:
intent: Delete one version of an AMS image
effect: destructive
questions:
- How do I delete a single old version of an AMS image and keep the rest?
- Can I roll back an AMS image by removing its latest version?
instructions:
- text: Delete version {version} of AMS image {id}.
slots:
id: path.id
version: path.version
- text: Remove image version {version} from AMS image {id}, keeping other versions.
slots:
id: path.id
version: path.version
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images?recursion=1'].get
update:
x-apievangelist-phrasing:
intent: List AMS images with full details
effect: read
questions:
- Can I get every AMS image with its full details in one call?
- Can I see the expanded records for all images in my Anbox cluster at once?
instructions:
- text: List all AMS cluster images expanded with their full details.
- text: Get the expanded AMS image list with recursion {recursion}.
slots:
recursion: query.recursion
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/{fingerprint}'].get
update:
x-apievangelist-phrasing:
intent: Get an LXD image by fingerprint
effect: read
questions:
- How do I see the properties of one LXD image by its fingerprint?
- What aliases and expiry does a specific image in an LXD project have?
instructions:
- text: Show the LXD image with fingerprint {fingerprint}.
slots:
fingerprint: path.fingerprint
- text: Get the LXD image details in project {project}.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}'].put
update:
x-apievangelist-phrasing:
intent: Replace an LXD image's full definition
effect: write
questions:
- How do I overwrite all of an LXD image's properties in one request?
- Can I replace an LXD image's profiles, properties and public flag together?
instructions:
- text: Replace the whole definition of LXD image {fingerprint}, setting public to {public} and profiles to {profiles}.
slots:
fingerprint: path.fingerprint
public: requestBody.public
profiles: requestBody.profiles
- text: Overwrite the LXD image definition with auto-update {auto_update} and expiry {expires_at}.
slots:
auto_update: requestBody.auto_update
expires_at: requestBody.expires_at
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}'].delete
update:
x-apievangelist-phrasing:
intent: Delete an LXD image from the image store
effect: destructive
questions:
- What's the way to remove an image from the LXD image store?
- Can I delete an LXD image that lives in a specific project?
instructions:
- text: Delete LXD image {fingerprint} from the image store.
slots:
fingerprint: path.fingerprint
- text: Remove the LXD image from project {project}.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}'].patch
update:
x-apievangelist-phrasing:
intent: Partially update an LXD image
effect: write
questions:
- Can I change just one field of an LXD image, like its expiry, without resending everything?
- How do I turn on auto-update for a single LXD image?
instructions:
- text: Patch LXD image {fingerprint} to set only its expiry date to {expires_at}.
slots:
fingerprint: path.fingerprint
expires_at: requestBody.expires_at
- text: Patch just the auto-update flag of the LXD image to {auto_update}.
slots:
auto_update: requestBody.auto_update
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}/export'].get
update:
x-apievangelist-phrasing:
intent: Download the raw files of an LXD image
effect: read
questions:
- Where do I download the raw file of an LXD image I have access to?
- What happens when I export a split-format LXD image?
instructions:
- text: Download the raw files of LXD image {fingerprint}.
slots:
fingerprint: path.fingerprint
- text: Export the raw image file from LXD project {project}.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}/export'].post
update:
x-apievangelist-phrasing:
intent: Push an LXD image to a remote server
effect: write
questions:
- Can LXD push one of my images directly to another remote server?
- What do I need to give LXD to copy an image to a remote target?
instructions:
- text: Push LXD image {fingerprint} to remote server {target} using secret {secret}.
slots:
fingerprint: path.fingerprint
target: requestBody.target
secret: requestBody.secret
- text: Have LXD push the image to {target} with aliases {aliases}.
slots:
target: requestBody.target
aliases: requestBody.aliases
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}/export?public'].get
update:
x-apievangelist-phrasing:
intent: Download a public LXD image's raw files
effect: read
questions:
- Can an untrusted client download a public LXD image without authenticating?
- How do I fetch a public image file from LXD using a one-time secret?
instructions:
- text: Download the files of public LXD image {fingerprint} using secret {secret}.
slots:
fingerprint: path.fingerprint
secret: query.secret
- text: Fetch the raw files of the public image from LXD without trusted credentials.
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}/refresh'].post
update:
x-apievangelist-phrasing:
intent: Refresh an LXD image from its source server
effect: write
questions:
- How do I make LXD check an image's source for a newer version?
- Can I force an LXD image to update to the latest upstream copy now?
instructions:
- text: Refresh LXD image {fingerprint} from its source server.
slots:
fingerprint: path.fingerprint
- text: Check the source for an updated image and refresh the local copy in project {project}.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}/secret'].post
update:
x-apievangelist-phrasing:
intent: Generate a one-time secret to fetch an LXD image
effect: write
questions:
- How do I let an untrusted client download a private LXD image once?
- Where does the one-time image retrieval secret show up in LXD?
instructions:
- text: Generate a one-time retrieval secret for LXD image {fingerprint}.
slots:
fingerprint: path.fingerprint
- text: Create an image download secret for an untrusted client in project {project}.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/{fingerprint}?public'].get
update:
x-apievangelist-phrasing:
intent: Get a public LXD image's details
effect: read
questions:
- Can I read the details of a public LXD image without being a trusted client?
- What does an unauthenticated caller see about a public image in LXD?
instructions:
- text: Show the public LXD image {fingerprint} using secret {secret}.
slots:
fingerprint: path.fingerprint
secret: query.secret
- text: Get the public image record from LXD as an untrusted client.
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/aliases'].get
update:
x-apievangelist-phrasing:
intent: List LXD image aliases as URLs
effect: read
questions:
- Which image aliases exist in my LXD server?
- Can I list image alias URLs for one LXD project?
instructions:
- text: List the URLs of all LXD image aliases.
- text: List image alias URLs in LXD project {project}.
slots:
project: query.project
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/aliases'].post
update:
x-apievangelist-phrasing:
intent: Create an LXD image alias
effect: write
questions:
- Can I give an LXD image a friendly alias name?
- Can I point a new LXD alias at an image fingerprint with a description?
instructions:
- text: Create image alias {name} pointing to fingerprint {target}.
slots:
name: requestBody.name
target: requestBody.target
- text: Add LXD alias {name} for image {target} described as {description}.
slots:
name: requestBody.name
target: requestBody.target
description: requestBody.description
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images/aliases/{name}'].get
update:
x-apievangelist-phrasing:
intent: Get an LXD image alias
effect: read
questions:
- Which image fingerprint does a given LXD alias point to?
- What description does one LXD image alias carry?
instructions:
- text: Show LXD image alias {alias} and its target fingerprint.
slots:
alias: path.name
- text: Look up which fingerprint this alias targets in LXD project {project}.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/aliases/{name}'].put
update:
x-apievangelist-phrasing:
intent: Replace an LXD image alias configuration
effect: write
questions:
- How do I repoint an LXD alias and reset its description in one request?
- Can I replace an LXD image alias's whole configuration?
instructions:
- text: Replace the LXD alias config so it targets {target} with description {description}.
slots:
target: requestBody.target
description: requestBody.description
- text: Overwrite image alias {alias} to point at fingerprint {target}.
slots:
alias: path.name
target: requestBody.target
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/aliases/{name}'].post
update:
x-apievangelist-phrasing:
intent: Rename an LXD image alias
effect: write
questions:
- Is it possible to rename an existing LXD image alias?
- Can I change an alias name without touching the image it points to?
instructions:
- text: Rename LXD image alias {alias} to {new_name}.
slots:
alias: path.name
new_name: requestBody.name
- text: Give the image alias the new name {name} in project {project}.
slots:
name: requestBody.name
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/aliases/{name}'].delete
update:
x-apievangelist-phrasing:
intent: Delete an LXD image alias
effect: destructive
questions:
- How do I delete an LXD image alias without deleting the image?
- Can I remove an alias from a specific LXD project?
instructions:
- text: Delete LXD image alias {alias}.
slots:
alias: path.name
- text: Drop this alias name from LXD project {project}, keeping its image.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/aliases/{name}'].patch
update:
x-apievangelist-phrasing:
intent: Partially update an LXD image alias
effect: write
questions:
- Can I change only an LXD alias's description and leave its target alone?
- Which fields of an image alias can I patch individually?
instructions:
- text: Patch the description of LXD alias {alias} to {description}.
slots:
alias: path.name
description: requestBody.description
- text: Patch only the alias target to fingerprint {target}.
slots:
target: requestBody.target
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/aliases/{name}?public'].get
update:
x-apievangelist-phrasing:
intent: Get a public LXD image alias
effect: read
questions:
- Can an unauthenticated client resolve an alias that points to a public LXD image?
- Why does the public alias lookup fail for aliases on private images?
instructions:
- text: Resolve the public LXD alias {alias} as an untrusted client.
slots:
alias: path.name
- text: Look up the public image alias in project {project} without credentials.
slots:
project: query.project
method: generated
generated: '2026-10-01'
- target: $.paths['/1.0/images/aliases?recursion=1'].get
update:
x-apievangelist-phrasing:
intent: List LXD image aliases with full details
effect: read
questions:
- How do I get every LXD alias along with its target and description in one call?
- Can I list full image alias objects rather than just URLs?
instructions:
- text: List all LXD image aliases as full objects with targets.
- text: Get expanded image alias records for project {project}.
slots:
project: query.project
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images?public'].get
update:
x-apievangelist-phrasing:
intent: List public LXD images as URLs
effect: read
questions:
- Which images does this LXD server publish publicly?
- Can I filter the public LXD image URL list across all projects?
instructions:
- text: List URLs of the public images on this LXD server.
- text: List public LXD image URLs matching filter {filter}.
slots:
filter: query.filter
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images?public'].post
update:
x-apievangelist-phrasing:
intent: Push an image to a target LXD image server
effect: write
questions:
- How does one LXD server hand an image over to another LXD server?
- Can I set aliases and expiry when preparing an image on the target server?
instructions:
- text: Prepare a new image entry on the target LXD server named {filename}.
slots:
filename: requestBody.filename
- text: Add an image on the target server from source {source} with aliases {aliases}.
slots:
source: requestBody.source
aliases: requestBody.aliases
method: generated
generated: '2026-09-26'
- target: $.paths['/1.0/images?public&recursion=1'].get
update:
x-apievangelist-phrasing:
intent: List public LXD images with full details
effect: read
questions:
- How do I get full records for every public image on an LXD server?
- Can I see public image properties across all projects in one call?
instructions:
- text: List all public LXD images as full objects.
- text: Get expanded public image records matching filter {filter}.
slots:
filter: query.filter
method: generated
generated: '2026-09-26'