Crea, controlla, potenzia, ridimensiona ed elimina i server VPS. I server sono identificati dal loro uuid.
Restituisce i server nel tuo account, il più recente, 25 per pagina. I server che vengono eliminati non sono inclusi.
Autorizzazione richiesta: servers:list
| Parametro | Tipo | Necessario | Designazione delle merci |
|---|---|---|---|
page |
integer | No. | Numero di pagina, a partire da 1 |
page_size |
integer | No. | Risultati per pagina (default 25, massimo 100) |
curl -X GET "https://admin.vps.org/api/v1/servers/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
url = "https://admin.vps.org/api/v1/servers/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
response = requests.get(url, headers=headers)
for server in response.json()["results"]:
print(server["uuid"], server["hostname"], server["status"])
const response = await fetch('https://admin.vps.org/api/v1/servers/', {
headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' }
});
const data = await response.json();
console.log(data.results);
$ch = curl_init('https://admin.vps.org/api/v1/servers/');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer YOUR_API_TOKEN']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach ($data['results'] as $server) {
echo $server['hostname'] . ' ' . $server['status'] . "\n";
}
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"uuid": "8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b",
"hostname": "web-01",
"status": "on",
"error_description": null,
"location_name": "New Jersey",
"plan_name": "1 vCPU / 2 GB RAM / 10 GB",
"os_name": "Ubuntu",
"ipv4_addresses": ["203.0.113.10"],
"ipv6_addresses": ["2001:db8:2:dd::f9:6b"],
"created_at": "2026-07-30T03:54:14.914364Z",
"deployed": true
},
{
"uuid": "2d7e9b40-6c1a-4f3e-8b5d-9a0c1e2f3b4d",
"hostname": "db-01",
"status": "queue",
"error_description": null,
"location_name": "New Jersey",
"os_name": "Debian",
"ipv4_addresses": [],
"ipv6_addresses": [],
"created_at": "2026-09-14T19:33:49.426508Z",
"deployed": false
}
]
}
| Campo | Tipo | Designazione delle merci |
|---|---|---|
uuid |
string | identificatore del server utilizzato in ogni altro endpoint server |
hostname |
string | Nome host scelto quando si crea il server |
status |
string | Stato corrente. Vedere i valori dello stato del server sotto. |
error_description |
string | null | Dettagli dell'ultimo errore quando lo stato è un errore, altrimenti nullo |
location_name |
string | Nome della posizione in cui il server viene eseguito |
os_name |
string | Nome del sistema operativo, senza la versione |
plan_name |
string | Riepilogo del piano leggibile, per esempio 1 vCPU / 2 GB RAM / 10 GB |
ipv4_addresses |
array | Gli indirizzi IPv4 come stringhe. Svuota fino a quando il server non viene implementato, e su piani senza IPv4. |
ipv6_addresses |
array | Indirizzi IPv6 come stringhe. Svuota fino a quando il server non viene distribuito. |
created_at |
datetime | Tempo di creazione (ISO 8601, UTC) |
deployed |
boolean | Vero una volta che la fornitura è terminata |
| 200 | Elenco dei server recuperato con successo |
| 403 | Token API mancante o non valido, o il token non ha il permesso richiesto |
In coda a un nuovo server per l'implementazione e lo restituisce immediatamente con la coda di stato. Il provisioning continua in background: interroga l'endpoint di stato fino a quando l'implementazione è vera. Quando il server è pronto, i suoi dettagli di accesso vengono inviati via email al proprietario dell'account.
Il tuo account ha bisogno di un metodo di pagamento salvato. A seconda della cronologia del tuo account, una pre-autorizzazione temporanea di circa una settimana del prezzo del piano (almeno 1 USD) può essere piazzata sulla tua carta prima che il server venga creato.
Autorizzazione richiesta: servers:create
| Parametro | Tipo | Necessario | Designazione delle merci |
|---|---|---|---|
hostname |
string | SÌ | Almeno 3 caratteri. Solo lettere, cifre, trattini e periodi. |
location_id |
integer | SÌ | L'id di una posizione attiva dall'API di Locations |
plan_uuid |
string | SÌ | L'uuid di un piano attivo dal Piani API |
operating_system_version_uuid |
string | SÌ | L'uuid di una voce attiva nell'elenco delle versioni di un sistema operativo |
ssh_key_uuids |
array | No. | UUID delle chiavi SSH dall'API dei tasti SSH da installare sul server |
ssh_key_ids |
array | No. | Id interi dei tasti SSH, in alternativa a ssh_key_uuids. Se entrambi sono inviati, ssh_key_ids è usato. |
ssh_key_uuid, ssh_key_id |
string, integer | No. | Shorthand per una singola chiave SSH |
auth_method |
string | No. | password, ssh_key o entrambi. Predefiniti per password, o per entrambi quando vengono fornite le chiavi SSH. |
curl -X POST "https://admin.vps.org/api/v1/servers/" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hostname": "web-01",
"location_id": 1,
"plan_uuid": "3bc2faf6-8f8b-4978-b62d-b52ed3f858e9",
"operating_system_version_uuid": "c3418f90-80a0-4e00-a7e1-d0ab1822b941",
"ssh_key_uuids": ["YOUR_SSH_KEY_UUID"]
}'
import requests
url = "https://admin.vps.org/api/v1/servers/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
data = {
"hostname": "web-01",
"location_id": 1,
"plan_uuid": "3bc2faf6-8f8b-4978-b62d-b52ed3f858e9",
"operating_system_version_uuid": "c3418f90-80a0-4e00-a7e1-d0ab1822b941",
"ssh_key_uuids": ["YOUR_SSH_KEY_UUID"],
}
response = requests.post(url, headers=headers, json=data)
server = response.json()
print(response.status_code, server["uuid"], server["status"])
const response = await fetch('https://admin.vps.org/api/v1/servers/', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
hostname: 'web-01',
location_id: 1,
plan_uuid: '3bc2faf6-8f8b-4978-b62d-b52ed3f858e9',
operating_system_version_uuid: 'c3418f90-80a0-4e00-a7e1-d0ab1822b941',
ssh_key_uuids: ['YOUR_SSH_KEY_UUID']
})
});
const server = await response.json();
console.log(server.uuid, server.status);
$data = [
'hostname' => 'web-01',
'location_id' => 1,
'plan_uuid' => '3bc2faf6-8f8b-4978-b62d-b52ed3f858e9',
'operating_system_version_uuid' => 'c3418f90-80a0-4e00-a7e1-d0ab1822b941',
'ssh_key_uuids' => ['YOUR_SSH_KEY_UUID']
];
$ch = curl_init('https://admin.vps.org/api/v1/servers/');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer YOUR_API_TOKEN',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server = json_decode(curl_exec($ch), true);
curl_close($ch);
201 Creato con l'intero oggetto server descritto in Ottieni Dettagli server. Gli indirizzi e vmid vengono compilati una volta che l'implementazione termina.
{
"uuid": "5f0c8e2a-6b1d-4c3e-9a7f-2d4b6c8e0a1f",
"hostname": "web-01",
"vmid": null,
"status": "queue",
"error_description": null,
"location": {
"id": 1,
"name": "New Jersey",
"country_name": "United States",
"is_active": true
},
"plan": {
"uuid": "3bc2faf6-8f8b-4978-b62d-b52ed3f858e9",
"cpu": 1,
"ram": 2,
"ram_unit": "GB",
"disk_space": 10,
"disk_space_total": 10240,
"transfer": 500,
"price": "3.50",
"cpu_type_name": "Shared",
"is_active": true,
"hourly_price": "0.005",
"monthly_price": "3.50",
"is_gpu": false,
"gpu_count": 0,
"gpu_model": ""
},
"operating_system": {
"id": 1,
"name": "Ubuntu",
"svg_icon": "<svg ...>",
"versions": [ ... ]
},
"operating_system_version": {
"uuid": "c3418f90-80a0-4e00-a7e1-d0ab1822b941",
"name": "24.04 LTS x64",
"os_name": "Ubuntu",
"os_svg_icon": "<svg ...>",
"is_active": true
},
"ipv4_addresses": [],
"ipv6_addresses": [],
"deployed": false,
"created_at": "2026-09-14T21:02:11.402113Z",
"recent_actions": []
}
| 201 | Server creato e in coda per l'implementazione |
| 400 | Errore di convalida, ad esempio una posizione inattiva, una versione di piano o di sistema operativo |
| 402 | Nessun metodo di pagamento sul file, fatture non pagate, o la pre-autorizzazione della carta è stata rifiutata |
| 403 | Token API mancante o non valido, o il token non ha il permesso richiesto |
| 429 | Il tuo account ha raggiunto il limite di creazione del server |
Restituisce un server con la sua posizione, piano, sistema operativo, indirizzi IP e le cinque azioni più recenti.
Autorizzazione richiesta: servers:list
curl -X GET "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"uuid": "8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b",
"hostname": "web-01",
"vmid": 1042,
"status": "on",
"error_description": null,
"location": {
"id": 1,
"name": "New Jersey",
"country_name": "United States",
"is_active": true
},
"plan": {
"uuid": "14186969-fbaf-43e1-9ab2-b1f1aeb66674",
"cpu": 1,
"ram": 2,
"ram_unit": "GB",
"disk_space": 25,
"disk_space_total": 25600,
"transfer": 1,
"price": "5.00",
"cpu_type_name": "Shared",
"is_active": true,
"hourly_price": "0.007",
"monthly_price": "5.00",
"is_gpu": false,
"gpu_count": 0,
"gpu_model": ""
},
"operating_system": {
"id": 1,
"name": "Ubuntu",
"svg_icon": "<svg ...>",
"versions": [ ... ]
},
"operating_system_version": {
"uuid": "c3418f90-80a0-4e00-a7e1-d0ab1822b941",
"name": "24.04 LTS x64",
"os_name": "Ubuntu",
"os_svg_icon": "<svg ...>",
"is_active": true
},
"ipv4_addresses": [
{
"ip": "203.0.113.10",
"gateway": "203.0.113.1",
"subnet": "203.0.113.0",
"rdns": "web-01.example.com"
}
],
"ipv6_addresses": [
{
"ip": "2001:db8:2:dd::f9:6b",
"gateway": "2001:db8:2:dd::f9:1",
"subnet": "2001:db8:2:dd::f9:0",
"rdns": "web-01.example.com"
}
],
"deployed": true,
"created_at": "2026-07-30T03:54:14.914364Z",
"recent_actions": [
{
"id": 17028,
"action": "create",
"action_display": "Create",
"description": "Server deployed with VMID 1042",
"user_email": "you@example.com",
"created_at": "2026-07-30T03:54:32.860854Z"
}
]
}
Il markup delle icone SVG e l'elenco delle versioni sono accorciati qui.
| Campo | Tipo | Designazione delle merci |
|---|---|---|
vmid |
integer | null | Numero della macchina virtuale, impostato durante l'implementazione |
location |
object | Oggetto posizione, come restituito dall'API Località |
plan |
object | Oggetto di piano, come restituito dalle API Piani |
operating_system, operating_system_version |
object | Sistema operativo e versione installata, come restituito dall'API Sistemi Operativi |
ipv4_addresses, ipv6_addresses |
array | Un oggetto per indirizzo con ip, gateway, subnet e rdns (il nome host DNS inverso) |
recent_actions |
array | Fino a cinque azioni più recenti: id, action, action_display, description, user_email, created_at |
| 200 | Dettagli del server recuperati correttamente |
| 404 | Non trovato, o appartiene ad un altro account |
Una chiamata leggera per il sondaggio dopo che si crea, potenza o ridimensionare un server.
curl -X GET "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/status/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"status": "on",
"deployed": true,
"resizing": false
}
| Valore | Designazione delle merci |
|---|---|
queue |
Un'azione (distribuisci, potenzia, ridimensiona, ripristina) è in coda o in corso |
deploying |
I server creati dal pannello di controllo usano questo stato; i server creati tramite l'API rimangono in coda fino a quando non sono pronti. |
on |
Esecuzione |
off |
Spegnimento |
error |
L'ultima azione non riuscita. Vedere error_description. |
suspended_payment |
Sospesa a causa di fatture non pagate |
In coda un'azione di alimentazione. Lo stato del server cambia in coda fino al completamento dell'azione.
Autorizzazione richiesta: servers:power
| Parametro | Tipo | Necessario | Designazione delle merci |
|---|---|---|---|
action |
string | SÌ |
start: accensioneshutdown: spegnimento grazioso, forzato se l'ospite non si fermarestart: ciclo di potenza (stop, quindi avvio)stop: attualmente esegue lo stesso ciclo di alimentazione del riavvio. Usare l'arresto per lasciare un server spento.
|
curl -X POST "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/power/" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "restart"}'
import requests
server_uuid = "8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b"
url = f"https://admin.vps.org/api/v1/servers/{server_uuid}/power/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
response = requests.post(url, headers=headers, json={"action": "restart"})
print(response.json())
{
"message": "Server restart queued"
}
| 200 | L'azione è stata in coda |
| 400 | Azione mancante o non supportata |
| 402 | inizio rifiutato perché il conto ha fatture non pagate |
| 404 | Non trovato, o appartiene ad un altro account |
Sposta il server su un altro piano attivo. Il nuovo piano non può avere meno spazio su disco di quello attuale, e il corpo della richiesta deve includere l'azione impostata per ridimensionare. La capacità dell'hypervisor per il nuovo piano viene controllata prima che tutto sia in coda, quindi una richiesta rifiutata lascia il server invariato.
Il server viene spento mentre viene ridimensionato e riavviato successivamente. Se il ridimensionamento fallisce, il server viene rimesso sul suo piano precedente e riavviato se era in esecuzione. La crescita del disco non può essere annullata.
Autorizzazione richiesta: servers:resize
| Parametro | Tipo | Necessario | Designazione delle merci |
|---|---|---|---|
action |
string | SÌ | Deve essere ridimensionato |
new_plan_uuid |
string | SÌ | L'uuid del piano di spostare a |
curl -X POST "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/resize/" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "resize", "new_plan_uuid": "5e26a4a6-bd0c-467c-abca-da036c811c3f"}'
{
"message": "Resize queued successfully"
}
Esempio di ridimensionamento rifiutato (409):
{
"error": "Not enough hypervisor capacity for the selected plan; the server was not changed"
}
| 200 | L'azione è stata in coda |
| 400 | Azione mancante o nuovo_plan_uuid, piano non valido o inattivo, un piano con meno spazio su disco o un piano GPU (i piani GPU non possono essere ridimensionati tramite l'API) |
| 404 | Non trovato, o appartiene ad un altro account |
| 409 | Un cambiamento di ridimensionamento o di storage è già in corso, o non vi è abbastanza capacità di hypervisor per il nuovo piano |
| 503 | Impossibile controllare la capacità in questo momento. Il server non è stato modificato; riprovare più tardi. |
Genera una nuova password di root, la restituisce nella risposta e mette in coda il cambiamento sul server. La nuova password è anche inviata via email. Il server deve essere distribuito. Non è necessario alcun corpo di richiesta.
curl -X POST "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/reset-password/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"message": "Password reset queued. New password will also be emailed to you.",
"password": "generated-password",
"job_id": "b6f1c7e2-3a4d-4f5e-8b9c-0d1e2f3a4b5c"
}
| 200 | L'azione è stata in coda |
| 400 | Il server non è ancora stato distribuito |
| 404 | Non trovato, o appartiene ad un altro account |
GET elenca il nome host DNS inverso di ogni indirizzo IPv4 e IPv6 sul server. POST lo imposta per un indirizzo. Inviando un nome host vuoto reimposta l'indirizzo al suo nome DNS inverso predefinito.
Autorizzazione richiesta: servers:update
| Parametro | Tipo | Necessario | Designazione delle merci |
|---|---|---|---|
ip |
string | SÌ | Un indirizzo IPv4 o IPv6 assegnato a questo server |
hostname |
string | No. | Il nome host PTR. Lascia vuoto per ripristinare il valore predefinito. |
curl -X POST "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/rdns/" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"ip": "203.0.113.10", "hostname": "mail.example.com"}'
{
"message": "Reverse DNS for 203.0.113.10 set to mail.example.com",
"ip": "203.0.113.10",
"hostname": "mail.example.com"
}
Risposta GET:
{
"rdns": [
{"ip": "203.0.113.10", "hostname": "mail.example.com"},
{"ip": "2001:db8:2:dd::f9:6b", "hostname": "mail.example.com"}
]
}
| 400 | mancante ip, o il nome host non può essere impostato |
| 404 | L'indirizzo IP non è assegnato a questo server |
Esegue un comando shell all'interno del server tramite l'agente guest QEMU e attende che finisca. Il server deve essere implementato e in esecuzione, e qemu-guest-agent deve essere installato e in esecuzione nell'ospite.
Autorizzazione richiesta: servers:exec
| Parametro | Tipo | Necessario | Designazione delle merci |
|---|---|---|---|
command |
string | SÌ | Riga di comando con /bin/sh -c, fino a 2000 caratteri |
timeout |
integer | No. | Secondi da attendere per il comando, 1 a 300 (default 30) |
curl -X POST "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/exec/" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"command": "uptime", "timeout": 30}'
{
"stdout": " 21:14:03 up 46 days, 2:10, 0 users, load average: 0.08, 0.03, 0.01\n",
"stderr": "",
"exit_code": 0,
"timed_out": false
}
Se il comando è ancora in esecuzione quando il timeout scade, la risposta è timed_out impostata a truexit_code impostata a null.
| 200 | Comando terminato o cronometro |
| 400 | Server non installato o non in esecuzione, o parametri non validi |
| 409 | L'agente ospite QEMU non è in esecuzione sul server |
| 503 | Problema di connessione temporanea. Riprova dopo l'intestazione Retry-After. |
In coda al server per l'eliminazione permanente. Il server scompare dall'elenco immediatamente e non può essere recuperato.
Autorizzazione richiesta: servers:delete
curl -X DELETE "https://admin.vps.org/api/v1/servers/8c4f2a1e-5b3d-4e6f-9a7b-1c2d3e4f5a6b/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"message": "Server deletion queued"
}
| 202 | Accettato: la richiesta è stata in coda |
| 404 | Non trovato, o appartiene ad un altro account |
Memorizza le chiavi SSH pubbliche nel tuo account, poi passa i loro uuids come ssh_key_uuids quando crei un server. Ottieni una lista delle chiavi (25 per pagina); POST ne aggiunge una.
Autorizzazione richiesta: ssh-keys:list (GET), ssh-keys:create (POST)
| Parametro | Tipo | Necessario | Designazione delle merci |
|---|---|---|---|
name |
string | SÌ | Un nome per riconoscere la chiave da, fino a 100 caratteri |
public_key |
string | SÌ | La chiave pubblica in formato OpenSSH, ad esempio i contenuti di id_ed25519.pub |
curl -X POST "https://admin.vps.org/api/v1/ssh-keys/" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "laptop", "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... you@laptop"}'
import requests
url = "https://admin.vps.org/api/v1/ssh-keys/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
with open("/home/you/.ssh/id_ed25519.pub") as f:
data = {"name": "laptop", "public_key": f.read().strip()}
response = requests.post(url, headers=headers, json=data)
print(response.status_code, response.json()["uuid"])
{
"id": 19,
"uuid": "6e1b9c52-3f8a-4d7e-a2c4-5b9d0e1f2a3c",
"name": "laptop",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... you@laptop",
"fingerprint": "0b:4c:9b:48:76:e7:1d:07:b9:ac:71:90:70:f7:9a:69",
"created_at": "2026-08-23T19:16:11.547183Z",
"last_used_at": null
}
| Campo | Tipo | Designazione delle merci |
|---|---|---|
id, uuid |
integer, string | Identifier chiave. Usa uuid in ssh_key_uuids e nell'URL sottostante; id funziona in ssh_key_ids. |
fingerprint |
string | MD5 impronte digitali della chiave, calcolate dalla piattaforma |
last_used_at |
datetime | null | Quando la chiave è stata installata l'ultima volta su un nuovo server |
| 201 | Tasto aggiunto |
| 400 | Nome mancante, o la chiave pubblica non è una chiave pubblica SSH valida |
GET restituisce una chiave con i campi sopra riportati. DELETE la rimuove dal tuo account e restituisce 204 senza corpo. L'eliminazione di una chiave non la rimuove dai server su cui era già installato. Le chiavi non possono essere modificate: eliminare e aggiungere di nuovo.
Autorizzazione richiesta: ssh-keys:list (GET), ssh-keys:delete (DELETE)
curl -X DELETE "https://admin.vps.org/api/v1/ssh-keys/6e1b9c52-3f8a-4d7e-a2c4-5b9d0e1f2a3c/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Creare un backup o una snapshot è anche un'azione server:
POST /api/v1/servers/{uuid}/backup/: API di backupPOST /api/v1/servers/{uuid}/snapshot/: API degli snapshot