Skip to content
# Dedicated servers

Dedicated servers

The public dedicated catalog, orders and post-fulfillment actions.

GET/dedicated

Public, unauthenticated: list published bare-metal dedicated server listings. Fully white-label — provider identity never appears here. Addon key/groupKey/requiresKey are opaque per-listing tokens; echo the exact key back, don't construct your own.

GET response 200 (excerpt)
json
[
  {
    "id": "b3f1...-...-...-...",
    "displayName": "12 Core Server - AMD Ryzen 5900X",
    "locationLabel": "Miami, FL, USA",
    "specs": { "cpuModel": "AMD Ryzen 5900X @ 3.7GHz", "cpuCores": 12, "cpuThreads": 24, "ramGb": 64, "disks": [{ "type": "nvme", "capacityGb": 1000, "count": 2 }], "bandwidthGbps": 1 },
    "addons": [{ "key": "2ced763baa757a92174b", "label": "5TB Bandwidth @ 1 Gbps", "kind": "choice", "groupKey": "…", "providerPriceUsd": 0, "sellPriceUsd": 0 }],
    "monthlyPriceUsd": 147.15,
    "available": true
  }
]
GET+POST/dedicated/orders

List or place dedicated server orders. Ordering charges the first monthly cycle from your wallet immediately; fulfillment is manual (admin-driven against the wholesale provider) and can take up to 48 hours. GET /dedicated/orders/{id} returns one order — status moves queued → active → past_due → suspended, or cancelled. Recurring billing charges the same wallet once per cycle; a failed charge gets a 7-day grace period before suspension.

POST body → 201
json
{
  "stockId": "b3f1...-...-...-...",
  "addonKeys": ["2ced763baa757a92174b"]
}

→ { "id": "5bde...-...", "status": "queued", "price": { "monthly": 147.15 } }
GET /dedicated/orders/{id} → 200 (excerpt)
json
{
  "id": "5bde...-...",
  "status": "active",
  "ip": "203.0.113.10",
  "credentials": null,
  "nextChargeAt": "2026-10-03T20:53:07Z",
  "capabilities": { "restart": true, "rescue": true, "reinstall": true }
}

Insufficient wallet balance → 402 insufficient_balance. Listing bought by someone else first → 409 no_longer_available. Bad or missing addon selection → 400 invalid_request.

POST+GET/dedicated/orders/{id}/action

Once an order is active and fulfilled (check capabilities), POST .../action with { "action": "restart" | "rescue" | "reinstall" } to power-cycle, enter rescue mode, or reinstall the OS. reinstall needs dist (an entry from GET .../reinstall-options' distOptions/osOptions) or, when its flow is os_and_partitioning, both operatingSystemId and partitioningSchemeId — fetch those first from GET .../reinstall-options and GET .../partitioning-schemes?operatingSystemId={id}.

POST .../action body → 200
json
{ "action": "reinstall", "dist": "ubuntu-24.04" }

→ { "ok": true }
GET .../reinstall-options → 200
json
{ "flow": "os_only", "distOptions": ["ubuntu-24.04", "debian-12"] }

Not active, not fulfilled yet, or unsupported by this listing's provider → 409 action_not_allowed.