API Reference

ProxMenux Monitor~22 min

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

This page lists the endpoints we expect external integrations to use — read-only data export across every part of the Monitor, plus the small set of write operations that automations legitimately need (trigger a backup, send a custom notification, acknowledge an alert). The whole API runs from the same Flask process that serves the dashboard UI on TCP 8008; bind address and TLS are configured in Access & Authentication.

Authentication

Every endpoint marked "authenticated" expects a JWT bearer token in the request header:

curl -H "Authorization: Bearer <token>" http://<host>:8008/api/system | jq

Two 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/login with 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.

EndpointMethodUse
/api/auth/loginPOSTBody: {"username","password","totp_token?"}. Returns a short-lived JWT.
/api/auth/api-tokensGETList API tokens (metadata only — names, prefixes, dates; never the actual secret).
/api/auth/api-tokensPOSTMint 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>DELETERevoke a specific API token by its ID.

Conventions

  • All requests and responses are JSON unless explicitly noted (log download is plain text, /api/prometheus is 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, since and 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

EndpointMethodUse
/api/systemGETCPU, memory, swap, uptime, load — current snapshot.
/api/infoGETStatic host info: hostname, kernel, PVE version, CPU model, distro.
/api/system-infoGETExtended system snapshot used by the dashboard header (overall metrics + boot time).
/api/hardwareGETDetailed hardware inventory — PCI devices, GPUs, sensors map.
/api/hardware/liveGETLive values for sensors that change second to second.
/api/temperature/historyGETTime series of CPU / package temperatures.
/api/gpu/<slot>/realtimeGETNVIDIA / Intel / AMD GPU live metrics by PCI slot.

Health Monitor

EndpointMethodUse
/api/healthGETSmall health probe — returns JSON with status, timestamp, version. Suitable for Uptime Kuma keyword checks; the receiver must send the bearer header.
/api/health/statusGETOverall health verdict — single severity + summary string.
/api/health/detailsGETAll ten categories with per-category statuses and the structured payload that produced each.
/api/health/fullGETFull 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-errorsGETActive list, filterable by ?category=&lt;name&gt;.
/api/health/dismissedGETDismissed list with remaining suppression hours.
/api/health/settingsGETPer-category Suppression Duration values currently configured.
/api/health/remote-storagesGETInventory of Proxmox-defined remote storages, with online state.
/api/health/interfacesGETInventory of network interfaces with type (bridge / bond / physical), IP and link speed.
/api/health/acknowledgePOSTBody: {"error_key":"smart_sdh"}. Dismiss an alert with the category's configured Suppression Duration.
/api/health/cleanup-orphansPOSTManual cleanup of errors whose underlying device or VM is gone. Idempotent.

Response shapes and the semantics of the categories live in Health Monitor.

Storage

EndpointMethodUse
/api/storageGETAll disks visible to the host (block devices, ZFS pools, LVM).
/api/storage/summaryGETCompact summary used by dashboard cards.
/api/proxmox-storageGETProxmox-defined storages from /etc/pve/storage.cfg with online state and free space.
/api/storage/observationsGETPermanent disk observation history — SMART warnings, I/O errors, ZFS pool events, kept across error auto-resolves.
/api/storage/smart/<disk>GETCurrent SMART attributes for one disk.
/api/storage/smart/<disk>/latestGETMost recent SMART self-test for the disk.
/api/storage/smart/<disk>/historyGETList of stored SMART reports for the disk.
/api/storage/smart/<disk>/history/<file>GETRead a specific stored SMART report.
/api/storage/smart/<disk>/testPOSTTrigger a SMART self-test. Body: {"type":"short"|"long"}.
/api/storage/smart/schedulesGETList the currently scheduled SMART tests.
/api/storage/smart/toolsGETDetect whether smartctl and friends are installed.

Network

EndpointMethodUse
/api/networkGETAll interfaces with link state and addresses.
/api/network/summaryGETCompact view used by the dashboard.
/api/network/<iface>/metricsGETPer-interface RX / TX, error counters, RRD time series.
/api/network/latency/currentGETLatest gateway latency probe.
/api/network/latency/historyGETTime series of gateway latency.

VMs & containers

EndpointMethodUse
/api/vmsGETList of all VMs and CTs with status, vmid, name.
/api/vms/<vmid>GETFull detail for one guest (config, network, disks).
/api/vms/<vmid>/metricsGETCPU / memory / disk I/O time series for one guest (RRD).
/api/vms/<vmid>/logsGETRecent task logs scoped to that guest.
/api/vms/<vmid>/backupsGETList backups currently held for this guest.
/api/vms/<vmid>/controlPOSTBody: {"action":"start|stop|reboot|shutdown"}. Power-cycle a guest.
/api/vms/<vmid>/backupPOSTTrigger vzdump for that guest. Body chooses storage and mode (snapshot / suspend / stop).
/api/vms/<vmid>/configPUTUpdate the description (notes) field of a VM / CT. Other config keys are not modifiable from this endpoint.
/api/node/metricsGETAggregated node-level metrics (RRD).

Backups

EndpointMethodUse
/api/backupsGETCluster-wide list of backups.
/api/backup-storagesGETStorages flagged as backup targets, with free space.

Logs, tasks, events

EndpointMethodUse
/api/logsGETFiltered journal entries. Query: ?level=&service=&limit=.
/api/logs/downloadGETPlain-text dump of the filtered range.
/api/eventsGETInternal event stream — the same one that feeds notifications.
/api/task-log/<upid>GETPlain-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.

EndpointMethodUse
/api/notificationsGETRecent notifications surfaced in the dashboard.
/api/notifications/downloadGETExport notifications as text.
/api/notifications/statusGETDispatcher status — whether the background thread is running, queue depth, last send.
/api/notifications/settingsGETRead the full notification config (channels, per-event toggles, AI rewriter, Display Name).
/api/notifications/historyGETDispatch history. Query: ?limit=&offset=&severity=&channel=.
/api/notifications/historyDELETEWipe the dispatch history table.
/api/notifications/testPOSTSend a test notification to one channel. Body: {"channel":"telegram"}.
/api/notifications/sendPOSTEmit a custom event. Body: {"event_type":"custom","severity":"WARNING","title":"...","body":"...","data":{'}'}.
/api/notifications/test-aiPOSTTest the AI provider connection. Body: {"provider","api_key","model","ollama_url?"}.
/api/notifications/provider-modelsPOSTList available models for the selected AI provider.
/api/notifications/proxmox/setup-webhookPOSTRegister the Monitor as a webhook target in /etc/pve/notifications.cfg.
/api/notifications/proxmox/cleanup-webhookPOSTRemove the Monitor target from PVE's notification config.
/api/notifications/proxmox/read-cfgGETRead PVE's current notifications.cfg as PVE sees it.

Security (read)

EndpointMethodUse
/api/security/firewall/statusGETPVE firewall state and active rules.
/api/security/fail2ban/detailsGETFail2Ban jail status — only useful when the optional jail is installed.
/api/security/fail2ban/activityGETRecent Fail2Ban events (bans, unbans, jail starts).
/api/security/lynis/statusGETLynis last-run status (whether installed, last scan timestamp).
/api/security/lynis/reportGETLatest Lynis audit report (warnings, suggestions, hardening index).
/api/security/toolsGETDetect which optional security tools (Fail2Ban, Lynis) are installed.

ProxMenux integration

EndpointMethodUse
/api/proxmenux/update-statusGETWhether ProxMenux Monitor has an update available, current and latest version.
/api/proxmenux/installed-toolsGETList of every ProxMenux post-install optimization currently registered on the host (from /usr/local/share/proxmenux/installed_tools.json).
/api/proxmenux/tool-source/<key>GETSource 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="&lt;hostname&gt;" and carries an explicit timestamp so it ingests cleanly into Prometheus, VictoriaMetrics, Mimir or any compatible TSDB.

Exported metrics

GroupMetricDescription
Systemproxmox_cpu_usageCPU usage percentage (gauge).
proxmox_memory_total_bytesTotal physical memory in bytes.
proxmox_memory_used_bytesUsed memory in bytes.
proxmox_memory_usage_percentMemory usage percentage.
proxmox_load_averageSystem load average. Label period="1m" | "5m" | "15m".
Uptimeproxmox_uptime_secondsSeconds since last boot.
Hardwareproxmox_cpu_temperature_celsiusCPU package temperature.
proxmox_disk_temperature_celsiusPer-disk temperature. Label device.
proxmox_fan_speed_rpmFan speeds. Label fan.
Disk spaceproxmox_disk_total_bytesTotal disk space per mount. Label mountpoint.
proxmox_disk_used_bytesUsed disk space per mount.
proxmox_disk_usage_percentDisk usage percentage per mount.
Networkproxmox_network_bytes_sent_totalTotal bytes sent (counter).
proxmox_network_bytes_received_totalTotal bytes received (counter).
proxmox_interface_bytes_sent_totalPer-interface bytes sent. Label interface.
proxmox_interface_bytes_received_totalPer-interface bytes received.
VMs / CTsproxmox_vms_totalTotal number of VMs and LXCs.
proxmox_vms_runningNumber of running guests.
proxmox_vms_stoppedNumber of stopped guests.
proxmox_vm_statusPer-VM/CT status (1 = running, 0 = stopped). Labels vmid, name, type.
proxmox_vm_cpu_usagePer-VM/CT CPU usage. Same labels.
proxmox_vm_memory_used_bytes / _max_bytesPer-VM/CT memory used and configured maximum.
GPUproxmox_gpu_temperature_celsiusGPU temperature. Labels slot, vendor.
proxmox_gpu_utilization_percentGPU utilization percentage.
proxmox_gpu_memory_total_bytesGPU memory total.
proxmox_gpu_power_draw_wattsGPU power draw in watts.
proxmox_gpu_clock_speed_mhzGPU core clock speed.
proxmox_gpu_memory_clock_mhzGPU memory clock speed.
UPSproxmox_ups_battery_charge_percentBattery charge percentage.
proxmox_ups_load_percentCurrent load on the UPS.
proxmox_ups_runtime_secondsEstimated runtime on battery.
proxmox_ups_input_voltage_voltsInput 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

Each ProxMenux Monitor instance exports metrics for the host it runs on. In a cluster, point Prometheus at every node — the 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 data when you call /api/notifications/send.
  • AI Assistant — how /api/notifications/test-ai and /api/notifications/provider-models are wired.
  • Health Monitor — the response shape of /api/health/* and the semantics of the ten categories.