2026-05-31 12:41:10 +02:00
{
"meta" : {
"title" : "API de Proxmox Monitor — Referencia de integración | ProxMenux" ,
2026-10-18 17:16:51 +02:00
"description" : "Endpoints HTTP de ProxMenux Monitor para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios. Consulta el estado y ejecuta operaciones documentadas: control de VM, inicio de backups, notificaciones y confirmación de alertas." ,
2026-05-31 12:41:10 +02:00
"ogTitle" : "API de Proxmox Monitor — Referencia de integración" ,
2026-10-17 15:08:53 +02:00
"ogDescription" : "Endpoints de ProxMenux Monitor para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios." ,
2026-05-31 12:41:10 +02:00
"twitterTitle" : "API de Proxmox Monitor | ProxMenux" ,
"twitterDescription" : "Endpoints para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios."
},
"header" : {
2026-10-17 15:08:53 +02:00
"title" : "Referencia de la API" ,
"description" : "Endpoints HTTP para consultar el estado y ejecutar acciones documentadas en ProxMenux Monitor: sensores de Home Assistant, tarjetas de Homepage, paneles Grafana, recogida de Prometheus, flujos n8n y scripts propios. Incluye categorías, métricas exportadas y ejemplos curl." ,
2026-05-31 12:41:10 +02:00
"section" : "ProxMenux Monitor"
},
"intro" : {
"title" : "Para qué es esta página" ,
2026-10-18 17:16:51 +02:00
"body" : "Esta página reúne endpoints para integraciones externas: datos de lectura y operaciones como iniciar backups, enviar avisos y confirmar alertas. La API usa el mismo proceso Flask que sirve el panel en TCP <strong>8008</strong>. La dirección de escucha y TLS se explican en <link>Acceso y autenticación</link>."
2026-05-31 12:41:10 +02:00
},
"headerEndpoint" : "Endpoint" ,
"headerMethod" : "Método" ,
"headerUse" : "Uso" ,
"auth" : {
"heading" : "Autenticación" ,
2026-10-17 15:08:53 +02:00
"intro" : "Con la autenticación activada, los endpoints protegidos esperan un JWT Bearer en la cabecera de la petición:" ,
2026-05-31 12:41:10 +02:00
"tokensIntro" : "Dos formas de obtener el token:" ,
"items" : [
2026-10-17 15:08:53 +02:00
"<strong>Tokens API, recomendados para integraciones.</strong> Valen 365 días y se crean en <strong>Seguridad → Tokens API</strong>. Tienen nombre y revocación individual. Usa read_only para datos y full_admin solo para acciones administrativas necesarias." ,
"<strong>Inicio de sesión, JWT de 24 horas.</strong> <code>POST /api/auth/login</code> con usuario, contraseña y TOTP si lo exige 2FA. El JWT caduca a las 24 horas; los scripts deben volver a autenticarse después."
2026-05-31 12:41:10 +02:00
],
2026-10-17 15:08:53 +02:00
"flowLink" : "El acceso, contraseñas, 2FA, auditoría y TLS se explican en <link>Acceso y autenticación</link>." ,
2026-05-31 12:41:10 +02:00
"rows" : [
{
"endpoint" : "/api/auth/login" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Campos del cuerpo (esquema): <code>'{'\"username\",\"password\",\"totp_token?\"'}'</code>. Devuelve un JWT de 24 horas."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/auth/api-tokens" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Lista los tokens API: nombres, prefijos y fechas; el valor secreto no se devuelve."
2026-05-31 12:41:10 +02:00
},
{
2026-10-17 15:08:53 +02:00
"endpoint" : "/api/auth/generate-api-token" ,
2026-05-31 12:41:10 +02:00
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Crea un token API de 365 días con una sesión autenticada. Campos: <code>password, token_name?, totp_token?, scope?</code>. Se comprueban otra vez contraseña y TOTP requerido. scope usa read_only por defecto; full_admin se elige expresamente. El secreto se devuelve una sola vez."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/auth/api-tokens/<id>" ,
"method" : "DELETE" ,
"use" : "Revoca un API token específico por su ID."
}
]
},
"conventions" : {
"heading" : "Convenciones" ,
"items" : [
2026-10-17 15:08:53 +02:00
"La mayoría usa JSON. Algunas descargas son texto plano y <code>/api/prometheus</code> devuelve el formato de exposición de Prometheus 0.0.4, en vez de OpenMetrics. Comprueba el tipo de respuesta de cada ruta." ,
"Muchas operaciones devuelven <code>'{'\"success\": true, ...'}'</code>. Los errores varían; una forma habitual es <code>'{'\"success\": false, \"error\": \"'<'reason'>'\"'}'</code>. Comprueba estado HTTP y campos: algunos retos de autenticación usan HTTP 200 con success false." ,
"Los parámetros dependen del endpoint. Usa <code>limit</code>, <code>offset</code>, <code>since</code> y filtros por categoría solo si esa ruta los admite." ,
"Los tiempos varían por endpoint: marcas Unix, cadenas ISO-8601 y fechas con formato systemd. No supongas una unidad común ni una zona horaria explícita en todos los campos."
2026-05-31 12:41:10 +02:00
]
},
"system" : {
"heading" : "Sistema y hardware" ,
"rows" : [
{
"endpoint" : "/api/system" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Valores actuales de CPU, memoria, swap, tiempo encendido y carga."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/info" ,
"method" : "GET" ,
"use" : "Información estática del host: hostname, kernel, versión de PVE, modelo de CPU, distro."
},
{
"endpoint" : "/api/system-info" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Datos ampliados usados por la cabecera del panel: métricas generales y hora de arranque."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/hardware" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Inventario detallado de hardware: dispositivos PCI, GPU y sensores."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/hardware/live" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Valores actuales de sensores que cambian rápidamente."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/temperature/history" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Historial de temperaturas de CPU y encapsulado."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/gpu/<slot>/realtime" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Métricas actuales de GPU NVIDIA, Intel y AMD por posición PCI."
2026-05-31 12:41:10 +02:00
}
]
},
2026-08-01 11:29:32 +02:00
"actions" : {
"heading" : "Acciones del sistema" ,
2026-10-18 17:16:51 +02:00
"intro" : "Estas acciones asíncronas se ejecutan en unidades systemd transitorias. Con autenticación activa, sus rutas de escritura exigen <code>full_admin</code>; <code>read_only</code> puede consultar <code>.../status</code>. El inicio aceptado devuelve HTTP 202 y estado; consulta <code>.../status</code> para el progreso. El control de invitados y los backups usan respuestas distintas, explicadas abajo." ,
2026-08-01 11:29:32 +02:00
"shapeTitle" : "Formato de respuesta común" ,
2026-10-18 17:16:51 +02:00
"shapeIntro" : "Las acciones asíncronas del sistema comparten este objeto JSON de estado. El control de invitados y los backups tienen formatos distintos:" ,
2026-08-01 11:29:32 +02:00
"shapeCode" : "{\n \"unit\": \"proxmenux-action-pve-update.service\",\n \"state\": \"idle | running | success | failed | cancelled\",\n \"started_at\": \"Sat 2026-08-01 11:01:32 CEST\",\n \"finished_at\": null,\n \"exit_code\": null,\n \"result\": null\n}" ,
"concurrencyTitle" : "Concurrencia y cancelación" ,
2026-10-17 15:08:53 +02:00
"concurrencyBody" : "Iniciar otra ejecución de la misma acción activa devuelve HTTP 409. Solo se cancela si hay una ruta DELETE documentada, como en la actualización PVE. Su estado pasa a <code>cancelled</code> y conserva fechas. Los estados finales se guardan en memoria del proceso y pueden perderse al reiniciar Monitor." ,
2026-08-01 11:29:32 +02:00
"rows" : [
{
"endpoint" : "/api/system/power/reboot" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Inicia el reinicio del host Proxmox. La conexión HTTP puede cerrarse cuando systemd comienza el apagado."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/system/power/reboot/status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado del reinicio actual o anterior."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/system/power/shutdown" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Apaga el host Proxmox; puede conectarse a una señal de apagado del SAI."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/system/power/shutdown/status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado del apagado actual o anterior."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/system/pve-update/run" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Inicia la actualización de PVE usada por Actualizar ahora de Health Monitor y el menú de consola; delega en update-pve-safe.sh."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/system/pve-update/status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado de la actualización PVE actual o anterior."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/system/pve-update" ,
"method" : "DELETE" ,
2026-10-17 15:08:53 +02:00
"use" : "Cancela una actualización PVE en curso mediante SIGTERM al proceso."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/proxmenux/self-update/run" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Actualiza ProxMenux con el instalador del canal estable o beta configurado. Usa su propia unidad systemd para poder continuar durante el reinicio de proxmenux-monitor que realiza el instalador."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/proxmenux/self-update/status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado de la actualización de ProxMenux actual o anterior."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/vms/<vmid>/control" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Envía una orden de control de VM o LXC. El campo <code>action</code> admite <code>start</code>, <code>stop</code>, <code>shutdown</code> o <code>reboot</code>. La respuesta correcta devuelve una tarea PVE confirmada, sin indicar que ya haya terminado. Consulta el endpoint control-task del invitado para obtener el resultado."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/vms/<vmid>/backup" ,
"method" : "POST" ,
2026-10-18 17:16:51 +02:00
"use" : "Crea un backup vzdump de una VM o LXC. Campos opcionales, ajustables según el almacenamiento: <code>storage</code> (destino PVE), <code>mode</code> (<code>snapshot</code>, <code>suspend</code> o <code>stop</code>), <code>compress</code> (<code>zstd</code>, <code>lzo</code>, <code>gzip</code> o <code>none</code>), <code>protected</code> (<code>true</code> o <code>false</code>), <code>notes</code> y <code>pbs_change_detection</code> (<code>default</code>, <code>legacy</code> o <code>data</code>). Devuelve el UPID de la tarea PVE."
2026-08-01 11:29:32 +02:00
},
{
"endpoint" : "/api/vms/<vmid>/backups" ,
"method" : "GET" ,
"use" : "Listar backups anteriores de una VM o LXC en todos los storages accesibles."
}
],
2026-10-17 15:08:53 +02:00
"syncVsAsyncTitle" : "Dos tipos de acción" ,
2026-10-18 17:16:51 +02:00
"syncVsAsyncBody" : "Encendido, apagado y actualizaciones del host usan unidades systemd transitorias con <code>.../status</code>. Solo la actualización PVE tiene aquí una ruta de cancelación <code>DELETE</code>. El control VM/LXC devuelve una tarea que debe consultarse; el backup devuelve un UPID de trabajo en segundo plano. Aceptar la petición no equivale a terminarla. Autenticación y permisos dependen de la ruta." ,
2026-10-17 15:08:53 +02:00
"curlTitle" : "Ejemplo curl" ,
"curlBody" : "Inicia una actualización PVE y consulta hasta que termine: la secuencia que usaría una automatización Home Assistant o un playbook Ansible." ,
"curlCode" : "TOKEN=<your full_admin token>\n\ncurl -sSf -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/run\n\nwhile true; do\n state=$(curl -sSf -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/status | jq -r .state)\n [ \"$state\" != \"running\" ] && break\n sleep 30\ndone\necho \"final state: $state\"" ,
"haTitle" : "Ejemplo para Home Assistant" ,
"haBody" : "Un sensor <code>rest</code> consulta el estado y <code>rest_command</code> inicia la actualización. Úsalos con un botón del panel y las automatizaciones que necesites:" ,
"haCode" : "# configuration.yaml\nsensor:\n - platform: rest\n resource: https://pve.local:8008/api/system/pve-update/status\n name: pve_update_state\n value_template: \"{{ value_json.state }}\"\n scan_interval: 60\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\nrest_command:\n pve_update:\n url: https://pve.local:8008/api/system/pve-update/run\n method: POST\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Start VM 100 (works for LXC too — same endpoint)\n vm_100_start:\n url: https://pve.local:8008/api/vms/100/control\n method: POST\n content_type: 'application/json'\n payload: '{\"action\": \"start\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Backup VM 100 to the 'pbs-main' storage\n vm_100_backup:\n url: https://pve.local:8008/api/vms/100/backup\n method: POST\n content_type: 'application/json'\n payload: '{\"storage\": \"pbs-main\", \"mode\": \"snapshot\", \"compress\": \"zstd\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\""
2026-08-01 11:29:32 +02:00
},
2026-05-31 12:41:10 +02:00
"health" : {
"heading" : "Monitor de salud" ,
"rows" : [
{
"endpoint" : "/api/health" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Comprobación ligera que devuelve JSON con <code>status</code>, <code>timestamp</code> y <code>version</code>. Sirve para palabras clave de Uptime Kuma; con autenticación activa, el cliente debe enviar la cabecera Bearer."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado global: un nivel de gravedad y un resumen."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/details" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Las diez categorías con estado y datos estructurados de cada comprobación."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/full" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Datos completos: categorías, errores activos, alertas descartadas y ajustes de silenciamiento. Usa resultados de fondo con menos de seis minutos; si no hay caché reciente o fuerzas la actualización, ejecuta una comprobación nueva."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/active-errors" ,
"method" : "GET" ,
"use" : "Lista activa, filtrable por <code>?category=<name></code>."
},
{
"endpoint" : "/api/health/dismissed" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Alertas descartadas con horas de silencio restantes."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/settings" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Duración de silenciamiento configurada para cada categoría."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/remote-storages" ,
"method" : "GET" ,
"use" : "Inventario de almacenamientos remotos definidos por Proxmox, con estado online."
},
{
"endpoint" : "/api/health/interfaces" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Interfaces de red con tipo (bridge / bond / física), IP y velocidad del enlace."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/acknowledge" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Cuerpo: <code>'{'\"error_key\":\"smart_sdh\"'}'</code>. Silencia una alerta durante el periodo configurado para su categoría."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/health/cleanup-orphans" ,
"method" : "POST" ,
"use" : "Limpieza manual de errores cuyo dispositivo o VM subyacente ha desaparecido. Idempotente."
}
],
2026-10-17 15:08:53 +02:00
"outro" : "Los formatos de respuesta y las categorías se explican en <link>Health Monitor</link>."
2026-05-31 12:41:10 +02:00
},
"storage" : {
"heading" : "Almacenamiento" ,
"rows" : [
{
"endpoint" : "/api/storage" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Discos visibles para el host: dispositivos de bloques, pools ZFS y LVM."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/storage/summary" ,
"method" : "GET" ,
"use" : "Resumen compacto usado por las tarjetas del panel."
},
{
"endpoint" : "/api/proxmox-storage" ,
"method" : "GET" ,
"use" : "Almacenamientos definidos por Proxmox desde <code>/etc/pve/storage.cfg</code> con estado online y espacio libre."
},
{
"endpoint" : "/api/storage/observations" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Historial persistente de observaciones: avisos SMART, errores de E/S y eventos ZFS. Se conserva aunque se resuelva la alerta."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/storage/smart/<disk>" ,
"method" : "GET" ,
"use" : "Atributos SMART actuales para un disco."
},
{
"endpoint" : "/api/storage/smart/<disk>/latest" ,
"method" : "GET" ,
"use" : "Self-test SMART más reciente para el disco."
},
{
"endpoint" : "/api/storage/smart/<disk>/history" ,
"method" : "GET" ,
"use" : "Lista de reportes SMART almacenados para el disco."
},
{
"endpoint" : "/api/storage/smart/<disk>/history/<file>" ,
"method" : "GET" ,
"use" : "Lee un reporte SMART almacenado específico."
},
{
"endpoint" : "/api/storage/smart/<disk>/test" ,
"method" : "POST" ,
2026-10-18 17:16:51 +02:00
"use" : "Inicia una prueba SMART. Esquema del cuerpo: <code>'{'\"test_type\":\"short\"|\"long\"'}'</code>."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/storage/smart/schedules" ,
"method" : "GET" ,
"use" : "Lista los tests SMART programados actualmente."
},
{
"endpoint" : "/api/storage/smart/tools" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Comprueba si están instalados <code>smartctl</code> y las herramientas asociadas."
2026-05-31 12:41:10 +02:00
}
]
},
"network" : {
"heading" : "Red" ,
"rows" : [
{
"endpoint" : "/api/network" ,
"method" : "GET" ,
"use" : "Todas las interfaces con estado de enlace y direcciones."
},
{
"endpoint" : "/api/network/summary" ,
"method" : "GET" ,
"use" : "Vista compacta usada por el panel."
},
{
"endpoint" : "/api/network/<iface>/metrics" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "RX/TX por interfaz, contadores de errores y series temporales RRD."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/network/latency/current" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Última medición de latencia hasta la puerta de enlace."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/network/latency/history" ,
"method" : "GET" ,
"use" : "Serie temporal de latencia al gateway."
}
]
},
"vms" : {
"heading" : "VMs y contenedores" ,
"rows" : [
{
"endpoint" : "/api/vms" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "VM y CT del nodo local con estado, vmid y nombre."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/vms/<vmid>" ,
"method" : "GET" ,
"use" : "Detalle completo de un guest (config, red, discos)."
},
{
"endpoint" : "/api/vms/<vmid>/metrics" ,
"method" : "GET" ,
"use" : "Serie temporal de CPU / memoria / I/O de disco para un guest (RRD)."
},
{
"endpoint" : "/api/vms/<vmid>/logs" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Registros de tareas recientes de ese invitado."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/vms/<vmid>/backups" ,
"method" : "GET" ,
2026-10-18 17:16:51 +02:00
"use" : "Backups conservados para este invitado."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/vms/<vmid>/control" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Selecciona una acción del esquema: <code>'{'\"action\":\"start|stop|reboot|shutdown\"'}'</code>. Controla el estado de encendido del invitado."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/vms/<vmid>/backup" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Inicia <code>vzdump</code> para el invitado. El cuerpo indica almacenamiento y modo (<code>snapshot</code> / <code>suspend</code> / <code>stop</code>)."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/vms/<vmid>/config" ,
"method" : "PUT" ,
"use" : "Actualiza el campo descripción (notes) de una VM / CT. Otras claves de config no son modificables desde este endpoint."
},
{
"endpoint" : "/api/node/metrics" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Métricas agregadas del nodo en series RRD."
2026-05-31 12:41:10 +02:00
}
]
},
"backups" : {
2026-10-18 17:16:51 +02:00
"heading" : "Backups" ,
2026-05-31 12:41:10 +02:00
"rows" : [
{
"endpoint" : "/api/backups" ,
"method" : "GET" ,
2026-10-18 17:16:51 +02:00
"use" : "Backups encontrados en almacenamientos dir, NFS, CIFS y PBS consultados desde el nodo local. No explora todos los nodos del clúster."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/backup-storages" ,
"method" : "GET" ,
2026-10-18 17:16:51 +02:00
"use" : "Almacenamientos que admiten backups, con espacio libre."
2026-05-31 12:41:10 +02:00
}
]
},
"logs" : {
"heading" : "Logs, tareas, eventos" ,
"rows" : [
{
"endpoint" : "/api/logs" ,
"method" : "GET" ,
"use" : "Entradas del journal filtradas. Query: <code>?level=&service=&limit=</code>."
},
{
"endpoint" : "/api/logs/download" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Exporta el intervalo filtrado como texto plano."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/events" ,
"method" : "GET" ,
"use" : "Stream interno de eventos — el mismo que alimenta las notificaciones."
},
{
"endpoint" : "/api/task-log/<upid>" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Registro completo de una tarea Proxmox, en texto plano, identificado por UPID."
2026-05-31 12:41:10 +02:00
}
]
},
"notifications" : {
2026-10-17 15:08:53 +02:00
"heading" : "Notificaciones e IA" ,
"intro" : "El envío, la configuración de canales y la reformulación con IA se explican en <notifLink>Notificaciones</notifLink> y <aiLink>Asistente de IA</aiLink>." ,
2026-05-31 12:41:10 +02:00
"rows" : [
{
"endpoint" : "/api/notifications" ,
"method" : "GET" ,
"use" : "Notificaciones recientes mostradas en el panel."
},
{
"endpoint" : "/api/notifications/download" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Exporta las notificaciones como texto."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado del envío: proceso de fondo activo, longitud de cola y último envío."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/settings" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Lee la configuración de notificaciones: canales, controles por evento, reformulación con IA y nombre visible."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/history" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Historial de envío. Parámetros: <code>?limit=&offset=&severity=&channel=</code>."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/history" ,
"method" : "DELETE" ,
2026-10-17 15:08:53 +02:00
"use" : "Borra la tabla del historial de envío."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/test" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Envía un aviso de prueba a un canal. Cuerpo: <code>'{'\"channel\":\"telegram\"'}'</code>."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/send" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Emite un evento personalizado. Cuerpo: <code>'{'\"event_type\":\"custom\",\"severity\":\"WARNING\",\"title\":\"...\",\"body\":\"...\",\"data\":'{''}''}'</code>."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/test-ai" ,
"method" : "POST" ,
2026-10-17 15:08:53 +02:00
"use" : "Prueba la conexión con el proveedor de IA. Campos del cuerpo (esquema): <code>'{'\"provider\",\"api_key\",\"model\",\"ollama_url?\"'}'</code>."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/notifications/provider-models" ,
"method" : "POST" ,
"use" : "Lista modelos disponibles para el proveedor de IA seleccionado."
},
{
"endpoint" : "/api/notifications/proxmox/setup-webhook" ,
"method" : "POST" ,
"use" : "Registra el Monitor como destino webhook en <code>/etc/pve/notifications.cfg</code>."
},
{
"endpoint" : "/api/notifications/proxmox/cleanup-webhook" ,
"method" : "POST" ,
"use" : "Elimina el destino del Monitor de la config de notificaciones de PVE."
},
{
"endpoint" : "/api/notifications/proxmox/read-cfg" ,
"method" : "GET" ,
"use" : "Lee el <code>notifications.cfg</code> actual de PVE como lo ve PVE."
}
]
},
"security" : {
"heading" : "Seguridad (lectura)" ,
"rows" : [
{
"endpoint" : "/api/security/firewall/status" ,
"method" : "GET" ,
"use" : "Estado del firewall de PVE y reglas activas."
},
{
"endpoint" : "/api/security/fail2ban/details" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado del jail Fail2Ban; requiere tener instalado ese componente opcional."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/security/fail2ban/activity" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Eventos recientes de Fail2Ban: bloqueos, desbloqueos y arranques del jail."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/security/lynis/status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Estado de Lynis: instalación y fecha del último análisis."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/security/lynis/report" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Último informe Lynis: avisos, sugerencias e índice de refuerzo de seguridad."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/security/tools" ,
"method" : "GET" ,
"use" : "Detecta qué herramientas opcionales de seguridad (Fail2Ban, Lynis) están instaladas."
}
]
},
"proxmenuxIntegration" : {
"heading" : "Integración ProxMenux" ,
"rows" : [
{
"endpoint" : "/api/proxmenux/update-status" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Disponibilidad de actualización de ProxMenux Monitor, versión instalada y más reciente."
2026-05-31 12:41:10 +02:00
},
{
"endpoint" : "/api/proxmenux/installed-tools" ,
"method" : "GET" ,
"use" : "Lista de cada optimización post-instalación de ProxMenux registrada actualmente en el host (desde <code>/usr/local/share/proxmenux/installed_tools.json</code>)."
},
{
"endpoint" : "/api/proxmenux/tool-source/<key>" ,
"method" : "GET" ,
2026-10-17 15:08:53 +02:00
"use" : "Código de la función posterior a la instalación asociada, extraído del script actual del host o de código antiguo conservado. No garantiza una copia del código exacto ejecutado originalmente."
2026-05-31 12:41:10 +02:00
}
]
},
"prometheus" : {
"heading" : "Métricas Prometheus" ,
2026-10-17 15:08:53 +02:00
"intro" : "<code>GET /api/prometheus</code> con autenticación devuelve el formato de texto Prometheus 0.0.4. Cada métrica incluye <code>node=\"<hostname>\"</code> y una marca de tiempo explícita. Recógela con Prometheus u otra base temporal compatible." ,
2026-05-31 12:41:10 +02:00
"exportedTitle" : "Métricas exportadas" ,
"headerGroup" : "Grupo" ,
"headerMetric" : "Métrica" ,
"headerDesc" : "Descripción" ,
"groups" : [
{
"group" : "Sistema" ,
"metrics" : [
{
"metric" : "proxmox_cpu_usage" ,
2026-10-17 15:08:53 +02:00
"desc" : "Porcentaje de uso de CPU, de tipo gauge."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_memory_total_bytes" ,
"desc" : "Memoria física total en bytes."
},
{
"metric" : "proxmox_memory_used_bytes" ,
2026-10-17 15:08:53 +02:00
"desc" : "Memoria utilizada en bytes."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_memory_usage_percent" ,
"desc" : "Porcentaje de uso de memoria."
},
{
"metric" : "proxmox_load_average" ,
2026-10-17 15:08:53 +02:00
"desc" : "Carga media del sistema. Etiqueta <code>period=\"1m\" | \"5m\" | \"15m\"</code>."
2026-05-31 12:41:10 +02:00
}
]
},
{
2026-10-17 15:08:53 +02:00
"group" : "Tiempo de actividad" ,
2026-05-31 12:41:10 +02:00
"metrics" : [
{
"metric" : "proxmox_uptime_seconds" ,
2026-10-17 15:08:53 +02:00
"desc" : "Segundos desde el último arranque."
2026-05-31 12:41:10 +02:00
}
]
},
{
"group" : "Hardware" ,
"metrics" : [
{
"metric" : "proxmox_cpu_temperature_celsius" ,
2026-10-17 15:08:53 +02:00
"desc" : "Temperatura del encapsulado de CPU."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_disk_temperature_celsius" ,
2026-10-17 15:08:53 +02:00
"desc" : "Temperatura por disco. Etiqueta <code>disk</code>."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_fan_speed_rpm" ,
2026-10-17 15:08:53 +02:00
"desc" : "Velocidades de ventiladores. Etiqueta <code>fan</code>."
2026-05-31 12:41:10 +02:00
}
]
},
{
"group" : "Espacio en disco" ,
"metrics" : [
{
"metric" : "proxmox_disk_total_bytes" ,
2026-10-17 15:08:53 +02:00
"desc" : "Capacidad total de cada entrada de disco exportada. Etiqueta <code>disk</code>."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_disk_used_bytes" ,
2026-10-17 15:08:53 +02:00
"desc" : "Capacidad utilizada de cada entrada de disco exportada."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_disk_usage_percent" ,
2026-10-17 15:08:53 +02:00
"desc" : "Porcentaje utilizado de cada entrada de disco exportada."
2026-05-31 12:41:10 +02:00
}
]
},
{
"group" : "Red" ,
"metrics" : [
{
"metric" : "proxmox_network_bytes_sent_total" ,
2026-10-17 15:08:53 +02:00
"desc" : "Total de bytes enviados, de tipo counter."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_network_bytes_received_total" ,
2026-10-17 15:08:53 +02:00
"desc" : "Total de bytes recibidos, de tipo counter."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_interface_bytes_sent_total" ,
"desc" : "Bytes enviados por interfaz. Etiqueta <code>interface</code>."
},
{
"metric" : "proxmox_interface_bytes_received_total" ,
"desc" : "Bytes recibidos por interfaz."
}
]
},
{
"group" : "VMs / CTs" ,
"metrics" : [
{
"metric" : "proxmox_vms_total" ,
"desc" : "Número total de VMs y LXCs."
},
{
"metric" : "proxmox_vms_running" ,
2026-10-17 15:08:53 +02:00
"desc" : "Número de invitados en ejecución."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_vms_stopped" ,
2026-10-17 15:08:53 +02:00
"desc" : "Número de invitados detenidos."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_vm_status" ,
2026-10-17 15:08:53 +02:00
"desc" : "Estado por VM/CT: 1 en ejecución, 0 en otro estado. Etiquetas <code>node</code>, <code>vmid</code> y <code>name</code>."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_vm_cpu_usage" ,
2026-10-17 15:08:53 +02:00
"desc" : "Uso de CPU por VM/CT, con las mismas etiquetas."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_vm_memory_used_bytes / _max_bytes" ,
2026-10-17 15:08:53 +02:00
"desc" : "Memoria utilizada y máximo configurado por VM/CT."
2026-05-31 12:41:10 +02:00
}
]
},
{
"group" : "GPU" ,
"metrics" : [
{
"metric" : "proxmox_gpu_temperature_celsius" ,
2026-10-17 15:08:53 +02:00
"desc" : "Temperatura GPU. Etiquetas <code>slot</code> y <code>vendor</code>; también incluye el nombre de GPU en gpu."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_gpu_utilization_percent" ,
"desc" : "Porcentaje de utilización de GPU."
},
{
"metric" : "proxmox_gpu_memory_total_bytes" ,
2026-10-17 15:08:53 +02:00
"desc" : "Memoria total de la GPU."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_gpu_power_draw_watts" ,
2026-10-17 15:08:53 +02:00
"desc" : "Consumo eléctrico de la GPU en vatios."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_gpu_clock_speed_mhz" ,
2026-10-17 15:08:53 +02:00
"desc" : "Frecuencia del núcleo de la GPU."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_gpu_memory_clock_mhz" ,
2026-10-17 15:08:53 +02:00
"desc" : "Frecuencia de la memoria de la GPU."
2026-05-31 12:41:10 +02:00
}
]
},
{
"group" : "UPS" ,
"metrics" : [
{
"metric" : "proxmox_ups_battery_charge_percent" ,
2026-10-17 15:08:53 +02:00
"desc" : "Porcentaje de carga de la batería."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_ups_load_percent" ,
"desc" : "Carga actual de la UPS."
},
{
"metric" : "proxmox_ups_runtime_seconds" ,
2026-10-17 15:08:53 +02:00
"desc" : "Autonomía estimada con batería."
2026-05-31 12:41:10 +02:00
},
{
"metric" : "proxmox_ups_input_voltage_volts" ,
"desc" : "Voltaje de entrada."
}
]
}
],
"scrapeTitle" : "Configuración de scrape de Prometheus" ,
2026-10-17 15:08:53 +02:00
"scrapeIntro" : "Con autenticación activa, añade un token API a la cabecera Bearer de la configuración de recogida de Prometheus:" ,
"perHostTitle" : "Recogida por host" ,
"perHostBody" : "Cada instancia exporta métricas de su propio host. En un clúster, configura Prometheus para consultar cada nodo. La etiqueta <code>node</code> distingue las series en Grafana (<code>proxmox_vms_running'{'node=\"pve01\"'}'</code>)."
2026-05-31 12:41:10 +02:00
},
"puttingItTogether" : {
2026-10-17 15:08:53 +02:00
"heading" : "Combinar las integraciones" ,
"body" : "Consulta <link>Integraciones</link> para conectar estos endpoints con sensores Home Assistant, tarjetas Homepage, paneles Grafana, flujos n8n y otras herramientas. Incluye la configuración habitual de cada plataforma con ejemplos copiables. Esta página reúne el catálogo de endpoints."
2026-05-31 12:41:10 +02:00
},
"whereNext" : {
"heading" : "Por dónde seguir" ,
"items" : [
{
2026-10-17 15:08:53 +02:00
"label" : "Acceso y autenticación" ,
2026-05-31 12:41:10 +02:00
"href" : "/docs/monitor/access-auth" ,
2026-10-17 15:08:53 +02:00
"tail" : " — creación de tokens, registro de auditoría, jail opcional de Fail2Ban y TLS."
2026-05-31 12:41:10 +02:00
},
{
2026-10-17 15:08:53 +02:00
"label" : "Notificaciones" ,
2026-05-31 12:41:10 +02:00
"href" : "/docs/monitor/notifications" ,
2026-10-17 15:08:53 +02:00
"tailRich" : " — contenido de <code>data</code> para cada evento al llamar a <code>/api/notifications/send</code>."
2026-05-31 12:41:10 +02:00
},
{
"label" : "Asistente de IA" ,
"href" : "/docs/monitor/ai-assistant" ,
2026-10-17 15:08:53 +02:00
"tailRich" : " — funcionamiento de <code>/api/notifications/test-ai</code> y <code>/api/notifications/provider-models</code>."
2026-05-31 12:41:10 +02:00
},
{
"label" : "Monitor de salud" ,
"href" : "/docs/monitor/health-monitor" ,
2026-10-17 15:08:53 +02:00
"tailRich" : " — formato de respuesta de <code>/api/health/*</code> y significado de las diez categorías."
2026-05-31 12:41:10 +02:00
}
]
}
}