API docs / Cradle REST
API · Cradle RESTCradle'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 (1)
- Manager (4)
- Instances (13)
- Instance (51)
- Diagnostics (3)
- Recipes (6)
- Migration (4)
- Snapshots (10)
- Patches (8)
- GitHub (8)
- Build lab (4)
- Kitchen (31)
- Files (3)
- Discovery (3)
- Home (1)
- Library (4)
- Notifications (9)
- ACBuild (23)
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 dismissedcategory(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 idactionId(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 idpath(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 matchlimit(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