Skip to content

Infrastructure API

These three models represent the Proxmox infrastructure topology synced into NetBox: cluster metadata, hypervisor nodes, and storage backends.

For common API conventions (authentication, pagination, nested serializers), see API Overview.

For the operational guide — how to trigger cluster/node syncs, link to NetBox objects, and troubleshoot — see Cluster and Node Tracking.


Proxmox Cluster

A Proxmox VE cluster record, optionally linked to a NetBox virtualization.Cluster.

GET    /api/plugins/proxbox/clusters/
GET    /api/plugins/proxbox/clusters/{id}/
POST   /api/plugins/proxbox/clusters/
PUT    /api/plugins/proxbox/clusters/{id}/
PATCH  /api/plugins/proxbox/clusters/{id}/
DELETE /api/plugins/proxbox/clusters/{id}/

Example — list all clusters:

curl -H "Authorization: Token <token>" \
     http://netbox.example.com/api/plugins/proxbox/clusters/

Example — filter for cluster-mode only:

curl -H "Authorization: Token <token>" \
     "http://netbox.example.com/api/plugins/proxbox/clusters/?mode=cluster"

Example — link a cluster to a NetBox Cluster object:

curl -X PATCH \
     -H "Authorization: Token <token>" \
     -H "Content-Type: application/json" \
     -d '{"netbox_cluster": 5}' \
     http://netbox.example.com/api/plugins/proxbox/clusters/1/

Filterable fields: id, endpoint, netbox_cluster, name, mode, quorate

Searchable fields (?q=): name, cluster_id

Sample response:

{
  "id": 1,
  "url": "/api/plugins/proxbox/clusters/1/",
  "display": "pve-cluster",
  "endpoint": {
    "id": 1,
    "url": "/api/plugins/proxbox/endpoints/proxmox/1/",
    "display": "prod-proxmox (proxmox.example.com)",
    "name": "prod-proxmox"
  },
  "netbox_cluster": {
    "id": 5,
    "url": "/api/virtualization/clusters/5/",
    "display": "prod-cluster",
    "name": "prod-cluster"
  },
  "name": "pve-cluster",
  "cluster_id": "abc123",
  "mode": {"value": "cluster", "label": "Cluster"},
  "nodes_count": 3,
  "node_count": 3,
  "quorate": true,
  "version": 7,
  "tags": [],
  "custom_fields": {},
  "created": "2026-01-01T00:00:00Z",
  "last_updated": "2026-04-01T00:00:00Z"
}

Data Model

Field Type Description
endpoint nested ProxmoxEndpoint Parent Proxmox endpoint
netbox_cluster nested Cluster (nullable) Linked NetBox virtualization.Cluster — set null on delete
name string Cluster name from Proxmox
cluster_id string Proxmox internal cluster identifier
mode choice Deployment mode. Choices: undefined, standalone, cluster
nodes_count integer Number of member nodes reported by Proxmox
node_count integer (read-only) Alias for nodes_count
quorate boolean Corosync quorum status
version integer (nullable) Corosync configuration version

Proxmox Node

A Proxmox VE hypervisor node, optionally linked to a NetBox dcim.Device.

GET    /api/plugins/proxbox/nodes/
GET    /api/plugins/proxbox/nodes/{id}/
POST   /api/plugins/proxbox/nodes/
PUT    /api/plugins/proxbox/nodes/{id}/
PATCH  /api/plugins/proxbox/nodes/{id}/
DELETE /api/plugins/proxbox/nodes/{id}/

Example — list all nodes for a specific endpoint:

curl -H "Authorization: Token <token>" \
     "http://netbox.example.com/api/plugins/proxbox/nodes/?endpoint_id=1"

Example — filter for online nodes only:

curl -H "Authorization: Token <token>" \
     "http://netbox.example.com/api/plugins/proxbox/nodes/?online=true"

Example — link a node to a NetBox Device:

curl -X PATCH \
     -H "Authorization: Token <token>" \
     -H "Content-Type: application/json" \
     -d '{"netbox_device": 42}' \
     http://netbox.example.com/api/plugins/proxbox/nodes/1/

Filterable fields: id, endpoint, proxmox_cluster, netbox_device, name, ip_address, online, local

Searchable fields (?q=): name, ip_address, ssl_fingerprint

Sample response:

{
  "id": 1,
  "url": "/api/plugins/proxbox/nodes/1/",
  "display": "pve-node-01",
  "endpoint": {
    "id": 1,
    "url": "/api/plugins/proxbox/endpoints/proxmox/1/",
    "display": "prod-proxmox (proxmox.example.com)",
    "name": "prod-proxmox"
  },
  "proxmox_cluster": {
    "id": 1,
    "url": "/api/plugins/proxbox/clusters/1/",
    "display": "pve-cluster",
    "name": "pve-cluster"
  },
  "netbox_device": {
    "id": 42,
    "url": "/api/dcim/devices/42/",
    "display": "pve-node-01",
    "name": "pve-node-01"
  },
  "name": "pve-node-01",
  "node_id": 1,
  "ip_address": "10.0.0.10",
  "online": true,
  "local": false,
  "cpu_usage": 12.5,
  "cpu_usage_percent": 12.5,
  "max_cpu": 32,
  "memory_usage": 17179869184,
  "memory_usage_percent": 25.0,
  "max_memory": 68719476736,
  "ssl_fingerprint": "AB:CD:EF:...",
  "support_level": "",
  "tags": [],
  "custom_fields": {},
  "created": "2026-01-01T00:00:00Z",
  "last_updated": "2026-04-01T00:00:00Z"
}

