Deploy servers
56 operations.
List the tenant's deploy servers
GET /api/v1/deploy-servers
Create the tenant's deploy server (Coolify) — idempotent: returns the existing one if present. This is the REQUIRED first step before deploying any app; it provisions the Coolify control plane + a worker automatically.
POST /api/v1/deploy-servers
Get a deploy server (poll status until 'ready'; init_step shows provisioning progress)
GET /api/v1/deploy-servers/{id}
Scale a deploy server: worker_count adds/removes deploy targets (1-10), worker_instance_type resizes every worker, worker_disk_gib grows their disks (grow-only), app_instance_type resizes the Coolify control plane. Workers change ONE at a time and the dashboard keeps serving; poll workers[] until every entry has registered=true. Resizing a worker RESTARTS it, briefly interrupting the apps on it.
PUT /api/v1/deploy-servers/{id}
Delete a deploy server (tears down the control plane + worker)
DELETE /api/v1/deploy-servers/{id}
List the applications deployed on the deploy server (uuid, status, public URL, image:tag)
GET /api/v1/deploy-servers/{id}/applications
Create (and by default instantly deploy) an application from a docker image in the worker's local registry. Push the app folder with create_deploy_servers_id_artifacts and docker build+push on the worker FIRST. Returns the app uuid and public URL — poll get_deploy_servers_id_applications until status starts with 'running'.
POST /api/v1/deploy-servers/{id}/applications
Get one application — poll after create/deploy until status starts with 'running', then verify its public URL
GET /api/v1/deploy-servers/{id}/applications/{app}
Update an application's image/tag/port (then trigger a deploy to apply)
PATCH /api/v1/deploy-servers/{id}/applications/{app}
Delete an application from the deploy server
DELETE /api/v1/deploy-servers/{id}/applications/{app}
Deploy an application. With tag set, repoints the image tag first — ONE call both releases a new version (build+push vN, deploy with tag=vN) and rolls back (deploy with the previous tag).
POST /api/v1/deploy-servers/{id}/applications/{app}/deploy
List an application's environment variables (values included)
GET /api/v1/deploy-servers/{id}/applications/{app}/envs
Set (upsert) application environment variables; redeploy to apply
POST /api/v1/deploy-servers/{id}/applications/{app}/envs
Delete one environment variable from an application by key; redeploy to apply
DELETE /api/v1/deploy-servers/{id}/applications/{app}/envs/{key}
Get a running application's container logs (RUNTIME logs — why the app is crashing/erroring at run time; distinct from the per-deployment build logs). Optional ?lines=N tail.
GET /api/v1/deploy-servers/{id}/applications/{app}/logs
Restart an application
POST /api/v1/deploy-servers/{id}/applications/{app}/restart
List an application's scheduled (cron) tasks
GET /api/v1/deploy-servers/{id}/applications/{app}/scheduled-tasks
Add a scheduled cron task to an application (frequency is a cron expression, command runs in the app container)
POST /api/v1/deploy-servers/{id}/applications/{app}/scheduled-tasks
Delete a scheduled task from an application
DELETE /api/v1/deploy-servers/{id}/applications/{app}/scheduled-tasks/{task}
Stop an application
POST /api/v1/deploy-servers/{id}/applications/{app}/stop
List an application's persistent storages (volumes)
GET /api/v1/deploy-servers/{id}/applications/{app}/storages
Attach a persistent volume to an application at a mount path so its data survives redeploys; redeploy to apply
POST /api/v1/deploy-servers/{id}/applications/{app}/storages
Remove a persistent volume from an application
DELETE /api/v1/deploy-servers/{id}/applications/{app}/storages/{storage}
Push an app folder tarball (.tgz) onto the deploy server's worker — lands extracted at /opt/apps/<name>. Source: team_object (a tarball a team member previously storage_put into team shared storage) or content_b64 for small archives. ASYNC: poll get_deploy_servers_id_artifacts until status=ready BEFORE building on the worker.
POST /api/v1/deploy-servers/{id}/artifacts
Get an artifact push's status (staging|pushing|ready|failed; path is the worker directory when ready)
GET /api/v1/deploy-servers/{id}/artifacts/{artifact}
Get a deploy server's dashboard URL, API base URL, root credentials, API token, and worker id — read after status is ready
GET /api/v1/deploy-servers/{id}/credentials
List the deploy server's databases (uuid, name, engine, status)
GET /api/v1/deploy-servers/{id}/databases
Create a managed database. type is one of postgresql|mysql|mariadb|mongodb|redis|keydb|dragonfly|clickhouse. Credentials are auto-generated — read the connection string from get_deploy_servers_id_databases_db. Poll until status is 'running'.
POST /api/v1/deploy-servers/{id}/databases
Get one database (poll until status is 'running')
GET /api/v1/deploy-servers/{id}/databases/{db}
Delete a database. Pass ?delete_volumes=true to also destroy its data volume.
DELETE /api/v1/deploy-servers/{id}/databases/{db}
List a database's scheduled backups
GET /api/v1/deploy-servers/{id}/databases/{db}/backups
Schedule recurring backups for a database (frequency is a cron expression, e.g. "0 2 * * *")
POST /api/v1/deploy-servers/{id}/databases/{db}/backups
Delete a database backup schedule
DELETE /api/v1/deploy-servers/{id}/databases/{db}/backups/{backup}
List the run history of a database backup schedule (status, size, timestamp)
GET /api/v1/deploy-servers/{id}/databases/{db}/backups/{backup}/executions
Restart a database
POST /api/v1/deploy-servers/{id}/databases/{db}/restart
Start a stopped database
POST /api/v1/deploy-servers/{id}/databases/{db}/start
Stop a running database
POST /api/v1/deploy-servers/{id}/databases/{db}/stop
List a database's persistent storages (volumes)
GET /api/v1/deploy-servers/{id}/databases/{db}/storages
Attach a persistent volume to a database at a mount path (survives redeploys); restart to apply
POST /api/v1/deploy-servers/{id}/databases/{db}/storages
Remove a persistent volume from a database
DELETE /api/v1/deploy-servers/{id}/databases/{db}/storages/{storage}
List the deploy server's in-progress and recent deployments (deployment history: uuid, app, status, commit)
GET /api/v1/deploy-servers/{id}/deployments
Get a deployment's status + log tail — read this when a deploy fails to see the real error
GET /api/v1/deploy-servers/{id}/deployments/{deployment}
Cancel an in-progress deployment
POST /api/v1/deploy-servers/{id}/deployments/{deployment}/cancel
List the deploy server's services (uuid, name, type, status)
GET /api/v1/deploy-servers/{id}/services
Create a service. Provide EITHER type (a Coolify one-click template name, e.g. plausible/n8n) OR docker_compose (a raw docker-compose.yml). Poll until status is 'running'.
POST /api/v1/deploy-servers/{id}/services
Get one service
GET /api/v1/deploy-servers/{id}/services/{svc}
Delete a service. Pass ?delete_volumes=true to also destroy its data volumes.
DELETE /api/v1/deploy-servers/{id}/services/{svc}
Restart a service
POST /api/v1/deploy-servers/{id}/services/{svc}/restart
List a service's scheduled (cron) tasks
GET /api/v1/deploy-servers/{id}/services/{svc}/scheduled-tasks
Add a scheduled cron task to a service (frequency is a cron expression)
POST /api/v1/deploy-servers/{id}/services/{svc}/scheduled-tasks
Delete a scheduled task from a service
DELETE /api/v1/deploy-servers/{id}/services/{svc}/scheduled-tasks/{task}
Start a stopped service
POST /api/v1/deploy-servers/{id}/services/{svc}/start
Stop a running service
POST /api/v1/deploy-servers/{id}/services/{svc}/stop
List a service's persistent storages (volumes)
GET /api/v1/deploy-servers/{id}/services/{svc}/storages
Attach a persistent volume to a service at a mount path (survives redeploys); restart to apply
POST /api/v1/deploy-servers/{id}/services/{svc}/storages
Remove a persistent volume from a service
DELETE /api/v1/deploy-servers/{id}/services/{svc}/storages/{storage}