API REST
Todo lo que hace la interfaz de NetEdge pasa por una API REST en JSON
bajo /api/v1 — la propia aplicación web es un cliente más de esa API. Si
puedes hacer algo desde la barra lateral, también puedes automatizarlo por
HTTP: crear nodos desde un script de aprovisionamiento, lanzar un
despliegue desde tu propio pipeline, o volcar el inventario a otra
herramienta.
Esta página cubre la API del producto base. Si tu licencia incluye módulos adicionales (recetas en cascada P2P, tareas post-clonación, SNMP, RBAC…), esos módulos añaden sus propios endpoints — se documentarán aquí en próximas actualizaciones de esta guía.
Convenciones
- Base URL — la misma dirección que usas para entrar a la interfaz
(p. ej.
http://localhost:8080). - Prefijo — todos los endpoints de negocio van bajo
/api/v1. - Formato — JSON en cuerpo de petición y respuesta, salvo la subida y descarga de imágenes (binario/multipart) y los streams en vivo (Server-Sent Events).
- Códigos de estado —
200/201éxito,400payload inválido,401token ausente o caducado,403rol insuficiente o funcionalidad no incluida en tu licencia,404recurso inexistente,409conflicto de estado (por ejemplo, un despliegue ya en curso),429límite de peticiones superado.
Autenticación
La mayoría de endpoints exigen un token JWT Bearer. Consíguelo con tu usuario y contraseña de siempre:
TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"netedge"}' | jq -r .token)
Y úsalo en cada petición posterior:
curl -H "Authorization: Bearer $TOKEN" http://localhost:8080/api/v1/auth/me
El token caduca a las 24 horas. Si tu instalación tiene el
autorregistro activo (ver Configuración), también
existen rutas públicas sin token para recuperación de contraseña y alta de
cuenta: POST /api/v1/auth/forgot, POST /api/v1/auth/reset y
POST /api/v1/auth/register.
Estado en vivo sin sondeo (Server-Sent Events)
Todo lo que la interfaz muestra "en vivo" — el estado de la flota, el
progreso de un despliegue, el registro de log — viaja por SSE: el
servidor empuja un snapshot nuevo solo cuando algo cambia, en vez de que el
cliente pregunte a intervalos. Como el estándar EventSource no permite
mandar cabeceras, primero se pide un ticket de un solo uso:
SSE_TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/events/stream-token \
-H "Authorization: Bearer $TOKEN" | jq -r .token)
curl -N "http://localhost:8080/api/v1/nodes/status/stream?token=$SSE_TOKEN"
Streams disponibles: GET /api/v1/events/stream (barra lateral, versión,
resumen de licencia), GET /api/v1/nodes/status/stream (estado de la
flota), GET /api/v1/deployments/progress/stream (progreso de despliegues
en curso) y GET /api/v1/logs/stream (consola de log). Cada uno tiene un
equivalente GET normal sin stream como alternativa de reserva.
Infraestructura
Ver la guía de uso completa en Infraestructura.
GET/POST /api/v1/zones,GET/PUT/DELETE /api/v1/zones/:idGET/POST /api/v1/subzones,GET/PUT/DELETE /api/v1/subzones/:idGET/POST /api/v1/groups,GET/PUT/DELETE /api/v1/groups/:idGET/POST /api/v1/nodes,GET/PUT/DELETE /api/v1/nodes/:idGET /api/v1/nodes/status— snapshot del estado de toda la flotaPOST /api/v1/nodes/:id/wol,POST /api/v1/groups/:id/wol,POST /api/v1/zones/:id/wol— Wake-on-LAN inmediatoGET/POST /api/v1/wol-schedules,GET/PUT/DELETE /api/v1/wol-schedules/:id— Wake-on-LAN programado (una vez o recurrente, expresión cron)GET/PUT /api/v1/node-capture/:kind/:id— captura automática de equipos desconocidos hacia una zona/subzona/grupoGET /api/v1/history/node/:id,GET /api/v1/history/group/:id,POST /api/v1/history/rollback— historial de despliegues y capturas
Cada nodo admite un array libre de etiquetas ("tags": ["aula-3"] en
el cuerpo de creación/edición). Para desplegar por etiqueta: resuelve los
nodos con GET /api/v1/nodes/tags (catálogo de etiquetas existentes) y
POST /api/v1/nodes/by-tags ({"tags":["aula-3"],"match_mode":"any"} o
"all", devuelve {node_ids, nodes}), y pasa esos node_ids a la
creación del despliegue de siempre.
Ejemplo — crear un nodo:
curl -X POST http://localhost:8080/api/v1/nodes \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"hostname":"pc-aula-01","mac":"AA:BB:CC:DD:EE:FF","ip":"192.168.1.10","group_id":"<group-id>"}'
Imágenes
Ver la guía de uso completa en Imágenes.
GET/POST /api/v1/images— listar / subir (multipart)GET/DELETE /api/v1/images/:idPOST /api/v1/images/bulk-deletePOST /api/v1/images/:id/download-token+GET /api/v1/images/:id/download?token=…— descarga con token temporal, sin exponer tu sesión
curl -X POST http://localhost:8080/api/v1/images \
-H "Authorization: Bearer $TOKEN" \
-F "name=Ubuntu 22.04 Aula 1" \
-F "os=Ubuntu 22.04" \
-F "file=@imagen.raw.zst"
Recetas
Ver la guía de uso completa en Recetas.
GET/POST /api/v1/recipes,GET/PUT/DELETE /api/v1/recipes/:idPOST /api/v1/recipes/from-preset— crea a partir de un preset (low_ram,balanced,fast)POST /api/v1/recipes/bulk-delete
curl -X POST http://localhost:8080/api/v1/recipes/from-preset \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Aula RAM baja","preset":"low_ram","uses_image":1}'
Despliegues
Ver la guía de uso completa en Despliegues.
GET/POST /api/v1/deployments— listar / crear (por grupo o por una lista concreta denode_ids)GET/DELETE /api/v1/deployments/:id,DELETE /api/v1/deployments/:id/purgeGET /api/v1/deployments/:id/cascade-plan— quién retransmite a quiénGET /api/v1/deployments/:id/metrics-history— velocidad/progreso histórico para las gráficasGET /api/v1/console/nodes,POST /api/v1/console/:node_id/token+GET /api/v1/console/:node_id/ws— consola remota en vivo por WebSocket (el token de arriba es un ticket efímero de un solo uso, no tu JWT)
curl -X POST http://localhost:8080/api/v1/deployments \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"recipe_id": "<recipe-id>",
"group_id": "<group-id>",
"image_id": "<image-id>",
"post_action": "reboot"
}'
Red
Ver la guía de uso completa en Red.
GET/POST /api/v1/boot/ifaces,GET/PUT/DELETE /api/v1/boot/ifaces/:idPUT /api/v1/boot/ifaces/:id/dhcp,PUT /api/v1/boot/ifaces/:id/pxeGET /api/v1/boot/ifaces/:id/conflicts— escaneo en vivo de otro servidor DHCP/PXE en la misma subredGET /api/v1/boot/global+PUT /api/v1/boot/global/dhcp/.../pxe— la plantilla global de la que hereda cada interfaz
Log
Ver la guía de uso completa en Log.
GET /api/v1/logs/stream— la misma consola en vivo que ves en la interfaz, como Server-Sent Events
Configuración
Ver la guía de uso completa en Configuración.
GET/PUT /api/v1/settings/all,GET/PUT /api/v1/settings/image_dir,GET/PUT /api/v1/settings/timezoneGET/PUT /api/v1/mail/settings+POST /api/v1/mail/test— servidor de correo salienteGET/PUT /api/v1/signup/settings,GET /api/v1/signup/pending,POST /api/v1/signup/users/:id/approve/.../reject— autorregistroGET /api/v1/updates/status,POST /api/v1/updates/check,POST /api/v1/updates/apply— auto-actualizaciónGET /api/v1/config/backup(descarga un.netedge) yPOST /api/v1/config/restore(multipart) — copia de seguridad completa
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/v1/config/backup -o backup.netedge
Licencia
Ver la guía de uso completa en Licencia y soporte.
GET /api/v1/license/statusPOST /api/v1/license/activate— cuerpo{"activation_key":"NE-XXXX-XXXX-XXXX"}POST /api/v1/license/heartbeat— fuerza una comprobación con el servidor de licencias ahora mismoGET/PUT /api/v1/license/server-url,GET/POST/DELETE /api/v1/license/server-urls
Usuarios
GET/POST /api/v1/users,PUT/DELETE /api/v1/users/:id— cuentas y rol (adminosuperadmin)
La API que hablan los propios clientes PXE
Cuando un equipo arranca por red, el propio netdd habla con NetEdge por
HTTP, sin token — es la misma API que usarías tú, pero pensada para que la
consuma la máquina que se está clonando:
POST /api/v1/tracker/register/.../heartbeat,GET /api/v1/tracker/peers— registro de peers y progreso del enjambre P2PPOST /api/v1/metrics/,POST /api/v1/summary/— telemetría periódica y eventos de resumen del despliegue
No necesitas llamar a estos endpoints tú mismo — los describimos aquí para que entiendas de dónde salen las gráficas en vivo de Despliegues si alguna vez inspeccionas el tráfico de red.