API REST

La web de Atalaya usa una API REST con JSON, y esa misma API está disponible para scripts y otras herramientas. Todas las rutas empiezan por /api/v1/.

Autenticación

La API usa la misma sesión que la web, guardada en la cookie atalaya_session. Desde un script:

curl -k -c cookies.txt -H 'Content-Type: application/json' \
     -d '{"username":"admin","password":"..."}' https://atalaya.lan/api/v1/session
curl -k -b cookies.txt https://atalaya.lan/api/v1/hosts

Las peticiones que cambian algo deben enviar el cuerpo como application/json. Si incluyen la cabecera Origin, debe coincidir con la dirección del servidor. Para los asistentes de IA hay un servidor MCP con sus propios tokens, y Prometheus puede leer /metrics con uno de ellos (ver Integraciones).

Rutas

Método y rutaQué hacePermiso
GET /api/v1/healthEstado del servicio y de la conexión a MariaDB.Ninguno
POST /api/v1/sessionInicia sesión con username y password.Ninguno
GET /api/v1/sessionUsuario de la sesión actual.Sesión
DELETE /api/v1/sessionCierra la sesión.Sesión
POST /api/v1/session/mfaSegundo paso: con mfa_token (lo devuelve POST /session con {"mfa_required": true} si el usuario tiene 2FA) y code, crea la sesión.Ninguno
GET /api/v1/session/totpEstado de la verificación en dos pasos del usuario (enabled, required, recovery_left).Sesión
POST /api/v1/session/totp/setupCon password, genera el secreto (secret, uri otpauth).Sesión
POST /api/v1/session/totp/enableCon code, la activa y devuelve recovery_codes (una sola vez).Sesión
POST /api/v1/session/totp/disable, .../recoveryCon password y code: desactivarla, o generar códigos de recuperación nuevos.Sesión
DELETE /api/v1/users/{id}/totpQuita la verificación en dos pasos de un usuario y cierra sus sesiones.Administrador
GET /api/v1/statusVersión, esquema, modo del ping y recuento de equipos por estado.Sesión
GET /api/v1/hostsLista de equipos con el resultado de su último ping.Sesión
POST /api/v1/hostsDa de alta un equipo.Administrador
GET /api/v1/hosts/{id}Un equipo.Sesión
PUT /api/v1/hosts/{id}Cambia los campos enviados de un equipo.Administrador
DELETE /api/v1/hosts/{id}Borra un equipo.Administrador
GET /api/v1/hosts/{id}/checksComprobaciones de un equipo con su estado.Sesión
POST /api/v1/hosts/{id}/checksAñade una comprobación.Administrador
GET /api/v1/checks/{id}Una comprobación.Sesión
PUT /api/v1/checks/{id}Cambia los campos enviados de una comprobación.Administrador
DELETE /api/v1/checks/{id}Borra una comprobación (la de presencia no).Administrador
POST /api/v1/checks/{id}/runLa ejecuta ahora.Sesión
GET /api/v1/checks/{id}/resultsSus últimos 200 resultados.Sesión
GET /api/v1/satellitesSatélites (agentes en modo satélite): estado, subredes, equipos, relevo y cola.Sesión
PUT /api/v1/satellites/{agente}Activa o desactiva el satélite de un agente: enabled, relay y subnets (lista de redes).Administrador
GET /api/v1/alertsAlertas activas.Sesión
GET /api/v1/alerts/historyÚltimas 200 alertas, también resueltas.Sesión
POST /api/v1/alerts/{id}/ackMarca una alerta como vista (comment opcional).Administrador
GET /api/v1/channelsCanales de aviso, sin secretos.Administrador
POST /api/v1/channelsAñade un canal.Administrador
PUT /api/v1/channels/{id}Cambia un canal.Administrador
DELETE /api/v1/channels/{id}Borra un canal.Administrador
POST /api/v1/channels/{id}/testEnvía un mensaje de prueba.Administrador
GET /api/v1/hosts/{id}/addressesDirecciones adicionales del equipo, con el estado de su ping.Sesión
POST /api/v1/hosts/{id}/addressesAñade una dirección: address, label opcional y ping (true por defecto).Administrador
DELETE /api/v1/hosts/{id}/addresses/{n}Quita una dirección y su ping.Administrador
GET /api/v1/inventory?q=...Equipos con su inventario; q es la búsqueda de Inventario.Sesión
GET /api/v1/inventory/export?q=...&sep=;Lo mismo en CSV (sep , por defecto, o ;).Sesión
GET /api/v1/inventory/changesÚltimos 300 cambios de inventario de todos los equipos.Sesión
GET /api/v1/hosts/{id}/inventoryFicha completa: hardware, discos, sistema, actualizaciones, ficha administrativa y cambios.Sesión
GET /api/v1/hosts/{id}/packages?q=Paquetes instalados, con filtro por nombre.Sesión
PUT /api/v1/hosts/{id}/assetFicha administrativa: asset_tag, location, owner, supplier, model, serial, purchase_date, purchase_price, warranty_until y notes; null borra el dato.Administrador
POST /api/v1/hosts/{id}/inventory/snmpLee el equipo por SNMP (credential_id, port opcional) y lo repetirá cada día.Administrador
GET /api/v1/pve/clustersClústeres de Proxmox con su estado, sin el token.Sesión
POST /api/v1/pve/clustersAñade un clúster: name, base_url, token_id, token_secret (se guarda cifrado), tls_mode (pin, ca o none), interval_s, backup_max_age_h, auto_create.Administrador
GET /api/v1/pve/clusters/{id}Detalle con nodos, invitados y almacenamientos.Sesión
PATCH /api/v1/pve/clusters/{id}Cambia campos; token_secret solo si se manda; forget_pins: true olvida las huellas TLS.Administrador
POST /api/v1/pve/clusters/{id}/pollLee el clúster ya.Administrador
DELETE /api/v1/pve/clusters/{id}Quita el clúster (los equipos creados se conservan).Administrador
PATCH /api/v1/pve/guests/{id}expect_running (true, false o null para seguir onboot), backup_expected, host_id (enlazar con un equipo; null para no enlazar) o relink: true.Administrador
GET /api/v1/silencesSilencios y ventanas de mantenimiento (los terminados hace más de una semana no salen).Sesión
POST /api/v1/silencesCrea un silencio: host_id o tag (sin ellos, todos los equipos), check_name opcional, reason, y duration_min, ends_at (ISO 8601 UTC) o schedule (mantenimiento recurrente).Administrador
PATCH /api/v1/silences/{id}enabled (false lo termina) o ends_at.Administrador
DELETE /api/v1/silences/{id}Borra un silencio.Administrador
GET /api/v1/credentialsCredenciales SSH y SNMP, sin secretos (de las claves SSH, la pública).Administrador
POST /api/v1/credentialsCrea una: kind ssh (genera la clave) o snmp (version 2c con community, o 3 con user, level, auth_proto, auth_pass, priv_proto, priv_pass).Administrador
PUT /api/v1/credentials/{id}Cambia el nombre o los datos SNMP (un secreto enviado como ******** se conserva).Administrador
DELETE /api/v1/credentials/{id}La borra si ninguna comprobación la usa.Administrador
GET /api/v1/mibsMIB SNMP subidas, con su estado (objetos, sin resolver, módulos que faltan).Administrador
POST /api/v1/mibsSube una MIB: {"filename", "content"} (texto, hasta 400 KB). Si ya había otra del mismo módulo, la sustituye.Administrador
DELETE /api/v1/mibs/{id}La borra (las comprobaciones que usan sus OID siguen funcionando).Administrador
GET /api/v1/mibs/objects?q=Busca objetos legibles por nombre u OID: name, oid, kind, syntax, units, descr, enums.Administrador
GET /api/v1/tokensTokens de acceso de los agentes de IA.Administrador
POST /api/v1/tokensCrea un token (name, scope read, operate o config, tags, rate_limit); el valor solo se devuelve en esta respuesta.Administrador
PATCH /api/v1/tokens/{id}Activa o desactiva (enabled).Administrador
DELETE /api/v1/tokens/{id}Borra un token.Administrador
GET /api/v1/config/exportEquipos, comprobaciones y reglas en YAML.Administrador
POST /api/v1/config/importAplica un YAML (cuerpo del mensaje); crea o actualiza por nombre y no borra nada. Devuelve lo hecho y los errores.Administrador
POST /api/v1/config/import/checkIgual, pero solo dice qué haría.Administrador
GET /api/v1/agentsAgentes Linux con su último informe.Sesión
POST /api/v1/agents/tokensCódigo de alta de un solo uso (60 min); host_id opcional. Devuelve también la huella de la web (pin).Administrador
POST /api/v1/agents/{id}/updatePide al agente que se actualice a la versión del servidor (lo hace en su siguiente informe).Administrador
POST /api/v1/digest/sendManda ya el resumen semanal por los canales de correo activos.Administrador
POST /api/v1/agents/update-allLo mismo para todos los agentes desactualizados.Administrador
DELETE /api/v1/agents/{id}Revoca un agente: su certificado deja de valer.Administrador
GET /api/v1/hosts/{id}/metricsSeries de métricas del equipo con su último valor, y datos de su agente.Sesión
GET /api/v1/metrics/{serie}/{segundos}Puntos [ms, media, mín, máx] de una serie en ese periodo (de 60 s a 2 años).Sesión
GET /api/v1/rulesReglas de alerta de las métricas y lista de métricas posibles.Sesión
POST /api/v1/rulesCrea una regla: name, metric, op (> o <), threshold, for_minutes, severity, host_id (null para todos), enabled.Administrador
PUT /api/v1/rules/{id}Cambia una regla (solo los campos que se envíen).Administrador
DELETE /api/v1/rules/{id}Borra una regla; las de serie solo se desactivan.Administrador

