# List deployments

URL: https://docs.hanzo.ai/docs/openapi/platform/get-platform-projects-by-project-apps-by-app-deployments

> Returns an app's deployment history.

`GET /v1/platform/projects/{project}/apps/{app}/deployments`

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

|               |                                                                              |
| ------------- | ---------------------------------------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/platform/projects/{project}/apps/{app}/deployments` |
| **Method**    | `GET`                                                                        |
| **Operation** | `get_platform_projects_by_project_apps_by_app_deployments`                   |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                                       |

Returns an app's deployment history.

It lists every deployment recorded for one of the caller org's applications,
newest version first, each with its version, status, source, commit and image.
Failed and superseded attempts are included — that is the point of a history.
Requires a validated principal; 401 without one.

## Request

2 fields.

| Field     | In   | Type   | Required | Description                                                        |
| --------- | ---- | ------ | -------- | ------------------------------------------------------------------ |
| `project` | path | string | yes      | Project is the project the application lives under, from the path. |
| `app`     | path | string | yes      | App is the application's slug, from the path.                      |

## Response

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

`200` body — 12 fields.

| Field              | In   | Type            | Always | Description                                                                                                                                                                                                                                                                                             |
| ------------------ | ---- | --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `[].applicationId` | body | string          | —      | ApplicationID is the app this deployed — the app's `id`, not its slug.                                                                                                                                                                                                                                  |
| `[].buildId`       | body | string          | —      | BuildID is the build record behind a git deploy, whose logs and status live at /v1/platform/builds.                                                                                                                                                                                                     |
| `[].commit`        | body | string          | —      | Commit is the git ref this built — the commit a deploy or a push named, else the app's branch.                                                                                                                                                                                                          |
| `[].createdAt`     | body | integer (int64) | —      | CreatedAt is when the attempt was recorded, unix seconds.                                                                                                                                                                                                                                               |
| `[].id`            | body | string          | —      | ID is the deployment's id (`dep_…`), minted when the attempt is recorded.                                                                                                                                                                                                                               |
| `[].image`         | body | string          | —      | Image is the full `repo:tag` this deployment put in the CR.                                                                                                                                                                                                                                             |
| `[].message`       | body | string          | —      | Message is why this attempt is not live: the failure, or the note that a newer deployment went live before this build finished.                                                                                                                                                                         |
| `[].org`           | body | string          | —      | Org is the tenant the deployment belongs to, from the validated identity.                                                                                                                                                                                                                               |
| `[].source`        | body | string          | —      | Source is which lane produced it: `git` (built from the repo) or `image` (an already-built ref deployed as-is, including promote and rollback).                                                                                                                                                         |
| `[].status`        | body | string          | —      | Status is where the attempt got to: `building` while its image is being built, `deploying` once its CR reached the cluster — which is the terminal success state, the app's own status is what turns `live` — `error` with the reason in Message, or `superseded` when a newer version went live first. |
| `[].updatedAt`     | body | integer (int64) | —      | UpdatedAt is its last transition, unix seconds — so for a terminal deployment it is when it reached that state.                                                                                                                                                                                         |
| `[].version`       | body | integer (int64) | —      | Version counts this app's deployments, from 1 and monotonically.                                                                                                                                                                                                                                        |

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

## Examples

**CLI**

```bash
hanzo platform projects apps deployments list <project> <app>
```

**SDK**

**.ts**

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

const api = new PlatformApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getPlatformProjectsByProjectAppsByAppDeployments({ project: 'project', app: 'app' });
```

**.py**

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

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = PlatformApi(client).get_platform_projects_by_project_apps_by_app_deployments(project='project', app='app')
```

**.go**

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

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

**.rs**

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

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

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

**.java**

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

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

var result = new PlatformApi(client).getPlatformProjectsByProjectAppsByAppDeployments();
```

**HTTP**

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

**MCP**

MCP reaches **platform** through the `platform` tool, which names its 38 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_build"
         }
       }
     }'
```

---

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