Hanzo PaaS
Deploy and operate applications, containers, and custom domains across your clusters — Studio at platform.hanzo.ai, API at api.hanzo.ai/v1/platform, with IAM-native multi-org access.
Hanzo PaaS
API reference · Hanzo Platform API → — every endpoint, generated from the OpenAPI spec.
Hanzo PaaS is the control plane for shipping software on Hanzo infrastructure — Studio at platform.hanzo.ai, API at api.hanzo.ai/v1/platform. You register an application, point it at a Docker image or Git repo, attach a domain, and the platform builds, deploys, and operates it on your clusters — with deployment history, rolling updates, and drift detection. Authentication is delegated to Hanzo IAM with per-organization isolation.
| Studio (browser UI) | https://platform.hanzo.ai |
| API | https://api.hanzo.ai/v1/platform — the one Hanzo API host |
| Build | POST https://api.hanzo.ai/v1/runner — the one build door |
| Auth | Hanzo IAM bearer (interactive and machine); build token for fabric automation |
| Source | github.com/hanzoai/platform |
platform.hanzo.ai is the Studio — a browser UI, not an API host. Every programmatic call goes to api.hanzo.ai/v1/platform/..., the same host and the same key as AI, KMS, and analytics.
The model
Hanzo PaaS organizes work into a simple hierarchy:
organization
└── project
└── environment (e.g. production, staging)
├── application (a Docker image or Git source → one workload)
└── compose (a multi-service docker-compose / stack unit)| Object | What it is |
|---|---|
| project | A grouping of related services, owned by an organization |
| environment | An isolated slice of a project (production, staging, preview) |
| application | A single deployable unit. Its appName is the name of the live workload it drives. sourceType is one of docker, git, github, gitlab, bitbucket, gitea, or drop; deployTarget is local, cloud, or k8s |
| deployment | One build/deploy run, with status and start/finish timestamps |
| domain | A hostname mapped to an application or compose service, with automatic TLS |
State is stored in Hanzo Base (embedded SQLite, replicated to object storage) — there is no external database to run.
Authentication
Two credential types, both retrieved from Hanzo KMS — never hard-coded:
| Credential | Header | Use |
|---|---|---|
| IAM token | Authorization: Bearer <iam-jwt> | Everything. One login authorizes reads, deploys, and builds. Mint it with the machine-identity exchange below, or via Hanzo IAM SSO. |
| Build token | Authorization: Bearer <build-token> | Fabric automation only (git-push-to-deploy, self-release). Never held by a user. |
There is no x-api-key header and no second credential type — one bearer, one host.
Deploy
From the Studio
- Sign in at platform.hanzo.ai with your Hanzo IAM account.
- Create a project and an environment.
- Add an application — choose a Docker image or connect a Git repository.
- Attach a domain and deploy.
Get a bearer
The machine identity comes from Hanzo KMS; the exchange is the same one every Hanzo service uses.
TOKEN=$(curl -sS -X POST https://api.hanzo.ai/v1/kms/auth/login \
-H 'Content-Type: application/json' \
-d "{\"clientId\":\"$KMS_CLIENT_ID\",\"clientSecret\":\"$KMS_CLIENT_SECRET\"}" | jq -r .accessToken)Projects and apps
# List projects in the caller's org
curl -fsS https://api.hanzo.ai/v1/platform/projects \
-H "Authorization: Bearer $TOKEN"
# Apps in a project
curl -fsS https://api.hanzo.ai/v1/platform/projects/$PROJECT/apps \
-H "Authorization: Bearer $TOKEN"| Method | Path | Purpose |
|---|---|---|
GET · POST | /v1/platform/projects | List / create projects |
GET · DELETE | /v1/platform/projects/{project} | Inspect / delete a project |
GET · POST | /v1/platform/projects/{project}/apps | List / create apps |
GET · DELETE | /v1/platform/projects/{project}/apps/{app} | Inspect / delete an app |
POST | /v1/platform/projects/{project}/apps/{app}/deploy | Roll the app forward |
POST | /v1/platform/projects/{project}/apps/{app}/start · /stop | Manage the running workload |
GET | /v1/platform/projects/{project}/apps/{app}/deployments[/{id}[/logs]] | Deployment history and logs |
GET · POST | /v1/platform/sites | Static sites |
GET | /v1/platform/health | Liveness — {"k8s":true,"service":"platform","status":"ok"} |
Redeploy
curl -fsS -X POST \
"https://api.hanzo.ai/v1/platform/projects/$PROJECT/apps/$APP/deploy" \
-H "Authorization: Bearer $TOKEN"Build an image
Builds run in-cluster on Hanzo's own BuildKit — never on a laptop, never on a third-party runner. One door:
curl -fsS -X POST https://api.hanzo.ai/v1/runner \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"repo": "https://github.com/hanzoai/docs",
"sha": "'$SHA'",
"image": "ghcr.io/hanzoai/docs:v1.4.0"
}'
# → 202 {"buildJobId":"…","status":"queued","runnerPool":"…","image":"…","target":"…"}repo must be a full https:// URL; image must push to a registry we own (ghcr.io/{hanzoai,luxfi,zooai}/*) whose namespace matches the caller's org. sha pins the commit — ref or branch are accepted, defaulting to main.
Do not post builds to platform.hanzo.ai. That origin serves the Studio's browser UI, and paths it does not route fall through to its HTML shell with a 404. The one build door is api.hanzo.ai/v1/runner.
Custom domains & TLS
Attach a hostname to an application; TLS is provisioned automatically (Let's Encrypt) and a DNS record is created:
Attach it in the Studio under the project's Domains tab, then point your DNS at the ingress IP shown there. Records themselves are managed through Hanzo DNS at api.hanzo.ai/v1/dns.
Self-hosting
git clone https://github.com/hanzoai/platform
cd platform
cp .env.example .env # set IAM endpoint, service token, etc.
docker compose up -dThe platform runs as a Next.js application with an embedded SQLite database; for production it deploys to a cluster via the operator. It authenticates against Hanzo IAM using the hanzo-platform application.
API Reference
The /v1/platform control surface and /v1/runner builds
IAM bearers and the fabric build token
Create, deploy, redeploy, and operate applications
Register and manage clusters and node pools
Related Services
Identity and access management with multi-org SSO
Secrets and service tokens for deployments
The embedded data store behind the control plane
Object storage for build artifacts and backups
How is this guide?