Controlled server decommission
const url = 'https://api.flotera.com/api/v1/servers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'DELETE', headers: {cookie: '__Host-erm_session=<__Host-erm_session>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request DELETE \ --url https://api.flotera.com/api/v1/servers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --cookie __Host-erm_session=<__Host-erm_session>Starts the controlled decommission workflow (Control plane). Guards
return 409 conflict while an active rental or a live listing blocks
removal. Agent credentials are revoked as part of the workflow. This is
normally asynchronous: the response is an acceptance, not a completed
deletion, and the server leaves the fleet only once the agent confirms
the on-host part.
One case completes synchronously. A server whose agent has never
connected has nobody to run the on-host part, so waiting for it would
make the server permanently undeletable — still listed, still holding
its hardware fingerprint, still billed as an expected server. Such a
server is detached immediately and the response carries
state: decommissioned with a null workflow_command_id.
Repeating the call is safe in both modes: an already running workflow
returns its existing workflow_command_id, and an already detached
server is not detached twice.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”UUID (v7 for new entities; v4 accepted during migration).
Header Parameters
Section titled “Header Parameters”Idempotency key, 1–128 ASCII, unique per (tenant_id, operation, key) for at least 24 hours. Retrying with the same body replays the stored response; a different body returns 409 idempotency_conflict.
Responses
Section titled “Responses”Decommission workflow accepted.
object
UUID (v7 for new entities; v4 accepted during migration).
decommissioning — the workflow is running and the server leaves the fleet when the agent confirms the on-host part. decommissioned — the server is already out of the tenant; this is returned only when no agent could ever run the workflow.
RFC 3339 UTC with microsecond precision.
Example
{ "state": "decommissioning", "requested_at": "2026-07-25T10:15:30.123456Z"}Missing/invalid credentials (code=unauthorized).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}Authenticated but not permitted. code=forbidden — role/scope mismatch; code=feature_not_entitled — the plan does not include the capability; code=account_frozen — the account is frozen and this operation is declared x-ermeon-frozen: deny. The three are deliberately distinct: only the last one is fixed by a top-up (13 §5.6).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}Resource does not exist in this tenant. Foreign identifiers also return 404 (anti-enumeration).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}State conflict (code=conflict, idempotency_conflict, offline_queue_full or online_queue_full).
RFC 9457 problem document with a stable machine code.
object
Stable machine-readable error code (03 §2.4).
UUID (v7 for new entities; v4 accepted during migration).
object
JSON Pointer to the offending field.
Example
{ "type": "https://ermeon.com/problems/validation", "code": "unauthorized"}