List your servers
curl --request GET \
--url https://my.server.express/api/v1/services \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://my.server.express/api/v1/services', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://my.server.express/api/v1/services"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"success": true,
"data": {
"items": [
{
"id": "<string>",
"type": "DEDICATED",
"kind": "vm",
"flavour": "linux",
"label": "<string>",
"hostname": "<string>",
"status": "pending",
"power": {
"state": "on",
"at": "2023-11-07T05:31:56Z"
},
"ipv4": "<string>",
"location": "<string>",
"tags": [
"<string>"
],
"renewal": {
"nextDueDate": "2023-11-07T05:31:56Z",
"cycle": "<string>",
"amountMinor": 123,
"currency": "<string>"
},
"os": {
"name": "<string>",
"family": "<string>"
},
"spec": {
"cpu": "<string>",
"cores": 123,
"ramMb": 123,
"diskGb": 123
}
}
],
"nextCursor": "<string>"
}
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}Services
List your servers
Every cloud and dedicated server the caller can see — their own and their teams’ — in one cursor-paged list, newest first
(createdAt then id, descending). Database only: power is the poller’s last reading, never a live call.
q matches the label, hostname, primary IPv4 (prefix), service id (prefix), the TenantOS id (exact) and tag names.
GET
/
v1
/
services
List your servers
curl --request GET \
--url https://my.server.express/api/v1/services \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://my.server.express/api/v1/services', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://my.server.express/api/v1/services"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"success": true,
"data": {
"items": [
{
"id": "<string>",
"type": "DEDICATED",
"kind": "vm",
"flavour": "linux",
"label": "<string>",
"hostname": "<string>",
"status": "pending",
"power": {
"state": "on",
"at": "2023-11-07T05:31:56Z"
},
"ipv4": "<string>",
"location": "<string>",
"tags": [
"<string>"
],
"renewal": {
"nextDueDate": "2023-11-07T05:31:56Z",
"cycle": "<string>",
"amountMinor": 123,
"currency": "<string>"
},
"os": {
"name": "<string>",
"family": "<string>"
},
"spec": {
"cpu": "<string>",
"cores": 123,
"ramMb": 123,
"diskGb": 123
}
}
],
"nextCursor": "<string>"
}
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "<string>"
}Authorizations
bearerAuthapiToken
Session access token (JWT) from POST /v1/auth/login or /v1/auth/refresh. A session satisfies every API scope.
Query Parameters
cloud covers CLOUD and VPS services; dedicated covers DEDICATED. Omit for both.
Available options:
cloud, dedicated Available options:
active, pending, suspended, cancelled, terminated Exact tag name (lowercased before matching).
Free-text search; trimmed and cut to 100 characters.
Maximum string length:
100Opaque cursor from a previous page's nextCursor.
Pattern:
^[A-Za-z0-9_-]{1,64}$Required range:
1 <= x <= 200