List servers
GET/api/servers
Authentication: bearer token.
Permission: servers.view.
curl -X GET "https://shellius.example.com/api/servers" \
-H "Authorization: Bearer $SHELLIUS_TOKEN"200 OK
{ "success": true, "data": { … } }Fleet health summary
GET/api/servers/health/summary
Authentication: bearer token.
Permission: servers.view.
curl -X GET "https://shellius.example.com/api/servers/health/summary" \
-H "Authorization: Bearer $SHELLIUS_TOKEN"200 OK
{ "success": true, "data": { … } }Bulk change environment
POST/api/servers/bulk/environment
Authentication: bearer token.
Permission: servers.change_environment.
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
serverIds | array | Yes | At least 1. |
environment | string | Yes |
curl -X POST "https://shellius.example.com/api/servers/bulk/environment" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serverIds": [],
"environment": "…"
}'200 OK
{ "success": true, "data": { … } }Bulk update environment/protocol/os/sshUser/isActive/customerId
POST/api/servers/bulk
Generalized bulk update — change any of a set of fields on many servers.
Authentication: bearer token.
Permission: servers.update.
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
serverIds | array | Yes | At least 1. |
patch | object | Yes | At least 1. |
curl -X POST "https://shellius.example.com/api/servers/bulk" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serverIds": [],
"patch": {}
}'200 OK
{ "success": true, "data": { … } }Get server
GET/api/servers/:id
Authentication: bearer token.
Permission: servers.view.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
curl -X GET "https://shellius.example.com/api/servers/{id}" \
-H "Authorization: Bearer $SHELLIUS_TOKEN"200 OK
{ "success": true, "data": { … } }Change IP of a dynamicIp server
PATCH/api/servers/:id/connection-ip
Update the connection IP of a non-static-IP server so a changed cloud IP doesn't lock people out (servers.update_connection_ip). An identity-auth server also needs servers.manage_credentials (see above).
Authentication: bearer token.
Permission: servers.update_connection_ip.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
ipAddress | string | Yes |
curl -X PATCH "https://shellius.example.com/api/servers/{id}/connection-ip" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"ipAddress": "…"
}'200 OK
{ "success": true, "data": { … } }Create server
POST/api/servers
Authentication: bearer token.
Permission: servers.create.
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
customerId | string | Yes | |
hostname | string | Yes | 1–255 characters. |
displayName | string | No | At most 255 characters. May be null. |
description | string | No | At most 1000 characters. May be null. |
dynamicIp | boolean | No | Default false. |
ipAddress | string | Yes | May be null. |
port | number | No | Default 22. 1–65535. |
protocol | string | No | Default ssh. |
environment | string | No | Default dev. |
labels | array | No | |
osType | string | No | May be null. |
osVersion | string | No | May be null. |
cloudProvider | string | No | May be null. |
cloudInstanceId | string | No | May be null. |
cloudRegion | string | No | May be null. |
cloudAccountId | string | No | May be null. |
sshUser | string | No | Default root. |
sshKeyPath | string | No | May be null. |
rdpUsername | string | No | At most 255 characters. May be null. |
rdpPassword | string | No | May be null. |
isActive | boolean | No | |
authMode | string | No | Default certificate. |
credentialId | string | Yes | May be null. |
curl -X POST "https://shellius.example.com/api/servers" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"customerId": "…",
"hostname": "…",
"ipAddress": "…",
"credentialId": "…"
}'201 Created
{ "success": true, "data": { … } }Update server
PUT/api/servers/:id
Authentication: bearer token.
Permission: servers.update.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
hostname | string | No | 1–255 characters. |
displayName | string | No | At most 255 characters. May be null. |
description | string | No | At most 1000 characters. May be null. |
dynamicIp | boolean | No | |
ipAddress | string | No | May be null. |
port | number | No | 1–65535. |
protocol | string | No | |
environment | string | No | |
labels | array | No | |
osType | string | No | May be null. |
osVersion | string | No | May be null. |
cloudProvider | string | No | May be null. |
cloudInstanceId | string | No | May be null. |
cloudRegion | string | No | May be null. |
cloudAccountId | string | No | May be null. |
sshUser | string | No | |
sshKeyPath | string | No | May be null. |
rdpUsername | string | No | At most 255 characters. May be null. |
rdpPassword | string | No | May be null. |
isActive | boolean | No | |
authMode | string | No | |
credentialId | string | No | May be null. |
curl -X PUT "https://shellius.example.com/api/servers/{id}" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hostname": "…",
"displayName": "…",
"description": "…"
}'200 OK
{ "success": true, "data": { … } }Preview server delete impact
GET/api/servers/:id/delete-impact
Authentication: bearer token.
Permission: servers.delete.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
curl -X GET "https://shellius.example.com/api/servers/{id}/delete-impact" \
-H "Authorization: Bearer $SHELLIUS_TOKEN"200 OK
{ "success": true, "data": { … } }Hard-delete server
DELETE/api/servers/:id
Authentication: bearer token.
Permission: servers.delete.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
curl -X DELETE "https://shellius.example.com/api/servers/{id}" \
-H "Authorization: Bearer $SHELLIUS_TOKEN"200 OK
{ "success": true, "data": { … } }Clear pinned host key
POST/api/servers/:id/host-key/reset
Clears the pinned SSH host key (TOFU) so the next ssh2 connection re-pins on first contact.
Authentication: bearer token.
Permission: servers.reset_host_key.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
curl -X POST "https://shellius.example.com/api/servers/{id}/host-key/reset" \
-H "Authorization: Bearer $SHELLIUS_TOKEN"200 OK
{ "success": true, "data": { … } }Run health probe
POST/api/servers/:id/health-check
Authentication: bearer token.
Permission: servers.onboard.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
curl -X POST "https://shellius.example.com/api/servers/{id}/health-check" \
-H "Authorization: Bearer $SHELLIUS_TOKEN"200 OK
{ "success": true, "data": { … } }SSE: SSH in with caller-supplied creds and run bootstrap
POST/api/servers/:id/provision
SSE endpoint — streams bootstrap output to admin in real time. The private key and sudo password are used once in memory and never stored.
Authentication: bearer token.
Permission: servers.onboard.
Path parameters
| Name | Type | Notes |
|---|---|---|
id | string |
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
mode | string | No | Default full. |
curl -X POST "https://shellius.example.com/api/servers/{id}/provision" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "…"
}'200 OK
{ "success": true, "data": { … } }Bulk install plan
POST/api/servers/bulk-install/plan
What a run would do, before it does any of it. Read-only.
Authentication: bearer token.
Permission: servers.onboard.
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
serverIds | array | No | Default []. |
mode | string | No | Default posture. |
hasFallbackCredentials | boolean | No | Default false. |
includeDone | boolean | No | Default false. |
curl -X POST "https://shellius.example.com/api/servers/bulk-install/plan" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serverIds": [],
"mode": "…",
"hasFallbackCredentials": false
}'200 OK
{ "success": true, "data": { … } }Bulk install
POST/api/servers/bulk-install
SSE. Runs the installer across many hosts, bounded concurrency, one event stream. Secrets are resolved in memory per host and never stored.
Authentication: bearer token.
Permission: servers.onboard.
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
serverIds | array | Yes | At least 1. |
mode | string | No | Default posture. |
concurrency | number | No | Default 3. 1–8. |
credentialId | string | No | May be null. |
sshUser | string | No | May be null. |
privateKey | string | No | May be null. |
passphrase | string | No | May be null. |
password | string | No | May be null. |
sudoPassword | string | No | May be null. |
useServerIdentity | boolean | No | Default true. |
curl -X POST "https://shellius.example.com/api/servers/bulk-install" \
-H "Authorization: Bearer $SHELLIUS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serverIds": []
}'200 OK
{ "success": true, "data": { … } }