Reinstall
POST/api/v1/vms/{vm_uuid}/reinstall
A fresh root disk with the image you give. The addresses, the network, attached volumes, the SSH key and the password stay; snapshots and backups stay in the account.
Parameters
| Name | In | Description |
|---|---|---|
| vm_uuid | path, stringrequired | Server id, from Create a VM or List VMs |
Request body
| Field | Type | Description |
|---|---|---|
| vm_template_id | integerrequired | Image id, from List images; the same system or another one |
Example request
curl -X POST "https://platform.serverscamp.com/api/v1/vms/$VM_UUID/reinstall" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vm_template_id": 5
}'import os, requests
token = os.environ["API_TOKEN"]
vm_uuid = "6f1c2a9e-4b3d-4e8a-9c71-2d5e8f0a1b34"
r = requests.post(
f"https://platform.serverscamp.com/api/v1/vms/{vm_uuid}/reinstall",
headers={"Authorization": f"Bearer {token}"},
json={
"vm_template_id": 5
},
)
r.raise_for_status()
print(r.json())const vmUuid = '6f1c2a9e-4b3d-4e8a-9c71-2d5e8f0a1b34';
const r = await fetch(`https://platform.serverscamp.com/api/v1/vms/${vmUuid}/reinstall`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_TOKEN}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"vm_template_id": 5
}),
});
console.log(r.status, await r.json());curl -X POST "https://platform.serverscamp.com/api/v1/vms/$VM_UUID/reinstall" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vm_template_id": 3
}'import os, requests
token = os.environ["API_TOKEN"]
vm_uuid = "6f1c2a9e-4b3d-4e8a-9c71-2d5e8f0a1b34"
r = requests.post(
f"https://platform.serverscamp.com/api/v1/vms/{vm_uuid}/reinstall",
headers={"Authorization": f"Bearer {token}"},
json={
"vm_template_id": 3
},
)
r.raise_for_status()
print(r.json())const vmUuid = '6f1c2a9e-4b3d-4e8a-9c71-2d5e8f0a1b34';
const r = await fetch(`https://platform.serverscamp.com/api/v1/vms/${vmUuid}/reinstall`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_TOKEN}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"vm_template_id": 3
}),
});
console.log(r.status, await r.json());Answer
Status 202 with this body.
| Field | Type | Description |
|---|---|---|
| vm_uuid | stringrequired | |
| from_template_name | string, optional | System before |
| to_template_name | string, optional | System after |
| step | stringrequired | queued, applying, done or failed |
| started_at | stringrequired | |
| completed_at | string, optional | |
| error | string, optional | What went wrong, when step is failed |
{
"vm_uuid": "6f1c2a9e-4b3d-4e8a-9c71-2d5e8f0a1b34",
"from_template_name": "Ubuntu 26.04 LTS",
"to_template_name": "Debian 13",
"step": "queued",
"started_at": "2026-11-01T10:05:00+00:00",
"completed_at": null,
"error": null
}Wait until it is ready
The answer comes at once and the work runs in the background. The job's own status shows how far it got.
Check the status
Ask Reinstall status with the server's id; the field to watch is step:
curl "https://platform.serverscamp.com/api/v1/vms/$VM_UUID/reinstall/status" \
-H "Authorization: Bearer $API_TOKEN"| step | What it means |
|---|---|
queued | Waiting for its turn |
applying | The change runs |
done | Finished |
failed | Something went wrong; the error field says what |
Wait in a loop
Ask every few seconds until it gets there, and stop on an error.
# VM_UUID: vm_uuid of the server, from the answer above
while true; do
JOB=$(curl -s "https://platform.serverscamp.com/api/v1/vms/$VM_UUID/reinstall/status" -H "Authorization: Bearer $API_TOKEN")
STEP=$(echo "$JOB" | jq -r .step)
echo "$STEP"
[ "$STEP" = done ] && break
[ "$STEP" = failed ] && { echo "$JOB" | jq -r .error; exit 1; }
sleep 5
done# vm_uuid: vm_uuid of the server, from the answer above
import os, time, requests
headers = {"Authorization": f"Bearer {os.environ['API_TOKEN']}"}
while True:
job = requests.get(f"https://platform.serverscamp.com/api/v1/vms/{vm_uuid}/reinstall/status", headers=headers).json()
print(job["step"])
if job["step"] == "done":
break
if job["step"] == "failed":
raise SystemExit(job["error"])
time.sleep(5)// vmUuid: vm_uuid of the server, from the answer above
const headers = { Authorization: `Bearer ${process.env.API_TOKEN}` };
for (;;) {
const job = await (await fetch(`https://platform.serverscamp.com/api/v1/vms/${vmUuid}/reinstall/status`, { headers })).json();
console.log(job.step);
if (job.step === 'done') break;
if (job.step === 'failed') throw new Error(job.error);
await new Promise((ok) => setTimeout(ok, 5000));
}The bash version needs jq.
Errors
| Status | When |
|---|---|
400 | An image that is not accepted |
401 | No token, or a token that is not valid |
409 | The server is busy with another operation |
422 | The body or a parameter is not what the operation takes |
Every operation can also answer 401 without a valid token. All errors