CTRL API

v1 · api.getctrl.dev


Authentication

All public endpoints require an API key in the Authorization header:

Authorization: Bearer <api_key>

To obtain an API key, contact support@getctrl.dev. Self-serve key management is coming in a future release.

Internal routes (/internal/*) are not publicly accessible.


Plans

PlanvCPURAMDiskPrice
hobby12 GB30 GB$5/mo
builder24 GB60 GB$15/mo
pro48 GB100 GB NVMe$75/mo
scale816 GB200 GB NVMe$140/mo

Endpoints

GET /
This API reference page. No authentication required.

POST /v1/apps
Deploy a new application. Selects the least-loaded node in the requested region and dispatches the deploy.

Request headers:

Authorization: Bearer <api_key>
Content-Type: application/json

Request body:

{
  "app_id":       "my-api",                      // unique slug — becomes subdomain
  "image_ref":    "ghcr.io/acme/my-api:latest",  // Docker image reference
  "plan":         "hobby",                        // hobby | builder | pro | scale
  "region":       "us-east",
  "exposed_port": 8080,
  "env_vars":     [["PORT", "8080"]],             // array of [key, value] pairs
  "registry_auth": null                           // or { "username": "...", "password": "..." }
}

Response 201:

{
  "app_id":    "my-api",
  "vm_id":     "550e8400-e29b-41d4-a716-446655440000",
  "status":    "starting",
  "plan":      "hobby",
  "region":    "us-east",
  "node_id":   "us-1",
  "subdomain": "my-api.getctrl.dev"
}

Error responses: