AmigaChromeA new chapter for the Amiga

API docs / Cradle REST

API · Cradle REST

Cradle's REST API

Cradle, the machine manager, and every running instance answer JSON over HTTP on the local machine. Every call, grouped as the Swagger page groups them.

186 calls in 18 groups

Two listeners. Cradle, the manager, is on 127.0.0.1:8790. Each running instance has its own uiPort and its own API, tagged Instance. In Swagger, choose that server and set the port. /api/discovery listens on 8792. The same path on two ports is still two APIs. /api/cpu/packages is the one that exists on both.

Cradle listens on 127.0.0.1 only. Version 0.30.0. Running Cradle also serves this as an interactive Swagger page.

Documentation

GET /api/openapi.json

OpenAPI document This specification, served by Cradle.

Manager

GET /api/defaults

Suggested new instance Next install path, storage path, media repository, host and CPU catalogue.

GET /api/manager/health

Cradle health Build identity, patch restart token, patch activity and the update notice.

POST /api/manager/shutdown

Stop Cradle Acknowledges, then shuts the manager process down.

  • JSON request body

GET /api/status

Create or update job The in-memory install/update state.

Instances

POST /api/install

Create or update an instance Starts the provision worker. Refuses a storage root already owned by another instance.

  • JSON request body

POST /api/instance/archive

Archive an instance Hides the instance without deleting it.

  • JSON request body

POST /api/instance/delete

Delete an instance Only an archived instance can be deleted: archive it first. The folder is removed from the disk for good (external storage and shared media are kept). Requires confirmDelete: true.

  • JSON request body

GET /api/instance/lineage

An instance's lineage Its append-only event log (state/lineage.jsonl), oldest first, with backfilled events for instances older than the log.

  • installDir (query, required): The instance folder

POST /api/instance/reset-recipe

Reset recipe defaults Restores the instance recipe fields. Refuses a running instance.

  • JSON request body

POST /api/instance/restore

Restore an archived instance Returns an archived instance to the active list.

  • JSON request body

GET /api/instance/restore-check

Can an archived instance run here ready, update or blocked, with each finding (files, version and build, boot disk, CPU package, storage, port).

  • installDir (query, required): The instance folder

GET /api/instance/screen

Current screen JPEG from the instance state directory.

  • installDir (query, required): Instance directory.

POST /api/instance/settings

Update instance settings cpuBackend, core affinity and the launch options (the CPU's pace is in the instance's hardware).

  • JSON request body

GET /api/instances

List instances Registered AmigaChrome instances.

POST /api/launch

Launch an instance Starts start.sh for one instance. Refuses an archived instance or a port that belongs to another one.

  • JSON request body

GET /api/preflight

Preflight an install path Says whether a path is a fresh create or an update, and whether it is safe to proceed.

  • installDir (query, required): Instance directory.
  • storageDir (query): Optional storage root.

POST /api/shutdown

Stop an instance Stops that instance's runtime and will not stop a different instance that happens to hold the port.

  • JSON request body

Instance

POST /api/acmp/native/execute

Run a native ACMP action Asks the instance to run one host-side action.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/acstorage/delete

Delete an ACStorage path Removes a file or directory.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/acstorage/list

List an ACStorage directory One directory inside a volume.

Served by a running instance (its uiPort).

  • volume (query, required): Volume name.
  • path (query): Path inside the volume.

POST /api/acstorage/mkdir

Make an ACStorage directory Creates one directory.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/acstorage/optical

Optical drives CD or DVD drives presented to the guest.

Served by a running instance (its uiPort).

GET /api/acstorage/optical/info

Optical disc info Table of contents for the inserted disc.

Served by a running instance (its uiPort).

GET /api/acstorage/optical/info.bin

Optical info block The same information as raw bytes.

Served by a running instance (its uiPort).

GET /api/acstorage/optical/media

Optical media Images that can be inserted.

Served by a running instance (its uiPort).

GET /api/acstorage/optical/read

Read optical sectors A sector range from the inserted disc.

Served by a running instance (its uiPort).

POST /api/acstorage/optical/select

Insert an optical image Selects a CD or DVD image.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/acstorage/read

Read an ACStorage file The whole file.

Served by a running instance (its uiPort).

  • volume (query, required): Volume name.
  • path (query, required): File path.

GET /api/acstorage/read-range

Read a byte range A slice of a file.

Served by a running instance (its uiPort).

  • volume (query, required): Volume name.
  • path (query, required): File path.
  • offset (query): Start byte.
  • length (query): How many bytes.

POST /api/acstorage/rename

Rename an ACStorage path Renames inside a volume.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/acstorage/set-size

Resize an ACStorage file Sets the file length.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/acstorage/stat

Stat an ACStorage path Size and type of one path.

Served by a running instance (its uiPort).

  • volume (query, required): Volume name.
  • path (query, required): Path inside the volume.

GET /api/acstorage/volumes

ACStorage volumes Volumes this instance is serving to the guest.

Served by a running instance (its uiPort).

POST /api/acstorage/write

Write an ACStorage file Writes a whole file into a volume.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/acstorage/write-range

Write a byte range Writes into the middle of a file.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/autoconfig/last

Last AutoConfig map The boards the guest last reported.

Served by a running instance (its uiPort).

POST /api/autoconfig/mapped

Record an AutoConfig map The guest posts the boards it configured.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/boot-environments

Boot environments Environments this instance can boot.

Served by a running instance (its uiPort).

GET /api/boot/diagnostics

Boot diagnostics Preflight and telemetry from the last boot.

Served by a running instance (its uiPort).

GET /api/diagnostics/activity

Diagnostic activity What the instance runtime has been doing.

Served by a running instance (its uiPort).

POST /api/diagnostics/browser

Browser diagnostic A report from the instance page.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/diagnostics/report

Diagnostic report A report from the running instance.

Served by a running instance (its uiPort).

POST /api/diagnostics/reset

Reset diagnostics Clears the instance diagnostic log.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/hostfs/list

List a host directory Host path exposed to the guest.

Served by a running instance (its uiPort).

  • path (query): Host directory.

POST /api/instance/reset

Hard reset a running instance Sends a hard reset to the instance's runtime.

  • JSON request body

GET /api/machines/catalog

Machine catalogue Motherboards and CPUs this runtime can present.

Served by a running instance (its uiPort).

GET /api/media/acstorage/bootrom

ACStorage boot ROM Boot ROM used by ACStorage.

Served by a running instance (its uiPort).

GET /api/media/floppy

Floppy drives What is inserted in DF0 to DF3.

Served by a running instance (its uiPort).

GET /api/media/floppy/DF0

Read DF0 The disk in DF0, or 404 when ejected.

Served by a running instance (its uiPort).

GET /api/media/floppy/DF1

Read DF1 The disk in DF1, or 404 when ejected.

Served by a running instance (its uiPort).

GET /api/media/floppy/DF2

Read DF2 The disk in DF2, or 404 when ejected.

Served by a running instance (its uiPort).

GET /api/media/floppy/DF3

Read DF3 The disk in DF3, or 404 when ejected.

Served by a running instance (its uiPort).

POST /api/media/floppy/select

Insert a floppy Selects an image for a DF drive.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/media/import-attach

Import and attach media Copies an image into the repository and inserts it.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/media/inspect

Inspect media Describe one image.

Served by a running instance (its uiPort).

  • path (query, required): Image path.

GET /api/media/repository

Media repository Where this instance looks for ROMs and disks.

Served by a running instance (its uiPort).

GET /api/media/rom/ext

Extended ROM The extended ROM image.

Served by a running instance (its uiPort).

GET /api/media/rom/main

Kickstart ROM The main ROM image.

Served by a running instance (its uiPort).

POST /api/runtime/activity

