Servers

Servers, their BMC connection, inventory, disk health and notes.

26 endpoints

List servers

#

GET/api/v1/servers

Servers the caller may see, with power state, hardware summary, BMC state, running install task, disk health and firmware state. traffic=true adds bandwidth figures (current rate, 1/7/14/30-day volume, 95th percentiles) for all listed servers in one query. Filters: search, tag, ownerId, power, ids=1,2,3, siteId=<id>|none, rackId=<id>|none (admin).

Query parameters

  • search stringmax. 200 chars
  • tag stringmax. 100 chars
  • ownerId integer
  • power stringone of on, off, unknown
  • maintenance stringone of true, false
  • protected stringone of true, false
  • ids stringmax. 4000 chars, pattern ^\d+(,\d+)*$
  • siteId integer | stringone of none, > 0
  • rackId integer | stringone of none, > 0
  • traffic stringone of true, false
  • sort stringone of id, hostname, servername, os, createdAt, powerStatus, default "id"
  • dir stringone of asc, desc, default "asc"
  • page integer≥ 1, default 1
  • perPage integer≥ 1, ≤ 500, default 50

Example

curl "https://panel.example.com/api/v1/servers" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Add a server

#

POST/api/v1/servers

Admin only

Request body

  • hostnamestringrequired

    min. 1 chars, max. 253 chars

  • servernamestring

    max. 253 chars, default ""

  • ownerIdinteger

    > 0

  • typestring

    one of dedicated, virtual, external, default "dedicated"

  • siteIdinteger | null

    > 0

  • bootModestring

    one of auto, legacy, uefi, default "auto"

  • pxeMacstring | null

    pattern ^([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$

  • descriptionstring

    max. 5000 chars, default ""

  • tagsstring[]

    default []

  • bmcobject
    • typestringrequired

      one of ipmi, redfish, idrac, ilo, supermicro, xcc

    • hoststringrequired

      min. 1 chars, max. 255 chars

    • portinteger | null

      ≥ 1, ≤ 65535

    • usernamestring

      max. 128 chars, default ""

    • passwordstring

      max. 256 chars

    • vendorstring

      max. 32 chars, default "generic"

    • consoleProviderstring | null

      Web BMC provider; missing or unknown = auto (TenantOS names ilo, hp, idrac, xcc are mapped)

      one of auto, hpe, dell, supermicro, lenovo, max. 32 chars

    • optionsobject (map)
    • ipmitoolFlagsstring

      max. 200 chars

    • installPowerActionstring

      one of cycle, reset, off_on

    • consoleModestring

      one of all, kvm, sol

    • consoleFakeDatestring | null

      pattern ^\d{4}-\d{2}-\d{2}$

    • clientUsernamestring | null

      max. 64 chars

    • clientPasswordstring | null

      max. 128 chars

    • showCredentialsboolean
    • consoleKvmTypestring

      one of auto, html5, java

    • consoleJavaVersionstring

      one of 8, 11, 17, auto

    • consoleBrowserstring

      one of chromium, chromium-legacy-tls

    • consoleUserAccountstring

      one of stored, temporary, client

    • consoleWebPrivilegenumber

      one of 2

    • consoleLoginBarstring

      one of off, admins, all

    • webConsoleEnabledboolean
  • rackIdinteger | null

    > 0

  • rackPositioninteger | null

    ≥ 1, ≤ 60

  • rackHeightUinteger

    ≥ 1, ≤ 60

Example

curl -X POST "https://panel.example.com/api/v1/servers" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hostname":"web-01","type":"dedicated","siteId":1,"pxeMac":"aa:bb:cc:dd:ee:ff"}'

List tags in use

#

GET/api/v1/servers/tags

Example

curl "https://panel.example.com/api/v1/servers/tags" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Get a server

#

GET/api/v1/servers/{id}

Path parameters

  • id integer> 0

Example

curl "https://panel.example.com/api/v1/servers/42" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Update a server

#

PATCH/api/v1/servers/{id}

Hostname, description, owner, site, boot mode, PXE MAC and (admin) rack placement: rackId, rackPosition (lowest unit, 1 = bottom, or null) and rackHeightU. Placements are checked for bounds and overlaps (409 names the colliding server); racking a server moves it to the rack’s site.

Path parameters

  • id integer> 0

Request body

  • hostnamestring

    min. 1 chars, max. 253 chars

  • servernamestring

    max. 253 chars

  • descriptionstring

    max. 5000 chars

  • osstring | null

    max. 200 chars

  • ownerIdinteger

    > 0

  • siteIdinteger | null

    > 0

  • bootModestring

    one of auto, legacy, uefi

  • typestring

    one of dedicated, virtual, external

  • ipxeBiosFilestring | null

    one of undionly.kkpxe, undionly.kpxe

  • ipxeEfiFilestring | null

    one of ipxe.efi, snponly.efi

  • pxeMacstring | null

    pattern ^([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$

  • tagsstring[]
  • customFieldsobject (map)
  • suspendedboolean
  • rackIdinteger | null

    > 0

  • rackPositioninteger | null

    ≥ 1, ≤ 60

  • rackHeightUinteger

    ≥ 1, ≤ 60

Example

curl -X PATCH "https://panel.example.com/api/v1/servers/42" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hostname":"web-01","servername":"web-01","description":"Example"}'

Delete a server

#

DELETE/api/v1/servers/{id}

Admin onlyNeeds confirm with the hostname

Requires confirm with the hostname.

Path parameters

  • id integer> 0

Request body

  • confirmstring

Example

curl -X DELETE "https://panel.example.com/api/v1/servers/42" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm":"web-01"}'

Set the protected flag

#

POST/api/v1/servers/{id}/protection

Admin onlyNeeds confirm with the hostname

Legacy flag from the TenantOS migration; it has no effect since 0.4.0.

Path parameters

  • id integer> 0

Request body

  • protectedbooleanrequired
  • confirmstring

Example

curl -X POST "https://panel.example.com/api/v1/servers/42/protection" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"protected":true}'

Set the BMC connection

#

PUT/api/v1/servers/{id}/bmc

Admin only

The password is stored encrypted and never returned.

Path parameters

  • id integer> 0

Request body

  • typestringrequired

    one of ipmi, redfish, idrac, ilo, supermicro, xcc

  • hoststringrequired

    min. 1 chars, max. 255 chars

  • portinteger | null

    ≥ 1, ≤ 65535

  • usernamestring

    max. 128 chars, default ""

  • passwordstring

    max. 256 chars

  • vendorstring

    max. 32 chars, default "generic"

  • consoleProviderstring | null

    Web BMC provider; missing or unknown = auto (TenantOS names ilo, hp, idrac, xcc are mapped)

    one of auto, hpe, dell, supermicro, lenovo, max. 32 chars

  • optionsobject (map)
  • ipmitoolFlagsstring

    max. 200 chars

  • installPowerActionstring

    one of cycle, reset, off_on

  • consoleModestring

    one of all, kvm, sol

  • consoleFakeDatestring | null

    pattern ^\d{4}-\d{2}-\d{2}$

  • clientUsernamestring | null

    max. 64 chars

  • clientPasswordstring | null

    max. 128 chars

  • showCredentialsboolean
  • consoleKvmTypestring

    one of auto, html5, java

  • consoleJavaVersionstring

    one of 8, 11, 17, auto

  • consoleBrowserstring

    one of chromium, chromium-legacy-tls

  • consoleUserAccountstring

    one of stored, temporary, client

  • consoleWebPrivilegenumber

    one of 2

  • consoleLoginBarstring

    one of off, admins, all

  • webConsoleEnabledboolean

Example

curl -X PUT "https://panel.example.com/api/v1/servers/42/bmc" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"ipmi","host":"10.0.0.10","port":623,"username":"admin","password":"secret"}'

Start or end maintenance

#

PUT/api/v1/servers/{id}/maintenance

Admin only

With enabled: true and a reason (at least 3 characters) the server goes into maintenance: customers can’t power it, open the console or reinstall. Sends the webhook event server.maintenance.

Path parameters

  • id integer> 0

Request body

  • enabledbooleanrequired
  • reasonstring

    max. 500 chars, default ""

Example

curl -X PUT "https://panel.example.com/api/v1/servers/42/maintenance" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"reason":"PSU 2 failed, replacement ordered"}'

Show the stored BMC password

#

POST/api/v1/servers/{id}/bmc/reveal-password

Admin only

The password of the BMC account stored in the IPMI device, in plain text (the eye button in Configuration → IPMI device). Admins only; every read is written to the audit log (bmc.password.reveal), limited to 10 per minute, never cached.

Path parameters

  • id integer> 0

Example

curl -X POST "https://panel.example.com/api/v1/servers/42/bmc/reveal-password" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Hardware inventory

#

GET/api/v1/servers/{id}/inventory

CPUs, memory modules, disks, NICs, mainboard, BIOS and BMC, with the source and time of each entry.

Path parameters

  • id integer> 0

Example

curl "https://panel.example.com/api/v1/servers/42/inventory" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Replace the inventory

#

PUT/api/v1/servers/{id}/inventory

Admin only

Manual inventory entries.

Path parameters

  • id integer> 0

Request body

  • itemsobject[]required
    • componentstringrequired

      one of cpu, memory, disk, mainboard, nic, gpu, psu, other

    • modelstringrequired

      max. 200 chars

    • valuestringrequired

      max. 100 chars

    • unitstring

      max. 20 chars, default ""

    • serialstring | null

      max. 100 chars

    • detailsobject (map)

      default {}

Example

curl -X PUT "https://panel.example.com/api/v1/servers/42/inventory" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"component":"cpu","model":"model","value":"value"}]}'

