The public catalog tells you what’s available before you create anything — regions, OS templates, and per-resource pricing. No auth required for any catalog endpoint.
Endpoint
What it returns
GET /api/v1/public/regions
Active data center regions
GET /api/v1/public/templates
OS templates and marketplace apps (filter with ?category=os or ?category=marketplace)
GET /api/v1/public/pricing/vm
VM pricing plans (the pricing_id value used on Create VM)
Every resource — VM, snapshot, backup, volume, key — gets an id at create time, returned in the create response. If you didn’t save it, the only way to find it later is to list the resource and pick the one you want. The dashboard does this internally; you do the same over the API.
Resource
List endpoint
Notes
VMs
GET /api/v1/vms
Filter ?project_id=<uuid> or ?status=active
Volumes
GET /api/v1/volumes
Filter ?vm_id=<uuid> for volumes attached to one VM
Snapshots
GET /api/v1/snapshots
Filter ?vm_id=<uuid>, ?volume_id=<int>, or ?type=vm|volume
Backups
GET /api/v1/backups
Filter ?vm_id=<uuid>
Backup schedules
GET /api/v1/backup-schedules
Filter ?vm_id=<uuid>
SSH keys
GET /api/v1/ssh-keys
Account-scoped, no filters
Projects
GET /api/v1/projects
Account-scoped
VPCs
GET /api/v1/vpcs
Filter ?region=us-east
Floating IPs
GET /api/v1/ips
Filter ?status=available|reserved|attached
Security groups
GET /api/v1/security-groups
—
All list endpoints support limit (default 20–50) and offset for pagination. Pass X-Project-ID to scope to a single project where applicable.
Every error response is JSON with an error (short label) and a message (human-readable detail). The HTTP statuses you’ll see most:
HTTP status
What it means
What to do
400
Bad request
Inspect message — usually a field validation issue (bad CIDR, password too short, missing pricing_id) or a missing X-Project-ID header on a mutating endpoint. Fix the payload and retry
401
Unauthorized
The X-API-Key is missing, malformed, expired, or revoked. Generate a new key in the dashboard
402
Payment Required
Account balance is too low to provision. Top up and retry
403
Billing validation failed
Account is banned, has a failed last payment, or has no_billing_customer. Check message.reason and resolve in the dashboard
404
Not found
The VM/project/resource ID isn’t reachable from this key. Double-check IDs and X-Project-ID
409
Conflict
Resource state mismatch (e.g. resizing a VM that isn’t passive). Read message and adjust
429
Rate limited
Too many requests — back off. Default tier is 30 RPS / burst 60 per API key; honor the Retry-After header. See Authentication for tier detail and how to upgrade