Operations API¶
These two models store Proxmox operational data synced into NetBox: scheduled backup routines and replication jobs.
For common API conventions (authentication, pagination, nested serializers), see API Overview.
Backup Routine¶
A Proxmox backup job (vzdump schedule) synced from the cluster, including its schedule, retention policy, storage targets, and raw configuration.
GET /api/plugins/proxbox/backup-routines/
GET /api/plugins/proxbox/backup-routines/{id}/
POST /api/plugins/proxbox/backup-routines/
PUT /api/plugins/proxbox/backup-routines/{id}/
PATCH /api/plugins/proxbox/backup-routines/{id}/
DELETE /api/plugins/proxbox/backup-routines/{id}/
Example — list all enabled backup routines:
curl -H "Authorization: Token <token>" \
"http://netbox.example.com/api/plugins/proxbox/backup-routines/?enabled=true"
Example — filter by storage backend:
curl -H "Authorization: Token <token>" \
"http://netbox.example.com/api/plugins/proxbox/backup-routines/?storage_id=2"
Example — filter by node and active status:
curl -H "Authorization: Token <token>" \
"http://netbox.example.com/api/plugins/proxbox/backup-routines/?node_id=1&status=active"
Filterable fields: id, endpoint, job_id, enabled, node, storage, status, keep_last, keep_daily, keep_weekly, keep_monthly
Searchable fields (?q=): job_id, comment
Sample response:
{
"id": 1,
"url": "/api/plugins/proxbox/backup-routines/1/",
"display": "job-1 (daily)",
"endpoint": {
"id": 1,
"url": "/api/plugins/proxbox/endpoints/proxmox/1/",
"display": "prod-proxmox (proxmox.example.com)",
"name": "prod-proxmox"
},
"job_id": "job-1",
"enabled": true,
"schedule": "0 2 * * *",
"next_run": "2026-04-02T02:00:00Z",
"node": {
"id": 1,
"url": "/api/plugins/proxbox/nodes/1/",
"display": "pve-node-01",
"name": "pve-node-01",
"node_id": 1,
"online": true
},
"storage": {
"id": 2,
"url": "/api/plugins/proxbox/storage/2/",
"display": "backup-storage",
"cluster": {"id": 5, "name": "prod-cluster"},
"name": "backup-storage"
},
"selection": [100, 101, 102],
"comment": "nightly VM backups",
"status": {"value": "active", "label": "Active"},
"keep_last": null,
"keep_daily": 7,
"keep_weekly": 4,
"keep_monthly": 3,
"keep_yearly": null,
"keep_all": null,
"notes_template": "",
"bwlimit": null,
"zstd": null,
"io_workers": null,
"fleecing": false,
"fleecing_storage": null,
"repeat_missed": false,
"pbs_change_detection_mode": "",
"raw_config": {"compress": "zstd", "mode": "snapshot"},
"tags": [],
"custom_fields": {},
"created": "2026-01-01T00:00:00Z",
"last_updated": "2026-04-01T00:00:00Z"
}
Data Model¶
| Field | Type | Description |
|---|---|---|
endpoint |
nested ProxmoxEndpoint | Proxmox endpoint this routine belongs to |
job_id |
string | Proxmox backup job ID |
enabled |
boolean | Whether the backup job is enabled |
schedule |
string | Cron-style schedule string (or Proxmox schedule syntax) |
next_run |
datetime (nullable) | Next scheduled execution time |
node |
nested ProxmoxNode (nullable) | Node that executes the backup |
storage |
nested ProxmoxStorage (nullable) | Target storage for backup files |
selection |
array | JSON list of VMID integers included in this job |
comment |
string | Free-text job description |
status |
choice | Sync status. Choices: active, stale |
keep_last |
integer (nullable) | Number of most recent backups to retain |
keep_daily |
integer (nullable) | Number of daily backups to retain |
keep_weekly |
integer (nullable) | Number of weekly backups to retain |
keep_monthly |
integer (nullable) | Number of monthly backups to retain |
keep_yearly |
integer (nullable) | Number of yearly backups to retain |
keep_all |
boolean (nullable) | Keep all backups regardless of other retention settings |
notes_template |
string | Template string for backup notes |
bwlimit |
integer (nullable) | Bandwidth limit in KiB/s |
zstd |
integer (nullable) | Zstd compression level |
io_workers |
integer (nullable) | Number of parallel I/O workers |
fleecing |
string | Fleecing options string from Proxmox (empty = disabled) |
fleecing_storage |
nested ProxmoxStorage (nullable) | Temporary fleecing storage target |
repeat_missed |
boolean | Whether to run missed scheduled jobs on next opportunity |
pbs_change_detection_mode |
string | PBS change detection mode (default, legacy, or data) |
raw_config |
object | Full raw backup job configuration from Proxmox |
Replication¶
A Proxmox replication job synced from the cluster, describing scheduled VM replication from one node to another.
GET /api/plugins/proxbox/replications/
GET /api/plugins/proxbox/replications/{id}/
POST /api/plugins/proxbox/replications/
PUT /api/plugins/proxbox/replications/{id}/
PATCH /api/plugins/proxbox/replications/{id}/
DELETE /api/plugins/proxbox/replications/{id}/
Example — list all replication jobs:
curl -H "Authorization: Token <token>" \
http://netbox.example.com/api/plugins/proxbox/replications/
Example — filter active replications for a specific VM:
curl -H "Authorization: Token <token>" \
"http://netbox.example.com/api/plugins/proxbox/replications/?virtual_machine_id=10&status=active"
Example — filter by target node:
curl -H "Authorization: Token <token>" \
"http://netbox.example.com/api/plugins/proxbox/replications/?target=pve-node-02"
Filterable fields: id, endpoint, replication_id, virtual_machine, proxmox_node, guest, target, job_type, schedule, disable, source, jobnum, remove_job, status
Searchable fields (?q=): replication_id, virtual machine name, target, comment, source
Sample response:
{
"id": 1,
"url": "/api/plugins/proxbox/replications/1/",
"display": "100-0 (web-server-01 → pve-node-02)",
"endpoint": {
"id": 1,
"url": "/api/plugins/proxbox/endpoints/proxmox/1/",
"display": "prod-proxmox (proxmox.example.com)",
"name": "prod-proxmox"
},
"replication_id": "100-0",
"virtual_machine": {
"id": 10,
"url": "/api/virtualization/virtual-machines/10/",
"display": "web-server-01",
"name": "web-server-01"
},
"proxmox_node": {
"id": 1,
"url": "/api/plugins/proxbox/nodes/1/",
"display": "pve-node-01",
"name": "pve-node-01",
"node_id": 1,
"online": true
},
"guest": 100,
"target": "pve-node-02",
"job_type": {"value": "local", "label": "Local"},
"schedule": "*/15",
"rate": null,
"comment": "HA replication",
"disable": false,
"source": "pve-node-01",
"jobnum": 0,
"remove_job": null,
"status": {"value": "active", "label": "Active"},
"raw_config": {"type": "local"},
"tags": [],
"custom_fields": {},
"created": "2026-01-01T00:00:00Z",
"last_updated": "2026-04-01T00:00:00Z"
}
Data Model¶
| Field | Type | Description |
|---|---|---|
endpoint |
nested ProxmoxEndpoint (nullable) | Proxmox endpoint this replication belongs to |
replication_id |
string | Proxmox replication job ID (e.g. 100-0) |
virtual_machine |
nested VirtualMachine | Replicated virtual machine |
proxmox_node |
nested ProxmoxNode (nullable) | Source node where the VM currently runs |
guest |
integer | Proxmox VM ID (VMID) of the guest |
target |
string | Target node name for replication |
job_type |
choice | Replication job type. Choices: local |
schedule |
string | Cron-style schedule string |
rate |
float (nullable) | Maximum replication bandwidth in MiB/s |
comment |
string | Free-text job description |
disable |
boolean | Whether the replication job is disabled |
source |
string | Source node name |
jobnum |
integer | Proxmox job number (sub-ID within the VM) |
remove_job |
choice (nullable) | Whether Proxmox should remove the job. Choices: local, full |
status |
choice | Sync status. Choices: active, stale |
raw_config |
object | Full raw replication configuration from Proxmox |