HTTP API
Every endpoint of the Lume HTTP API server (lume serve).
Every endpoint of the Lume HTTP API server (lume serve).
HTTP API for managing macOS and Linux virtual machines
Documented against Lume 0.6.0. Run lume --version for your installed version.
http://localhost:7777
Start the server with lume serve or specify a custom port with lume serve --port <port>.
GET /lume/vmsParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
storage | query | string | Filter by storage location name. |
Example request
curl "http://localhost:7777/lume/vms"Response
200: Success.400: Bad request.GET /lume/vms/:nameParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
name | path | string | required | Name of the VM. |
storage | query | string | VM storage location to use. |
Example request
curl "http://localhost:7777/lume/vms/my-vm"Response
200: Success (while an async pull runs, only name, status "pulling", downloadProgress, downloadedBytes, totalBytes and bytesPerSecond).400: VM not found, invalid request, or the async pull failed.POST /lume/vmsRequest body
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | Name for the virtual machine. |
os | string | required | Operating system to install (macOS or linux). |
cpu | integer | required | Number of CPU cores. |
memory | string | required | Memory size (e.g., 8GB). |
diskSize | string | required | Disk size (e.g., 50GB). |
display | string | required | Display resolution (e.g., 1024x768). |
ipsw | string | Path to IPSW file or 'latest' for macOS VMs. | |
storage | string | VM storage location to use. |
Example request
curl -X POST "http://localhost:7777/lume/vms" \
-H "Content-Type: application/json" \
-d '{
"name": "my-vm",
"os": "macOS",
"cpu": 4,
"memory": "8GB",
"diskSize": "50GB",
"display": "1024x768"
}'Response
200: VM created successfully.400: Invalid request body or VM creation failed.DELETE /lume/vms/:nameParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
name | path | string | required | Name of the VM to delete. |
storage | query | string | VM storage location. |
Example request
curl -X DELETE "http://localhost:7777/lume/vms/my-vm"Response
200: VM deleted successfully.400: VM not found or deletion failed.POST /lume/vms/cloneRequest body
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | Name of the source VM. |
newName | string | required | Name for the cloned VM. |
sourceLocation | string | Source VM storage location. | |
destLocation | string | Destination VM storage location. |
Example request
curl -X POST "http://localhost:7777/lume/vms/clone" \
-H "Content-Type: application/json" \
-d '{
"name": "my-vm",
"newName": "example"
}'Response
200: VM cloned successfully.400: Clone operation failed.PATCH /lume/vms/:nameParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
name | path | string | required | Name of the VM to update. |
Request body
| Field | Type | Default | Description |
|---|---|---|---|
cpu | integer | New number of CPU cores. | |
memory | string | New memory size (e.g., 16GB). | |
diskSize | string | New total disk size (increase only). | |
display | string | New display resolution. | |
storage | string | VM storage location. | |
noBackup | boolean | false | Skip the macOS rollback backup. |
keepBackup | boolean | false | Keep rollback files after success. |
dryRun | boolean | false | Validate the resize plan without modifying the disk. |
Example request
curl -X PATCH "http://localhost:7777/lume/vms/my-vm" \
-H "Content-Type: application/json" \
-d '{}'Response
200: Settings updated successfully.400: Invalid settings or update failed.POST /lume/vms/:name/runParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
name | path | string | required | Name of the VM to start. |
Request body
| Field | Type | Default | Description |
|---|---|---|---|
noDisplay | boolean | false | Run without VNC display. |
sharedDirectories | array | Directories to share with the VM. | |
recoveryMode | boolean | false | Boot macOS VM in recovery mode. |
storage | string | VM storage location. | |
clipboard | boolean | false | Enable bidirectional clipboard sync via SSH (experimental). |
vnc | string | enabled | VNC server policy: 'enabled' or 'disabled'. 'disabled' requires noDisplay=true, starts no VNC listener, and reports a null vncUrl. |
Example request
curl -X POST "http://localhost:7777/lume/vms/my-vm/run" \
-H "Content-Type: application/json" \
-d '{}'Response
202: VM start initiated (async operation).400: Invalid request or VM not found.POST /lume/vms/:name/stopParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
name | path | string | required | Name of the VM to stop. |
Request body
| Field | Type | Default | Description |
|---|---|---|---|
storage | string | VM storage location. |
Example request
curl -X POST "http://localhost:7777/lume/vms/my-vm/stop" \
-H "Content-Type: application/json" \
-d '{}'Response
200: VM stopped successfully.400: Stop operation failed.GET /lume/imagesParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
organization | query | string | Organization to list images for (default: trycua). |
Example request
curl "http://localhost:7777/lume/images"Response
200: Success.400: Failed to list images.GET /lume/ipswExample request
curl "http://localhost:7777/lume/ipsw"Response
200: Success.400: Failed to get IPSW URL.POST /lume/pullRequest body
| Field | Type | Default | Description |
|---|---|---|---|
image | string | required | Image to pull (format: name:tag). |
name | string | Name for the resulting VM. | |
registry | string | ghcr.io | Container registry URL. |
organization | string | trycua | Organization to pull from. |
storage | string | VM storage location. |
Example request
curl -X POST "http://localhost:7777/lume/pull" \
-H "Content-Type: application/json" \
-d '{
"image": "macos-tahoe-vanilla:latest"
}'Response
200: Image pulled successfully.400: Pull operation failed.POST /lume/pull/startRequest body
| Field | Type | Default | Description |
|---|---|---|---|
image | string | required | Image to pull (format: name:tag). |
name | string | Name for the resulting VM. | |
registry | string | ghcr.io | Container registry URL. |
organization | string | trycua | Organization to pull from. |
storage | string | VM storage location. |
Example request
curl -X POST "http://localhost:7777/lume/pull/start" \
-H "Content-Type: application/json" \
-d '{
"image": "macos-tahoe-vanilla:latest"
}'Response
202: Pull started or already in progress.400: Invalid request body.POST /lume/pull/cancelRequest body
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | VM name of the pull to cancel. |
Example request
curl -X POST "http://localhost:7777/lume/pull/cancel" \
-H "Content-Type: application/json" \
-d '{
"name": "my-vm"
}'Response
200: The pull stopped and was cleaned up.400: Invalid request body.404: No background pull in progress for the name (for example it already finished or was cancelled).500: The pull did not stop within 30 seconds.POST /lume/vms/pushRequest body
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | Name of the local VM to push. |
imageName | string | required | Base name for the image in the registry. |
tags | array | required | List of tags to push. |
registry | string | ghcr.io | Container registry URL. |
organization | string | trycua | Organization to push to. |
storage | string | VM storage location. | |
chunkSizeMb | integer | 512 | Chunk size for upload in MB. |
Example request
curl -X POST "http://localhost:7777/lume/vms/push" \
-H "Content-Type: application/json" \
-d '{
"name": "my-vm",
"imageName": "example",
"tags": [
"latest"
]
}'Response
202: Push initiated (async operation).400: Invalid request.POST /lume/pruneExample request
curl -X POST "http://localhost:7777/lume/prune"Response
200: Images pruned successfully.400: Prune operation failed.GET /lume/configExample request
curl "http://localhost:7777/lume/config"Response
200: Success.400: Failed to get config.POST /lume/configRequest body
| Field | Type | Default | Description |
|---|---|---|---|
homeDirectory | string | VM home directory path. | |
cacheDirectory | string | Cache directory path. | |
cachingEnabled | boolean | Enable or disable image caching. |
Example request
curl -X POST "http://localhost:7777/lume/config" \
-H "Content-Type: application/json" \
-d '{}'Response
200: Configuration updated successfully.400: Invalid request.GET /lume/config/locationsExample request
curl "http://localhost:7777/lume/config/locations"Response
200: Success.400: Failed to get locations.POST /lume/config/locationsRequest body
| Field | Type | Default | Description |
|---|---|---|---|
name | string | required | Storage location name. |
path | string | required | Path to storage directory. |
Example request
curl -X POST "http://localhost:7777/lume/config/locations" \
-H "Content-Type: application/json" \
-d '{
"name": "my-vm",
"path": "/path/to/storage"
}'Response
200: Location added successfully.400: Invalid request or location already exists.DELETE /lume/config/locations/:nameParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
name | path | string | required | Name of the location to remove. |
Example request
curl -X DELETE "http://localhost:7777/lume/config/locations/my-vm"Response
200: Location removed successfully.400: Location not found or cannot be removed.POST /lume/config/locations/default/:nameParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
name | path | string | required | Name of the location to set as default. |
Example request
curl -X POST "http://localhost:7777/lume/config/locations/default/my-vm"Response
200: Default location set successfully.400: Location not found.GET /lume/logsParameters
| Parameter | In | Type | Default | Description |
|---|---|---|---|---|
type | query | string | Log type: 'info', 'error', or 'all' (default: all). | |
lines | query | integer | Number of lines to return from end of log. |
Example request
curl "http://localhost:7777/lume/logs"Response
200: Success.400: Failed to read logs.