Servers with a hardware problem, with the failing drive and a link to the
job that failed. Neither action here resolves anything —
powering a server off and acknowledging it both leave its NetBox status and
failed test result untouched, so it stays out of the sellable pool until a
fresh wipe and test pass. A failed RAID configuration carries its own two
steps (Mark RAID resolved, then Run discovery), offered on
its card by what the API reports its state to be.
Some sources could not be checked. This list may be
incomplete — treat it as a partial answer, not an all-clear.
Loading…
Active Operations
0
No active operations
Job Activity Log
Server
IPMI
Type
Status
Step
Started
Duration
Loading...
Job detail
Loading...
Interactive Testing Console
Test API endpoints with live requests
GET
Bandwidth Billing Mappings
/api/v2/bandwidth/admin/services
Service → LibreNMS bill mappings. Preview computes the current/previous overage; Run (dry) previews the WHMCS push; Run (charge) pushes it.
Response
POST
Create Bandwidth Billing Mapping
/api/v2/bandwidth/admin/services
Map a WHMCS service to a LibreNMS traffic bill (adopt an existing bill or auto-create one). Pick the client, the service, and the interface(s) — no id typing.
…or enter a WHMCS service id manually (for colo/edge clients not in the active dropdown):
Response
POST
Run Bandwidth Billing
/api/v2/bandwidth/admin/run
Read the previous (closed) LibreNMS period, compute overage, and (unless dry-run) push it to WHMCS. Idempotent per (service, period).
Response
GET
LLM Billing Mappings
/api/v2/llm/admin/services
WHMCS service → per-token LLM billing. Grant trial credit, preview the period, and run billing (idempotent per period). Usage is metered from the inference proxy.
Response
POST
Onboard a client to LLM inference (with optional trial credit)
/api/v2/llm/admin/services
Map a WHMCS service to per-token pricing. Grant a trial credit ($ of free usage) to attract the client; enable "enforce credit limit" so a trial can't overrun before they add a payment method.
…or enter a WHMCS service id manually:
Response
POST
Run LLM Billing
/api/v2/llm/admin/run
Aggregate the previous (closed) period's tokens, apply trial credit, and (unless dry-run) push the net overage to WHMCS. Idempotent per (service, period).
Response
POST
Cluster Lifecycle
/api/v2/baremetal/clusters/*
Adopt an existing hand-built PVE cluster, then add or remove nodes. Distinct from Clusters above, which is the read-only NetBox mirror — this drives the real lifecycle. Every action previews first; nothing is applied until you confirm.
Tracked clusters
Clusters core-api can add nodes to. A hand-built cluster must be adopted once before it appears here.
Add a node
Installs the OS and joins the node to the cluster. This wipes the target server's disks.
Data pool (optional second ZFS pool)
For a node whose OS is on one disk and whose VM storage is a mirror of others. Name it to match the storage the cluster already expects, or that storage will be inactive on this node.
Preview first; the apply button unlocks only after a preview that the server accepted.
Remove a node
Removes one node and keeps the rest quorate. The node is released and wiped.
Adopt an existing cluster
Registers a hand-built PVE cluster so it can be managed here. Read-only against the infrastructure — it records what the cluster already is and changes nothing on the switch, the hosts or NetBox.
GET
Virtualization Clusters
/api/v2/admin/proxmox-nodes/clusters
NetBox virtualization clusters (from the read-only PVE mirror) with node + VM counts. Click a cluster to drill into its member hypervisors and every VM — current host, vCPU/RAM/disk, storage backend, CPU vendor, HA, and backup coverage.
Virtual Machines
GET
Proxmox Node Registry
/api/v2/admin/proxmox-nodes
Register Proxmox endpoints (a standalone node or a per-site cluster). Nodes can't be clustered across sites, so each location is its own endpoint. The API token secret is encrypted at rest (never shown). Test probes /version + node-online live.
Register a node
Response
POST
Provision VM
/api/v2/baremetal/vms/provision
Clone a golden template on a registered node, optionally attach whole GPUs by PCI bus address, put the service NIC on a subnet, claim one host IP, cloud-init it. GPUs optional — serves GPU and plain VMs alike. Runs as a background job.
…or enter a template VMID manually (templates are per node; the same VMID can be a different OS on another node):
…or enter a CIDR manually (blank = site default pool):
Look up a VM's NetBox record + live Proxmox status, or tear it down (destroy the Proxmox VM + free its NetBox IPs). Deprovision requires typed confirmation.
Live GPU pool (passthrough-mapped, free/assigned) + last burn-in result per GPU. Sync reflects the pool into NetBox inventory items. Burn-in provisions a throwaway 1-GPU VM, runs gpu-burn, scores PASS/FAIL, and deprovisions — sequential per node.
Run burn-in
Check GPUs in the table above, then burn the selected ones — or burn the whole pool.
Response
GET
VM VLAN Coverage
/api/v2/admin/proxmox-nodes/{id}/vlan-coverage
Does every VM's VLAN reach the node it runs on — and every node it can migrate or fail over to? A tagged NIC on a bond-backed bridge needs its VLAN on each node's trunk. Broken = missing on its current node; breaks on migration = missing on another node (the Smart Proxy VM was migrated to a node without VLAN 2002 and all PXE at the site stopped). Read-only.
Response
POST
Provision Port for Foreman
/api/v2/port/provision
Configure a switch port for Foreman bare metal provisioning. This looks up the server in NetBox,
traces the cable to find the connected switch port, saves the current configuration, and sets
the port to access mode with the Foreman VLAN.
Request Body
Server device label from NetBox
VLAN ID (uses default from config if not specified)
Restore a switch port to its original configuration after provisioning is complete.
This finds the backup, restores the original configuration, and marks the backup as restored.
Request Body
Server device label from NetBox
WHMCS service ID (for logging)
Response
Click "Send Request" to see the response
GET
Get Port Status
/api/v2/port/status/{device_label}
Get the current status of a switch port and any associated backups.
Path Parameters
Server device label from NetBox
Response
Click "Send Request" to see the response
GET
Device VLANs
/api/v2/port/bond/vlans/{device_label}
List every VLAN NetBox has for the device — each labeled native (untagged)
or tagged — plus existing subnets reusable for a new VLAN.
Path Parameters
Server device label from NetBox
Response
Click "Send Request" to see the response
POST
Assign VLANs to Bond
/api/v2/port/bond/vlans
Assign one or more VLANs from the site's customer VLAN group to a server's
bond trunk and (optionally) build the switch. One VLAN may be native; each
VLAN may auto-allocate a subnet, reuse an existing one, or be L2-only.
Limited to 5 VLANs (QinQ beyond that).
Request
Required: the device must have a client/tenant assigned in NetBox. The VLAN, its subnet, and every IP (gateway, server, network, broadcast) are owned by that tenant. Enter a device to check; a non-dry-run assign with no tenant returns 400.
VLANs
Must equal CONFIGURE-VLANS-{device_label}
Response
Click "Send Request" to see the response
POST
Build Private Cluster VLAN
/api/v2/port/bond/cluster-vlan
Create ONE private (RFC1918/VRF, L2-only) VLAN and assign it to several selected
servers in one call — e.g. a Proxmox cluster's private network. All nodes must
share a switch (cross-switch selections are refused — inter-switch trunking to the
private core is a later phase). Each node's bond trunk is rebuilt as a background job.
Check for a pure cluster segment (corosync/migration/Ceph). Unchecked reserves the .1 firewall gateway (unassigned).
Must equal CONFIGURE-CLUSTER-VLAN-{N} where N is the number of devices (auto-filled).
Response
Click "Build Cluster VLAN" to run (dry-run to preview the switch grouping first)
POST
Change Native (Management) VLAN
/api/v2/port/bond/native-vlan
The ONLY endpoint that changes which VLAN is native (untagged/management) on a
server's bond0 — assign/cluster/attach never touch the native. The target VLAN
must already be a bond0 member. Demotes the old native to tagged, promotes the
target, and rebuilds the switch. Changing the native can interrupt
management access (IPMI-level recovery if it goes wrong) — use carefully.
Changing the native/management VLAN can cut off access to the server. The target VLAN must already be assigned/attached to this device.
Enter the device, then Load to pick from its current VLANs (the one marked NATIVE is the current management VLAN).
Response
Dry-run first to preview the native change
POST
Reconcile / Onboard Device (admin)
/api/v2/port/bond/reconcile
One screen to onboard a hand-racked server: model the bond (eth0/eth1→bond0),
stamp NIC MACs from the BMC over Redfish (no PXE needed) with a
10G confirmation check, record the IPMI address + admin
credentials (ARPHost-Private VRF + custom fields), and reflect the live
switch trunk's VLANs into NetBox. Optionally auto-create the cabling from the rack
standard. Always dry-run first — the preview makes zero writes.
Recorded on the device's ipmi interface (ARPHost-Private VRF) and set as the device Out-of-band IP. Bare host follows the rack's subnet (default /26). Leave blank to reuse the IPMI address/creds already in NetBox.
Stored in NetBox ipmi_admin_username/ipmi_admin_password custom fields. Never echoed back.
Response
Dry-run first to preview cabling, MACs, 10G check, IPMI, and VLAN reflect
POST
Release VLANs from Bond
/api/v2/port/bond/vlans/release
Release/delete customer VLANs from a server's bond: removes membership,
frees IPs/prefixes, deletes the VLAN records, and tears down the switch
(reverts the ae to LACP-only when the last VLAN is removed). Use this
instead of admin IP release for bonded VLAN devices.
Request
Must equal RELEASE-VLANS-{device_label}
Response
Click "Send Request" to see the response
POST
Add IPv4/IPv6 to a VLAN
/api/v2/port/bond/vlans/add-family
Add one address family's subnet (prefix + gateway + server host IP + Network/Broadcast) to an existing VLAN on a server's bond, then build the irb gateway on the switch.
Response
Click "Send Request" to see the response
POST
Remove IPv4/IPv6 from a VLAN
/api/v2/port/bond/vlans/release-family
Delete just one address family's subnet (host IPs + gateway + prefix) from a VLAN on a server's bond — keeps the VLAN + the other family — and drops irb.{vid} family inet/inet6 on the switch.
Response
Click "Send Request" to see the response
POST
Create Customer Shared VLAN
/api/v2/port/bond/shared-vlans
Create a tenant-owned shared VLAN + public subnet that multiple servers can attach to. No server is attached yet — use Attach afterward.
Request
Required: the device must have a client/tenant assigned in NetBox (the shared VLAN + subnet + every IP are owned by it). Enter a device to check; no tenant returns 400.
By default a v6 /64 is allocated too (dual-stack) when the site has an IPv6 pool. Check to create IPv4-only.
A PRIVATE shared VLAN: subnet in the client VRF, VLAN carried L2-only on the switch (no irb), gateway (.1) is the firewall. Requires an RFC1918 CIDR below. Public and private never mix on one VLAN. (IPv4-only; ignores prefix_length/skip_ipv6.)
Allocate a v6 /64 (gateway ::1) for an existing shared VLAN and rebuild attached servers' switch so irb.{vid} gets its v6 gateway. Use the vlan_netbox_id (not the VID). 400 if it already has IPv6.
Pick a site, Load, then choose the shared VLAN — no need to look up the NetBox id.
Response
Click "Send Request" to see the response
GET
Shared VLAN Info
/api/v2/port/bond/shared-vlans/{vlan_netbox_id}
Show a shared VLAN's subnet, attached servers, and IP usage.
Add a server to the shared VLAN — claims the next host IP from the shared subnet and builds that server's trunk.
Enter the server — it must belong to the same client/tenant as the shared VLAN. Its tenant will show here.
Enter the device, then Load to pick a VLAN (no need to look up the NetBox id).
For a private VLAN with several subnets (one per downstream client), choose which subnet's host IP to claim. See the VLAN's subnets[] from the shared-VLAN detail.
Uncheck for a hypervisor — the server joins the VLAN as a trunk member with no host IP; VMs claim IPs per-VM.
Remove a server from the shared VLAN — frees just that server's IP and rebuilds its trunk. The VLAN+subnet is deleted only when the last server detaches.
Enter the device, then Load to pick the VLAN to detach.
Response
Click "Send Request" to see the response
GET
List Configuration Backups
/api/v2/port/backups
List all port configuration backups with optional filtering by status and device.
Query Parameters
Response
Click "Send Request" to see the response
GET
Get Backup Details
/api/v2/port/backups/{backup_id}
Get detailed information about a specific configuration backup.
Path Parameters
Response
Click "Send Request" to see the response
DELETE
Delete Backup Record
/api/v2/port/backups/{backup_id}
Delete a backup record from the database. This does NOT restore the port configuration.
Path Parameters
Response
Click "Delete Backup" to see the response
GET
Health Check
/api/v2/health
Basic health check endpoint. No authentication required.
Response
Click "Send Request" to see the response
GET
Get My Server Power Status
/api/v2/tenant-power/power/{device_label}
Query the current power state of your server using tenant IPMI credentials.
Path Parameters
Select your server from the dropdown
Response
Click "Send Request" to see the response
POST
Reboot My Server
/api/v2/tenant-power/reboot
Reboot your server using tenant IPMI credentials. Requires a safety confirmation string.
Request Body
Select your server from the dropdown
Auto-generated safety confirmation string
Force mode performs a hard power off then on. Use only for unresponsive servers.
Response
Click "Reboot Server" to see the response
POST
Power On My Server
/api/v2/tenant-power/power/on/{device_label}
Power on your server using tenant IPMI credentials. This is a safe, non-destructive operation.
Path Parameter
Select your server from the dropdown
Response
Click "Power On" to see the response
POST
Power Off My Server
/api/v2/tenant-power/power/off
Power off your server using tenant IPMI credentials. Supports graceful (ACPI) and force (hard) shutdown modes.
Request Body
Select your server from the dropdown
Auto-generated safety confirmation string
Warning: Force power off can cause data loss and filesystem corruption!
Response
Click "Power Off" to see the response
POST
Update IPMI Credentials
/api/v2/tenant-power/credentials
Update your server's IPMI credentials. The new credentials will be tested against the BMC before being saved.
Request Body
Select your server from the dropdown
New IPMI username (max 16 characters)
New IPMI password (8-20 characters)
Response
Click "Update Credentials" to see the response
GET
Get Server Power Status
/api/v2/server/power/{device_label}
Query the current power state of a server via IPMI/BMC. Returns whether the chassis is powered on, off, or unknown.
Path Parameters
Server device label from NetBox (asset tag or name)
Response
Click "Send Request" to see the response
POST
Reboot Server via IPMI
/api/v2/server/reboot
Reboot a server using IPMI/BMC out-of-band management. Requires a safety confirmation string.
Request Body
Server device label from NetBox
Auto-generated safety confirmation string
Force mode performs a hard power off then on. Use only for unresponsive servers.
Response
Click "Reboot Server" to see the response
POST
Power On Server
/api/v2/server/power/on/{device_label}
Power on a server that is currently off via IPMI/BMC. If the server is already on, this has no effect.
This is a safe, non-destructive operation that does not require confirmation.
Path Parameter
Server device label from NetBox
Response
Click "Power On" to see the response
POST
Power Off Server
/api/v2/server/power/off
Power off a server via IPMI/BMC. Supports graceful (ACPI) and force (hard) shutdown modes.
Request Body
Server device label from NetBox
Auto-generated safety confirmation string
Warning: Force power off can cause data loss and filesystem corruption!
Response
Click "Power Off" to see the response
POST
IPMI Hardware Query (Read-Only)
/api/v2/server/query/{device_label}
Query server hardware information via IPMI FRU data. This is a read-only out-of-band query
that works even when the server is powered off. Returns basic hardware info as reported by the BMC
(varies by vendor). Does not update NetBox.
For comprehensive hardware discovery with NetBox updates:
Use POST /api/v2/baremetal/lifecycle/{device}/test which boots the server and collects detailed OS-level inventory.
Path Parameter
Server device label from NetBox
Response
Click "Query IPMI" to see the response
GET
Inventory Product Coverage
Admin Only
/api/v2/baremetal/inventory/product-coverage
Find inventory that needs a WHMCS product or pricing review. Includes reserved and unready servers.
A mapped product does not establish ordering readiness.
Query Parameters
Filter by NetBox site name or slug. The list is populated after the first request.
Default shows inventory that needs product or pricing attention.
Optional search across inventory label, asset tag, serial, product id, and hardware summary.
Response
Click "Send Request" to check current inventory and WHMCS products.
Click "Send Request" to see the response
GET
Provision Reconciliation
Admin Only
/api/v2/baremetal/provision-reconciliation
Provision jobs that ended cancelled or failed, but whose device NetBox shows as actively
in service anyway — the server installed and went live while its job was closed
out as unsuccessful, so nothing flipped the WHMCS service to Active. Derived, never stored.
Query Parameters
How far back to look for a cancelled/failed provision job.
Response
Click "Send Request" to check for drift.
Click "Send Request" to see the response
GET
List Available Inventory
Admin Only
/api/v2/baremetal/inventory/available
List servers available for sale from inventory. Only returns servers with status "inventory" in NetBox,
"available-for-sale" tag, that have been wiped and passed hardware testing.
Query Parameters
Filter by NetBox site slug (optional)
Filter by device type slug (optional)
Filter by tag (optional)
Minimum RAM in GB (optional)
Minimum storage in GB (optional)
Response
Click "Send Request" to see the response
POST
Store Fulfillment Queue
Admin Only
/api/v2/baremetal/store/fulfillment
Paid self-serve orders awaiting provisioning. Preview shows exactly what the
build will do, from the configuration the customer bought — then Approve
provisions it. The order's stored details (OS, hostname, SSH key, IP sizes, bandwidth) drive
the build; nothing is re-entered here.
Defaults to paid — the orders actually waiting on you.
Build plan (dry run — nothing has happened yet)
Approving PXE-installs the operating system on this server — all data on its
disks is destroyed. The customer has paid; this is the build they ordered.
Orders placed in the WHMCS cart reach core-api through the server module's
CreateAccount. Each one is listed here until it becomes a store order (it then appears
in the Fulfillment Queue). Review and Failed rows need
a person: fix the cause named in the row, then Retry to run every
check again from the start. Nothing is reserved or built for these rows.
The list of states comes from the API on the first load.
Response
GET
Store Reservations
Admin Only
/api/v2/baremetal/store/reservations
Active self-serve holds. Each row locks a device (a table-only hold — the device stays at NetBox status "inventory")
until it is assigned to a client or released. This list also feeds the Assign and Release selectors.
Response
POST
Reserve Server (admin hold)
Admin Only
/api/v2/baremetal/inventory/reserve
Place an admin hold on an available server (no WHMCS order). The hold is a table row — the device stays "inventory"
but is excluded from availability until released or assigned.
Request
From GET /baremetal/inventory/available (device_id submitted).
Response
POST
Assign Server to Client
Admin Only
/api/v2/baremetal/inventory/assign
Permanently assign a server to a WHMCS client/service: stamps the device tenant + WHMCS ids, sets NetBox status
to "active", and deletes any outstanding reservation. Requires the typed confirmation ASSIGN-{device_label}.
Request
Reserved servers (from the reservations list) + available inventory. Selecting one auto-fills the confirmation.
WHMCS decides what is sold; Foreman decides what can be installed.
This reconciles the two: a customer is only ever offered an OS that exists in both.
Review the suggestions, tick the ones that are right, and approve them —
nothing becomes sellable until you do.
Drift
Suggested OS mappings
A dry run — this writes nothing. Matching is only a suggestion because a
wrong match would install the wrong OS on a paying customer's server; the approved
mapping below is what the store actually uses. Foreman's internal
discovery/wipe/test images are excluded entirely and can never be proposed.
Current option map
Response
POST
Release Server to Inventory
Admin Only
/api/v2/baremetal/inventory/release
Release a server back to the available inventory pool. This performs:
1) Disables all switch ports (physical + bond/ae interfaces),
2) Powers off the server (hard power off via IPMI),
3) Updates NetBox device status to "inventory".
Request Body
Server device label (service tag) from NetBox
Auto-generated safety confirmation string
Warning: This will disable all switch ports and power off the server!
Response
Click "Release to Inventory" to see the response
POST
Hardware Discovery
Admin Only
/api/v2/baremetal/servers/{identifier}/discover
Boot server into discovery mode to collect hardware inventory.
The server will PXE boot into a discovery image that collects CPU, memory,
storage, network interfaces, and IPMI/BMC details.
Parameters
The server's service tag or serial number
Creates a discovery job without PXE rebooting. Run the discovery script manually on the server.
Keep server powered on after discovery completes instead of powering off and disabling ports.
Run on Server
SSH into the target server and run these commands as root:
Look up an active discovery job by server MAC address. Used internally by
hardware-discovery.sh on FDI when kernel cmdline parameters are not available.
Returns the callback_url and job_id for the discovery script to use.
Parameters
Any format: colons, hyphens, or bare (0cc47aa40568)
Response
Click "Look Up" to see the response
GET
List Foreman Operating Systems
Admin Only
/api/v2/baremetal/foreman/operatingsystems
List all operating systems available in Foreman for provisioning.
Use the id or title from the response as the os_override parameter when provisioning.
Response
Click "Send Request" to see the response
GET
List Foreman Host Groups
Admin Only
/api/v2/baremetal/foreman/hostgroups
List all host groups available in Foreman for provisioning.
Use the name or title from the response as the hostgroup parameter when provisioning.
Response
Click "Send Request" to see the response
GET
Get Server Status
Admin Only
/api/v2/baremetal/servers/{identifier}/status
Get comprehensive status from all integrated systems: NetBox (device info, lifecycle state, IPs, interfaces),
Foreman (build status, host group), WHMCS (service status, client info), IPMI (current power state), and active jobs.
Path Parameters
Server device label (service tag) from NetBox
Response
Click "Send Request" to see the response
POST
Provision Operating System
Admin Only
/api/v2/baremetal/servers/{identifier}/provision
Provision a server with an operating system. The server must have NetBox status "inventory" to prevent
accidental reinstallation of production servers. This workflow configures switch ports, sets up Foreman,
PXE boots the server, and waits for the installation callback.
Request
Server device label (service tag) from NetBox
Foreman host group (default: Compute-Nodes)
Override OS from hostgroup default (optional). Proxmox VE requires iPXE boot.
Root filesystem for Proxmox VE installation.
RAID level for ZFS or Btrfs. RAIDZ options are ZFS only.
Enter device identifier above, then click "Fetch Drives"
Select which drives to install on. If none selected, auto-detects from discovery data.
Pre-load cloud-init VM templates from Foreman (~500-700MB each)
ISOs to download to Proxmox storage. Served from local Foreman server.
Custom hostname (optional, auto-generates from device label if not provided)
Custom root password (optional, min 8 chars). Stored in NetBox device custom field.
Customer that will OWN this server. Stamped on the NetBox device (with the
tenant's WHMCS client id) before IP space is allocated, so the
allocated space is tenant-owned and shows in the customer's IPAM.
Required when the device has no tenant yet — leave blank if it is already
assigned (e.g. via the store). Will not move a device between customers.
WHMCS service ID for billing (optional). Stamped onto the NetBox device as the canonical device↔service link.
Size of the dedicated block to carve from the site pool. The block
itself is auto-picked (next free); to hand over a SPECIFIC CIDR, use
IP Management → Allocate Specific instead. Only applies when the
device has no primary IP — a device that already has one keeps it.
Anything larger than /64 needs the site IPv6 pool to have room for it.
Allocate IPv4 only — for customers who take no IPv6.
Do not allocate anything; the device must ALREADY have a primary IP
or the build fails its network step. For reinstalls.
Auto-generated safety confirmation string
This will PXE boot the server and reinstall the operating system!
Response
Click "Start Provisioning" to see the response
POST
Wipe Server Disks
Admin Only
/api/v2/baremetal/servers/{identifier}/wipe
Securely wipe all disks on a server. Boots server into wipe environment and securely erases all disks.
After successful wipe, hardware testing is automatically triggered unless skip_test=true.
Request Body
Server device label (service tag) from NetBox
Auto-generated safety confirmation string
quick: Tries hardware erase, falls back to zeros. secure-erase: Hardware erase only (fails if unsupported).
Warning: This will permanently destroy all data on the server!
Response
Click "Start Wipe" to see the response
POST
Test Server Hardware
Admin Only
/api/v2/baremetal/servers/{identifier}/test
Run hardware tests on a server. Boots into FDI test environment and runs CPU stress test (stress-ng),
memory test (memtester), SMART health check, disk I/O benchmark (fio, full/burn-in only),
and network link verification (ethtool).
On success, server is automatically returned to inventory unless auto_return_to_inventory=false.
Request Body
Server device label (service tag) from NetBox
Test suite to run
The test still completes normally — result recorded,
returned to inventory, tagged available-for-sale — only the final
power-off is skipped, so you can inspect the machine over KVM/IPMI.
Off by default: a passing server is normally powered down.
Creates a test job without PXE rebooting. Run the test script manually on the server.
Run on Server
SSH into the target server and run these commands as root:
Requires: stress-ng, fio, memtester, smartmontools, nvme-cli, ethtool, jq, curl (tools installed automatically via dnf if missing)
Response
Click "Start Tests" to see the response
POST
Configure Hardware RAID
Admin Only
/api/v2/baremetal/servers/{identifier}/raid/apply
Rewrite a server's storage controller. Pick a layout per drive set, preview the exact
storcli commands, then apply. The server PXE-boots to do the work and reports back.
Server
Servers available for sale; picking one loads its drive sets.
Use the box below for anything else.
Device label (service tag) from NetBox
Layout
Load a server's drive sets to choose a layout.
Apply
Auto-generated safety confirmation string
Warning: creating an array DESTROYS the data on its member drives. Preview first —
the preview executes nothing.
Response
Load a server, choose a layout, then preview.
POST
Storage Controller Audit
Admin Only
/api/v2/baremetal/storage/controller-audit
Finds servers recorded with a storage controller they do not have. An older discovery
script counted storcli's “No Controller found” reply as a controller, which left an
Unknown controller item and has_hardware_raid=true behind — and a
“Storage controller” on the store listing. The server judges each device against its
own stored storcli capture; this page only shows that verdict.
Run the audit first: it is a dry run over every device that claims a controller
and changes nothing. Its rows are the selector — Apply is offered only on a
row the API classified proven_phantom. A server that can be PXE-booted is better fixed
by re-running discovery.
1. Audit (dry run — changes nothing)
2. Devices
Run the audit to list devices.
Apply deletes the listed inventory items on that ONE device and corrects
has_hardware_raid / storage_controller_count. The server re-checks the
proof before it touches anything and journals the change in NetBox naming you.
Response
Click "Run Audit" to see the response
GET
List Baremetal Jobs
Admin Only
/api/v2/baremetal/jobs
List all baremetal workflow jobs with optional filtering by status, workflow type, and device.
Query Parameters
Filter by device label (optional)
Response
Click "Send Request" to see the response
GET
Get Job Details
Admin Only
/api/v2/baremetal/jobs/{job_id}
Get detailed information about a specific baremetal job including step-by-step logs and progress.
Path Parameters
Job ID to retrieve — a UUID. (This was a number field, which
silently refused every real job id.)
Response
Click "Send Request" to see the response
POST
Cancel Job
Admin Only
/api/v2/baremetal/jobs/{job_id}/cancel
Cancel a pending or running baremetal job. Only jobs with status "pending" or "running" can be cancelled.
Path Parameters
Job ID to cancel
Response
Click "Cancel Job" to see the response
DELETE
Purge Job History
Admin Only
/api/v2/baremetal/jobs/purge
Purge completed job history to remove sensitive data like passwords.
By default, only purges jobs with status "completed", "failed", or "cancelled".
Use include_all=true to purge ALL jobs including pending/running ones.
This is a destructive operation - purged jobs cannot be recovered.
Query Parameters
Only purge jobs for this specific server (optional)
Include pending/running jobs in purge
Type PURGE-JOBS to confirm this destructive operation
Response
Click "Purge Jobs" to see the response
POST
Test Wipe Callback
Debug
/api/v2/baremetal/callbacks/wipe-complete
Manually send a wipe completion callback for testing. This simulates what hardware-wipe.sh
sends when disk wipe completes. Use leave_powered_on=true to prevent the server
from being powered off after callback processing.
Request Body
Job ID from the wipe request
Server hostname
Verification result (empty = not verified, triggers troubleshooting mode)
If checked, server will NOT be powered off after callback
Response
Click "Send Callback" to see the response
POST
Test Discovery Callback
Debug
/api/v2/baremetal/callbacks/discovery-complete
Manually send a discovery completion callback for testing. This simulates what hardware-discovery.sh
sends when hardware discovery completes. Use leave_powered_on=true to prevent the server
from being powered off after callback processing.
Request Body
Job ID from the discovery request (optional)
Server hostname
Optional status message
If checked, server will NOT be powered off after callback
Response
Click "Send Callback" to see the response
POST
Allocate IP Space for Server
Admin Only
/api/v2/admin/ip/allocate
Allocate IPv4 AND IPv6 addresses from site's prefix pools.
Creates a dedicated IPv4 prefix (/31 point-to-point up to a /27 block) plus an IPv6 /64,
with the network, gateway, server and broadcast IPs populated.
Pool selection is automatic: primary pool for new servers, secondary for additional IPs.
Request Body
Server device label (asset tag) from NetBox. Site is auto-detected.
IPv4 prefix size. The gateway + server IPs are created; any remaining IPs are left
free for the tenant to claim.
Allocate IPv6 only, derived from existing primary IPv4. Device must have primary IPv4.
Use when IPv6 pools are not configured
Response
Click "Allocate IP Space" to see the response
POST
Allocate Specific IPv4 Block(s) to Server
Admin Only
/api/v2/admin/ip/allocate-specific
Assign one or more caller-specified public IPv4 blocks (exact
network-aligned /27–/31 CIDRs) to a routed/bonded server — the primary block sets the
device's primary IP, each secondary block's gateway is added to the switch ae so its
source range is permitted. Every prefix + IP is tenant-owned. IPv4-only for now.
Request Body
Server device label (asset tag) from NetBox. Site is auto-detected.
Network-aligned public /27–/31 (host bits set is rejected).
Optional. One aligned /27–/31 per line, assigned as secondary.
Owner. Leave as "none" to keep the device's existing tenant. A different existing tenant → 409. Submits the NetBox tenant id.
Guards a now-customer-owned server from staying sellable.
Rebuild the bond in a background job. Uncheck for NetBox-only.
Response
Click "Allocate Specific Block(s)" to see the response
POST
Assign IP to Device Interface
Admin Only
/api/v2/admin/ip/assign
Assign a specific (already allocated) IP to a device interface.
Use for manual IP assignment or moving IPs between servers.
Request Body
Server device label (asset tag)
Interface to assign IP to (default: bond0)
IPv4 address with CIDR notation
IPv6 address with CIDR notation
Set as device's primary IP
Response
Click "Assign IP" to see the response
POST
Release Server IP Space
Admin Only
/api/v2/admin/ip/release
Release a server's IP allocation back to the pool.
Deletes IP addresses assigned to the device and clears primary IP references.
Request Body
Server device label (asset tag). Click "Fetch IPs" to load available IPs.
Choose which IPs to release
Click "Fetch IPs" to load available IPs
Check the IPs you want to release
Response
Click "Release IP Space" to see the response
POST
Change Primary IP
/api/v2/admin/ip/change-primary
Change which IP is the device's primary. Updates NetBox primary IP pointer and all related descriptions. No switch changes.
Only non-primary IPv4 addresses are shown
Click "Change Primary IP" to see the response
POST
Route Subnet (Static Route)
/api/v2/admin/ip/route-subnet
Route a secondary subnet to a next-hop IP via static route. Removes gateway from switch interface, adds static route and prefix-list entry. All IPs in the subnet become client-manageable.
Must be a secondary prefix assigned to the device
Must be an IP assigned to the device (typically in the primary subnet). The dropdown fills this box; you can also type it.
Click "Route Subnet" to see the response
POST
Unroute Subnet
/api/v2/admin/ip/unroute-subnet
Restore a statically routed subnet back to interface mode. Re-adds gateway IP to switch interface, removes static route.
Must be a currently routed prefix for the device. The dropdown (from the reconcile audit) fills this box; you can also type it.
Click "Unroute Subnet" to see the response
GET
Routed Subnets Audit
/api/v2/admin/ip/routed-subnets
Reconcile the switch's static routes against NetBox and classify each into buckets: managed (in sync / drift), orphaned on switch, missing on switch, customer BYOIP, customer BGP, ARPHost infra, and unknown-needs-review. Read-only. Provide exactly ONE scope.
Switch = exact NetBox name; Device = asset tag (switch resolved via cabling); Site = slug (sweeps all access switches).
GET
BMC Address Audit
/api/v2/admin/ip/bmc-address-audit
Compare every device's BMC address (oob_ip) with the rack-unit rule rack IPMI prefix network + 1 + RU. Drift is listed first. Read-only: it never renumbers a BMC.
The site list comes from the audit's own results.
POST
Cleanup Orphaned Routes
/api/v2/admin/ip/routed-subnets/cleanup
Delete static routes classified orphaned_on_switch (route + prefix-list member on a switch with no NetBox record). Each named subnet is re-verified orphaned server-side (a live/managed/BYOIP/infra subnet is refused). Best populated from the Audit above (select orphans → "Send to Cleanup").
Explicit allow-list — only these subnets are considered, and only if still orphaned.
Run a preview first (dry_run on).
POST
Customer BYOIP
/api/v2/admin/ip/byoip
Register customer-owned IP space (BYOIP): its origin ASN, whether they run their own eBGP session, and the owning tenant. Mapping-only + conflict-safe. Admin-entered until announcement-authorisation validation exists.
Preview first (dry_run on).
POST
Facility Aggregates
/api/v2/admin/ip/facility-aggregate
Tag an ARPHost-owned facility aggregate (e.g. the supernet a site announces) so the reconcile classifies routes inside it as ARPHost infra rather than unknown. Optionally tenant-owned by ARPHost.
Preview first (dry_run on).
POST
Backfill Routed CF
/api/v2/admin/ip/routed-subnets/backfill
Audit + non-destructive migration: adopt legacy - routed X next-hop Y description markers into the authoritative route_next_hop custom field. Descriptions are never modified. The report IS the audit — run dry_run first.
Run dry_run first to see what would be adopted.
GET
List All Users
Admin Only
/api/v2/auth/admin/users
List all users in the system with their API key counts. Requires admin privileges and JWT authentication.
Response
Click "Send Request" to see the response
GET
Get User Details
Admin Only
/api/v2/auth/admin/users/{user_id}
Get detailed information about a specific user including their API keys. Requires admin privileges.
Path Parameters
User ID to retrieve
Response
Click "Send Request" to see the response
PATCH
Update User Permissions
Admin Only
/api/v2/auth/admin/users/{user_id}
Update a user's account settings such as active status and admin privileges.
Note: You cannot revoke your own admin status or deactivate your own account.
Request
User ID to update
Whether the user account is active
Whether the user has admin privileges
Response
Click "Update User" to see the response
GET
List User's API Keys
Admin Only
/api/v2/auth/admin/users/{user_id}/keys
List all API keys for a specific user. Requires admin privileges.
Path Parameters
User ID whose keys to list
Response
Click "Send Request" to see the response
PATCH
Update User's API Key
Admin Only
/api/v2/auth/admin/users/{user_id}/keys/{key_id}
Update an API key's settings including active status and scopes.
Permanently delete an API key for any user. This cannot be undone.
Path Parameters
User ID who owns the key
API Key ID to delete
Response
Click "Delete Key" to see the response
POST
Create New User
Admin Only
/auth/admin/users
Create a new user account. The user can be assigned to a tenant and given admin privileges.
Request Body
User email address
Optional username
User password (min 8 characters)
Optional tenant ID to assign user to
Grant tenant admin privileges
Grant global admin privileges
Response
Click "Create User" to see the response
POST
Change User Password
Admin Only
/auth/admin/users/{user_id}/change-password
Change any user's password. The user will need to use the new password on their next login.
Parameters
User ID to change password for
New password (min 8 characters)
Response
Click "Change Password" to see the response
POST
Create API Key for User
Admin Only
/auth/admin/users/{user_id}/keys
Create an API key for any user. The full key is shown only once!
Parameters
User ID to create key for
Name for the API key
Comma-separated list of scopes
Default 90 days; custom is 1-3650 days, or never
Response
Click "Create Key" to see the response
POST
Impersonate User
Admin Only
/auth/admin/impersonate/{user_id}
Generate a temporary token to act as another user. The token expires in 1 hour and cannot be refreshed.
Cannot impersonate yourself or other admins.
Parameters
User ID to impersonate
Response
Click "Start Impersonation" to see the response
GET
Audit Logs
Admin Only
/auth/admin/audit-logs
View audit logs of admin actions. Logs auto-delete after 60 days.
Filters
Filter by admin who performed action
Filter by target user
Filter by action type
Maximum results to return
Response
Click "Load Audit Logs" to see the response
POST
Sync from NetBox
Admin Only
/api/v2/tenants/sync-netbox
Synchronize tenants and users from NetBox. This imports tenants and their contacts as users,
creating API keys with appropriate default scopes.
Sync Options
This will sync all tenants from NetBox and create/update users based on contacts assigned to each tenant.
Existing users will be updated, new users will be created with passwords stored in NetBox.
Response
Click "Sync from NetBox" to run the sync
POST
Sync from WHMCS
Admin Only
/api/v2/tenants/sync-whmcs
Pull active WHMCS clients and create/update NetBox tenants (with the
whmcs_client_id custom field). Idempotent; never deletes. Run
/tenants/sync-netbox afterward to bring them into the Core API DB.
Response
Click "Sync from WHMCS" to run the sync
GET
WHMCS Unclassified Services
Admin Only
/api/v2/tenants/whmcs-unclassified
ACTIVE WHMCS services that classify as neither server nor vm — the
device sync's blind spots. The classifier is an allow-list, so a product group with
no matching keyword is invisible: no NetBox device link, no tenant
portal access and no bandwidth billing. Anything flagged
likely_device carries an IP, so it probably has real hardware behind it.
Check this after creating a WHMCS product group, then add a
substring to WHMCS_SERVER_KEYWORDS (physical device: dedicated
or colo) / WHMCS_VM_KEYWORDS and re-run Sync WHMCS Devices.
Uncheck to also list services with no IP (PTR records, hosting, SEO…), which are usually unknown on purpose.
Response
Click "List Unclassified" to check for blind spots.
POST
Sync WHMCS Devices
Admin Only
/api/v2/tenants/sync-whmcs-devices
Map EXISTING NetBox devices to their WHMCS client: sets device tenant +
whmcs_service_id/whmcs_client_id and tenant-owns the
service's existing IPs, so synced tenant users see the devices they own in
WHMCS. Never creates devices or IPs; unmatched services and
conflicts are reported. Run /tenants/sync-whmcs first so tenants exist.
VMs have their own panels (Sync/Reconcile WHMCS VMs) — they model + create NetBox virtual machines.
Leave checked to preview matches/changes before applying.
Response
Click "Sync WHMCS Devices" to run (dry-run by default)
POST
WHMCS Service Fields (backfill / audit)
Admin Only
/api/v2/tenants/whmcs-service-fields/backfill
Push IPMI address, BMC user + password and
OpenVPN location into each server's WHMCS service custom
fields. New provisions and reconciles write these automatically — this
repairs servers built before the write-back existed.
Ownership decides overwrite, per device. A device holding
ipmi_admin_* is one we built, so its BMC credentials are
ours and are overwritten. A device without them is colo: the
credentials belong to the customer, so they are fill-only —
never generated, never replaced. Only values we actually hold are sent, so a
hand-typed WHMCS field is never blanked.
Run the audit first: it is a dry run over every server, and
its report is also what populates the device selector below. Devices whose
WHMCS product does not define the fields appear under
missing_on_product — that is a WHMCS admin fix, not a code one.
1. Audit (dry run — writes nothing)
Include devices with no admin BMC credentials. Those are always fill-only.
Safety cap on devices examined (1–5000).
2. Apply
Populated from the audit above (Rule 7 — pick, don't type). Run the audit
first to choose a single device.
Writes are journaled on each device in NetBox naming you as the actor.
Response
Click "Run Audit" to see what would be written.
POST
Sync WHMCS VMs
Admin Only
/api/v2/tenants/sync-whmcs-vms
Model Active WHMCS "Virtual Servers" as NetBox virtual machines: creates a
per-hypervisor cluster (from the WHMCS server_name) + the VM
(tenant-owned, with its IPs), or updates an existing one to current.
Creates VMs + missing IPs. Services with no hypervisor
(e.g. Cloudflare) are skipped. Run /tenants/sync-whmcs first so
tenants exist; use /reconcile-whmcs-vms for cancellations.
Leave checked to preview create/update before applying.
Response
Click "Sync WHMCS VMs" to run (dry-run by default)
POST
Reconcile WHMCS VMs
Admin Only
/api/v2/tenants/reconcile-whmcs-vms
Clean up synced VMs whose WHMCS service left Active: Suspended
→ VM set offline (kept); Terminated/Cancelled/absent
→ VM deleted + its IPs freed (unassigned + tenant cleared, IP
record kept). Manually-created VMs (no whmcs_service_id) are never
touched. Skips on an empty WHMCS service set (safety).
Leave checked to preview offline/delete actions before applying.
Response
Click "Reconcile WHMCS VMs" to run (dry-run by default)
POST
Private IP Space (VRF-per-client)
Admin Only
/api/v2/admin/ip/private/*
Manage client-private RFC1918 space. Invariant: the global table holds only
public space; all RFC1918 lives in a per-client VRF (ARPHost included). All
actions are dry-run by default and never create devices.
1. Audit invariant
Lists any RFC1918 still in the global table (should be empty after migration).
2. Migrate ARPHost RFC1918 → ARPHost-Private VRF
Sweeps existing global RFC1918 (install-networks, infra, OOB/IPMI) into the ARPHost VRF.
3. Suggest client private IPs (from WHMCS)
4. Backfill client private space
Paste the backfill request JSON (tenant + VLAN specs + per-server host IPs). Dry-run first, review, then uncheck dry_run.
Response
Run an action above
POST
Merge Tenant
Admin Only
/api/v2/tenants/merge
Reconcile a duplicate tenant: reassign the source tenant's NetBox objects
(devices/IPs/prefixes/VLANs) and Core API DB users to the target, then
delete the source. Use the NetBox tenant IDs. Run a dry-run first.
Request
Must equal MERGE-TENANT-{source_tenant_netbox_id}
Response
Run a dry-run, then uncheck dry_run to execute
GET
Tenant Activity Logs
Tenant Admin
/api/v2/tenants/{tenant_id}/activity-logs
View all API activity for users in your tenant. Logs auto-delete after 60 days.
Only tenant admins can view these logs.
Filters
Filter by specific user
Filter by endpoint pattern
Maximum results to return
Activity Logs
Click "Load Activity Logs" to see the response
GET
Tenant Devices
Tenant Admin
/api/v2/tenants/{tenant_id}/devices
View all devices assigned to your tenant from NetBox. Shows server details including
status, platform, rack location, and IP information.
Devices
Click "Load Devices" to see your tenant's servers
POST
Change My Password
/auth/change-password
Change your own password. You must provide your current password for verification.
Request Body
Your current password
New password (minimum 8 characters)
Response
Click "Change Password" to see the response
POST
Set My Password
/auth/set-password
Set an initial Core API password. Use this if you signed in via WHMCS
SSO and have no local password yet. This password is independent of SSO — both
work afterward. If you already have a password, use "Change Password" instead.
Request Body
New password (minimum 8 characters)
Response
Click "Set Password" to see the response
GET
My API Keys
/auth/keys
List all your API keys. You can also create new keys and revoke existing ones.
Create New API Key
Name for the API key
Comma-separated list of scopes
Default 90 days; custom is 1-3650 days, or never
Response
Click "Load My Keys" to see your API keys
GET
Manage IPv4 PTR Records
/api/v2/dns/records?family=ipv4
View, create, and delete IPv4 PTR (reverse DNS) records for your IP addresses.
Click "Refresh" to load your IPv4 PTR records.
Set PTR Record
GET
Manage IPv6 PTR Records
/api/v2/dns/records?family=ipv6
View, create, and delete IPv6 PTR (reverse DNS) records for your IP addresses.
Click "Refresh" to load your IPv6 PTR records.
Set PTR Record
GET
Reverse Name Preview
/api/v2/dns/reverse-name/{ip}
Preview the reverse DNS name for any IP address. Shows the in-addr.arpa (IPv4) or nibble-format ip6.arpa (IPv6) name
and whether a matching reverse zone exists.
Parameters
IPv4 or IPv6 address to generate reverse name for
Response
Enter an IP and click preview to see its reverse DNS name
GET
List Reverse Zones
Admin Only
/api/v2/dns/zones
List all reverse DNS zones configured on the PowerDNS server.
Response
Click "Load Zones" to list reverse DNS zones
POST
Create Reverse Zone
Admin Only
/api/v2/dns/zones
Create a new reverse DNS zone. Examples: 20.109.78.in-addr.arpa (IPv4 /24),
c.d.4.f.2.0.6.2.ip6.arpa (IPv6 /32).
Request Body
Zone name (trailing dot optional)
Zone replication type
One nameserver FQDN per line (with trailing dots)
Response
Submit the form to create a reverse zone
GET
Device DNS Records
Admin Only
/api/v2/dns/records/{device_label}
List all PTR records for IPs assigned to a specific device. Also shows IPs without PTR records.
Parameters
Device asset tag from NetBox
Response
Enter a device label and click load
PUT
PTR Default-Record Standard
Admin Only
/api/v2/dns/admin/ptr-standard
The default/standard reverse-DNS record every static IP gets. A deleted PTR
reverts to this (never blank), and IP assignment fills it in. Edit it here
without a code deploy. Leave a field blank to revert it to the env default.
Standard
Must contain {ip_dashed} and {facility} ({base_domain} optional)
CSV of netbox-site-slug:facility
Response
Click "Load Current Standard" to view, then edit and save
GET
My IPv4 Space
/api/v2/ips/prefixes
View and manage your IPv4 address space. Select a prefix to see all addresses, claim available IPs, and update descriptions.
Select a prefix to view IP addresses.
GET
My IPv6 Space
/api/v2/ips/prefixes
View and manage your IPv6 address space. Select a prefix to see existing addresses, claim IPs, and update descriptions.
Select a prefix to view IP addresses.
User Management
Manage users and their access
All Users
ID
Email
Name
Tenant
Status
Role
Actions
Click "Refresh" to load users
Edit User
User Details
API Keys
Loading...
Create API Key
Default 90 days; pick Never for no expiry
Key Created! Copy this now - it won't be shown again:
Edit API Key Scopes
Change Password
User Management
Manage users in your tenant
Tenant Users
ID
Email
Name
Status
Role
Scopes
Actions
Loading users...
Create Tenant User
Leave blank to auto-generate a password
Grant tenant admin privileges to this user
Leave unchecked to use role-based defaults.
Edit User
User Details
Assign specific permissions. Check "Use role defaults" to reset.
API Keys
API Key Created - Copy Now!
Loading API keys...
Edit API Key Scopes
Change Password
Edit My Profile
User Details
Tenant Admin
API Keys
Default 90 days; pick Never for no expiry
Key created! Copy now — won't be shown again:
Loading...
My API Keys
Manage your API keys for programmatic access.
Default 90 days; pick Never for no expiry
Key created! Copy this now - it won't be shown again:
Loading...
Sub-User Management
Manage reseller client accounts and resource assignments
Sub-Users
ID
Email
Name
Status
Scopes
Resources
Actions
Loading sub-users...
Create Sub-User
Leave blank to auto-generate. Auto-generated password will be shown after creation.
Permissions for this sub-user. Defaults are pre-selected.