Sign up

Create a VPS

POST/api/v1/vps

Creates a server and starts it, usually in about a minute; poll Get a VPS until its status is running. The hostname, DNS name and reverse DNS are made from the name with a random suffix, for example web-1-a1b2c3.vm.scamp.pro. Give ssh_key_ids, a root password, or both. The balance has to cover the first month of the plan; the first hour is charged at once and then every hour after it. Send an Idempotency-Key header to retry safely: the same key within 24 hours answers with the same server instead of making a second one.

Parameters

NameInDescription
Idempotency-Keyheader, string, optionalAny string of yours, up to 200 characters. The same key within 24 hours answers with the server the first request made instead of making a second one.

Request body

FieldTypeDescription
namestringrequiredThe server's name: 3 to 24 lowercase letters, digits and hyphens, starting with a letter, e.g. web-1
hostnamestring, optional<name>-<6 hex>.vm.scamp.pro as the panel previewed it (hostname, DNS name and reverse DNS); missing or not matching the name, a new one
plan_idstringrequiredA plan id from GET /vps/plans
imagestringrequiredAn image id from GET /vps/images
ssh_key_idslist of integerSSH keys saved in your account
passwordstring, optionalRoot password
backupsbooleanDaily backups, adds the plan's backup share to the price

Example request

curl -X POST "https://platform.serverscamp.com/api/v1/vps" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "web-1",
    "plan_id": "vps2-1",
    "image": "ubuntu-26.04",
    "ssh_key_ids": [42]
  }'

Answer

Status 201 with this body.

FieldTypeDescription
vps_uuidstringrequiredVPS id
statusstringrequiredAlways queued: poll Get a VPS until it is running
hostnamestringrequiredHostname, DNS name and reverse DNS of the server
ipv4string, optionalPublic IPv4 address
ipv6_prefixstring, optionalIPv6 /56
{
  "vps_uuid": "12d46f8c-d66e-4163-99aa-1245d5b06e5b",
  "status": "queued",
  "hostname": "web-1-a1b2c3.vm.scamp.pro",
  "ipv4": "185.236.9.61",
  "ipv6_prefix": "2a01:ea05:0:f00::/56"
}

Wait until it is ready

The answer comes at once and the work runs in the background, usually for a minute or two. Get a VPS shows how far it got in its status field.

Check the status

Ask Get a VPS with the server's id:

curl "https://platform.serverscamp.com/api/v1/vps/$VPS_UUID" \
  -H "Authorization: Bearer $API_TOKEN"

The answer carries the whole server; the field to watch is status:

{
  "vps_uuid": "12d46f8c-d66e-4163-99aa-1245d5b06e5b",
  "name": "web-1",
  "status": "configuring",
  "ipv4": "185.236.9.61",
  "error": null
}
statusWhat it means
queuedWaiting for its turn on the host
cloningThe system image is copied to the server's disk
configuringDisk size, network, addresses, keys and password are set
startingThe server boots
runningReady. SSH answers once the system has booted, a few seconds later
errorSomething went wrong; the error field says what. Delete the server and create it again

Wait in a loop

Ask every few seconds until the status is the one you wait for, and stop on error.

# VPS_UUID: vps_uuid of the server, from the answer above
WANT=running
while true; do
  VPS=$(curl -s "https://platform.serverscamp.com/api/v1/vps/$VPS_UUID" -H "Authorization: Bearer $API_TOKEN")
  STATUS=$(echo "$VPS" | jq -r .status)
  echo "$STATUS"
  [ "$STATUS" = "$WANT" ] && break
  [ "$STATUS" = error ] && { echo "$VPS" | jq -r .error; exit 1; }
  sleep 5
done
curl -s "https://platform.serverscamp.com/api/v1/vps/$VPS_UUID" -H "Authorization: Bearer $API_TOKEN" | jq -r '"ssh root@" + .ipv4'

The bash version needs jq.

Errors

StatusWhen
400A name, image, plan or password that is not accepted
401No token, or a token that is not valid
402The balance does not cover the first month
403The VPS limit of the account is reached
409The plan is out of stock
422The body or a parameter is not what the operation takes

Every operation can also answer 401 without a valid token. All errors