Goes back to the previous release.
Goes back to the previous release. It redeploys a prior image: the one named by `deploymentId`, or — with no body — the newest earlier deployment that…
POST /v1/platform/projects/{project}/apps/{app}/rollback
| Address | https://api.hanzo.ai/v1/platform/projects/{project}/apps/{app}/rollback |
| Method | POST |
| Operation | post_platform_projects_by_project_apps_by_app_rollback |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Goes back to the previous release.
It redeploys a prior image: the one named by deploymentId, or — with no body —
the newest earlier deployment that carries a real built image and did not error,
skipping the release currently live. An app with nothing earlier to return to is
400.
A rollback is a deploy of an old image, not a rewind: it takes a NEW version number and appends to the history rather than erasing what came after. Both lookups are scoped to this app and org, so another tenant's image can never be rolled in. Requires a validated principal; 403 without one.
Request
5 fields, body application/json (required).
| 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. |
app | body | string | — | App is the application's slug, from the path. |
deploymentId | body | string | — | DeploymentID is the deployment to redeploy. |
project | body | string | — | Project is the project the application lives under, from the path. |
Response
| Status | Body | Meaning |
|---|---|---|
202 | deploymentView | accepted |
202 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 | — | 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… |
updatedAt | body | integer | — | UpdatedAt is its last transition, unix seconds — so for a terminal deployment it is when it reached that state. |
version | body | integer | — | Version counts this app's deployments, from 1 and monotonically. |
Failure carries the platform error shape — see Errors.
Examples
hanzo platform projects apps rollback <project> <app>import { Configuration, PlatformApi } from 'hanzoai';
const api = new PlatformApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postPlatformProjectsByProjectAppsByAppRollback({ project: 'project', app: 'app', app: "<app>", deploymentId: "<deploymentId>" });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).post_platform_projects_by_project_apps_by_app_rollback(project='project', app='app', app="<app>", deployment_id="<deploymentId>")cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.PlatformAPI.PostPlatformProjectsByProjectAppsByAppRollback(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::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::post_platform_projects_by_project_apps_by_app_rollback(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.PlatformApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new PlatformApi(client).postPlatformProjectsByProjectAppsByAppRollback();curl -X POST https://api.hanzo.ai/v1/platform/projects/<project>/apps/<app>/rollback \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"app": "<app>",
"deploymentId": "<deploymentId>"
}'The door reaches platform through the platform tool, which names its 39 operations with its own verbs — this one among them, under a name only the door declares. describe explains any of them:
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": "list_builds"
}
}
}'How is this guide?