# List deployments — GET /v1/project/{slug}/deployments

URL: https://docs.hanzo.ai/docs/openapi/project/get-project-by-slug-deployments

> Returns a project's deploy history, newest version first.

`GET /v1/project/{slug}/deployments`

> [Project →](https://docs.hanzo.ai/docs/openapi/project) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                                      |
| ------------- | ---------------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/project/{slug}/deployments` |
| **Method**    | `GET`                                                |
| **Operation** | `get_project_by_slug_deployments`                    |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`               |

Returns a project's deploy history, newest version first.

Every deploy of the project is a row — uploads, generated sites, and git/CI
builds alike — carrying its version, status, source, commit, live URL, file
count and byte count. The short-lived upload grant a queued git deployment was
handed is NOT replayed here: it exists only on the 202 that minted it, so a
grant cannot outlive its build by being fetched again.

Scope: a validated principal is required (401 without one) and the project is
resolved within that principal's org, so another tenant's slug is a 404.

## Request

1 field.

| Field  | In   | Type   | Required | Description                                   |
| ------ | ---- | ------ | -------- | --------------------------------------------- |
| `slug` | path | string | yes      | Slug is the project to act on, from the path. |

## Response

| Status    | Body                          | Meaning |
| --------- | ----------------------------- | ------- |
| `200`     | project.projectsDeployment\[] | ok      |
| `default` | problem-details               | refused |

`200` body — 22 fields.

| Field                 | In   | Type                        | Always | Description                                                                                                                                                                             |
| --------------------- | ---- | --------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `[].bucket`           | body | string                      | —      | Bucket is the object-store bucket its files were written to.                                                                                                                            |
| `[].bytes`            | body | integer (int64)             | —      | Bytes is their total size in bytes.                                                                                                                                                     |
| `[].commit`           | body | string                      | —      | Commit is the revision that was built, for a deployment that came from a repository.                                                                                                    |
| `[].createdAt`        | body | integer (int64)             | —      | CreatedAt is when the deployment was queued, as Unix seconds.                                                                                                                           |
| `[].files`            | body | integer (int64)             | —      | Files is how many objects the deployment published.                                                                                                                                     |
| `[].id`               | body | string                      | —      | ID identifies this one deployment attempt, and is what CI quotes back to complete it.                                                                                                   |
| `[].liveUrl`          | body | string                      | —      | LiveURL is where this deployment serves, once it is live.                                                                                                                               |
| `[].message`          | body | string                      | —      | Message is what happened, in words — the build's own note, or on a failure why it failed.                                                                                               |
| `[].prefix`           | body | string                      | —      | Prefix is the key prefix within that bucket holding EXACTLY this deployment's objects — the unit an upload grant is scoped to, so a grant for one deployment cannot write over another. |
| `[].projectId`        | body | string                      | —      | ProjectID is the project this deployment belongs to.                                                                                                                                    |
| `[].source`           | body | string                      | —      | Source is what caused the deployment — a git push, an uploaded artifact, a generated site.                                                                                              |
| `[].status`           | body | string                      | —      | Status is where the attempt got to — queued, live, or failed.                                                                                                                           |
| `[].updatedAt`        | body | integer (int64)             | —      | UpdatedAt is when it last changed state, as Unix seconds — so the gap between the two is how long the build took.                                                                       |
| `[].upload`           | body | project.projectsUploadGrant | —      |                                                                                                                                                                                         |
| `[].upload.copy`      | body | boolean                     | —      | Copy is true when the completion of this deployment accepts copyFrom and copy.                                                                                                          |
| `[].upload.expiresAt` | body | integer (int64)             | —      | ExpiresAt is when the grant stops being accepted, as Unix seconds.                                                                                                                      |
| `[].upload.fields`    | body | object                      | —      | Fields are form values every POST must carry VERBATIM, alongside `key` and `file`.                                                                                                      |
| `[].upload.fields.*`  | body | string                      | —      |                                                                                                                                                                                         |
| `[].upload.maxBytes`  | body | integer (int64)             | —      | MaxBytes bounds ONE object, not the upload as a whole.                                                                                                                                  |
| `[].upload.prefix`    | body | string                      | —      | Prefix is the only place this grant can write: the deployment's own key prefix.                                                                                                         |
| `[].upload.url`       | body | string                      | —      | URL is the address to POST each object to.                                                                                                                                              |
| `[].version`          | body | integer (int64)             | —      | Version counts deployments of this project from 1, so the history reads as an ordered sequence rather than by timestamp.                                                                |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo project deployments list <slug>
```

**SDK**

**.ts**

```ts
import { Configuration, ProjectApi } from 'hanzoai';

const api = new ProjectApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getProjectBySlugDeployments({ slug: 'slug' });
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import ProjectApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = ProjectApi(client).get_project_by_slug_deployments(slug='slug')
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.ProjectAPI.GetProjectBySlugDeployments(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, project_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = project_api::get_project_by_slug_deployments(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.ProjectApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new ProjectApi(client).getProjectBySlugDeployments();
```

**HTTP**

```bash
curl https://api.hanzo.ai/v1/project/<slug>/deployments \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

Tool `project`, op `get_project_by_slug_deployments` — POST the JSON-RPC envelope to `https://api.hanzo.ai/v1/mcp`.

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "project",
         "arguments": {
           "op": "get_project_by_slug_deployments",
           "input": {
             "slug": "<slug>"
           }
         }
       }
     }'
```

---

[Project API](https://docs.hanzo.ai/docs/openapi/project) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
