Deployments API
List and read deployments, see what runs, and roll back.
List Deployments
GET /api/v1/teams/{teamSlug}/projects/{projectSlug}/deploymentsResponse 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/statestream 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}/rollbackCreates a new deployment using the specified deployment's image.
Response 201: New deployment object