Puchify

Servers API

Create, manage, and connect to cloud servers.

List servers

GET /api/v1/servers
const { data: servers } = await puchify.servers.list({ status: "running" })
servers = puchify.servers.list(status="running")
servers, err := client.Servers.List(ctx, &puchify.ServerListParams{
  Status: puchify.String("running"),
})
puchify servers list --status running
curl https://api.puchify.com/api/v1/servers \
  -H "Authorization: Bearer $PUCHIFY_API_KEY"

Query parameters:

ParameterTypeDescription
cursorstringPagination cursor
limitinteger (1-100)Results per page (default 50)
statusstringFilter by status (running, stopped, etc.)
sortname | created_atSort field
orderasc | descSort direction

Create a server

POST /api/v1/servers
const { data: server } = await puchify.servers.create({
  name: "web-01",
  plan: "shared-2",
  region: "us-east",
  image: "ubuntu-24.04",
})
server = puchify.servers.create(
  name="web-01",
  plan="shared-2",
  region="us-east",
  image="ubuntu-24.04",
)
server, err := client.Servers.Create(ctx, &puchify.CreateServerInput{
  Name: "web-01", Plan: "shared-2", Region: "us-east",
})
curl -X POST https://api.puchify.com/api/v1/servers \
  -H "Authorization: Bearer $PUCHIFY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"web-01","plan":"shared-2","region":"us-east"}'

Request body:

FieldTypeRequiredDescription
namestringyesServer name (2-40 chars, lowercase alphanumeric + dashes)
planstringyesServer plan ID
regionstringyesRegion ID
imagestringnoOS image (default: ubuntu-24.04)
ssh_keysstring[]noSSH key IDs to inject

Get a server

GET /api/v1/servers/{id}

Update a server

PATCH /api/v1/servers/{id}

Delete a server

DELETE /api/v1/servers/{id}

Restart a server

POST /api/v1/servers/{id}/restart

Destroy a server

POST /api/v1/servers/{id}/destroy

Permanently destroys the server and releases all provider resources. This action cannot be undone.

Reconcile a server

POST /api/v1/servers/{id}/reconcile

Reconciles the server's state with the cloud provider. Useful when the provider state is out of sync.

Polling for readiness

const server = await puchify.servers.waitFor("svr_123", "running", {
  timeout: 300_000,   // 5 minutes
  pollInterval: 5_000, // every 5 seconds
})
server = puchify.servers.wait_for("svr_123", "running", timeout=300)
server, err := puchify.WaitFor(ctx, client.Servers.Get, "svr_123", "running",
  puchify.WithTimeout(5*time.Minute),
)

Response shape

{
  "data": {
    "id": "svr_abc123",
    "name": "web-01",
    "status": "running",       // creating | running | stopped | destroyed
    "plan": "shared-2",
    "region": "us-east",
    "image": "ubuntu-24.04",
    "ipv4": "203.0.113.42",
    "ipv6": null,
    "created_at": "2026-05-28T10:30:00Z",
    "updated_at": "2026-05-28T10:32:00Z"
  },
  "meta": {
    "persistence": "synced",
    "provider": "connected"
  }
}

On this page