Report activity A heartbeat from the running guest.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/runtime/execution

Report execution state CPU and run state from the emulator.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/runtime/last-registration

Last runtime registration The last time the emulator registered with the host.

Served by a running instance (its uiPort).

POST /api/runtime/lease

Claim the runtime lease One machine per instance: a browser runtime window claims, or every 4 s renews, the lease keyed by its runtimeId before it boots. 409 (code runtime-lease-held) while another window holds it.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/runtime/lease/release

Release the runtime lease The window holding the lease gives it up as it closes. A release from any other runtimeId changes nothing.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/runtime/register

Register the runtime The emulator tells the host it is up.

Served by a running instance (its uiPort).

  • JSON request body

POST /api/runtime/screen

Store a screen frame The emulator posts a frame for the preview.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/runtime/screen.jpg

Live screen JPEG of the instance display.

Served by a running instance (its uiPort).

POST /api/runtime/shutdown

Stop the instance runtime Cradle calls this on the instance port. It does not stop Cradle.

Served by a running instance (its uiPort).

  • JSON request body

GET /api/system/status

Instance status Whether this instance is up, and the build it is running. Cradle calls this on the instance uiPort.

Served by a running instance (its uiPort).

Diagnostics

GET /api/instance/logs

Download a diagnostic bundle Zip of the instance logs.

  • installDir (query, required): Instance directory.

GET /api/instance/logs/files

List diagnostic files Files that can be packed or uploaded.

  • installDir (query, required): Instance directory.

POST /api/instance/logs/github

Upload diagnostics to GitHub Uses the gh session. files is an optional list of paths.

  • JSON request body

Recipes

GET /api/recipes

Recipe catalogue Built-in and saved recipes.

POST /api/recipes/check-updates

Check recipe sources now Checks every monitored recipe source at once instead of waiting for its interval (6 h by default). A newer upstream release becomes a notification; nothing is downloaded or changed.

  • JSON request body

POST /api/recipes/import-uae/analyse

Analyse a UAE config Reads a WinUAE or FS-UAE configuration.

  • JSON request body

POST /api/recipes/import-uae/save

Save a recipe from UAE Turns an analysed configuration into a Cradle recipe.

  • JSON request body

POST /api/recipes/save

Save a recipe Writes a user recipe.

  • JSON request body

GET /api/recipes/update-status

Recipe source monitor state For each recipe with an updateSource: when it was last checked, what was found upstream, and the versions ignored.

Migration

GET /api/migration/analyse

Inspect a disk image Partition table of an IMG or HDF.

  • path (query, required): Image path.

POST /api/migration/plan

Plan a migration Does not write the destination.

  • JSON request body

POST /api/migration/run

Run a migration One migration at a time.

  • JSON request body

GET /api/migration/status

Migration job The current HDF or IMG migration, if one is running.

Snapshots

GET /api/snapshots

List snapshots Snapshots for one instance.

  • installDir (query, required): Instance directory.

POST /api/snapshots/archive

Archive a snapshot Keeps the snapshot but takes it off the active list.

  • JSON request body

POST /api/snapshots/create

Create a snapshot Captures DH0. Live checkpoint is not supported.

  • JSON request body

POST /api/snapshots/delete

Delete a snapshot Only an archived snapshot can be deleted: archive it first. Its DH0 copy is removed from the disk for good.

  • JSON request body

GET /api/snapshots/export

Export a snapshot Downloads one snapshot.

  • installDir (query, required): Instance directory.
  • name (query, required): Snapshot name.

GET /api/snapshots/jobs

List snapshot jobs Scheduled captures. Missed deadlines are not replayed.

POST /api/snapshots/jobs/cancel

Cancel a snapshot job Cancels by job id.

  • JSON request body

POST /api/snapshots/jobs/create

Schedule a snapshot kind is dh0 unless said otherwise.

  • JSON request body

POST /api/snapshots/restore

