Docs
API

Deployments API

List and read deployments, see what runs, and roll back.

List Deployments

GET /api/v1/teams/{teamSlug}/projects/{projectSlug}/deployments

Response 200:

[
  {
    "id": "uuid",
    "project_id": "uuid",
    "team_id": "uuid",
    "build_id": "uuid",
    "deploy_number": 15,
    "strategy": "rolling",
    "image_tag": "registry.clusterz.eu/my-team/my-app:build-42",
    "status": "active",
    "started_at": "2025-01-15T10:03:50Z",
    "finished_at": "2025-01-15T10:04:30Z",
    "duration_ms": 40000,
    "created_at": "2025-01-15T10:03:50Z"
  }
]

Deployment statuses: pending, deploying, health_checking, active, failed, rolled_back, superseded

What runs on a project

GET /api/v1/teams/{teamSlug}/projects/{projectSlug}/deployments/stream
GET /api/v1/teams/{teamSlug}/projects/{projectSlug}/deployments/state

stream sends Server-Sent Events, a state event when it opens and after every change. state answers the same thing once, for a page whose stream has dropped or was refused for too many streams.

{
  "project_status": "active",
  "deployments": [],
  "steps": [],
  "progress": {
    "flow": "redeploy",
    "running": true,
    "estimates_known": true,
    "stages": [
      { "id": "check", "status": "done", "ms": 2100, "estimate_ms": 2000, "step": "diagnose:1" },
      { "id": "ready", "status": "running", "ms": 0, "since": "2026-11-02T10:00:02Z", "estimate_ms": 30000, "step": "pull" },
      { "id": "start", "status": "to_come", "ms": 0, "estimate_ms": 5000 }
    ],
    "deployment_id": "uuid",
    "attempt": 1
  },
  "restore": null,
  "alert": null
}

progress is what runs, a restore before anything else, or else what failed last and has not been run again, and is null otherwise. flow is install, redeploy, update, restart, stop, start, restore or reset-password. A stage's status is to_come, running, done or failed. estimate_ms is the median of the app's last 20 runs of that action that ended well at their first attempt, or every app's with fewer than three, and only the app's own for a restore. Once a run has failed, failure says why: its kind (stop with the kind of stop, timed_out, build or stage), the stage it failed on, the detail the step recorded and, for a restore, nothing_changed.

POST .../redeploy, restart, stop and start, a deployment's retry, POST .../builds, POST .../access/reset and POST .../backups/restore answer with the progress of what they started, every row to come.

restore is the project's latest restore: its id, status, target_time, latest, error, and closing while the fresh backup that follows it runs.

A project's state, in the team's list and on its own, is running, setting_up, needs_attention or stopped, or restoring while a restore runs and starting while a start is checked. The team's list adds the progress of what runs on each.

Get Deployment

GET /api/v1/teams/{teamSlug}/projects/{projectSlug}/deployments/{deployId}

Response 200: Deployment object

Rollback

POST /api/v1/teams/{teamSlug}/projects/{projectSlug}/deployments/{deployId}/rollback

Creates a new deployment using the specified deployment's image.

Response 201: New deployment object