# List deployments

## `GET /v1/projects/{projectId}/deployments`

Returns a list of deployments for the specified project, ordered by most recent first.

### Path parameters

- `projectId` (integer, required): The ID of the project

### Query parameters

- `limit` (integer, optional): Maximum number of deployments to return. Default: `20`.
- `status` (string, optional): Filter by deployment status. Allowed values: `queued`, `in_progress`, `succeeded`, `failed`, `created`.

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): The organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but `GET /v1/orgs` (400 `org_assertion_required` otherwise). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Example request

```bash
curl "https://api.spice.ai/v1/projects/<projectId>/deployments" \
  -H "Authorization: Bearer <token>"
```

```http
GET /v1/projects/<projectId>/deployments HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
```

### Responses

**200 OK**

List of deployments

Content type: `application/json`

- `deployments` (array of object)
  - `id` (integer): Unique identifier for the deployment
  - `status` (string): Current status of the deployment. Allowed values: `queued`, `in_progress`, `succeeded`, `failed`, `created`.
  - `created_at` (string (date-time)): Timestamp when the deployment was created
  - `updated_at` (string (date-time) | null): Timestamp when the deployment was last updated
  - `image_tag` (string | null): Runtime image tag used for this deployment
  - `replicas` (integer): Number of replicas
  - `branch` (string | null): Git branch name
  - `commit_sha` (string | null): Git commit SHA
  - `commit_message` (string | null): Git commit message
  - `error_code` (string | null): Set with error\_message on failed and on in\_progress while Cloud is retrying a scheduling block. Null on succeeded, on ordinary waiting in\_progress, and on writers that predated this column. Older failed rows may still have a message with a null code.
  - `error_message` (string | null): Catalog copy for the current error\_code. Older failed rows may still have a message with a null error\_code.
  - `creation_source` (string | null): Source that triggered the deployment
  - `created_by` (integer | null): User ID who created the deployment

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope

**404 Not Found**

Project not found

## `GET /v1/orgs/{orgId}/projects/{projectId}/deployments`

The org is `orgId` in the path. Returns a list of deployments for the specified project, ordered by most recent first.

### Path parameters

- `orgId` (integer, required): The org id from GET /v1/orgs. Minimum: `1`.
- `projectId` (integer, required): The ID of the project

### Query parameters

- `limit` (integer, optional): Maximum number of deployments to return. Default: `20`.
- `status` (string, optional): Filter by deployment status. Allowed values: `queued`, `in_progress`, `succeeded`, `failed`, `created`.

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): When present, X-Org-Name must name the same org as orgId. Otherwise the request returns org\_path\_mismatch (400). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Example request

```bash
curl "https://api.spice.ai/v1/orgs/<orgId>/projects/<projectId>/deployments" \
  -H "Authorization: Bearer <token>"
```

```http
GET /v1/orgs/<orgId>/projects/<projectId>/deployments HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
```

### Responses

**200 OK**

List of deployments

Content type: `application/json`

- `deployments` (array of object)
  - `id` (integer): Unique identifier for the deployment
  - `status` (string): Current status of the deployment. Allowed values: `queued`, `in_progress`, `succeeded`, `failed`, `created`.
  - `created_at` (string (date-time)): Timestamp when the deployment was created
  - `updated_at` (string (date-time) | null): Timestamp when the deployment was last updated
  - `image_tag` (string | null): Runtime image tag used for this deployment
  - `replicas` (integer): Number of replicas
  - `branch` (string | null): Git branch name
  - `commit_sha` (string | null): Git commit SHA
  - `commit_message` (string | null): Git commit message
  - `error_code` (string | null): Set with error\_message on failed and on in\_progress while Cloud is retrying a scheduling block. Null on succeeded, on ordinary waiting in\_progress, and on writers that predated this column. Older failed rows may still have a message with a null code.
  - `error_message` (string | null): Catalog copy for the current error\_code. Older failed rows may still have a message with a null error\_code.
  - `creation_source` (string | null): Source that triggered the deployment
  - `created_by` (integer | null): User ID who created the deployment

**400 Bad Request**

orgId is not a valid org id (`invalid_org_id`), or X-Org-Name does not name that org (`org_path_mismatch`).

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope. The caller is not a member of the org (`org_forbidden`). A machine credential named a different org (`org_assertion_mismatch`). The org is deleted (`org_deleted`).

**404 Not Found**

Project not found

## `GET /v1/apps/{appId}/deployments` (deprecated)

Legacy alias of `/v1/projects/{projectId}/deployments` — projects were previously called apps. Returns a list of deployments for the specified project, ordered by most recent first.

### Path parameters

- `appId` (integer, required): The ID of the project

### Query parameters

- `limit` (integer, optional): Maximum number of deployments to return. Default: `20`.
- `status` (string, optional): Filter by deployment status. Allowed values: `queued`, `in_progress`, `succeeded`, `failed`, `created`.

### Header parameters

- `Authorization` (string, required): `Bearer <token>`. [Authentication](https://spice.ai/docs/cloud/api/management#authentication) lists the tokens it accepts.
- `X-Org-Name` (string, optional): The organization to act on, by handle. Omit it to act on the organization the credential is bound to; sending it blank is a 400, not the same as omitting it. A user credential may name any organization its owner belongs to; a machine credential is pinned to its own. A portal session token is bound to none, so it must send this header on every route but `GET /v1/orgs` (400 `org_assertion_required` otherwise). Pattern: `^[A-Za-z0-9._-]{1,255}$`.

### Example request

```bash
curl "https://api.spice.ai/v1/apps/<appId>/deployments" \
  -H "Authorization: Bearer <token>"
```

```http
GET /v1/apps/<appId>/deployments HTTP/1.1
Host: api.spice.ai
Authorization: Bearer <token>
```

### Responses

**200 OK**

List of deployments

Content type: `application/json`

- `deployments` (array of object)
  - `id` (integer): Unique identifier for the deployment
  - `status` (string): Current status of the deployment. Allowed values: `queued`, `in_progress`, `succeeded`, `failed`, `created`.
  - `created_at` (string (date-time)): Timestamp when the deployment was created
  - `updated_at` (string (date-time) | null): Timestamp when the deployment was last updated
  - `image_tag` (string | null): Runtime image tag used for this deployment
  - `replicas` (integer): Number of replicas
  - `branch` (string | null): Git branch name
  - `commit_sha` (string | null): Git commit SHA
  - `commit_message` (string | null): Git commit message
  - `error_code` (string | null): Set with error\_message on failed and on in\_progress while Cloud is retrying a scheduling block. Null on succeeded, on ordinary waiting in\_progress, and on writers that predated this column. Older failed rows may still have a message with a null code.
  - `error_message` (string | null): Catalog copy for the current error\_code. Older failed rows may still have a message with a null error\_code.
  - `creation_source` (string | null): Source that triggered the deployment
  - `created_by` (integer | null): User ID who created the deployment

**401 Unauthorized**

Unauthorized

**403 Forbidden**

Insufficient scope

**404 Not Found**

Project not found

OpenAPI: [api.spice.ai/openapi.json](https://api.spice.ai/openapi.json)