Restore a snapshot Writes the named snapshot back to DH0.

  • JSON request body

POST /api/snapshots/unarchive

Unarchive a snapshot Returns an archived snapshot to the active list.

  • JSON request body

Patches

POST /api/patches/activity/ack

Dismiss the patch result Clears the activity requester.

  • JSON request body

GET /api/patches/history

Patch history Applied and failed patches.

  • limit (query): How many records.

POST /api/patches/history/github

Upload a history record Sends one patch-history record through gh.

  • JSON request body

POST /api/patches/install

Apply one queued patch Starts the managed runner for one filename.

  • JSON request body

POST /api/patches/postpone

Postpone a patch seconds is optional.

  • JSON request body

POST /api/patches/select

Apply a selection filenames is the list the operator ticked. A patch whose requirements are unmet is refused.

  • JSON request body

GET /api/patches/status

Patch queue Pending patches, requirements and whether each one can be selected.

POST /api/updates/acknowledge

Acknowledge an update notice Dismisses one update key.

  • JSON request body

GitHub

GET /api/github/ready

Whether GitHub uploads are on Uploads stay off until Settings › Kitchen & GitHub has a saved repository and branch, this machine is signed in, and Test has passed. Lists every reason with the field to fix.

GET /api/github/watch

Watch state What Cradle has seen in the watched repositories. The error field is the last watch failure.

POST /api/github/watch/ack

Acknowledge a watched file Marks a path and sha as seen.

  • JSON request body

POST /api/github/watch/apply

Fetch a patch and apply it Downloads one patch into the queue and starts patch.sh when that script exists.

  • JSON request body

GET /api/github/watch/view

View a watched file Reads one path from the watch cache.

  • path (query, required): Repository path.

GET /api/settings/github

Kitchen and GitHub settings Repository, branch, Kitchen transport switches and paths, and how this machine is signed in. Never a token.

POST /api/settings/github

Save Kitchen and GitHub settings Saves config/github.json and the serving hatch's hatch.json.

  • JSON request body

POST /api/settings/github/test

Test the GitHub settings Checks the signed-in account can see and write to the repository and that the branch exists. A pass for the saved settings turns uploads on.

  • JSON request body

Build lab

GET /api/buildlab/appliance