Equipos

Campos que se pueden enviar al crear o modificar un equipo:

CampoTipoNotas
nametextoObligatorio al crear; único; hasta 128 caracteres.
addresstextoObligatorio al crear; IP o nombre DNS.
availability_modetexto24x7 (por defecto), intermittent o scheduled.
satellitenúmero, null o «auto»Quién lo vigila: el número de un satélite (el id del agente), null para el servidor o "auto" para que lo decida su subred.
notestexto o nullHasta 4000 caracteres.
schedulelista o nullFranjas del modo horario: [{"days":[1,2,3,4,5],"from":"08:00","to":"20:00"}], días del 1 (lunes) al 7.
grace_snúmeroPeriodo de gracia en segundos tras encenderse (300 por defecto).
parent_idnúmero o nullEquipo del que depende (ver dependencias).
tagslistaHasta 10 etiquetas de letras, números, - y _.
enabledbooleanofalse deja de vigilarlo.
pingbooleanoSolo al crear: false para no crear la comprobación de presencia.

Ejemplo:

curl -k -b cookies.txt -H 'Content-Type: application/json' \
     -d '{"name":"nas","address":"192.168.1.10"}' https://atalaya.lan/api/v1/hosts

La respuesta incluye además el estado (status, power_state), el último ping (rtt_ms, loss_pct, resolved_address, ping_message, ping_checked_at), el número de comprobaciones (checks_total, checks_failing), las alertas activas (alerts_firing) y las fechas de alta y modificación. Todas las fechas van en UTC con formato ISO 8601.

