Skip to content

Infrastructure

The Infrastructure Aether models your physical estate — from geography down to the cables and power feeds inside a rack. It’s the most complete Aether and the best place to start.

The Devices list with status, site, and rack columns
The Devices list with status, site, and rack columns

Two chains meet at the device:

  • Geography (top-down): Region → Site → Location → Rack. Build this first so there’s somewhere to place hardware.
  • Catalogue (build-up): Manufacturer → Platform / Device Role → Device Type. This describes what a device is, independently of where it sits.

A Device then references a place (site, location, rack, position) and a catalogue entry (type, role, platform, manufacturer).

Sites plotted on the world map by their coordinates
Sites plotted on the world map by their coordinates

The physical hierarchy. Build it top-down so there’s somewhere to place hardware.

Geographic groupings for sites — countries, metros, or whatever rollup suits your estate. A site belongs to at most one region; regions carry no parent of their own.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
slugstring · uniqueURL-safe identifier; auto-derived from name when omitted.
descriptionstringFree-form notes.

APIGET/POST /api/regions, GET/PATCH/DELETE /api/regions/{id}. Search spans name, slug, and description.

Buildings or facilities — the level addresses and coordinates live at. A site optionally rolls up to a region and is the anchor most other records ultimately trace back to.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
slugstring · uniqueURL-safe identifier; auto-derived when omitted.
statusenumactive · planned · retired (default active).
regionIduuid → RegionOptional parent region.
facilitystringOperator / facility name.
addressstringPostal address.
latitude / longitudedecimalPlots the site on the map view; bounds enforced (±90 / ±180).
descriptionstringFree-form notes.

APIGET/POST /api/sites, GET/PATCH/DELETE /api/sites/{id}.

Rooms, halls, floors, or areas within a site — the level racks actually live in. A location optionally references a site and can carry its own address and coordinates so it can be placed as a finer drill-down on the map.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
slugstringURL-safe identifier; auto-derived when omitted (not unique).
siteIduuid → SiteOptional parent site.
statusstringLifecycle status (default active).
addressstringPostal address.
latitude / longitudedecimalOptional coordinates; bounds enforced (±90 / ±180).
descriptionstringFree-form notes.

APIGET/POST /api/locations, GET/PATCH/DELETE /api/locations/{id}.

Cabinets within a site / location, each with a unit-addressed elevation (a height in U that devices are positioned against). The rack detail view renders a front/rear elevation showing which units are occupied.

The Racks page navigates hall by hall — pick a hall (or all of them) and use the toolbar’s “Find rack…” search to filter the elevations and floor grid, jumping straight to a unique match. Power figures auto-scale with the estate (kW below a megawatt, then MW, then GW; CSV exports stay in raw kW). Give a hall real width × length dimensions and it unlocks a to-scale 3D view and designer: the auto-layout places only what the floor can hold — overflow racks wait in an Unplaced tray until you place them — and the designer supports multi-select (shift+click, shift+drag marquee), group move and rotate with collision checking, arrow-key nudge, and undo.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
siteIduuid → SiteOptional site.
locationIduuid → LocationOptional location.
unitsintegerHeight in rack units (default 42).
statusstringFree-form lifecycle string (default active).

APIGET/POST /api/racks, GET/PATCH/DELETE /api/racks/{id}, plus POST /api/racks/bulk ({ items[] }, max 5000) for large-estate imports. List accepts ?siteId= and ?locationId= (UUID or none).

What a device is, described once and reused across every unit you place.

The catalogue is a two-tier model. Rows with source: 'vendor' ship with Aethers and are maintained by the catalog importer — they’re read-only. Rows with source: 'customer' are yours, created via UI/API and never touched by the importer. To edit a vendor row, clone it (POST .../{id}/clone) to get an editable customer-owned copy.

Hardware vendors — Cisco, Juniper, Dell, and the rest. Referenced by platforms, device types, and devices.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
slugstring · uniqueURL-safe identifier; auto-derived when omitted.
descriptionstringFree-form notes.
productFocusstringWhat the vendor primarily builds.
websitestringVendor URL.
notesstringFree-form notes.
popularbooleanPins the row in pickers (default false).
sourceenumvendor (read-only) · customer (default customer).

APIGET/POST /api/manufacturers, GET/PATCH/DELETE /api/manufacturers/{id}, plus POST /api/manufacturers/{id}/clone.

The network OS a device runs (IOS-XE, NX-OS, Junos, …) — used to group devices by software and to drive port-naming when interfaces are materialised. The nosFamily value feeds the per-vendor port-naming convention.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
slugstring · uniqueURL-safe identifier; auto-derived when omitted.
manufacturerIduuid → ManufacturerOptional vendor.
descriptionstringFree-form notes.
nosFamilystringNOS family; drives port-name conventions on devices.
typicalDevicesstringHardware this NOS typically runs on.
keyFeaturesstringNotable capabilities.
commonUseCasesstringWhere it fits.
commercialStatusenumactive · eos · eol · limited · open-source.
automationApisstring[]From NETCONF · RESTCONF · gNMI · gRPC · eAPI · NX-API · JSON-RPC · REST · YANG · NDK · SNMP · Cloud-only.
popularbooleanPins the row in pickers (default false).
sourceenumvendor (read-only) · customer (default customer).

