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.
View Overlay File View on GitHub Overlay Specification

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

Raw ↑
# 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'