In one paragraph: a Cloud VM is a server in our European cloud region (bucharest-ro), billed by the hour up to its plan's monthly price. You run it from the console, or through the public API at https://api.rarecloud.io/v1, the CLI, the Terraform provider or the MCP server. This page shows each task with its API route and CLI command. Routes that read need services:read and routes that change something need services:write. For plans and prices, see the Cloud VM page; to start with the API, see API getting started.
Deploy
rarecloud server check --plan g-2vcpu-8gb --image ubuntu-24.04 \
--region bucharest-ro --name web-01 --ssh-key <key-id>
rarecloud server create --plan g-2vcpu-8gb --image ubuntu-24.04 \
--region bucharest-ro --name web-01 --ssh-key <key-id> --wait
curl -s https://api.rarecloud.io/v1/services \
-H "Authorization: Bearer $RARECLOUD_TOKEN" \
-H "Content-Type: application/json" \
-d '{"category":"cloud-vm","productId":"g-2vcpu-8gb","region":"bucharest-ro","imageId":"ubuntu-24.04","hostname":"web-01","sshPublicKey":"ssh-ed25519 ..."}'
GET /v1/catalog/listings/cloud-vm lists the plans. Send the same body to POST /v1/services/preflight to check your balance and whether new orders are open on this account, with nothing created or charged. It does not check your limits.
How you log in depends on what you send:
| You send | What you get |
|---|---|
| An SSH key, no password | Key login over SSH. The answer carries consolePassword, shown once, which works only on the web console |
| Neither | The same consolePassword, shown once, for the web console |
rootPassword, no key | Your password works over SSH and on the web console |
rootPassword and a key | SSH stays key-only, and your password works on the web console |
Images
GET /v1/catalog/images lists what a new server can start from: ubuntu-24.04, ubuntu-22.04, debian-12 and rocky-9. You can also create a server from one of your own snapshots by passing its id as imageId.
The console's server page shows the image the server really runs. GET /v1/services/{id} returns it as image, { slug, name }, and it follows a reinstall. slug is the catalog slug or your snapshot id, and image is null when it cannot be determined. List responses carry it for VMs that recorded it at create or reinstall. In Terraform, it is image_name on rarecloud_server.
Power
| Task | API | CLI |
|---|---|---|
| Start | POST /v1/services/{id}/actions/start | rarecloud server start <id> |
| Stop | POST /v1/services/{id}/actions/stop | rarecloud server stop <id> |
| Reboot | POST /v1/services/{id}/actions/reboot | rarecloud server reboot <id> |
A server is billed while it exists, on or off, because its disk and IP stay reserved for you.
Web console
The browser console reaches the server even when SSH does not. Open it from the server's page, or get its URL with GET /v1/services/{id}/console or rarecloud server console <id>.
Reinstall
A reinstall rebuilds the server from an image and keeps its IP. Everything on the disk is lost.
rarecloud server reinstall <id> --image ubuntu-24.04 --ssh-key ~/.ssh/id_ed25519.pub
Through the API it is POST /v1/services/{id}/actions/reinstall with imageId, plus password or sshPublicKey. With neither, the answer carries a web console password, shown once. GET /v1/services/{id}/os-templates lists what you can pick: curated images (kind: "stock") and your own snapshots (kind: "snapshot"), including those of another VM. A snapshot that needs a bigger disk than this server has is refused, and the error names both sizes. The login rules are the same as at deploy.
Reset the root password
Reset the password of a running server without a reboot, from the server's page in the console or with:
rarecloud server reset-password <id> --generate
The API route is POST /v1/services/{id}/actions/reset-password with { "password": "..." }, 8 to 128 characters. The answer is status: "reset-requested", and the server applies the new password within about a minute.
- The new password always works on the web console. Over SSH it works only on servers deployed or reinstalled with password login; a server set up with an SSH key stays key-only.
GET /v1/services/{id}tells you whether a server can do this:capabilities.resetRootPassword. When it is false,capabilities.resetRootPasswordReasonsays why.no_guest_agentmeans the disk has no guest-agent channel, for example after a restore from an older snapshot, and a reinstall brings it back.unknownmeans it could not be read just now, so try again later.- The server must be running. Otherwise the route answers 409. A server still finishing first boot answers 409
NOT_READY; wait about a minute and retry.
Resize
rarecloud server resize <id> --flavor g-4vcpu-16gb
The API route is POST /v1/services/{id}/resize with { "flavor": "<plan SKU>" }. It answers 202 with status: "resizing"; poll GET /v1/services/{id} until the server is active. Your data and IP stay, the server restarts once, and billing follows the new plan. The new plan's disk must be at least as large as the current one, because a root disk cannot shrink. In Terraform, change plan on rarecloud_server.
Snapshots and restore
A snapshot copies the server's root disk while the server keeps running. Each server can keep up to 5. A name is 1 to 64 characters.
| Task | API | CLI |
|---|---|---|
| Take one | POST /v1/services/{id}/snapshots with { "name": "..." } | rarecloud server snapshot create <id> --name before-upgrade --wait |
| List one server's | GET /v1/services/{id}/snapshots | rarecloud server snapshot list <id> |
| List all yours | GET /v1/snapshots | rarecloud snapshot list |
| Read one | GET /v1/snapshots/{id} | rarecloud snapshot get <snapshot-id> |
| Restore | POST /v1/services/{id}/restore with { "snapshotId": "..." } | rarecloud server snapshot restore <id> <snapshot-id> --yes |
| Delete | DELETE /v1/snapshots/{id} | rarecloud snapshot delete <snapshot-id> --yes |
- The state goes from
creatingtosecuringtoready. A snapshot is usable within seconds, while it issecuring, andreadymeans it is fully independent of the server.failedstill uses one of the server's slots until you delete it. - Restore replaces the disk. Everything written since the snapshot is lost. A restore takes a snapshot of that same server. To use a snapshot on another server, reinstall that server from it or deploy a new one.
- A snapshot cannot be deleted while servers created from it exist; the error names them. While one of a server's snapshots is
securing, that server cannot be deleted or reinstalled. - A snapshot is billed for the space it uses, at the price on the Cloud VM page.
usedBytesis null until it is measured.
Tags
Labels for your own use: up to 50 per server, each 1 to 60 characters, without , or /. Tags starting with managed:, k8s: or rarecloud are reserved. PUT /v1/services/{id}/tags with { "tags": [...] } replaces the whole set, and [] clears it. In the CLI use --tag at create, rarecloud server tag set <id> <tag>... and rarecloud server tag clear <id>.
Reverse DNS
Set the PTR record of the server's primary public IPv4. The API works the address out from your server, so you only send the hostname.
rarecloud server rdns set <id> --hostname mail.example.com
rarecloud server rdns get <id>
rarecloud server rdns delete <id>
The API routes are GET, PUT ({ "hostname": "..." }) and DELETE on /v1/services/{id}/rdns. In Terraform, use rarecloud_reverse_dns.
Delete
rarecloud server destroy <id> --yes
The API route is DELETE /v1/services/{id}. Deleting ends the server's hourly billing. A volume attached to it stays in your account, with its data and its billing, until you delete the volume.
Troubleshooting
| What you see | What it means |
|---|---|
server create is refused | The error says why. server check covers your balance and order blocks; for a limit, see rarecloud limits and limits. |
409 starting RESET_PASSWORD_UNSUPPORTED: | The disk has no guest-agent channel. Reinstall to bring it back. |
| A resize is refused for disk size | Pick a plan with an equal or larger disk. For more space without a new plan, attach a volume. |
| A snapshot will not delete | Servers created from it still exist. The error names them. |
| 404 on a server id | Wrong id. Another account's server answers 404, the same as one that does not exist. |
Links
- API reference: console.rarecloud.io/docs/api
- The same API from a terminal, as code or for agents: CLI docs, Terraform docs and MCP docs
- How the bill works: how cloud billing works