Skip to content

Compute Service API Reference

Reference · Updated Jun 2026

Coming from another cloud?

▸AWS·Amazon EC2

This Quake AI feature maps to AWS’s Amazon EC2.

▸Azure·VM

This Quake AI feature maps to Azure’s VM.

▸DigitalOcean·API

DigitalOcean APIhigh

  • Uses REST API over HTTPS with Bearer token authentication via personal access tokens, not OpenStack's Keystone token-based auth.
  • Base URL https://api.digitalocean.com/v2, incompatible with OpenStack APIs like Nova/Neutron.
  • Scoped permissions tied to granular API scopes based on team roles, unlike OpenStack role/project assignments.
  • Rate limits: 5000/hour, 250/minute.
DigitalOcean docs ↗
▸Google Cloud·Compute Engine

This Quake AI feature maps to Google Cloud’s Compute Engine.

▸Hetzner·Cloud API

Cloud APIhigh

  • Proprietary REST API over HTTPS with Bearer token auth, not OpenStack Identity API (keystone) endpoints or mechanisms.
  • Base URL https://api.hetzner.cloud/v1/ with resource-specific endpoints (e.g., /servers) vs OpenStack service endpoints (nova, cinder).
  • No multi-project handling in single auth; separate per-project tokens vs keystone scopes/projects.
  • Missing identity/catalog endpoints; no service discovery via API.
Hetzner docs ↗

Compute service API reference

The Compute API reference documents every Nova endpoint with interactive request and response examples.

The Compute API (OpenStack Nova v2.1) manages servers (instances), flavors, images, key pairs, and server groups on Quake AI. See the upstream Nova API reference for the full specification. For error handling guidance, see the API error reference.

Authentication#

All requests require a valid Keystone token in the X-Auth-Token header. Obtain a token via POST /v3/auth/tokens against the Identity API.

Base URL#

https://compute.{region}.rumble.cloud/v2.1

Replace {region} with your region identifier. Only us-east-1 is currently available. Discover the endpoint programmatically with openstack catalog show compute.

The {project_id} segment shown in the URL examples below is optional. Nova derives the project from your Keystone token, so the path segment is supported only for backward compatibility and admin cross-project queries. Your project UUID is available in the console under Account → Projects.

Microversions#

Quake AI runs OpenStack Antelope (2023.1) and supports Nova microversions 2.1 through 2.95. To request a specific microversion, include either header (Nova accepts both):

OpenStack-API-Version: compute 2.95
X-OpenStack-Nova-API-Version: 2.95

Omitting both headers defaults to microversion 2.1.

Servers#

Manage compute instances. In these methods, {server_id} is the UUID of the instance.

List servers#

bash
GET /v2.1/{project_id}/servers

Show server details#

bash
GET /v2.1/{project_id}/servers/{server_id}

Create a server#

bash
POST /v2.1/{project_id}/servers
  • Request body
JSON
{
  "server": {
    "name": "my-instance",
    "flavorRef": "FLAVOR_ID",
    "imageRef": "IMAGE_ID",
    "networks": [{ "uuid": "NETWORK_ID" }],
    "key_name": "my-keypair"
  }
}

Delete a server#

bash
DELETE /v2.1/{project_id}/servers/{server_id}

Server actions#

Actions are sent as POST /v2.1/{project_id}/servers/{server_id}/action with the action name as the JSON key.

ActionRequired stateBody
os-startSHUTOFF{"os-start": null}
os-stopACTIVE{"os-stop": null}
rebootACTIVE, SHUTOFF, ERROR{"reboot": {"type": "SOFT"}}
rebuildACTIVE, SHUTOFF, ERROR{"rebuild": {"imageRef": "IMAGE_ID"}}
resizeACTIVE, SHUTOFF{"resize": {"flavorRef": "FLAVOR_ID"}}
confirmResizeVERIFY_RESIZE{"confirmResize": null}
revertResizeVERIFY_RESIZE{"revertResize": null}

Flavors#

Flavors define the compute, memory, and storage capacity of an instance. In these methods, {flavor_id} is the UUID of the flavor.

List flavors#

bash
GET /v2.1/{project_id}/flavors

Show flavor details#

bash
GET /v2.1/{project_id}/flavors/{flavor_id}

Key pairs#

SSH key pairs used for instance access. In these methods, {keypair_name} is the name of the key pair.

List key pairs#

bash
GET /v2.1/{project_id}/os-keypairs

Show key pair details#

bash
GET /v2.1/{project_id}/os-keypairs/{keypair_name}

