Projects
Project management endpoints (CRUD)
List organization projects
Retrieve all projects for the authenticated user's organization
List organization projects › Responses
List of projects
idnameorganization_idsizedescriptionvps_idcreated_atupdated_atcreated_bystack_countNumber of non-deleted stacks attached to the project.
statusLive VM state resolved at request time. Degrades to stopped
when no VPS is provisioned and to error on infra timeouts.
Create a project
Create a new project in the authenticated user's organization. The VM is provisioned synchronously: clone → wait running → resize disk → on any failure, the VM and project are rolled back. Background goroutines then do the metrics first-poll and docker login.
Create a project › Request Body
nameSlugified server-side: lowercased, accents folded to ASCII, every
other character collapsed to -, truncated to 64. The stored name
may therefore differ from the one submitted. A name that reduces to
an empty slug is rejected with a 400.
sizedisk_gbPersistent disk size in GB for the project's VM. Applied via a
synchronous resize-disk call right after VM boot — full rollback
(DeleteVM + DeleteProject) if either the wait-for-running or the
resize fails. Range mirrors the upstream infra /vps/vm/{id}/resize-disk bounds.
descriptionCreate a project › Responses
Project successfully created (VM provisioned and disk resized)
idnameorganization_idsizevps_iddisk_gbDisk size in GB applied to the VM.
descriptioncreated_atupdated_atcreated_bydeleted_atsuspended_atList available project sizes
Retrieve all available VM sizes for projects
List available project sizes › Responses
List of available sizes
namecpuramdiskTemplate default disk size for this tier (informative). The actual
per-project disk is set independently at CreateProject via disk_gb.
priceCentsPerHourHourly price in cents for the size's vCPU+RAM bundle (sourced
from vm_size_prices). Omitted when no price is configured for
the size. Disk is priced separately — see /projects/metered-prices.
List metered resource prices
Returns every configured metered resource price (e.g. disk_gb_hour,
and future kinds such as bandwidth or IOPS). Prices are stored in
milli-cents per unit-hour so sub-cent rates (typical for block
storage: $0.07/GB/month ≈ 0.097 milli-cents/GB·h) are expressible.
Used client-side by the project creation form to price the disk
slider in real time, alongside GET /projects/sizes for vCPU+RAM.
List metered resource prices › Responses
List of metered resource prices (empty array if none configured)
kindQualified identifier that encodes the metered unit. Known kinds:
disk_gb_hour. Future kinds (bandwidth, IOPS, snapshot storage)
land in the same table without schema changes.
price_milli_cents_per_unit_hourPrice in milli-cents per unit per hour (1000 = 1 cent). Cost for a
given billing window is computed as
(quantity × milli_cents × billable_seconds) / (3600 × 1000),
with integer truncation (sub-cent residue is in the user's favour).
updated_atLast time the price was set or modified.
Analyze a compose file before import
Parses a raw docker compose file and returns what the import modal
needs to ask the user: per service, the environment entries that look
like secrets (with their interpolated env key, default value and
whether they look sensitive), the secrets a detected service type
usually needs but that the file does not set, and whether the service
relies on an env_file.
Nothing is persisted — the compose is only parsed. Services are returned in dependency order (dependencies first).
Analyze a compose file before import › Request Body
composeRaw docker compose file content (YAML).
Analyze a compose file before import › Responses
Compose analysis
need_modalTrue when at least one service needs configuration before import.
total_servicesNumber of services declared in the compose file.
need_config_servicesNumber of services with secrets, suggested secrets, or an env_file.
Services in dependency order (dependencies first). Null when the compose has no service.
Get a project
Retrieve a specific project by ID
path Parameters
projectIdProject unique identifier
Get a project › Responses
Project data
idnameorganization_idsizedescriptionvps_idcreated_atupdated_atcreated_bystack_countNumber of non-deleted stacks attached to the project.
statusLive VM state resolved at request time. Degrades to stopped
when no VPS is provisioned and to error on infra timeouts.
Update a project
Update a project's name
path Parameters
projectIdProject unique identifier
Update a project › Request Body
nameSlugified server-side, same rule as CreateProjectRequest.
Update a project › Responses
Project successfully updated
idnamesizedescriptionupdated_atorganization_idResize a project's VM
Kicks off an asynchronous CPU/RAM and/or disk resize. Synchronous validation (billing, size exists, disk can only grow, VM assigned, not already resizing) runs first; on success the endpoint returns 202 Accepted and the work proceeds in the background.
Poll GET /projects/{projectId} until provision_step leaves
resizing (ready or error). On failure provision_error holds
the message and a project_activity row is completed as failed.
History is available at GET /projects/{projectId}/activities.
A no-op (requested size and disk already current) returns 200 with the project and does not spawn work.
path Parameters
projectIdProject unique identifier
Resize a project's VM › Request Body
sizeVM size key from GET /projects/sizes (looked up case-insensitively).
disk_sizeTarget disk size in GB. Must be greater than or equal to the current disk_gb.
Resize a project's VM › Responses
Nothing to change — size and disk already match
idnameorganization_idsizedescriptionvps_idcreated_atupdated_atcreated_bystack_countNumber of non-deleted stacks attached to the project.
statusLive VM state resolved at request time. Degrades to stopped
when no VPS is provisioned and to error on infra timeouts.
List project activities
Returns the activity log for a project — append-only history of
operations (resize) with their status (in_progress, success,
failed). Field names match the SQLC model (snake_case).
path Parameters
projectIdProject unique identifier
query Parameters
limitMax number of rows to return. Capped at 200.
List project activities › Responses
List of activities (empty array if none)
idproject_idorganization_idtypestatuscreated_atupdated_atcreated_bymessageerrorRe-run docker login on the project's VM
Triggers a docker login against the internal registry on the VM
hosting the project, using the org's docker-scoped api_key. Useful
after an api_key rotation or to retry a failed initial login. Runs
asynchronously.
path Parameters
projectIdProject unique identifier
Re-run docker login on the project's VM › Responses
Docker login scheduled