Clear the inventory

#

DELETE/api/v1/servers/{id}/inventory

Admin only

Removes the server’s inventory entries; nics, smart and firmware choose what else is removed.

Path parameters

  • id integer> 0

Query parameters

  • nics boolean | stringone of 0, 1, true, false
  • smart boolean | stringone of 0, 1, true, false
  • firmware boolean | stringone of 0, 1, true, false

Example

curl -X DELETE "https://panel.example.com/api/v1/servers/42/inventory" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Disk health (SMART)

#

GET/api/v1/servers/{id}/smart

The current disks with status (ok, warning, failed, unknown), warnings and lifetime metrics (remaining endurance, estimated years left, data written and read, spare, cycles, CRC errors, last self-test). history=true adds earlier reports.

Path parameters

  • id integer> 0

Query parameters

  • history integer≥ 0, ≤ 1000, default 100

Example

curl "https://panel.example.com/api/v1/servers/42/smart" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

One SMART report

#

GET/api/v1/servers/{id}/smart/{reportId}

The full report of one disk with its metrics.

Path parameters

  • id integer> 0
  • reportId integer> 0

Example

curl "https://panel.example.com/api/v1/servers/42/smart/1" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Read firmware versions now

#

POST/api/v1/servers/{id}/inventory/firmware

