Skip to content

VMs API

List Vms

Parameters

NameInTypeRequiredDescription
hostqueryinteger | nullno

Responses

StatusDescriptionSchema
200Successful Responseany
422Validation ErrorHTTPValidationError

Create Vm Route

Validate the spec here, not in the job: a bad spec should be a 422 the operator sees while the form is still open, not a failed job in the history.

Request body (required), application/json, VmCreateIn

FieldTypeRequiredDescription
bridgestringno
coresintegerno
disk_gbintegerno
host_idintegeryes
isostring | nullno
memory_mbintegerno
namestringyes
nodestring | nullno
ostypestringno
startbooleanno
storagestringno
vlan_taginteger | nullno
vmidinteger | nullno

Responses

StatusDescriptionSchema
202Successful Responseany
422Validation ErrorHTTPValidationError

Delete Vm Route

The most destructive route in this phase: the guest and its disks are gone, and nothing here backs them up first. Doc 05 puts it at owner, one rung above every other VM route; on top of that it takes the same typed-confirmation path as a self-targeted stop, and refuses a running guest outright rather than forcing it down first.

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Request body, application/json, VmDeleteIn

FieldTypeRequiredDescription
confirmstring | nullno

Responses

StatusDescriptionSchema
202Successful Responseany
422Validation ErrorHTTPValidationError

Vm Detail

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Responses

StatusDescriptionSchema
200Successful Responseany
422Validation ErrorHTTPValidationError

Vm Lifecycle

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes
actionpathstringyes

Request body, application/json, LifecycleIn

FieldTypeRequiredDescription
confirmstring | nullno

Responses

StatusDescriptionSchema
202Successful Responseany
422Validation ErrorHTTPValidationError

Clone Vm Route

A linked clone is refused here, not by PVE.

The upgrade path this docstring used to describe is now taken: the poller mirrors /cluster/resources’s template flag onto Vm, so a linked clone of an ordinary guest is refused with a sentence naming templates instead of PVE’s 500 Linked clone feature is not supported for '<volume>' (scsi0), which never mentions them. Its trigger condition was “if PVE’s rejection proves confusing in practice”, and doc 12 check 18 is that evidence.

Historical note, kept because it explains the shape: PVE permits a linked clone (full=false) only from a template, and Proxploy could not tell templates apart, so full was passed through unvalidated.

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Request body, application/json, VmCloneIn

FieldTypeRequiredDescription
fullbooleanno
namestring | nullno
newidinteger | nullno
storagestring | nullno
targetstring | nullno

Responses

StatusDescriptionSchema
202Successful Responseany
422Validation ErrorHTTPValidationError

Vm Network

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Responses

StatusDescriptionSchema
200Successful Responseany
422Validation ErrorHTTPValidationError

Vm Network Update

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes
ifacepathstringyes

Request body (required), application/json, NicIn

FieldTypeRequiredDescription
bridgestring | nullno
firewallboolean | nullno
gwstring | nullno
gw6string | nullno
ipstring | nullno
ip6string | nullno
link_downboolean | nullno
mtuinteger | nullno
ratenumber | nullno
taginteger | nullno

Responses

StatusDescriptionSchema
200Successful Responseany
422Validation ErrorHTTPValidationError

Get VM Options

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Responses

StatusDescriptionSchema
200Successful Responseany
422Validation ErrorHTTPValidationError

Update VM Options

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Request body (required), application/json, OptionsIn

FieldTypeRequiredDescription
enableinteger | nullno
policy_instring | nullno
policy_outstring | nullno
dhcpinteger | nullno
ndpinteger | nullno
radvinteger | nullno
macfilterinteger | nullno
ipfilterinteger | nullno
digeststring | nullno

Responses

StatusDescriptionSchema
200Successful Responseany
422Validation ErrorHTTPValidationError

List Vm Snapshots

Live read on every request (doc 05: “List snapshots (live from Proxmox)”); there is no snapshot table and this phase adds none.

PVE always includes a synthetic current entry describing the running state. It is not a snapshot, has no snaptime, and cannot be rolled back to or deleted, so it is dropped here rather than in the UI; otherwise every consumer of this endpoint has to know the same trivia.

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Responses

StatusDescriptionSchema
200Successful Responseany
422Validation ErrorHTTPValidationError

Create Vm Snapshot

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes

Request body (required), application/json, SnapshotIn

FieldTypeRequiredDescription
descriptionstring | nullno
namestringyes
vmstatebooleanno

Responses

StatusDescriptionSchema
202Successful Responseany
422Validation ErrorHTTPValidationError

DELETE /api/v1/vms/{vm_id}/snapshots/{name}

Section titled “DELETE /api/v1/vms/{vm_id}/snapshots/{name}”

Delete Vm Snapshot

No typed confirmation: deleting a snapshot leaves the guest and its disk exactly as they are. Only the rollback above destroys live state.

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes
namepathstringyes

Responses

StatusDescriptionSchema
202Successful Responseany
422Validation ErrorHTTPValidationError

POST /api/v1/vms/{vm_id}/snapshots/{name}/rollback

Section titled “POST /api/v1/vms/{vm_id}/snapshots/{name}/rollback”

Rollback Vm Snapshot

Rollback throws away every write since the snapshot was taken; there is no undo and no second copy. It therefore reuses the same three-key 409 shape (error/confirm_phrase/detail) enqueue_lifecycle uses, so the frontend’s existing typed-confirmation dialog renders it with no new component, but the error value here is "confirm_required", not enqueue_lifecycle’s self-targeted-stop "self_target": rollback asks for confirmation from every caller, not only when the VM happens to be the one Proxploy itself runs in. The frontend keys on this exact string, so do not conflate the two.

Parameters

NameInTypeRequiredDescription
vm_idpathintegeryes
namepathstringyes

Request body, application/json, RollbackIn

FieldTypeRequiredDescription
confirmstring | nullno

Responses

StatusDescriptionSchema
202Successful Responseany
422Validation ErrorHTTPValidationError