Data Model

Field Type Description
endpoint nested ProxmoxEndpoint Parent Proxmox endpoint
proxmox_cluster nested ProxmoxCluster (nullable) Owning cluster; null for standalone nodes
netbox_device nested Device (nullable) Linked NetBox dcim.Device — set null on delete
name string Node name in Proxmox
node_id integer Proxmox-assigned numeric node ID
ip_address string Node management IP address
online boolean Whether the node is currently online
local boolean Whether this is the local node on the endpoint
cpu_usage float Raw CPU usage value from Proxmox
cpu_usage_percent float (read-only) CPU usage as a percentage (0–100)
max_cpu integer Total CPU thread count
memory_usage integer Used memory in bytes
memory_usage_percent float (read-only) Memory usage as a percentage (0–100)
max_memory integer Total memory in bytes
ssl_fingerprint string TLS certificate fingerprint
support_level string Proxmox support subscription level

Proxmox Storage

A Proxmox storage backend synced from a cluster, covering all storage types supported by Proxmox (local directories, NFS, CIFS, Ceph/RBD, PBS, ZFS, and more).

GET    /api/plugins/proxbox/storage/
GET    /api/plugins/proxbox/storage/{id}/
POST   /api/plugins/proxbox/storage/
PUT    /api/plugins/proxbox/storage/{id}/
PATCH  /api/plugins/proxbox/storage/{id}/
DELETE /api/plugins/proxbox/storage/{id}/

Upsert on POST

POST requests are idempotent by (cluster, name). If a storage record with the same cluster and name already exists, the POST updates it instead of returning a conflict error.

Example — list all storage backends for a cluster:

curl -H "Authorization: Token <token>" \
     "http://netbox.example.com/api/plugins/proxbox/storage/?cluster__name=prod-cluster"

Example — filter for enabled shared storage:

curl -H "Authorization: Token <token>" \
     "http://netbox.example.com/api/plugins/proxbox/storage/?enabled=true&shared=true"

Filterable fields: id, cluster, cluster__name, name, storage_type, content, path, nodes, shared, enabled, server, port, format, datastore, pool

Searchable fields (?q=): name, cluster name, path

Sample response:

{
  "id": 1,
  "url": "/api/plugins/proxbox/storage/1/",
  "display": "local-lvm",
  "cluster": {
    "id": 5,
    "url": "/api/virtualization/clusters/5/",
    "display": "prod-cluster",
    "name": "prod-cluster"
  },
  "name": "local-lvm",
  "storage_type": "lvmthin",
  "content": "images,rootdir",
  "path": "",
  "nodes": "",
  "shared": false,
  "enabled": true,
  "server": "",
  "port": null,
  "username": "",
  "export": "",
  "share": "",
  "pool": "data",
  "monhost": "",
  "namespace": "",
  "datastore": "",
  "subdir": "",
  "mountpoint": "",
  "is_mountpoint": false,
  "preallocation": "",
  "format": "",
  "prune_backups": "",
  "max_protected_backups": null,
  "raw_config": {"thinpool": "data", "vgname": "pve"},
  "tags": [],
  "custom_fields": {},
  "created": "2026-01-01T00:00:00Z",
  "last_updated": "2026-04-01T00:00:00Z"
}

Data Model

Field Type Description
cluster nested Cluster NetBox virtualization.Cluster this storage belongs to
name string Storage ID in Proxmox
storage_type string Proxmox storage plugin type (e.g. dir, lvmthin, nfs, cephfs, pbs)
content string Comma-separated content types this storage holds (e.g. images,iso,backup)
path string Filesystem path (for dir type)
nodes string Comma-separated node names that can use this storage (empty = all nodes)
shared boolean Whether the storage is accessible from all nodes simultaneously
enabled boolean Whether the storage is currently enabled
server string Remote server hostname (NFS/CIFS/PBS/Ceph)
port integer (nullable) Remote server port
username string Remote auth username
export string NFS server export path
share string CIFS share name
pool string Ceph/RBD pool name
monhost string Ceph monitor host(s)
namespace string Ceph namespace
datastore string PBS datastore name
subdir string Subdirectory within the storage
mountpoint string Filesystem mount point
is_mountpoint string (nullable) Mountpoint flag string from Proxmox config
preallocation string Disk image preallocation mode
format string Default image format
prune_backups string Backup pruning policy string
max_protected_backups integer (nullable) Maximum number of protected backups
raw_config object Full raw storage configuration as returned by Proxmox