Appliance image job Status of the image build, plus instances that can be deployed onto it. background is true when the running build was marked to run in the background. log is the build's console. With no logFrom it is the last 500 lines (no trailing newline). With logFrom it is only the text after that byte, as it is in the file: add it to what you have, or replace what you have when logReset is true. logOffset is the byte to send as logFrom next time, and logId names the build the console belongs to.

  • logFrom (query): Bytes of the console already held (the last answer's logOffset). 0 asks for the console from the start (the last 500 lines if it is longer). An offset past the end of the log, or more than 256 KiB behind it, is answered with the last 500 lines and logReset true. A value that is not a whole number of 0 or more is answered with 400.
  • logId (query): The logId of the answer logFrom came from. If it names another build, the answer starts that build's console again (logReset true).

POST /api/buildlab/appliance

Start or cancel an appliance image cancel true stops the job. A body of only background true marks the running build to run in the background: when it is done or has failed, Cradle raises a notification (409 when no build is running). Otherwise the body is the image request.

  • JSON request body

GET /api/buildlab/aros

AROS local build Host check, prepare, or the no-Git guest build. The log is included.

POST /api/buildlab/aros

Start or cancel the AROS build mode is check, prepare or build. prepare asks ACKitchen for Polkit and does not take a password. cancel true stops a running job.

  • JSON request body

Kitchen

GET /api/kitchen/aminet

ACKitchen Aminet: a project's package settings The saved Aminet settings (or defaults from project.json), the folders that can be packed, what is built in <project>/aminet/, and Aminet's directories and architectures.

  • project (query, required)

POST /api/kitchen/aminet/build

ACKitchen Aminet: build a package Saves the settings in project.json and writes <project>/aminet/<name>.lha and <name>.readme. Refuses while there are problems. Never uploads.

  • JSON request body

POST /api/kitchen/aminet/check

ACKitchen Aminet: check a package Everything Aminet's rules would reject, the readme as it will be written, and the archive's members. Writes nothing.

  • JSON request body

POST /api/kitchen/authorization/cancel

Cancel an elevated kitchen action Drops a pending authorization before Polkit runs.

  • JSON request body

POST /api/kitchen/authorize

Approve an elevated kitchen action Continues a pending authorization. Polkit asks for the password. Cradle never receives it. The only allow-listed action in the landed prep is aros-host-tools.

  • JSON request body

GET /api/kitchen/cook

Follow a cook The order's state (waiting, done, failed, refused) and, once plated, the cook's log, problems and program.

  • id (query, required): The order id the POST returned.

POST /api/kitchen/cook

Cook a program Places a stove-cook-v1 order with the serving hatch: one program of a project, on a stove, for a CPU. The answer has the order's id.

  • JSON request body

GET /api/kitchen/hatch

Serving hatch Orders, plates and the last scan. Plates are acserve files. Orders are acorder files. Git delivery stays manual until a dispatch default says otherwise.

GET /api/kitchen/ide/autodoc

One Autodoc entry The Autodoc text of one call.

  • entry (query, required): Such as exec.library/AllocMem.

GET /api/kitchen/ide/codehelp

Code help Every library call of the NDK (library, base, LVO, prototype, arguments with registers, Autodoc) and the NDK headers' constants, from the Library's imported NDK and the os32 stove's NDK.

GET /api/kitchen/ide/debug

An instance's CPU, tasks and memory The runtime's dev-tools block, read only; asking keeps it written.

  • installDir (query, required): The instance's folder, as /api/instances lists it.

POST /api/kitchen/ide/debug

Halt, resume, step or run to The runtime's own dev-tools records: halt, resume, step, step10, run-to (with address, hex), watch.

  • JSON request body

GET /api/kitchen/ide/file

Read a project file The file as text, read as ISO-8859-1, with its SHA-256.

  • project (query, required): The project.
  • name (query, required): The file, such as hello.c.

POST /api/kitchen/ide/file

Save a project file Writes the text as ISO-8859-1 (characters outside it are refused, with their line and column). A project opened from an instance gets the file written back to its drawer.

  • JSON request body

GET /api/kitchen/ide/instance-files

A drawer of an instance Lists a drawer of a running instance's drive.

  • installDir (query, required): The instance's folder, as /api/instances lists it.
  • path (query, required): Such as DH1:Work.

GET /api/kitchen/ide/project

One project Its files, its cooked out/ files, project.json and the programs it makes.

  • project (query, required): A project's name, or the full path of an opened folder.

POST /api/kitchen/ide/project/from-instance

Open an instance's drawer as a project Copies a running instance's drawer's source and text files into the Kitchen projects folder; saving writes them back.

  • JSON request body

POST /api/kitchen/ide/project/new

New project Makes a project folder with hello.c and project.json in the Kitchen projects folder.

  • JSON request body

POST /api/kitchen/ide/project/open

Open a folder as a project Remembers a folder on this PC as a project the Editor may save to and cook.

  • JSON request body

GET /api/kitchen/ide/projects

Kitchen projects The folders in the Kitchen projects folder, and folders opened from the Editor.

GET /api/kitchen/ide/serial

An instance's serial output SER0's output from its runtime's ring, after a byte count.

  • installDir (query, required): The instance's folder, as /api/instances lists it.
  • since (query): The byte count to read after.

GET /api/kitchen/ide/stoves

The Editor's stoves Each stove (os32, os32-gcc16, aros68k-gcc16) with what it cooks, its compiler version and what it still needs; the planned ovens; the CPU targets.

GET /api/kitchen/ide/volumes

An instance's drives Its ACStorage drives and the drawer Serve uses by default.

  • installDir (query, required): The instance's folder, as /api/instances lists it.

POST /api/kitchen/open-tool

Open a Kitchen tool Opens the ACKitchen Editor, Pass or Forms designer in its own window.

  • JSON request body

POST /api/kitchen/order

Place an order An order uses lowercase hyphenated recipe names. The kitchen writes an acorder zip. A recipe with no compiler still returns a plate whose receipt says the compiler did not run.

  • JSON request body

GET /api/kitchen/orders

Orders Every order the serving hatch knows, newest first, with its state and plate.

GET /api/kitchen/plate

Download a plate name is the plate filename, not a path.

  • name (query, required): acserve zip name.

GET /api/kitchen/plate/cook

What a plate holds A plate's receipt, cook log, problems and the files it carries.

  • name (query, required): The plate, acserve-*.zip.

GET /api/kitchen/projects

ACKitchen projects The projects the Kitchen knows, with where they live.

POST /api/kitchen/serve

Serve a plate Copies a cooked plate's program into a running instance's drive (DH1:Kitchen unless a drawer is given), and with clip puts the command that runs it on the instance's clipboard. It does not start the program.

  • JSON request body

GET /api/kitchen/stoves

ACKitchen stoves Each cross-compiler stove (for example os32: m68k-amigaos-gcc, vasm, vlink, NDK 3.2) and whether it is ready.

Files

GET /api/file-browser

Browse host files kind defaults to adf.

  • path (query): Directory.
  • kind (query): File kind, default adf: rom, adf, floppy, disk-image, uae, iso, ndk, directory or any.
  • hidden (query): 1 lists names that start with a dot.
  • all (query): 1 lists every file; the ones this kind does not take are not selectable.

GET /api/file-browser/inspect

Describe one host file or folder for the file requester Reads only: type, format, size, geometry, Kickstart version, a .uae file's settings, and the sidecar JSON when there is one.

  • path (query, required): File or folder.
  • kind (query): The requester's kind; says whether the file fits.

GET /api/file-browser/thumb

A picture for the file requester's icon view PNG, JPEG, GIF, WebP, BMP, ICO, AVIF and SVG as they are; IFF ILBM and PBM decoded to PNG. Anything else is refused. Sent with a sandbox CSP and nosniff.

  • path (query, required): The picture file.
  • max (query): Longest side for a decoded IFF picture, default 256.

Discovery

GET /api/discovery

LAN identity Served by the discovery listener on port 8792, not by the manager on 8790. Other Cradles call it while browsing mDNS. It listens on 127.0.0.1 unless LAN access is on (POST /api/lan-access). It says only the machine's name, kind, architecture and version, and each instance's name and whether it runs. A Host that is not an IP address, localhost or a .local name gets 403 (DNS rebinding), so does any request with an Origin (web pages), and a caller asking more than a few times a second gets 429.

POST /api/lan-access

LAN access on or off Whether other machines on the network may see this Cradle: on, the discovery listener answers on every address and the Cradle is announced by mDNS; off (the default), it answers on 127.0.0.1 only and nothing is announced. Finding others works either way.

  • JSON request body

GET /api/lan-hosts

Browse other Cradles mDNS browse plus a short call to each host's /api/discovery, run in the background: at most one browse at a time and one every 5 seconds, and a page waits at most 4 seconds; scanning: true means the list is the last one and a new one is still coming. Only machines on this PC's own networks are listed, at most 32, and each is asked at exactly the address and port its mDNS records gave, with no redirect followed. lanAccess says whether other machines may see this Cradle.

Home

GET /api/cradle/overview

Cradle at a glance Each part of Cradle and whether it is working (discovery, Kitchen worker, stoves, GitHub, backup scheduler, patch manager, API, instance runtimes), instance counts, running instances with uptime and whether their runtime answers, the machine (load, memory, disks, uptime) and the latest logged instance events.

Library

GET /api/library

The Library catalogue Sections in order: API (summary of this description), Autodocs, Design guides, How-tos, Training (with video links from docs/training/videos.json) and Notes and releases.

GET /api/library/doc

Read one document The text of one document under docs/, or of an imported NDK autodoc (path ndk:<release>/<name>.doc). Nothing else is served.

  • path (query, required): Path relative to the Cradle root, e.g. docs/autodocs/acfs.doc

GET /api/library/functions

Functions an imported NDK documents Every library/function entry (exec.library/AllocVec) in an imported NDK's autodocs, with the doc that describes it.

  • release (query, required): The NDK's folder name, as /api/library lists it (ndk-3.2-r4).

POST /api/library/import-ndk

Import an NDK's autodocs Copies Autodocs/*.doc from an NDK archive (.lha) into ~/.config/amigachrome/library/<release>/ with an index of its functions. The docs are Hyperion's and stay on this machine; an earlier import of the same release is moved aside, not deleted.

  • JSON request body

Notifications

GET /api/events

Recent events The event history, newest first. Events stay 90 days; some (a verified instance start, a taken backup) never become notifications.

  • limit (query): 1 to 500 (100)

POST /api/events

Publish an event Loopback only: needs Content-Type application/json, refuses a foreign browser Origin (403) and bodies over 128 KB (413). An event with a title or message becomes a notification unless notify is false; dedupeKey folds repeats into one.

  • JSON request body

GET /api/notifications

List notifications Newest first, dismissed ones left out unless asked for. With the unread count, the revision and what each delivery destination can do.

  • state (query): unread, read or dismissed
  • category (query): update, instance, system, …
  • limit (query): 1 to 500 (100)
  • includeDismissed (query): 1 to include dismissed notifications

POST /api/notifications/read-all

Mark every notification read Returns how many changed and the unread count.

  • JSON request body

GET /api/notifications/stream

Live changes (server-sent events) A text/event-stream: a `notifications` event with the revision and unread count now and on each change, keep-alives in between. Closes after 55 s; EventSource reconnects with ?after=REVISION.

  • after (query): the last revision seen

GET /api/notifications/summary

Unread count and revision The unread count, the revision (it goes up on every change) and the delivery capabilities: Cradle, the desktop, and the guest (not available until ACControl).

POST /api/notifications/{id}/actions/{actionId}

Run a notification action Runs a registered action handler named by the notification (never code carried in it), such as recipe.review-update or recipe.ignore-version. Marks the notification read unless the handler keeps it unread.

  • id (path, required): acn-… notification id
  • actionId (path, required): an action id the notification lists
  • JSON request body

POST /api/notifications/{id}/dismiss

Dismiss one notification Dismissed notifications leave the list and are pruned by age.

  • id (path, required): acn-… notification id
  • JSON request body

POST /api/notifications/{id}/read

Mark one notification read

  • id (path, required): acn-… notification id
  • JSON request body

ACBuild

GET /api/acbuild/icons

ACBuild icon library: the collections The icon library's collections: those that ship with AmigaChrome (read-only, ids builtin-*) and those in the icon library folder (Settings › Folders), with My icons made when missing.

POST /api/acbuild/icons/collection

ACBuild icon library: a new collection

  • JSON request body

GET /api/acbuild/icons/file

ACBuild icon library: one icon's bytes

  • collection (query, required): A collection id
  • path (query, required): The icon's path inside the collection (.info)

POST /api/acbuild/icons/import

ACBuild icon library: import a folder of icons Copies every Amiga icon under a host folder into a new collection, keeping the folders. The source is only read.

  • JSON request body

POST /api/acbuild/icons/install

ACBuild icon library: copy a collection into an instance Copies a collection's icons and docs to Icons/<collection> on a stopped instance's DH1 (or DH0). Files already there are left alone.

  • JSON request body

GET /api/acbuild/icons/list

ACBuild icon library: a collection's icons

  • collection (query, required): A collection id

GET /api/acbuild/icons/redraw

ACBuild icon library: the 16-bit RTG redraw's engines and progress The engines available (built-in Scale4x, and the AI upscaler when one is set up), the sizes, and the running or last redraw.

POST /api/acbuild/icons/redraw

ACBuild icon library: redraw a collection for 16-bit RTG Starts a background redraw of a collection into redraw-<id>: each icon upscaled four times, fitted to 64 or 96 pixels and dithered to 16-bit colour for a 1920x1024 screen. New icons wait for approval.

  • JSON request body

POST /api/acbuild/icons/redraw/approve

ACBuild icon library: approve redrawn icons Approves (true), turns down (false) or resets (null) redrawn icons; no paths means every icon in the collection. Only approved icons are used by the new icon set.

  • JSON request body

POST /api/acbuild/icons/redraw/settings

ACBuild icon library: set up the AI upscaler Saves the command line of an upscaler installed on this PC, with {in}, {out} and {scale}. Empty uses the built-in engine.

  • JSON request body

GET /api/acbuild/icons/redraw/sheet

ACBuild icon library: a redrawn collection's before-and-after sheet Every icon before and after the redraw, with whether it is approved.

  • collection (query, required): A redrawn collection, redraw-…

POST /api/acbuild/icons/save

ACBuild icon library: save an icon Into a writable collection. An icon already at that path moves to the archive first.

  • JSON request body

GET /api/acbuild/icons/scrape

ACBuild icon library: the icon pack review's progress and past reviews The running or last review (state, packs done, log) and up to 20 past reviews.

POST /api/acbuild/icons/scrape

ACBuild icon library: review icon packs and keep the modern icons Starts a background review. Every icon in each pack is judged by its real format: PNG, ARGB and OS 3.5 icons with more than 8 colours are kept in a new collection with the pack's readme and licence; classic, MagicWB-era, NewIcons and low-colour icons are dropped. Fetches are polite (robots.txt, a pause between requests, cached). Nothing is uploaded.

  • JSON request body

GET /api/acbuild/icons/scrape/review

ACBuild icon library: a review's contact sheet The HTML contact sheet of one review: every icon, kept or dropped, and why.

  • run (query, required): The review's run id

GET /api/acbuild/icons/search

ACBuild icon library: search every collection Icons whose name, folders, collection or type match every word typed. Types answer to everyday words: folder or directory finds drawers, disk or volume finds disks, trash or bin the trashcan, program or app tools, document or file projects.

  • q (query, required): The words to match
  • limit (query)

GET /api/acbuild/icons/theme

ACBuild icon library: the new icon set's progress and earlier runs The running or last preview or apply, and up to 20 earlier runs that can be put back.

  • instance (query): Only this instance's runs

POST /api/acbuild/icons/theme/apply

ACBuild icon library: give an instance the new icon set Rewrites every icon on a stopped instance's DH0 and DH1 with its new picture, place and drawer window (GlowIcons for AmigaOS 3.x, PNG icons for AROS). The originals are copied to the archive first.

  • JSON request body

GET /api/acbuild/icons/theme/preview

ACBuild icon library: the new icon set's preview page Every window drawn at half size with its icons where they will sit.

  • run (query, required): The preview's run id

POST /api/acbuild/icons/theme/preview

ACBuild icon library: preview the new icon set on an instance Works out, in the background, the picture, place and drawer window of every icon on the instance's drives, and draws a preview. Changes nothing.

  • JSON request body

POST /api/acbuild/icons/theme/restore

ACBuild icon library: put an instance's original icons back Copies a run's archived originals back onto the stopped instance it came from.

  • JSON request body

POST /api/acbuild/icons/to-project

ACBuild icons: save an icon into a Kitchen project

  • JSON request body

POST /api/acbuild/open-tool

Open an ACBuild tool Opens the icon editor in its own window, optionally on an icon from the library.

  • JSON request body