API Reference
The HTTP endpoints integrators use to read state and trigger safe actions on ProxMenux Monitor — Home Assistant sensors, Homepage cards, Grafana dashboards, Prometheus scrapes, n8n flows and custom scripts. Every category, plus a complete list of Prometheus metrics, with curl examples.
What this page is for
Authentication
Every endpoint marked "authenticated" expects a JWT bearer token in the request header:
curl -H "Authorization: Bearer <token>" http://<host>:8008/api/system | jqTwo ways to obtain the token:
- API tokens (recommended for integrations). Long-lived tokens minted from Settings → Security → API Tokens in the dashboard. Each token is named, can be revoked individually, and is what you should hand to Home Assistant / Homepage / Grafana / n8n.
- Login flow (short-lived JWT).
POST /api/auth/loginwith a username, password and TOTP token if 2FA is enabled. The returned JWT is short-lived and refreshed by the dashboard automatically; useful for ad-hoc scripts that authenticate as a human user.
The auth flow, password policy, 2FA setup, audit log and TLS configuration all live in Access & Authentication.
| Endpoint | Method | Use |
|---|---|---|
| /api/auth/login | POST | Body: {"username","password","totp_token?"}. Returns a short-lived JWT. |
| /api/auth/api-tokens | GET | List API tokens (metadata only — names, prefixes, dates; never the actual secret). |
| /api/auth/api-tokens | POST | Mint a new long-lived API token. Body: {"name":"<label>"}. The token value is returned once and cannot be retrieved again. |
| /api/auth/api-tokens/<id> | DELETE | Revoke a specific API token by its ID. |
Conventions
- All requests and responses are JSON unless explicitly noted (log download is plain text,
/api/prometheusis text/plain in the OpenMetrics format, task log is plain text). - Successful mutating endpoints return
{"success": true, ...}. Error responses use a non-2xx HTTP status with{"success": false, "error": "<reason>"}. - List endpoints accept optional
limit,offset,sinceand category-specific filters via query string. - Time fields are returned as Unix epoch seconds or ISO-8601 with explicit timezone, never as locale strings.
System & hardware
| Endpoint | Method | Use |
|---|---|---|
| /api/system | GET | CPU, memory, swap, uptime, load — current snapshot. |
| /api/info | GET | Static host info: hostname, kernel, PVE version, CPU model, distro. |
| /api/system-info | GET | Extended system snapshot used by the dashboard header (overall metrics + boot time). |
| /api/hardware | GET | Detailed hardware inventory — PCI devices, GPUs, sensors map. |
| /api/hardware/live | GET | Live values for sensors that change second to second. |
| /api/temperature/history | GET | Time series of CPU / package temperatures. |
| /api/gpu/<slot>/realtime | GET | NVIDIA / Intel / AMD GPU live metrics by PCI slot. |
Health Monitor
| Endpoint | Method | Use |
|---|---|---|
| /api/health | GET | Small health probe — returns JSON with status, timestamp, version. Suitable for Uptime Kuma keyword checks; the receiver must send the bearer header. |
| /api/health/status | GET | Overall health verdict — single severity + summary string. |
| /api/health/details | GET | All ten categories with per-category statuses and the structured payload that produced each. |
| /api/health/full | GET | Full snapshot — categories + active errors + dismissed list + custom suppression settings. Backs the modal in one round-trip; uses a 6-min background cache for instant response. |
| /api/health/active-errors | GET | Active list, filterable by ?category=<name>. |
| /api/health/dismissed | GET | Dismissed list with remaining suppression hours. |
| /api/health/settings | GET | Per-category Suppression Duration values currently configured. |
| /api/health/remote-storages | GET | Inventory of Proxmox-defined remote storages, with online state. |
| /api/health/interfaces | GET | Inventory of network interfaces with type (bridge / bond / physical), IP and link speed. |
| /api/health/acknowledge | POST | Body: {"error_key":"smart_sdh"}. Dismiss an alert with the category's configured Suppression Duration. |
| /api/health/cleanup-orphans | POST | Manual cleanup of errors whose underlying device or VM is gone. Idempotent. |
Response shapes and the semantics of the categories live in Health Monitor.
Storage
| Endpoint | Method | Use |
|---|---|---|
| /api/storage | GET | All disks visible to the host (block devices, ZFS pools, LVM). |
| /api/storage/summary | GET | Compact summary used by dashboard cards. |
| /api/proxmox-storage | GET | Proxmox-defined storages from /etc/pve/storage.cfg with online state and free space. |
| /api/storage/observations | GET | Permanent disk observation history — SMART warnings, I/O errors, ZFS pool events, kept across error auto-resolves. |
| /api/storage/smart/<disk> | GET | Current SMART attributes for one disk. |
| /api/storage/smart/<disk>/latest | GET | Most recent SMART self-test for the disk. |
| /api/storage/smart/<disk>/history | GET | List of stored SMART reports for the disk. |
| /api/storage/smart/<disk>/history/<file> | GET | Read a specific stored SMART report. |
| /api/storage/smart/<disk>/test | POST | Trigger a SMART self-test. Body: {"type":"short"|"long"}. |
| /api/storage/smart/schedules | GET | List the currently scheduled SMART tests. |
| /api/storage/smart/tools | GET | Detect whether smartctl and friends are installed. |
Network
| Endpoint | Method | Use |
|---|---|---|
| /api/network | GET | All interfaces with link state and addresses. |
| /api/network/summary | GET | Compact view used by the dashboard. |
| /api/network/<iface>/metrics | GET | Per-interface RX / TX, error counters, RRD time series. |
| /api/network/latency/current | GET | Latest gateway latency probe. |
| /api/network/latency/history | GET | Time series of gateway latency. |
VMs & containers
| Endpoint | Method | Use |
|---|---|---|
| /api/vms | GET | List of all VMs and CTs with status, vmid, name. |
| /api/vms/<vmid> | GET | Full detail for one guest (config, network, disks). |
| /api/vms/<vmid>/metrics | GET | CPU / memory / disk I/O time series for one guest (RRD). |
| /api/vms/<vmid>/logs | GET | Recent task logs scoped to that guest. |
| /api/vms/<vmid>/backups | GET | List backups currently held for this guest. |
| /api/vms/<vmid>/control | POST | Body: {"action":"start|stop|reboot|shutdown"}. Power-cycle a guest. |
| /api/vms/<vmid>/backup | POST | Trigger vzdump for that guest. Body chooses storage and mode (snapshot / suspend / stop). |
| /api/vms/<vmid>/config | PUT | Update the description (notes) field of a VM / CT. Other config keys are not modifiable from this endpoint. |
| /api/node/metrics | GET | Aggregated node-level metrics (RRD). |
Backups
| Endpoint | Method | Use |
|---|---|---|
| /api/backups | GET | Cluster-wide list of backups. |
| /api/backup-storages | GET | Storages flagged as backup targets, with free space. |
Logs, tasks, events
| Endpoint | Method | Use |
|---|---|---|
| /api/logs | GET | Filtered journal entries. Query: ?level=&service=&limit=. |
| /api/logs/download | GET | Plain-text dump of the filtered range. |
| /api/events | GET | Internal event stream — the same one that feeds notifications. |
| /api/task-log/<upid> | GET | Plain-text complete log for one Proxmox task by UPID. |
Notifications & AI
The dispatch pipeline, channel walk-throughs and AI rewriter setup live in Notifications and AI Assistant.
| Endpoint | Method | Use |
|---|---|---|
| /api/notifications | GET | Recent notifications surfaced in the dashboard. |
| /api/notifications/download | GET | Export notifications as text. |
| /api/notifications/status | GET | Dispatcher status — whether the background thread is running, queue depth, last send. |
| /api/notifications/settings | GET | Read the full notification config (channels, per-event toggles, AI rewriter, Display Name). |
| /api/notifications/history | GET | Dispatch history. Query: ?limit=&offset=&severity=&channel=. |
| /api/notifications/history | DELETE | Wipe the dispatch history table. |
| /api/notifications/test | POST | Send a test notification to one channel. Body: {"channel":"telegram"}. |
| /api/notifications/send | POST | Emit a custom event. Body: {"event_type":"custom","severity":"WARNING","title":"...","body":"...","data":{'}'}. |
| /api/notifications/test-ai | POST | Test the AI provider connection. Body: {"provider","api_key","model","ollama_url?"}. |
| /api/notifications/provider-models | POST | List available models for the selected AI provider. |
| /api/notifications/proxmox/setup-webhook | POST | Register the Monitor as a webhook target in /etc/pve/notifications.cfg. |
| /api/notifications/proxmox/cleanup-webhook | POST | Remove the Monitor target from PVE's notification config. |
| /api/notifications/proxmox/read-cfg | GET | Read PVE's current notifications.cfg as PVE sees it. |
Security (read)
| Endpoint | Method | Use |
|---|---|---|
| /api/security/firewall/status | GET | PVE firewall state and active rules. |
| /api/security/fail2ban/details | GET | Fail2Ban jail status — only useful when the optional jail is installed. |
| /api/security/fail2ban/activity | GET | Recent Fail2Ban events (bans, unbans, jail starts). |
| /api/security/lynis/status | GET | Lynis last-run status (whether installed, last scan timestamp). |
| /api/security/lynis/report | GET | Latest Lynis audit report (warnings, suggestions, hardening index). |
| /api/security/tools | GET | Detect which optional security tools (Fail2Ban, Lynis) are installed. |
ProxMenux integration
| Endpoint | Method | Use |
|---|---|---|
| /api/proxmenux/update-status | GET | Whether ProxMenux Monitor has an update available, current and latest version. |
| /api/proxmenux/installed-tools | GET | List of every ProxMenux post-install optimization currently registered on the host (from /usr/local/share/proxmenux/installed_tools.json). |
| /api/proxmenux/tool-source/<key> | GET | Source code of a specific post-install function — the exact bash that was applied. |
Prometheus metrics
ProxMenux Monitor exposes a Prometheus-format scrape endpoint at GET /api/prometheus (authenticated) returning OpenMetrics-format text. Every metric is labelled with node="<hostname>" and carries an explicit timestamp so it ingests cleanly into Prometheus, VictoriaMetrics, Mimir or any compatible TSDB.
Exported metrics
| Group | Metric | Description |
|---|---|---|
| System | proxmox_cpu_usage | CPU usage percentage (gauge). |
| proxmox_memory_total_bytes | Total physical memory in bytes. | |
| proxmox_memory_used_bytes | Used memory in bytes. | |
| proxmox_memory_usage_percent | Memory usage percentage. | |
| proxmox_load_average | System load average. Label period="1m" | "5m" | "15m". | |
| Uptime | proxmox_uptime_seconds | Seconds since last boot. |
| Hardware | proxmox_cpu_temperature_celsius | CPU package temperature. |
| proxmox_disk_temperature_celsius | Per-disk temperature. Label device. | |
| proxmox_fan_speed_rpm | Fan speeds. Label fan. | |
| Disk space | proxmox_disk_total_bytes | Total disk space per mount. Label mountpoint. |
| proxmox_disk_used_bytes | Used disk space per mount. | |
| proxmox_disk_usage_percent | Disk usage percentage per mount. | |
| Network | proxmox_network_bytes_sent_total | Total bytes sent (counter). |
| proxmox_network_bytes_received_total | Total bytes received (counter). | |
| proxmox_interface_bytes_sent_total | Per-interface bytes sent. Label interface. | |
| proxmox_interface_bytes_received_total | Per-interface bytes received. | |
| VMs / CTs | proxmox_vms_total | Total number of VMs and LXCs. |
| proxmox_vms_running | Number of running guests. | |
| proxmox_vms_stopped | Number of stopped guests. | |
| proxmox_vm_status | Per-VM/CT status (1 = running, 0 = stopped). Labels vmid, name, type. | |
| proxmox_vm_cpu_usage | Per-VM/CT CPU usage. Same labels. | |
| proxmox_vm_memory_used_bytes / _max_bytes | Per-VM/CT memory used and configured maximum. | |
| GPU | proxmox_gpu_temperature_celsius | GPU temperature. Labels slot, vendor. |
| proxmox_gpu_utilization_percent | GPU utilization percentage. | |
| proxmox_gpu_memory_total_bytes | GPU memory total. | |
| proxmox_gpu_power_draw_watts | GPU power draw in watts. | |
| proxmox_gpu_clock_speed_mhz | GPU core clock speed. | |
| proxmox_gpu_memory_clock_mhz | GPU memory clock speed. | |
| UPS | proxmox_ups_battery_charge_percent | Battery charge percentage. |
| proxmox_ups_load_percent | Current load on the UPS. | |
| proxmox_ups_runtime_seconds | Estimated runtime on battery. | |
| proxmox_ups_input_voltage_volts | Input voltage. |
Prometheus scrape config
The endpoint requires authentication. Pass the API token as a bearer header in your Prometheus scrape config:
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: 'proxmenux'
metrics_path: /api/prometheus
scheme: https # or http if TLS isn't enabled in ProxMenux
scrape_interval: 30s
authorization:
type: Bearer
credentials: '<your-api-token>'
static_configs:
- targets:
- 'pve01.lan:8008'
- 'pve02.lan:8008'
- 'pve03.lan:8008'Per-host scrape
node label on every series lets you distinguish them in Grafana queries (proxmox_vms_running{node="pve01"}).Putting it together
For end-to-end recipes wiring these endpoints into Home Assistant sensors, Homepage cards, Grafana dashboards, n8n flows and other tools, see the dedicated Integrations page — it walks through the typical setup for each platform with copy-paste configuration. This page stays focused on the catalogue itself.
Where to next
- Access & Authentication — minting tokens, the audit log, the optional Fail2Ban jail, TLS configuration.
- Notifications — what each event type carries in
datawhen you call/api/notifications/send. - AI Assistant — how
/api/notifications/test-aiand/api/notifications/provider-modelsare wired. - Health Monitor — the response shape of
/api/health/*and the semantics of the ten categories.