Interlaken
API referenceApplicationsDeploy servers

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}