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": "provisioning", "model": "PowerEdge R760xa", "project_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.

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": "provisioning", "model": "PowerEdge R760xa", "project_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.

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.

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.

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.

Actions

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.

Projects

GET/api/v1/projects

List projects

Every project on the account, not only the one this key is scoped to — listing them is what makes the scoping discoverable.

Example request

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

Example response

{ "data": [ { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "name": "Staging EU", "slug": "staging-eu", "kind": "production", "created_at": "2026-07-29T14:03:11.000Z" } ] }

Responses

200The projects on your account.
401Missing or invalid API key.

POST/api/v1/projects

Create a project

The new project gets its own API key. A development project is also seeded with a server and an SSH key, so its endpoints return something useful immediately.

Request body

name*string
kind"production" | "development"Defaults to production. A development project can never reach hardware.

Example request

curl -X POST https://braesystems.com/api/v1/projects \ -H "Authorization: Bearer bs_live_..." \ -H "Content-Type: application/json" \ -d '{"name":"Staging EU"}'

Example response

{ "data": { "id": "9f1c7d2e-4a3b-4c5d-8e6f-0a1b2c3d4e5f", "name": "Staging EU", "slug": "staging-eu", "kind": "production", "created_at": "2026-07-29T14:03:11.000Z" } }

Responses

201The project was created.
400The name or kind was not acceptable.
401Missing or invalid API key.
409A project with that name already exists.

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.

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.

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.

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_..."

Responses

204The key was deleted.
401Missing or invalid API key.
404No such resource in this account.

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.
Last updated on