List apps — GET /v1/platform/apps
Answers what this organisation has declared, joined with what the delivery plane has done about it.
GET /v1/platform/apps
| Address | https://api.hanzo.ai/v1/platform/apps |
| Method | GET |
| Operation | get_platform_apps |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Answers what this organisation has declared, joined with what the delivery plane has done about it.
The join is best-effort BY DESIGN and says so when it is missing: the
declarations ARE the answer to "what have I deployed", so refusing the whole
board because the cluster is unreadable would lose the half that is readable.
What must never happen is a silent null — an unreadable plane is reported as
cd.unavailable carrying the reason, never as an app with no reconciliation,
and a values file that does not parse is listed in unreadable, never dropped.
Request
1 field.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
org | query | string | — | Org names the organisation whose declarations to read, defaulting to the caller's own. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | platform.declaredResp | ok |
default | problem-details | refused |
200 body — 45 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
apps | body | platform.declared[] | — | |
apps[].application | body | string | — | |
apps[].automated | body | boolean | — | |
apps[].cd | body | platform.CDApp | — | |
apps[].cd.applied | body | string | — | Applied is the universe commit CD last synced, from its deploy history. |
apps[].cd.automated | body | boolean | — | Automated is whether CD applies git without being asked. |
apps[].cd.cluster | body | string | — | Cluster is where the Application deploys: its destination cluster's name, else its server URL (https://kubernetes.default.svc is CD's own cluster). |
apps[].cd.health | body | string | — | Health is the workload's verdict: Healthy, Progressing, Degraded, Missing. |
apps[].cd.message | body | string | — | Message is why, when Health is not Healthy. |
apps[].cd.name | body | string | — | Name is the Application name the generator mints: <namespace>-<app>. |
apps[].cd.namespace | body | string | — | Namespace is the DESTINATION namespace as the CR declares it — where the workload lands. |
apps[].cd.operationMessage | body | string | — | |
apps[].cd.path | body | string | — | Path is the values file CD renders against, relative to the chart source. |
apps[].cd.phase | body | string | — | Phase is the last sync operation's phase (Running, Succeeded, Failed) and OperationMessage is its message. |
apps[].cd.project | body | string | — | Project is the AppProject fence the sync is admitted under. |
apps[].cd.reconciledAt | body | string | — | ReconciledAt is when CD last compared this Application. |
apps[].cd.revision | body | string | — | Revision is the universe commit CD last compared the cluster against — what a sync applies. |
apps[].cd.selfHeal | body | boolean | — | SelfHeal is whether CD also corrects drift the cluster introduced. |
apps[].cd.sync | body | string | — | Sync is CD's verdict on git-versus-cluster: Synced, OutOfSync, or Unknown. |
apps[].component | body | string | — | |
apps[].digest | body | string | — | |
apps[].env | body | platform.declareEnv[] | — | |
apps[].env[].name | body | string | — | |
apps[].env[].public | body | boolean | — | Public marks a value that may be WRITTEN INTO GIT. |
apps[].env[].value | body | string | — | |
apps[].hosts | body | string[] | — | |
apps[].name | body | string | — | |
apps[].org | body | string | — | |
apps[].partOf | body | string | — | |
apps[].path | body | string | — | |
apps[].project | body | string | — | |
apps[].replicas | body | integer (int64) | — | |
apps[].repository | body | string | — | |
apps[].secrets | body | platform.SecretRef[] | — | |
apps[].secrets[].env | body | string | — | Env is the KMS environment slug. |
apps[].secrets[].keys | body | string[] | — | Keys are the names read from the path; empty means the whole path. |
apps[].secrets[].path | body | string | — | Path is the secret path, always absolute. |
apps[].secrets[].project | body | string | — | Project is the KMS project slug the path lives in. |
apps[].tag | body | string | — | |
cdUnavailable | body | platform.unreadable | — | |
cdUnavailable.reason | body | string | — | Reason is why: the cause for a SuperAdmin, and which plane for anyone else. |
org | body | string | — | Org is the directory read — the caller's own, or another when a SuperAdmin asked to act as it. |
unreadable | body | platform.unreadableFile[] | — | Unreadable are the org's values files that do not parse, so they are not among apps. |
unreadable[].path | body | string | — | Path is the values file, relative to the repository root. |
unreadable[].reason | body | string | — | Reason is why it could not be read. |
Failure carries the platform error shape — see Errors.
Examples
hanzo platform apps listimport { Configuration, PlatformApi } from 'hanzoai';
const api = new PlatformApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getPlatformApps();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_apps()cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)
resp, _, err := client.PlatformAPI.GetPlatformApps(context.Background()).Execute()
if err != nil {
return err
}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_apps(&cfg, Default::default()).await?;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).getPlatformApps();curl https://api.hanzo.ai/v1/platform/apps \
-H "Authorization: Bearer $HANZO_API_KEY"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:
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"
}
}
}'