diff --git a/web/messages/en/docs/monitor/access-auth.json b/web/messages/en/docs/monitor/access-auth.json
index 1787f106..a610df40 100644
--- a/web/messages/en/docs/monitor/access-auth.json
+++ b/web/messages/en/docs/monitor/access-auth.json
@@ -284,7 +284,7 @@
"heading": "API tokens (long-lived)",
"intro": "Browser sessions expire after 24 hours. For unattended integrations (Homepage widgets, Home Assistant sensors, Grafana scrapers, Uptime Kuma probes…) you generate a separate API token that lives 365 days. The token is a JWT signed with the same secret as the session token, but its token_name claim makes it easy to track and revoke individually.",
"imageAlt": "API tokens panel showing the token list with name, prefix, created date and expiry",
- "imageCaption": "The API tokens list under Settings — name, prefix (last 4 chars are shown for identification), created and expiry dates, revoke action.",
+ "imageCaption": "The API tokens list under Admin → Security — name, prefix (last 4 chars are shown for identification), created and expiry dates, revoke action.",
"generateTitle": "Generate a token",
"generateIntro": "From the dashboard:",
"generateSteps": [
@@ -310,7 +310,7 @@
"intro": "Two paths to TLS:",
"items": [
"Reverse proxy (recommended). Terminate TLS on Nginx / Caddy / Traefik and forward HTTP on port 8008 to the Flask process. Snippets below.",
- "Direct HTTPS in the AppImage. Configure a certificate with POST /api/ssl/configure (UI: Settings → SSL). The HTTPS path uses gevent.pywsgi with its standard handler; flask-sock handles WebSocket upgrades for WSS. Certificate paths are stored in the SSL configuration."
+ "Direct HTTPS in the AppImage. Configure a certificate with POST /api/ssl/configure (UI: Admin → Security → SSL / HTTPS). The HTTPS path uses gevent.pywsgi with its standard handler; flask-sock handles WebSocket upgrades for WSS. Certificate paths are stored in the SSL configuration."
],
"calloutTitle": "Direct HTTPS limitations",
"calloutBody": "The Monitor can use a Proxmox-managed certificate or custom certificate files. It does not issue ACME certificates itself. For automatic issuance and renewal, use Proxmox ACME or a reverse proxy such as Caddy, Traefik or Nginx, and ensure renewed certificates are loaded."
diff --git a/web/messages/en/docs/monitor/dashboard/security.json b/web/messages/en/docs/monitor/dashboard/security.json
index 36ac8340..c6873cb6 100644
--- a/web/messages/en/docs/monitor/dashboard/security.json
+++ b/web/messages/en/docs/monitor/dashboard/security.json
@@ -183,7 +183,7 @@
},
{
"card": "SSL / HTTPS",
- "endpoint": "/api/auth/ssl/*",
+ "endpoint": "/api/ssl/*",
"source": "openssl x509 on /etc/pve/local/pve-ssl.pem + /etc/proxmenux/ssl_config.json."
},
{
diff --git a/web/messages/en/docs/monitor/dashboard/settings.json b/web/messages/en/docs/monitor/dashboard/settings.json
index d7d5107e..9d10a0ce 100644
--- a/web/messages/en/docs/monitor/dashboard/settings.json
+++ b/web/messages/en/docs/monitor/dashboard/settings.json
@@ -304,7 +304,7 @@
},
{
"card": "Storage / interface exclusions",
- "endpoint": "/api/storage/exclusions, /api/network/exclusions",
+ "endpoint": "/api/health/storage-exclusions, /api/health/interface-exclusions",
"source": "SQLite tables excluded_storages and excluded_interfaces."
},
{
diff --git a/web/messages/en/docs/monitor/index.json b/web/messages/en/docs/monitor/index.json
index 2613e500..a2635a76 100644
--- a/web/messages/en/docs/monitor/index.json
+++ b/web/messages/en/docs/monitor/index.json
@@ -113,7 +113,7 @@
"api": {
"heading": "REST API and integrations",
"intro": "The dashboard’s REST endpoints expose monitoring data as JSON over HTTP/HTTPS for Homepage widgets, Home Assistant sensors, Uptime Kuma probes and custom scripts. Grafana can use the separate Prometheus text exporter at /api/prometheus. Requests can be made with curl.",
- "tokens": "Long-lived API tokens (365 days) are generated from Settings → API Access Tokens or via POST /api/auth/generate-api-token.",
+ "tokens": "Long-lived API tokens (365 days) are generated from Admin → Security → API Tokens or via POST /api/auth/generate-api-token.",
"bearer": "Send tokens as Authorization: Bearer …. /api/health also expects the bearer header, so uptime probes need a read_only token. Routes under /api/auth/* include both public setup/login/status routes and protected account/token management routes; they are not all anonymous.",
"catalog": "The full endpoint catalog, token rotation guidance and security best-practices live in API Reference; ready-made examples for Homepage, Home Assistant, Grafana, Uptime Kuma and a generic cURL pattern are in Integrations."
},
diff --git a/web/messages/en/docs/monitor/integrations.json b/web/messages/en/docs/monitor/integrations.json
index d0b5a0bd..0cebb721 100644
--- a/web/messages/en/docs/monitor/integrations.json
+++ b/web/messages/en/docs/monitor/integrations.json
@@ -20,13 +20,13 @@
"heading": "Authentication: the one thing every recipe needs",
"intro": "Most endpoints used by these integrations are authenticated. You have two ways to satisfy that requirement.",
"optAtitle": "Option A — API token (recommended for integrations)",
- "optAbody1": "Open the dashboard and go to Settings → Security → API Tokens. Click Generate token, give it a name (e.g. homepage, home-assistant, prometheus), and copy the token — it's shown once. Long-lived (one-year expiry by default), individually revocable, and what you should be using for any non-browser client.",
+ "optAbody1": "Open the dashboard and go to Admin → Security → API Tokens. Click Generate token, give it a name (e.g. homepage, home-assistant, prometheus), and copy the token — it's shown once. Long-lived (one-year expiry by default), individually revocable, and what you should be using for any non-browser client.",
"optAbody2": "From that point every request is just:",
"optBtitle": "Option B — login flow (username + password)",
"optBbody": "Useful for scripts that authenticate as a human user. The returned token is short-lived; most integrations should prefer Option A.",
"outro": "The TOTP field is only required when 2FA is enabled on the account. Token rotation, revocation, password policy and the audit log live in Access & Authentication.",
"httpsTitle": "Using HTTPS instead of HTTP",
- "httpsIntro": "Every recipe below uses http:// in the URLs to keep the examples short. If you've enabled TLS on the Monitor (Settings → Security → SSL/HTTPS), swap http:// for https:// in every URL — that's the only change. Two notes specific to certain tools:",
+ "httpsIntro": "Every recipe below uses http:// in the URLs to keep the examples short. If you've enabled TLS on the Monitor (Admin → Security → SSL / HTTPS), swap http:// for https:// in every URL — that's the only change. Two notes specific to certain tools:",
"httpsItems": [
"Self-signed certificates. Home Assistant's rest: integration verifies TLS by default. If the Monitor is using its own self-signed cert, add verify_ssl: false to each REST block (alongside scan_interval:), or import the Monitor's CA into HA's trust store. Same for any tool that refuses untrusted certs.",
"Prometheus already has scheme: https ready in the scrape config below; uncomment / leave it as https if TLS is enabled on the Monitor."
@@ -43,7 +43,7 @@
"basicTitle": "Basic widget — no authentication",
"basicIntro": "Use this when ProxMenux Monitor is on a trusted network and you haven't enabled authentication on the Monitor side yet. The simplest possible services.yaml entry:",
"authedTitle": "Authenticated widget",
- "authedIntro": "Generate an API token in Settings → Security → API Tokens on the Monitor, copy it, and paste it into the Authorization header below — replace the example token shown after Bearer with the one you just copied:",
+ "authedIntro": "Generate an API token in Admin → Security → API Tokens on the Monitor, copy it, and paste it into the Authorization header below — replace the example token shown after Bearer with the one you just copied:",
"authedOutro": "Restart Homepage and the card lights up with live values. Reuse the same token across all Homepage widgets pointing at the same ProxMenux Monitor host.",
"multiTitle": "Multi-widget setup — system, storage, network",
"multiIntro": "For a richer view, render three separate cards backed by different endpoints — one for system metrics, one for storage, one for network. Use the same token in every card; it's the same Monitor instance.",
diff --git a/web/messages/en/docs/security/ssl-letsencrypt.json b/web/messages/en/docs/security/ssl-letsencrypt.json
index b5a65563..03be0a63 100644
--- a/web/messages/en/docs/security/ssl-letsencrypt.json
+++ b/web/messages/en/docs/security/ssl-letsencrypt.json
@@ -12,13 +12,13 @@
},
"intro": {
"title": "What this page covers",
- "body": "How to switch the Monitor from HTTP to HTTPS in the Settings → Security panel, what each certificate source actually points at on disk, how the Proxmox option behaves when the host has a Let's Encrypt cert, and how to set custom paths if you manage certs outside Proxmox."
+ "body": "How to switch the Monitor from HTTP to HTTPS in the Admin → Security panel, what each certificate source actually points at on disk, how the Proxmox option behaves when the host has a Let's Encrypt cert, and how to set custom paths if you manage certs outside Proxmox."
},
"wheresetting": {
"heading": "Where the setting lives",
- "body": "Open the Monitor and go to Settings → Security → HTTPS / SSL. The panel shows the current state (HTTP or HTTPS), and on a host without HTTPS yet it lists the certificate sources the Monitor was able to detect.",
- "imageAlt": "Settings → Security → HTTPS / SSL panel in the Monitor showing the HTTPS-off state, the auto-detected Proxmox certificate (subject, issuer, expiry) and the Use Custom Certificate option",
- "caption": "Settings → Security → HTTPS / SSL panel before activation. The Monitor surfaces the cert Proxmox itself is using and offers it as a one-click source."
+ "body": "Open the Monitor and go to Admin → Security → SSL / HTTPS. The panel shows the current state (HTTP or HTTPS), and on a host without HTTPS yet it lists the certificate sources the Monitor was able to detect.",
+ "imageAlt": "Admin → Security → SSL / HTTPS panel in the Monitor showing the HTTPS-off state, the auto-detected Proxmox certificate (subject, issuer, expiry) and the Use Custom Certificate option",
+ "caption": "Admin → Security → SSL / HTTPS panel before activation. The Monitor surfaces the cert Proxmox itself is using and offers it as a one-click source."
},
"twoways": {
"heading": "Two ways to enable HTTPS",
@@ -117,7 +117,7 @@
},
"switchToHttps": {
"heading": "Switch the Monitor to HTTPS",
- "bodyRich": "Once /etc/pve/local/pveproxy-ssl.pem is signed by Let's Encrypt, the Monitor side is one click: open Settings → Security → HTTPS / SSL, confirm the issuer shown in the detected-certificate panel reads Let's Encrypt (and not the local Proxmox CA), and click Use Proxmox Certificate. The Monitor service restarts and the next browser load is HTTPS on port 8008 — no certificate warning, since the chain is publicly trusted. Later Proxmox ACME renewals are validated and selected during the next new TLS connection; there is no recurring certificate poller or renewal-time service restart. Update certificate remains available in Security as an explicit diagnostic and recovery action."
+ "bodyRich": "Once /etc/pve/local/pveproxy-ssl.pem is signed by Let's Encrypt, the Monitor side is one click: open Admin → Security → SSL / HTTPS, confirm the issuer shown in the detected-certificate panel reads Let's Encrypt (and not the local Proxmox CA), and click Use Proxmox Certificate. The Monitor service restarts and the next browser load is HTTPS on port 8008 — no certificate warning, since the chain is publicly trusted. Later Proxmox ACME renewals are validated and selected during the next new TLS connection; there is no recurring certificate poller or renewal-time service restart. Update certificate remains available in Security as an explicit diagnostic and recovery action."
},
"custom": {
"heading": "Custom certificate — when to use it",