Back to Cloud VPS
API v2

VPS API Reference

Provision, monitor, and manage compute instances programmatically. All requests use a REST interface with JSON request and response bodies.

Base URL

Production
https://console.vrtxlabs.tech/api/v2

Successful responses wrap payloads in { "data": ... }. Errors return { "error": { "code", "message" } }.

Authentication

Every request requires a Bearer token in the Authorization header. Generate a token from Account Settings → API.

Header
Authorization: Bearer YOUR_API_TOKEN

Optional IP whitelisting is enforced when configured on your account. Requests from non-whitelisted IPs receive 403 IP_NOT_ALLOWED.

Typical workflow

01

Authenticate

Create a Bearer token in the console under Account Settings → API.

02

Discover plans & regions

List compute plans and datacenter locations before provisioning.

03

Pick an OS template

Templates use slugs (e.g. ubuntu-24.04) that work across nodes in a location.

04

Create & poll

POST /servers, then poll /servers/{uuid}/status until state is running.

Discover plans, regions & templates

Before creating a server, list available compute plans, datacenter locations, and OS templates for your chosen region.

curl
# List plans
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://console.vrtxlabs.tech/api/v2/plans

# List locations
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://console.vrtxlabs.tech/api/v2/locations

# Templates for location 1
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://console.vrtxlabs.tech/api/v2/locations/1/templates

Plan ↔ API mapping

Use these plan_id values in POST /servers. Tiers match the Cloud VPS pricing page. Prices may change — confirm with GET /plans.

plan_idTierSpecsUSD / moUSD / hr
11 vCPU1 vCPU · 3 GB · 20 GB NVMe$3.92$0.0053
22 vCPU2 vCPU · 4 GB · 30 GB NVMe$5.23$0.0073
33 vCPU3 vCPU · 6 GB · 40 GB NVMe$7.85$0.0109
44 vCPU4 vCPU · 8 GB · 40 GB NVMe$10.46$0.0153
58 vCPU · 16 GB8 vCPU · 16 GB · 60 GB NVMe$20.93$0.0294
68 vCPU · 24 GB8 vCPU · 24 GB · 60 GB NVMe$31.39$0.0436
710 vCPU10 vCPU · 32 GB · 140 GB NVMe$41.86$0.0589
816 vCPU16 vCPU · 64 GB · 200 GB NVMe$85.89$0.1188

Region ↔ location_id

Pass location_id when creating a server. Regions align with the datacenter list on /vps. Availability varies — always validate with GET /locations before provisioning.

location_idRegion
1New York, USA
2San Francisco, USA
3London, UK
4Frankfurt, DE
5Singapore, SG
6Sydney, AU
7Hong Kong, HK
8Tokyo, JP
9Mumbai, IN
10Seattle, USA
11Melbourne, AU
12Hobart, AU
13Perth, AU

Create a server

Send plan_id, location_id, and template_slug. The platform selects the best node automatically. The server starts in installing status.

curl
curl -X POST https://console.vrtxlabs.tech/api/v2/servers \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_id": 1,
    "location_id": 6,
    "template_slug": "ubuntu-24.04",
    "hostname": "app-01.example.com"
  }'

Common template slugs

SlugOS
ubuntu-24.04Ubuntu 24.04 LTS
ubuntu-22.04Ubuntu 22.04 LTS
debian-12Debian 12
almalinux-9AlmaLinux 9
windows-2022Windows Server 2022

Always confirm slugs with GET /locations/{id}/templates — availability varies by region.

Poll until running

Poll GET /servers/{uuid}/status until the hypervisor reports running. Fetch root credentials from GET /servers/{uuid}/credentials once installation completes.

curl
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://console.vrtxlabs.tech/api/v2/servers/SERVER_UUID/status

Core endpoints

GET/plans

List plans

Returns compute tiers sorted by monthly price. Filter with ?location_id= for stock at a region.

Response body
{
  "data": [
    {
      "id": 1,
      "name": "1 vCPU",
      "cpu": 1,
      "memory": 3221225472,
      "disk": 21474836480,
      "monthly_price": 3.92,
      "hourly_price": 0.0053
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 1,
    "per_page": 25,
    "total": 8
  }
}
GET/locations

List locations

Returns available datacenter locations (Sydney, London, Singapore, etc.).

GET/locations/{id}/templates

List OS templates

Returns template slugs for a location. Use slug when creating or reinstalling a server.

POST/servers

Create server

Provisions a VPS. Requires plan_id, location_id, and template_slug. Node selection is automatic.

Request body
{
  "plan_id": 1,
  "location_id": 3,
  "template_slug": "ubuntu-24.04",
  "hostname": "app-01.example.com"
}
201 response
{
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "uuid_short": "a1b2c3d4",
    "name": "app-01.example.com",
    "status": "installing",
    "cpu": 1,
    "memory": 3221225472,
    "disk": 21474836480,
    "password_status": "generating",
    "operating_system": "Ubuntu 24.04 LTS",
    "ip_addresses": [
      {
        "address": "203.0.113.50",
        "type": "ipv4",
        "gateway": "203.0.113.1",
        "cidr": 24
      }
    ],
    "created_at": "2026-05-14T10:30:00+00:00"
  }
}
GET/servers

