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
searchstringmax. 200 charstagstringmax. 100 charsownerIdintegerpowerstringone ofon,off,unknownmaintenancestringone oftrue,falseprotectedstringone oftrue,falseidsstringmax. 4000 chars, pattern^\d+(,\d+)*$siteIdinteger | stringone ofnone, > 0rackIdinteger | stringone ofnone, > 0trafficstringone oftrue,falsesortstringone ofid,hostname,servername,os,createdAt,powerStatus, default"id"dirstringone ofasc,desc, default"asc"pageinteger≥ 1, default1perPageinteger≥ 1, ≤ 500, default50
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
hostnamestringrequiredmin. 1 chars, max. 253 chars
servernamestringmax. 253 chars, default
""ownerIdinteger> 0
typestringone of
dedicated,virtual,external, default"dedicated"siteIdinteger | null> 0
bootModestringone of
auto,legacy,uefi, default"auto"pxeMacstring | nullpattern
^([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$descriptionstringmax. 5000 chars, default
""tagsstring[]default
[]bmcobjecttypestringrequiredone of
ipmi,redfish,idrac,ilo,supermicro,xcchoststringrequiredmin. 1 chars, max. 255 chars
portinteger | null≥ 1, ≤ 65535
usernamestringmax. 128 chars, default
""passwordstringmax. 256 chars
vendorstringmax. 32 chars, default
"generic"consoleProviderstring | nullWeb BMC provider; missing or unknown = auto (TenantOS names ilo, hp, idrac, xcc are mapped)
one of
auto,hpe,dell,supermicro,lenovo, max. 32 charsoptionsobject (map)ipmitoolFlagsstringmax. 200 chars
installPowerActionstringone of
cycle,reset,off_onconsoleModestringone of
all,kvm,solconsoleFakeDatestring | nullpattern
^\d{4}-\d{2}-\d{2}$clientUsernamestring | nullmax. 64 chars
clientPasswordstring | nullmax. 128 chars
showCredentialsbooleanconsoleKvmTypestringone of
auto,html5,javaconsoleJavaVersionstringone of
8,11,17,autoconsoleBrowserstringone of
chromium,chromium-legacy-tlsconsoleUserAccountstringone of
stored,temporary,clientconsoleWebPrivilegenumberone of
2consoleLoginBarstringone of
off,admins,allwebConsoleEnabledboolean
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
idinteger> 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
idinteger> 0
Request body
hostnamestringmin. 1 chars, max. 253 chars
servernamestringmax. 253 chars
descriptionstringmax. 5000 chars
osstring | nullmax. 200 chars
ownerIdinteger> 0
siteIdinteger | null> 0
bootModestringone of
auto,legacy,uefitypestringone of
dedicated,virtual,externalipxeBiosFilestring | nullone of
undionly.kkpxe,undionly.kpxeipxeEfiFilestring | nullone of
ipxe.efi,snponly.efipxeMacstring | nullpattern
^([0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$tagsstring[]customFieldsobject (map)suspendedbooleanrackIdinteger | 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
idinteger> 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
idinteger> 0
Request body
protectedbooleanrequiredconfirmstring
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
idinteger> 0
Request body
typestringrequiredone of
ipmi,redfish,idrac,ilo,supermicro,xcchoststringrequiredmin. 1 chars, max. 255 chars
portinteger | null≥ 1, ≤ 65535
usernamestringmax. 128 chars, default
""passwordstringmax. 256 chars
vendorstringmax. 32 chars, default
"generic"consoleProviderstring | nullWeb BMC provider; missing or unknown = auto (TenantOS names ilo, hp, idrac, xcc are mapped)
one of
auto,hpe,dell,supermicro,lenovo, max. 32 charsoptionsobject (map)ipmitoolFlagsstringmax. 200 chars
installPowerActionstringone of
cycle,reset,off_onconsoleModestringone of
all,kvm,solconsoleFakeDatestring | nullpattern
^\d{4}-\d{2}-\d{2}$clientUsernamestring | nullmax. 64 chars
clientPasswordstring | nullmax. 128 chars
showCredentialsbooleanconsoleKvmTypestringone of
auto,html5,javaconsoleJavaVersionstringone of
8,11,17,autoconsoleBrowserstringone of
chromium,chromium-legacy-tlsconsoleUserAccountstringone of
stored,temporary,clientconsoleWebPrivilegenumberone of
2consoleLoginBarstringone of
off,admins,allwebConsoleEnabledboolean
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
idinteger> 0
Request body
enabledbooleanrequiredreasonstringmax. 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
idinteger> 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
idinteger> 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
idinteger> 0
Request body
itemsobject[]requiredcomponentstringrequiredone of
cpu,memory,disk,mainboard,nic,gpu,psu,othermodelstringrequiredmax. 200 chars
valuestringrequiredmax. 100 chars
unitstringmax. 20 chars, default
""serialstring | nullmax. 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
idinteger> 0
Query parameters
nicsboolean | stringone of0,1,true,falsesmartboolean | stringone of0,1,true,falsefirmwareboolean | stringone of0,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
idinteger> 0
Query parameters
historyinteger≥ 0, ≤ 1000, default100
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
idinteger> 0reportIdinteger> 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
idinteger> 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
idinteger> 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
idinteger> 0itemIdinteger> 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
idinteger> 0nicIdinteger> 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
idinteger> 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
idinteger> 0
Request body
bodystringrequiredmin. 1 chars, max. 20000 chars
stickybooleandefault
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
idintegernoteIdinteger
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
idinteger> 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
idinteger> 0
Request body
powerManagementstringone of
bmc,pdu,poe,nonereinstallProviderstringone of
pxe,noneremoteConsolestringone of
bmc,nonepowerUsageSourcestringone 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
idinteger> 0kindstringone ofdhcp,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
idinteger> 0
Example
curl "https://panel.example.com/api/v1/servers/42/bmc/credentials" \
-H "Authorization: Bearer $TRIXOS_TOKEN"