Create a key pair#

bash
POST /v2.1/{project_id}/os-keypairs

The request body takes three forms.

Server-generated key pair. Omit public_key and Nova generates the pair. No microversion header is required, and the call returns HTTP 200. The response includes a private_key field. Nova returns the private key once at creation and does not store it, so save it from this response.

Request body:

JSON
{
  "keypair": {
    "name": "my-keypair"
  }
}

Response body:

JSON
{
  "keypair": {
    "name": "my-keypair",
    "fingerprint": "04:8d:9a:1f:7b:e2:55:c3:60:a9:4d:1e:88:b7:33:5a",
    "public_key": "ssh-ed25519 AAAA...",
    "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
  }
}

Import an existing public key. Supply public_key and Nova registers it. No microversion header is required, and the response omits private_key.

Request body:

JSON
{
  "keypair": {
    "name": "my-keypair",
    "public_key": "ssh-ed25519 AAAA..."
  }
}

Specify the key type. The type field (ssh or x509) is available from microversion 2.2. Send a microversion header; the call returns HTTP 201.

OpenStack-API-Version: compute 2.2

Request body:

JSON
{
  "keypair": {
    "name": "my-keypair",
    "type": "ssh"
  }
}

Delete a key pair#

bash
DELETE /v2.1/{project_id}/os-keypairs/{keypair_name}

Server groups#

Server groups define anti-affinity and affinity policies for instance placement.

List server groups#

bash
GET /v2.1/{project_id}/os-server-groups

Show server group details#

bash
GET /v2.1/{project_id}/os-server-groups/{server_group_id}

Create a server group#

bash
POST /v2.1/{project_id}/os-server-groups

The request body takes two forms. New code should use the microversion 2.64 form.

Default microversion (policies). Microversions 2.1 through 2.63 take a policies array. Nova deprecated this form in microversion 2.64 but still accepts it.

Request body:

JSON
{
  "server_group": {
    "name": "my-group",
    "policies": ["anti-affinity"]
  }
}

Microversion 2.64 and later (policy). Send a microversion header and use the singular policy field. The response adds a rules object that the legacy form omits.

OpenStack-API-Version: compute 2.64

Request body:

JSON
{
  "server_group": {
    "name": "my-group",
    "policy": "anti-affinity"
  }
}

Delete a server group#

bash
DELETE /v2.1/{project_id}/os-server-groups/{server_group_id}

Limits#

Query project quotas and current resource usage. The response contains two objects: rate (always empty on Antelope; application-layer rate limiting is not active) and absolute (resource quotas and usage counters).

Show project limits#

bash
GET /v2.1/limits

Sample response. The max* fields report this project's quota and the total* fields report current usage, so the values below are illustrative and vary between projects:

JSON
{
  "limits": {
    "rate": [],
    "absolute": {
      "maxTotalInstances": 256,
      "maxTotalCores": -1,
      "maxTotalRAMSize": 32768,
      "maxServerMeta": 128,
      "maxImageMeta": 128,
      "maxPersonality": 5,
      "maxPersonalitySize": 10240,
      "maxTotalKeypairs": 100,
      "maxServerGroups": 100,
      "maxServerGroupMembers": 100,
      "maxTotalFloatingIps": -1,
      "maxSecurityGroups": -1,
      "maxSecurityGroupRules": -1,
      "totalRAMUsed": 8192,
      "totalCoresUsed": 2,
      "totalInstancesUsed": 1,
      "totalFloatingIpsUsed": 0,
      "totalSecurityGroupsUsed": 0,
      "totalServerGroupsUsed": 0
    }
  }
}

Query the value for your own project rather than copying the numbers above. To read your quota and usage, call this endpoint with your token.

Key fields#

FieldMeaning
rateAlways []. Application-layer rate limits were removed in the Rocky release (2018).
maxTotalInstancesMaximum instances allowed in this project.
maxTotalCoresMaximum vCPUs. -1 means no application-layer limit.
maxTotalRAMSizeMaximum RAM in MiB.
maxTotalKeypairsMaximum key pairs.
totalInstancesUsedCurrent instance count. Compare against maxTotalInstances.
totalCoresUsedCurrent vCPU usage.
totalRAMUsedCurrent RAM usage in MiB.

A value of -1 means no quota is enforced at the application layer. The resource may still be constrained by separate Neutron quotas or physical capacity.

For rate limit behavior and 429 handling, see API rate limits. For quota troubleshooting, see Quota and limits troubleshooting.

See also#

Quick answers

Was this page helpful?