API REST

Todo lo que puedes hacer con direcciones y subredes en la interfaz también puedes hacerlo con una API JSON sencilla. Úsala para aprovisionamiento, integración con una CMDB o tus propios scripts.

Lo básico

  • URL base: https://ipmanager.no/api/v1
  • Todas las peticiones y respuestas son JSON (Content-Type: application/json).
  • Autenticación con una clave API en la cabecera Authorization: Bearer ipm_….
  • Todos los cambios hechos por la API quedan en el registro de auditoría, con el nombre de la clave como autor.

Claves API y permisos

Un administrador crea las claves en Autodetección y API. La clave se muestra una sola vez. Cada clave tiene un permiso:

PermisoPuede
readLeer direcciones, subredes y búsquedas (GET)
writeTodo lo de read, además de crear, modificar y eliminar
agentSolo enviar informes de agentes (POST /agent/report)
Ejemplo
curl -H "Authorization: Bearer $IPM_TOKEN" https://ipmanager.no/api/v1/search?q=10.20.3

Endpoints

MétodoRutaDescripción
GET/addressesLista direcciones. Parámetros: q, status, subnet, limit, offset
POST/addressesCrea una dirección
GET/addresses/{id}Obtiene una dirección
PATCH/addresses/{id}Modifica campos de una dirección
DELETE/addresses/{id}Elimina una dirección
GET/subnetsLista subredes
POST/subnetsCrea una subred
GET/subnets/{id}Obtiene una subred
PATCH/subnets/{id}Modifica una subred
DELETE/subnets/{id}Elimina una subred (las direcciones se conservan)
GET/subnets/{id}/next-freeSiguiente dirección IPv4 libre de la subred
GET/search?q=La misma búsqueda que en la interfaz, con filtros
POST/agent/reportInforme de un agente o recolector
GET/agent/dns/targets?cidr=Direcciones registradas con hostname para comprobar el DNS (permiso agent o read)
POST/agent/dns/reportResultados de la comprobación DNS del recolector
GET/conflictsLista los conflictos
POST/conflicts/{id}Gestiona un conflicto (marcar como visto o resolver)

Campos de dirección

CampoTipoNota
iptextoIPv4 o IPv6. Obligatorio al crear
statustextoused, free, reserved, dhcp, offline o deprecated. Por defecto used
hostnametextoSe guarda en minúsculas
mactextoCualquier notación habitual, se guarda como aa:bb:cc:dd:ee:ff
device, device_typetextoEquipo y tipo de equipo
room, department, site, ownertextoUbicación y responsabilidad
descriptiontextoTexto libre
tagslistaPor ejemplo ["servidor", "produccion"]
customobjetoCampos propios, por ejemplo {"rack": "A12"}
subnet_iduuidSe asigna automáticamente a la subred más específica
source, last_seen_at–Origen (manual, import, agent, scan, api) y visto por última vez
created_at, updated_atfechaISO 8601

Ejemplos

Crear una dirección
curl -X POST https://ipmanager.no/api/v1/addresses \
  -H "Authorization: Bearer $IPM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ip":"10.20.3.41","hostname":"pr-b215","status":"used","room":"B2.15","tags":["impresora"]}'
Modificar una dirección
curl -X PATCH https://ipmanager.no/api/v1/addresses/{id} \
  -H "Authorization: Bearer $IPM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"deprecated","description":"Se sustituye en la semana 42"}'
Crear una subred
curl -X POST https://ipmanager.no/api/v1/subnets \
  -H "Authorization: Bearer $IPM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cidr":"10.20.4.0/24","name":"Alumnos edificio C","vlan":31,"gateway":"10.20.4.1"}'
Siguiente IP libre
curl -H "Authorization: Bearer $IPM_TOKEN" \
  https://ipmanager.no/api/v1/subnets/{id}/next-free
Búsqueda con filtros
curl -G https://ipmanager.no/api/v1/search \
  -H "Authorization: Bearer $IPM_TOKEN" \
  --data-urlencode 'q=status:free in:10.20.0.0/16'

Informe de agente

Agentes y recolectores usan POST /agent/report con una clave con permiso agent. Un agente informa de sus propias interfaces:

Desde un agente
{
  "hostname": "srv01",
  "os": "Linux",
  "interfaces": [
    { "name": "eth0", "ip": "10.0.0.5", "mac": "00:11:22:33:44:55" }
  ]
}
Desde un recolector
{
  "source": "scan",
  "hosts": [
    { "ip": "10.0.0.7", "hostname": "printer-2", "mac": "aa:bb:cc:dd:ee:ff" }
  ]
}
Respuesta
{ "created": 1, "updated": 0, "unchanged": 3, "limited": 0, "errors": [] }

Comprobación DNS

El recolector obtiene primero qué debe comprobar y después comunica el resultado. Consulta la autodetección.

Obtener las direcciones que comprobar
curl -G https://ipmanager.no/api/v1/agent/dns/targets \
  -H "Authorization: Bearer $IPM_TOKEN" \
  --data-urlencode 'cidr=10.20.0.0/16'

{ "suffix": "empresa.local", "targets": [ { "ip": "10.20.0.11", "hostname": "archivos01" } ] }
Comunicar el resultado
POST /api/v1/agent/dns/report
{
  "resolver": "10.20.0.2",
  "results": [
    { "ip": "10.20.0.11", "ptr": ["archivos01.empresa.local"], "forward": ["10.20.0.11"], "forward_checked": true }
  ]
}

{ "checked": 1, "ok": 1, "problems": 0, "unknown": 0 }

Conflictos

GET /conflicts lista los conflictos de la organización, como IP duplicadas, MAC distintas o movidas y desajustes de DNS, con gravedad (critical, warning, info). POST /conflicts/{id} sirve para marcar como visto o resolver un conflicto. Todos los cambios quedan en el registro de auditoría.

Errores

Los errores se devuelven con un código de estado HTTP y un objeto JSON: {"error": "código", "detail": "…"}.

EstadoCódigos habitualesSignificado
400 / 422invalid_ip, invalid_cidr, invalid_mac, invalid_status, invalid_vlan, gateway_outsideDatos no válidos en la petición
401unauthorized, invalid_tokenFalta la clave o no es válida
403insufficient_scope, forbidden, ip_limit_reachedLa clave no tiene permiso o se ha alcanzado el límite de direcciones
404not_foundNo existe en tu organización
409duplicate_ip, duplicate_subnetLa dirección o la subred ya existe

Pon orden en tus direcciones IP hoy

Gratis hasta 100 direcciones IP. Acceso por correo al instante, sin tarjeta.