APIGET/POST /api/platforms, GET/PATCH/DELETE /api/platforms/{id}, plus POST /api/platforms/{id}/clone. List accepts ?manufacturerId= (UUID or none) for the manufacturer → platforms rollup.

The function a device serves in the topology — leaf, spine, firewall, console server. Roles carry a colour so they read at a glance in lists and elevations.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
slugstring · uniqueURL-safe identifier; auto-derived when omitted.
colorstringHex swatch (default #4F6EF7).
descriptionstringFree-form notes.
tierenumOne of access · distribution · core · spine · leaf · border-leaf · ai-fabric · edge · sp-edge · sp-core · customer-edge · branch · security · wireless · storage · compute · mgmt · optical · dci · passive · monitoring.
redundancyenumoptional · recommended · required.
complianceBaselinesstring[]Baselines the role must meet (default []).
vmRolebooleanMarks a virtual-machine role (default false).
typicalLocationstringWhere it usually sits.
responsibilitiesstringWhat it does.
popularbooleanPins the row in pickers (default false).
sourceenumvendor (read-only) · customer (default customer).

APIGET/POST /api/device-roles, GET/PATCH/DELETE /api/device-roles/{id}, plus POST /api/device-roles/{id}/clone.

The model in the catalogue — form factor, height in rack units, power draw, and the module definitions that ports are materialised from. Define the type once; every device of that model inherits it.

Fields

FieldTypeNotes
namestring · requiredModel name (also keys the built-in port templates).
slugstring · uniqueURL-safe identifier; auto-derived when omitted.
manufacturerIduuid → ManufacturerOptional vendor.
descriptionstringFree-form notes.
modelFamilystringProduct line.
formFactorenumfixed · stackable · modular-chassis · half-rack · compact, or a U size (0.5U21U).
rackUnitsdecimalHeight consumed in U.
airflowenumfront-to-back · back-to-front · reversible · side-to-side · passive.
weightKgdecimalWeight in kg.
powerIdleW / powerMaxWintegerIdle / max draw in watts.
poeBudgetWintegerPoE budget in watts.
keyFeaturesstringNotable capabilities.
typicalDeploymentstringWhere it fits.
asicChipsetstringSwitching ASIC.
defaultPlatformIduuid → PlatformDefault NOS for devices of this type.
defaultRoleIduuid → Device RoleDefault role for devices of this type.
popularbooleanPins the row in pickers (default false).
sourceenumvendor (read-only) · customer (default customer).
statusenumactive · announced · eos · eol (default active).

Modules (device_type_modules) are the swappable uplink / line-card SKUs that extend a chassis (e.g. C9300-NM-4G). Each carries a sku, name, slotLabel, connectorType, speeds[], portCount, poeStandard/poeWatts, and a sortOrder. They’re nested under their device type and managed at GET/POST /api/device-types/{id}/modules and PATCH/DELETE /api/device-types/{id}/modules/{moduleId}.

APIGET/POST /api/device-types, GET/PATCH/DELETE /api/device-types/{id}, plus POST /api/device-types/{id}/clone and the nested module routes above. List accepts ?manufacturerId=, ?defaultPlatformId=, and ?defaultRoleId= (UUID or none).

A device type with its rack-unit, power, and module/port definitions
A device type with its rack-unit, power, and module/port definitions

The records that reference everything above, plus the cabling and power that tie them together.

Physical units placed in racks. A device references a place (site, location, rack, position) and a catalogue entry (type, role, platform, manufacturer). platform (free-text, inline-editable) coexists with the canonical platformId FK; model mirrors the linked device type’s name.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
statusenumactive · planned · staged · offline · decommissioned (default active).
siteIduuid → SiteOptional placement.
locationIduuid → LocationOptional placement.
rackIduuid → RackOptional placement; required when position is set.
manufacturerIduuid → ManufacturerOptional.
deviceRoleIduuid → Device RoleOptional.
deviceTypeIduuid → Device TypeOptional; drives port auto-materialisation on create.
positionintegerLowest rack unit occupied (≥ 1); needs a rackId.
uHeightintegerUnits consumed (default 1).
platformstringFree-text NOS label (inline-editable).
platformIduuid → PlatformCanonical NOS link.
modelstringMirrors the linked device type’s name.
primaryIpstringManagement IP.
tagsstring[]Chip strip (default []).
serialNumber / assetTagstringIdentifiers.
description / notesstringFree-form.

APIGET/POST /api/devices, GET/PATCH/DELETE /api/devices/{id}. Extra routes: POST /api/devices/bulk ({ items[] }, max 2000; materialisePorts defaults true), aggregates GET /api/devices/stats, /api/devices/by-site, /api/devices/by-manufacturer, the nested ports routes (GET/POST /api/devices/{id}/ports, PATCH/DELETE /api/devices/{id}/ports/{portId}, POST /api/devices/ports/bulk), and read-only GET /api/devices/{id}/ips. List filters: ?status=, ?siteId=, ?locationId=, ?manufacturerId=, ?deviceTypeId=, ?deviceRoleId=, ?platformId=, ?rackId= (each a UUID or none).

Device ports — Ethernet, console, management, and power inlets. Backed by the device_ports table (there’s no separate “interfaces” table); the page is CRUD over ports, addressable per device or across the whole estate.

Fields

FieldTypeNotes
deviceIduuid → Device · requiredOwning device (cascade-deletes).
namestring · requiredInterface name.
portTypestringIEEE-ish media string (default 1000base-t).
statusenumenabled · disabled · planned (default enabled).
linkStatusenumup · down · unknown (default up).
peerstringFree-text far end (cable peers override in the UI).
vlanstringVLAN assignment.
lldpstringLLDP neighbour.
errsintegerError counter (default 0).
portGroupLabelstringSectional heading on the Interfaces tab.
portIndexintegerOrdinal; default list sort.
connectorTypestringe.g. RJ45, SFP28, QSFP28.
speedsstring[]Negotiable speeds (default []).
poeStandard / poeWattsstring / integerPoE class + budget.
transceiverstringInstalled optic.
mgigbooleanMulti-gig capable (default false).
breakoutCapablebooleanSupports breakout (default false).
moduleSlotstringOwning module slot.
macAddressstringBurnt-in address.
descriptionstringFree-form notes.

APIGET/POST /api/interfaces, GET/PATCH/DELETE /api/interfaces/{id}. List accepts ?deviceId= to scope to one device. The same rows are also reachable via the device-nested ports routes under /api/devices/{id}/ports.

The Interfaces tab listing a device's ports
The Interfaces tab listing a device's ports

Physical interconnect between two device ports, recording both endpoints so you can trace a path end to end. The list/detail responses are enriched server-side with each end’s device and port name.

Fields

FieldTypeNotes
labelstringOptional label.
typeenum · requiredcat5e · cat6 · cat6a · cat7 · cat8 · fiber-mm · fiber-sm · sfp · qsfp · dac · aoc · power · usb · serial · other.
statusenumconnected · planned · decommissioning (default connected).
colorstringJacket colour.
lengthdecimalNumeric length.
lengthUnitenumm · cm · ft · in.
aPortIduuid → Interface · requiredA-end port (cascade-deletes).
bPortIduuid → Interface · requiredB-end port (cascade-deletes).
descriptionstringFree-form notes.

APIGET/POST /api/cables, GET/PATCH/DELETE /api/cables/{id}, plus POST /api/cables/bulk ({ items[] }, max 5000).

A rack elevation showing units occupied by devices
A rack elevation showing units occupied by devices

The physical distribution point that delivers power to downstream feeds (and through them, to racks and devices) — the upstream side of the power chain. A panel is always attached to a site, and optionally a location and rack.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
siteIduuid → Site · requiredOwning site (delete-restricted).
locationIduuid → LocationOptional location.
rackIduuid → RackOptional rack.
voltageinteger · requiredVolts (1–10000).
phaseenumsingle · three (default single).
amperageinteger · requiredAmps (1–10000).
statusenumactive · planned · offline (default active).
descriptionstringFree-form notes.

APIGET/POST /api/power-panels, GET/PATCH/DELETE /api/power-panels/{id}. List accepts ?siteId= and ?rackId= (UUID or none).

One circuit running off a panel — typically to a rack, so the devices in that rack draw power from a known feed. type captures primary-vs-redundant for A/B feed pairs. A device’s Power tab surfaces the feeds available to its rack.

Fields

FieldTypeNotes
namestring · requiredDisplay name.
powerPanelIduuid → Power Panel · requiredUpstream panel (cascade-deletes).
rackIduuid → RackOptional rack served.
typeenumprimary · redundant (default primary).
supplyenumAC · DC (default AC).
phaseenumsingle · three (default single).
voltageinteger · requiredVolts (1–10000).
amperageinteger · requiredAmps (1–10000).
maxUtilizationintegerTarget ceiling in % (1–100, default 80).
statusenumactive · planned · offline (default active).
commentsstringFree-form notes.

APIGET/POST /api/power-feeds, GET/PATCH/DELETE /api/power-feeds/{id}, plus POST /api/power-feeds/bulk ({ items[] }, max 5000). List accepts ?powerPanelId= and ?rackId= (UUID or none).

Power feeds drawn from a panel, with utilisationpublic/screenshots/infrastructure-power-feeds.png
  • Rack positioning is overlap-checked. A device’s unit range can’t collide with another device in the same rack; a position must be paired with a rackId.
  • Ports auto-materialise on create. A new device generates its ports from the device type’s fixed modules, the built-in template map, or name inference — whichever resolves first — so a new switch arrives with its interfaces populated.
  • Catalogue rows are two-tier. source: 'vendor' rows are read-only; clone one to get an editable customer-owned copy.
  • Bulk endpoints exist for racks, devices, ports, cables, and power feeds when importing at scale — they trade per-row validation for throughput.

Every module above is exposed under the matching path in the API reference. List endpoints are paginated and accept page, pageSize, search, sort, and order, returning { data, total, page, pageSize, hasMore }.