A clean, token-authenticated REST API with a consistent envelope, far easier to automate against than raw Proxmox.
This page is the endpoint reference. For a high-level overview of what the API can do, see the REST API feature overview.
Create a token under Settings → API tokens in the panel, then send it as a
bearer token on every request. In-app docs also live at /panel/api.
Authorization: Bearer <your-api-token>
Every response uses the same envelope. On success error is null; on
failure data is null and an HTTP error status is returned.
{
"success": true,
"data": { },
"error": null
}
v2 is coming soon
The next API version is in design. Until it ships, use v1. Switch the toggle above. v1 stays supported.
/api/v1/hosts
List the configured Proxmox hosts (no secrets are ever returned).
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/hosts
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/nodes
List the nodes belonging to a host.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id from GET /hosts. |
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/hosts/1/nodes
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/nodes/{node}
Read a single node by name.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
node |
string | Node name (validated before use). |
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/hosts/1/nodes/pve
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/guests
List every VM and container on a host.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/hosts/1/guests
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/guests/{type}/{vmid}
Read a single guest.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
type |
string | qemu or lxc. |
vmid |
integer | Proxmox VM id. |
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/hosts/1/guests/qemu/101
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/guests
Create a guest on a host.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "node": "pve", "type": "qemu", "name": "web-01" }' \
https://panel.example.com/api/v1/hosts/1/guests
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/guests/{type}/{vmid}/reinstall
Reinstall a guest, keeping its id and specs.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
type |
string | qemu or lxc. |
vmid |
integer | Proxmox VM id. |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "node": "pve", "type": "qemu", "name": "web-01" }' \
https://panel.example.com/api/v1/hosts/1/guests
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/guests/{type}/{vmid}
Delete a guest (zone IPs are released).
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
type |
string | qemu or lxc. |
vmid |
integer | Proxmox VM id. |
curl -X DELETE -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/hosts/1/guests/qemu/101
{
"success": true,
"data": [
{
"id": 1,
"name": "Frankfurt-1",
"hostname": "10.0.0.10",
"port": 8006,
"user": "root@pam",
"active": true
}
],
"error": null
}
/api/v1/hosts/{id}/guests/{type}/{vmid}/power
Run a power action on a guest. Returns the Proxmox task id (UPID) to follow.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
type |
string | qemu or lxc. |
vmid |
integer | Proxmox VM id. |
node |
string | Node the guest is on (required). |
action |
string | start, stop, shutdown, reboot, suspend or resume. |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-d 'node=pve&action=start' \
https://panel.example.com/api/v1/hosts/1/guests/qemu/101/power
{
"success": true,
"data": { "upid": "UPID:pve:..." },
"error": null
}
/api/v1/hosts/{id}/tasks/{node}/{upid}
Follow a running Proxmox task by its UPID (e.g. from a power action).
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
node |
string | Node name. |
upid |
string | URL-encoded Proxmox task id. |
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/hosts/1/tasks/pve/UPID%3Apve%3A...
{
"success": true,
"data": { "upid": "UPID:pve:..." },
"error": null
}
/api/v1/users
List customer users.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Host id. |
node |
string | Node name. |
upid |
string | URL-encoded Proxmox task id. |
curl -H "Authorization: Bearer $TOKEN" \
https://panel.example.com/api/v1/users
{
"success": true,
"data": { "upid": "UPID:pve:..." },
"error": null
}
/api/v1/users
Create a customer. A generated password is returned once.
| Parameter | Type | Description |
|---|---|---|
email |
string | Customer email. |
username |
string | Login username. |
user_id |
string | Optional external id. |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-d '[email protected]&username=jane' \
https://panel.example.com/api/v1/users
{
"success": true,
"data": { "upid": "UPID:pve:..." },
"error": null
}
/api/v1/users/{id}/guests
Assign guest ownership to a user.
| Parameter | Type | Description |
|---|---|---|
id |
integer | User id. |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-d '[email protected]&username=jane' \
https://panel.example.com/api/v1/users
{
"success": true,
"data": { "upid": "UPID:pve:..." },
"error": null
}
/api/v1/users/{id}
Delete a customer user.
| Parameter | Type | Description |
|---|---|---|
id |
integer | User id. |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-d '[email protected]&username=jane' \
https://panel.example.com/api/v1/users
{
"success": true,
"data": { "upid": "UPID:pve:..." },
"error": null
}
/api/v1/agent/heartbeat
Used by the on-host NexoVirt agent. It authenticates with its own agent token (not an API token) and receives any pending jobs in the response. You normally never call this directly.
| Parameter | Type | Description |
|---|---|---|
id |
integer | User id. |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-d '[email protected]&username=jane' \
https://panel.example.com/api/v1/users
{
"success": true,
"data": { "upid": "UPID:pve:..." },
"error": null
}