Comprobaciones

CampoTipoNotas
typetextoicmp, tcp, http, dns, script, ssh, snmp, tls (certificado) o domain (dominio).
nametextoOpcional; único en el equipo.
paramsobjetoPropios de cada tipo (ver abajo). Comunes a todos: address (otra dirección del equipo; por defecto, la principal) y max_severity (warning para que como mucho avise).
interval_snúmeroSegundos entre comprobaciones (60).
timeout_msnúmeroTiempo máximo de respuesta (5000).
fail_thresholdnúmeroFallos seguidos para dar la alarma (2).
enabledbooleano

Parámetros: icmp admite count, warn_rtt_ms, crit_rtt_ms, warn_loss y crit_loss; tcp, port (obligatorio); http, url, expect_status, contains, method (GET o HEAD), verify_tls, follow_redirects, cert_warn_days y cert_crit_days; dns, query (obligatorio), record_type, expect y server. tcp, http y dns admiten además warn_ms y crit_ms. script: command (ruta absoluta de un plugin) y args (lista de textos). ssh: credential_id, user, command (obligatorios), port, mode (nagios o exit0), contains, warn, crit y host_key (huella SHA256:…, se aprende sola). snmp: credential_id (obligatorio), port e interfaces (lista de nombres).

curl -k -b cookies.txt -H 'Content-Type: application/json' \
     -d '{"type":"http","params":{"url":"https://{address}:8006/","verify_tls":false}}' \
     https://atalaya.lan/api/v1/hosts/3/checks

Canales

type es ntfy, telegram, matrix o email, y config lleva sus datos: server, topic y token (ntfy); bot_token y chat_id (Telegram); homeserver, room_id y access_token (Matrix); smtp_url, username, password, from y to (correo). Además, min_severity (warning o critical), send_recovery y enabled. Los secretos se devuelven como ********; al editar, si se envían así, se conserva el valor guardado.

Errores

Los errores devuelven el código HTTP correspondiente y un cuerpo como este:

{"error": {"code": "duplicate_name", "message": "Ya hay un equipo con ese nombre."}}