Skip to Content
API reference

API reference

Base URL: https://braesystems.com/api

Every endpoint requires an API key:

Authorization: Bearer bs_live_...

Servers

GET/api/v1/servers

List servers

Every server in your account, with its addresses and current status.

Example request

curl https://braesystems.com/api/v1/servers \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": [ { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "name": "kelp-01", "status": "active", "model": "PowerEdge R760xa", "environment_id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "image": "ubuntu-24-04", "ipv4": [ { "address": "203.0.113.11", "version": 4, "kind": "public" } ], "ipv6": [ { "address": "203.0.113.11", "version": 4, "kind": "public" } ], "created_at": "2026-07-29T14:03:11.000Z" } ] }

Responses

200The servers in your account.
401Missing or invalid API key.
429More than 1000 requests from this key in 60 seconds.

GET/api/v1/servers/{id}

Get a server

Path parameters

id*uuidServer id.

Example request

curl https://braesystems.com/api/v1/servers/$SERVER_ID \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "name": "kelp-01", "status": "active", "model": "PowerEdge R760xa", "environment_id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "image": "ubuntu-24-04", "ipv4": [ { "address": "203.0.113.11", "version": 4, "kind": "public" } ], "ipv6": [ { "address": "203.0.113.11", "version": 4, "kind": "public" } ], "created_at": "2026-07-29T14:03:11.000Z" } }

Responses

200The server.
401Missing or invalid API key.
404No such resource in this account.
429More than 1000 requests from this key in 60 seconds.

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

List a server's IP addresses

Both IPv4 and IPv6 addresses assigned to the server.

Path parameters

id*uuidServer id.

Example request

curl https://braesystems.com/api/v1/servers/$SERVER_ID/ips \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": [ { "address": "203.0.113.11", "version": 4, "kind": "public" } ] }

Responses

200The server's addresses.
401Missing or invalid API key.
404No such resource in this account.
429More than 1000 requests from this key in 60 seconds.

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

Reboot a server

Requests a graceful restart, escalating to a forced restart if the machine does not come back in time. Returns immediately with an action; poll `GET /api/v1/actions/{id}` to follow it.

Path parameters

id*uuidServer id.

Example request

curl -X POST https://braesystems.com/api/v1/servers/$SERVER_ID/reboot \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "server_id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "kind": "reboot", "status": "queued", "error": null, "simulated": false, "created_at": "2026-07-29T14:03:11.000Z", "completed_at": null } }

Responses

202Reboot accepted.
401Missing or invalid API key.
404No such resource in this account.
409The server is busy or not in a state that allows this. A `server-busy` problem carries `action_id`, the operation to poll before retrying.
429More than 1000 requests from this key in 60 seconds.

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

Power a server on or off

Powering off asks the guest to shut down cleanly, and forces it off only if it does not go in time. A server that is already in the state you asked for is a `409`, not a silent success. A powered-off server cannot be rebooted or re-imaged until it is back on. Returns immediately with an action; poll `GET /api/v1/actions/{id}` to follow it.

Path parameters

id*uuidServer id.

Request body

direction*"on" | "off"Which way to move the server. Powering off asks the guest to shut down cleanly first, and forces it off only if it does not.

Example request

curl -X POST https://braesystems.com/api/v1/servers/$SERVER_ID/power \ -H "Authorization: Bearer bs_live_..." \ -H "Content-Type: application/json" \ -d '{"direction":"off"}'

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "server_id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "kind": "reboot", "status": "queued", "error": null, "simulated": false, "created_at": "2026-07-29T14:03:11.000Z", "completed_at": null } }

Responses

202Power command accepted.
400Body is not `{ "direction": "on" | "off" }`.
401Missing or invalid API key.
404No such resource in this account.
409The server is busy or not in a state that allows this. A `server-busy` problem carries `action_id`, the operation to poll before retrying.
429More than 1000 requests from this key in 60 seconds.

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

Re-image a server

Wipes the server and installs a fresh operating system. **All data on the machine is destroyed.** The selected SSH keys are installed during the install — this is the only point at which keys reach a server. Returns immediately with an action; poll `GET /api/v1/actions/{id}` to follow it.

Path parameters

id*uuidServer id.

Request body

image*stringSlug of an image from GET /api/v1/images.
ssh_key_idsuuid[]Keys to install on the rebuilt machine. Defaults to every key on the account. This is the only point at which SSH keys reach a server.

Example request

curl -X POST https://braesystems.com/api/v1/servers/$SERVER_ID/reimage \ -H "Authorization: Bearer bs_live_..." \ -H "Content-Type: application/json" \ -d '{"image":"ubuntu-24-04"}'

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "server_id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "kind": "reboot", "status": "queued", "error": null, "simulated": false, "created_at": "2026-07-29T14:03:11.000Z", "completed_at": null } }

