Skip to main content

Create a Pod

POST /api/pods
Request Body:
{
  "name": "my-app",
  "preset": "nodejs",
  "plan_slug": "launch",
  "region": "eu-nbg",
  "ssh_key": "ssh-ed25519 AAAA...",
  "description": "My Node.js app",
  "customizations": {
    "env_vars": {
      "NODE_ENV": "production"
    }
  }
}
FieldTypeRequiredDescription
namestringYesPod name (lowercase, alphanumeric + hyphens)
presetstringYesstatic, php, nodejs, or python
plan_slugstringNoPlan slug (default: launch)
regionstringNoRegion slug (auto-detected from IP if omitted)
server_idstringNoSpecific server ID (overrides region)
ssh_keystringNoPublic SSH key to inject
descriptionstringNoPod description
customizationsobjectNoCustom env vars, cron jobs, workers
Response: 202 Accepted Returns the Pod object with status: "creating". Errors:
CodeReason
400Invalid name, unknown preset, validation error
402No payment method or subscription suspended
409Pod name already exists
503Insufficient server capacity

List Pods

GET /api/pods
Query ParamTypeDefaultDescription
limitintMax pods to return
offsetint0Pagination offset
Response: 200 OK
{
  "pods": [{ ... }],
  "total": 12,
  "limit": 25,
  "offset": 0,
  "status_counts": {
    "running": 8,
    "stopped": 3,
    "creating": 1
  }
}

Get a Pod

GET /api/pods/{name}
Returns the Pod object with live status synced from the container runtime.

Delete a Pod

DELETE /api/pods/{name}
Response: 200 OK
{
  "status": "deleted"
}
Pod names are reserved for 7 days after deletion to prevent SSH host key conflicts. Creating a pod with a recently deleted name will return a conflict error.

Start / Stop / Restart

POST /api/pods/{name}/start
POST /api/pods/{name}/stop
POST /api/pods/{name}/restart
No request body. Returns the updated Pod object.

Reload

POST /api/pods/{name}/reload
Restarts app services inside the pod. Auto-installs dependencies if package.json (Node.js) or requirements.txt (Python) is detected. Response: 200 OK
{
  "status": "reloaded",
  "services": ["app"],
  "preset": "nodejs",
  "deps_installed": "npm"
}
FieldDescription
servicesWhich systemd services were restarted
presetPod’s preset
deps_installed"npm" or "pip" if deps were installed, omitted otherwise

Resize

POST /api/pods/{name}/resize
Request Body:
{
  "plan_slug": "build"
}
Returns the updated Pod object with new CPU, memory, and disk values from the plan.
CodeReason
400Invalid plan, disk usage exceeds new quota
409Insufficient server resources for upgrade

Clone

POST /api/pods/{name}/clone
Request Body:
{
  "new_name": "my-app-copy"
}
Response: 201 Created — returns the new Pod object.

Get Preset Config

GET /api/pods/{name}/preset
Returns the preset configuration for this pod (port, app root, public root, runtime details).

Get Disk Usage

GET /api/pods/{name}/disk-usage
Returns current disk usage statistics for the pod.

Pod Object

All pod endpoints return this shape:
{
  "id": "abc123",
  "name": "my-app",
  "preset": "nodejs",
  "status": "running",
  "ip": "10.0.0.5",
  "domain": "my-app.nbg1-1.instapods.app",
  "ssh_port": 2201,
  "ssh_user": "instapod",
  "cpu": 1,
  "memory": "512MB",
  "disk": "10GB",
  "plan_slug": "launch",
  "app_root": "/home/instapod/app",
  "region": "eu-nbg",
  "server_name": "instapod-nbg1-1",
  "description": "",
  "created_at": "2026-02-20T10:00:00Z",
  "updated_at": "2026-02-20T10:00:00Z"
}
Pod statuses: creating, running, stopped, deleted, error, suspended