Reads BIOS and BMC versions from the BMC (read-only).

Path parameters

  • id integer> 0

Example

curl -X POST "https://panel.example.com/api/v1/servers/42/inventory/firmware" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Read the hardware from the BMC (read-only) into the inventory

#

POST/api/v1/servers/{id}/inventory/bmc

Admin only

Read the hardware (CPUs, DIMMs, disks, storage controllers, NIC ports, PSUs, system board) from the BMC now and store it as inventory rows with source "bmc": Redfish where the BMC has it, else IPMI FRU / SDR. Read-only on the BMC, so protected servers too. Per component, rows from an OS scan, the TenantOS import or entered by hand stay and the BMC data is dropped (kept).

Path parameters

  • id integer> 0

Example

curl -X POST "https://panel.example.com/api/v1/servers/42/inventory/bmc" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Delete one inventory entry

#

DELETE/api/v1/servers/{id}/inventory/items/{itemId}

Admin only

Remove one component (a stale DIMM, a replaced disk, …) from the inventory.

Path parameters

  • id integer> 0
  • itemId integer> 0

Example

curl -X DELETE "https://panel.example.com/api/v1/servers/42/inventory/items/ITEMID" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Delete one network card

#

DELETE/api/v1/servers/{id}/inventory/nics/{nicId}

Admin only

Remove one network card from the inventory.

Path parameters

  • id integer> 0
  • nicId integer> 0

Example

curl -X DELETE "https://panel.example.com/api/v1/servers/42/inventory/nics/NICID" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

List notes

#

GET/api/v1/servers/{id}/notes

Path parameters

  • id integer> 0

Example

curl "https://panel.example.com/api/v1/servers/42/notes" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Add a note

#

POST/api/v1/servers/{id}/notes

Path parameters

  • id integer> 0

Request body

  • bodystringrequired

    min. 1 chars, max. 20000 chars

  • stickyboolean

    default false

Example

curl -X POST "https://panel.example.com/api/v1/servers/42/notes" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"Replaced PSU 2 on 2026-11-08","sticky":false}'

Delete a note

#

DELETE/api/v1/servers/{id}/notes/{noteId}

Path parameters

  • id integer
  • noteId integer

Example

curl -X DELETE "https://panel.example.com/api/v1/servers/42/notes/3" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Configuration of a server

#

GET/api/v1/servers/{id}/config

Everything the Configuration tab shows. Admins get all sections (connections, IPMI device without passwords, DHCP / PXE, switch ports with PoE, PDU outlets, choices). Admins also get bmc.webConsoleEnabled (the BMC web interface is offered at all). Owners get the main details, which consoles the server offers (bmc.webConsole: the BMC web interface with an account of their own) and whether they may read the client BMC account (bmc.credentialsAvailable).

Path parameters

  • id integer> 0

Example

curl "https://panel.example.com/api/v1/servers/42/config" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

Assigned connections of a server

#

PUT/api/v1/servers/{id}/connections

Admin only

Which connection does what: powerManagement bmc (IPMI / Redfish), pdu (all mapped PDU outlets switch together), poe (the PoE switch port with control method SNMP) or none (no power actions, no PXE jobs); reinstallProvider pxe or none (no reinstall, rescue, inventory scan, wipe); remoteConsole bmc or none (no KVM / serial console); powerUsageSource for the power graph (auto = PDU outlets when metered, else the BMC sensor). Admins only.

Path parameters

  • id integer> 0

Request body

  • powerManagementstring

    one of bmc, pdu, poe, none

  • reinstallProviderstring

    one of pxe, none

  • remoteConsolestring

    one of bmc, none

  • powerUsageSourcestring

    one of auto, pdu, bmc, none

Example

curl -X PUT "https://panel.example.com/api/v1/servers/42/connections" \
  -H "Authorization: Bearer $TRIXOS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"powerManagement":"bmc","reinstallProvider":"pxe","remoteConsole":"bmc"}'

Remove a connection from a server

#

DELETE/api/v1/servers/{id}/connections/{kind}

Admin only

The DELETE button of a connection card (TenantOS style). dhcp: clears the PXE MAC (no DHCP answers for this server); pxe: reinstallation provider none, boot mode auto and the default iPXE files; switch: unmaps every switch port of the server; pdu: unmaps every PDU outlet of the server; power-usage: no power graph. Removing the PDU or switch connection that powers the server moves power management back to the BMC (or none without one). The main details and the IPMI device cannot be removed here. Admins only; refused while a PXE job of the server runs (dhcp, pxe).

Path parameters

  • id integer> 0
  • kind stringone of dhcp, pxe, switch, pdu, power-usage

Example

curl -X DELETE "https://panel.example.com/api/v1/servers/42/connections/KIND" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"

BMC access for the customer

#

GET/api/v1/servers/{id}/bmc/credentials

Address and the client BMC account (username and password) of a server, when an admin entered a client account and allowed showing it ("Show IPMI credentials"). Owners and admins; the admin account of the BMC is never returned. Every read is written to the audit log.

Path parameters

  • id integer> 0

Example

curl "https://panel.example.com/api/v1/servers/42/bmc/credentials" \
  -H "Authorization: Bearer $TRIXOS_TOKEN"