List servers

Returns a paginated list of your servers. Filter with ?status=installing or ?page=2.

Response body
{
  "data": [
    {
      "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "uuid_short": "a1b2c3d4",
      "name": "app-01.example.com",
      "status": "installing",
      "cpu": 1,
      "memory": 3221225472
    }
  ],
  "meta": {
    "current_page": 1,
    "last_page": 2,
    "per_page": 25,
    "total": 34
  }
}
GET/servers/{uuid}

Get server

Full server details. Accepts full UUID or 8-character short UUID.

GET/servers/{uuid}/status

Real-time status

Hypervisor state (running, stopped) plus app status (installing, suspended, etc.).

Response body
{
  "data": {
    "state": "running",
    "status": null,
    "uptime_seconds": 86400
  }
}
GET/servers/{uuid}/credentials

Root credentials

Returns root password once installation completes (null while installing).

Response body
{
  "data": {
    "password_status": "ready",
    "root_password": "generated-secret-password"
  }
}
POST/servers/{uuid}/power

Power actions

Start, shutdown, restart, or kill a server.

Additional endpoints cover backups, security groups, SSH keys, power actions, and billing. See the full reference below.

Pagination

List endpoints return paginated collections. Pass ?page=N (1-based) to walk results. The meta object is always present on paginated responses.

Query parameters

  • pagePage number (default 1)
  • per_pageItems per page (default 25, max 100)

meta fields

  • current_pageThe page returned in this response
  • last_pageTotal number of pages available
  • per_pagePage size used for this request
  • totalTotal items across all pages

Paginated endpoints: /plans/servers/servers/{uuid}/backups

Example
GET https://console.vrtxlabs.tech/api/v2/servers?page=2&per_page=25

{
  "data": [ /* server objects */ ],
  "meta": {
    "current_page": 2,
    "last_page": 4,
    "per_page": 25,
    "total": 87
  }
}

Rate limits

API tokens are rate-limited per account. Limits apply across all tokens on the account unless noted otherwise.

Sustained
120 requests per minute
Burst
30 requests in a 10-second window

Response headers

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests left before the window resets
X-RateLimit-ResetUnix timestamp when the window resets
Retry-AfterSeconds to wait before retrying (present on 429 responses)
429 response
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1715684400
Retry-After: 42

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Too many requests. Retry after 42 seconds."
  }
}

Idempotency & retries

Use retries with care on mutating endpoints. Reads are always safe to repeat; creates are not unless you supply an idempotency key.

Safe to retry

  • GET, HEADSafe — no side effects
  • DELETESafe after the first success (404 on repeat is acceptable)
  • GET /servers/{uuid}/statusPreferred for polling during provisioning

Not safe without a key

  • POST /serversMay create duplicate VMs if the first request succeeded but the client timed out
  • POST /servers/{uuid}/powerRepeated shutdown/restart calls may queue conflicting actions

Send Idempotency-Key: <unique-uuid> on POST /servers. The same key within 24 hours returns the original 201 response instead of creating a second server.

Idempotency-Key header
POST https://console.vrtxlabs.tech/api/v2/servers
Authorization: Bearer YOUR_API_TOKEN
Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7
Content-Type: application/json

{ "plan_id": 1, "location_id": 3, "template_slug": "ubuntu-24.04" }
  • Retry GET and status polls with exponential backoff (e.g. 2s → 4s → 8s, cap at 30s) while status is installing.
  • On 429, honour Retry-After before sending the next request.
  • On 5xx, retry at most 3 times with jitter; do not retry 4xx except 429.
  • Never retry POST /servers without Idempotency-Key unless you can tolerate duplicate resources.

Webhooks

Register HTTPS endpoints in the console to receive lifecycle events. Payloads are signed with HMAC-SHA256 (X-Vrtx-Signature header).

EventWhen fired
server.installingEmitted when provisioning starts after POST /servers succeeds
server.runningEmitted when the hypervisor reports running and install completes
server.suspendedEmitted when a server is suspended (billing or policy action)
server.deletedEmitted after permanent deletion and IP release
Payload example
{
  "id": "evt_01j2k3m4n5p6q7r8",
  "type": "server.running",
  "created_at": "2026-05-14T10:35:12+00:00",
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "uuid_short": "a1b2c3d4",
    "name": "app-01.example.com",
    "status": null,
    "state": "running"
  }
}
  • Endpoints must return 2xx within 10 seconds.
  • Failed deliveries are retried with exponential backoff for up to 72 hours.
  • Verify signatures before acting on payload data.

Common errors

CodeHTTPDescription
UNAUTHENTICATED401Missing or invalid Authorization header
INVALID_TOKEN401API token does not match any account
IP_NOT_ALLOWED403Request IP is not on your API whitelist
RATE_LIMIT_EXCEEDED429Too many requests — back off and retry after Retry-After
VALIDATION_ERROR422Request body failed validation
OVERDUE_INVOICE402Pay outstanding invoices before creating servers

Console & OpenAPI

Provision servers in the console, create an API token for automation, or download the OpenAPI spec for code generation.