Responses

202Re-image accepted.
400Unknown image, or an SSH key id that is not on this account.
401Missing or invalid API key.
404No such resource in this account.
409The server is busy or not in a state that allows this. A `server-busy` problem carries `action_id`, the operation to poll before retrying.
429More than 1000 requests from this key in 60 seconds.

Actions

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

List a server's actions

The hundred most recent actions on the server, newest first, whoever started them. Use it to find an operation you do not hold the id of.

Path parameters

id*uuidServer id.

Example request

curl https://braesystems.com/api/v1/servers/$SERVER_ID/actions \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": [ { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "server_id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "kind": "reboot", "status": "queued", "error": null, "simulated": false, "created_at": "2026-07-29T14:03:11.000Z", "completed_at": null } ] }

Responses

200The server's actions.
401Missing or invalid API key.
404No such resource in this account.
429More than 1000 requests from this key in 60 seconds.

GET/api/v1/actions/{id}

Get an action

Poll this to follow a reboot or re-image to completion.

Path parameters

id*uuidAction id.

Example request

curl https://braesystems.com/api/v1/actions/$ACTION_ID \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "server_id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "kind": "reboot", "status": "queued", "error": null, "simulated": false, "created_at": "2026-07-29T14:03:11.000Z", "completed_at": null } }

Responses

200The action.
401Missing or invalid API key.
404No such resource in this account.
429More than 1000 requests from this key in 60 seconds.

SSH keys

GET/api/v1/ssh-keys

List SSH keys

Example request

curl https://braesystems.com/api/v1/ssh-keys \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": [ { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "name": "work-laptop", "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDjG7RPA1EpqDMvKeai1v1ibjWe2ZBKQRqIEB3PvLJgq you@example.com", "fingerprint": "SHA256:qqLkC/YxINXheBw7fxT6z9s92H80dJJkSIuDy3d/GJs", "created_at": "2026-07-29T14:03:11.000Z" } ] }

Responses

200The keys on your account.
401Missing or invalid API key.
429More than 1000 requests from this key in 60 seconds.

POST/api/v1/ssh-keys

Add an SSH key

Adds a key to the account. Existing servers are unaffected — keys are installed during a re-image.

Request body

name*string
public_key*stringAn OpenSSH public key, e.g. the contents of ~/.ssh/id_ed25519.pub

Example request

curl -X POST https://braesystems.com/api/v1/ssh-keys \ -H "Authorization: Bearer bs_live_..." \ -H "Content-Type: application/json" \ -d '{"name":"work-laptop","public_key":"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDjG7RPA1EpqDMvKeai1v1ibjWe2ZBKQRqIEB3PvLJgq you@example.com"}'

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "name": "work-laptop", "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDjG7RPA1EpqDMvKeai1v1ibjWe2ZBKQRqIEB3PvLJgq you@example.com", "fingerprint": "SHA256:qqLkC/YxINXheBw7fxT6z9s92H80dJJkSIuDy3d/GJs", "created_at": "2026-07-29T14:03:11.000Z" } }

Responses

201The key was added.
400The public key could not be parsed.
401Missing or invalid API key.
409A key with this fingerprint is already on the account.
429More than 1000 requests from this key in 60 seconds.

DELETE/api/v1/ssh-keys/{id}

Delete an SSH key

Removes the key from the account. Servers already carrying it keep it until they are re-imaged. Answers with the key as it was, so a caller can confirm what went.

Path parameters

id*uuidSSH key id.

Example request

curl -X DELETE https://braesystems.com/api/v1/ssh-keys/$SSH_KEY_ID \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "name": "work-laptop", "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDjG7RPA1EpqDMvKeai1v1ibjWe2ZBKQRqIEB3PvLJgq you@example.com", "fingerprint": "SHA256:qqLkC/YxINXheBw7fxT6z9s92H80dJJkSIuDy3d/GJs", "created_at": "2026-07-29T14:03:11.000Z" } }

Responses

200The key that was deleted.
401Missing or invalid API key.
404No such resource in this account.
429More than 1000 requests from this key in 60 seconds.

Images

GET/api/v1/images

List operating system images

Images that can be passed as `image` to the re-image endpoint.

Example request

curl https://braesystems.com/api/v1/images \ -H "Authorization: Bearer bs_live_..."

Example response

{ "data": [ { "slug": "ubuntu-24-04", "name": "Ubuntu 24.04 LTS" } ] }

Responses

200Available images.
401Missing or invalid API key.
429More than 1000 requests from this key in 60 seconds.
Last updated on