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

Addresshttps://api.hanzo.ai/v1/platform/apps
MethodGET
Operationget_platform_apps
AuthAuthorization: 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.

FieldInTypeRequiredDescription
orgquerystring—Org names the organisation whose declarations to read, defaulting to the caller's own.

Response

StatusBodyMeaning
200platform.declaredRespok
defaultproblem-detailsrefused

200 body — 45 fields.

FieldInTypeAlwaysDescription
appsbodyplatform.declared[]—
apps[].applicationbodystring—
apps[].automatedbodyboolean—
apps[].cdbodyplatform.CDApp—
apps[].cd.appliedbodystring—Applied is the universe commit CD last synced, from its deploy history.
apps[].cd.automatedbodyboolean—Automated is whether CD applies git without being asked.
apps[].cd.clusterbodystring—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.healthbodystring—Health is the workload's verdict: Healthy, Progressing, Degraded, Missing.
apps[].cd.messagebodystring—Message is why, when Health is not Healthy.
apps[].cd.namebodystring—Name is the Application name the generator mints: <namespace>-<app>.
apps[].cd.namespacebodystring—Namespace is the DESTINATION namespace as the CR declares it — where the workload lands.
apps[].cd.operationMessagebodystring—
apps[].cd.pathbodystring—Path is the values file CD renders against, relative to the chart source.
apps[].cd.phasebodystring—Phase is the last sync operation's phase (Running, Succeeded, Failed) and OperationMessage is its message.
apps[].cd.projectbodystring—Project is the AppProject fence the sync is admitted under.
apps[].cd.reconciledAtbodystring—ReconciledAt is when CD last compared this Application.
apps[].cd.revisionbodystring—Revision is the universe commit CD last compared the cluster against — what a sync applies.
apps[].cd.selfHealbodyboolean—SelfHeal is whether CD also corrects drift the cluster introduced.
apps[].cd.syncbodystring—Sync is CD's verdict on git-versus-cluster: Synced, OutOfSync, or Unknown.
apps[].componentbodystring—
apps[].digestbodystring—
apps[].envbodyplatform.declareEnv[]—
apps[].env[].namebodystring—
apps[].env[].publicbodyboolean—Public marks a value that may be WRITTEN INTO GIT.
apps[].env[].valuebodystring—
apps[].hostsbodystring[]—
apps[].namebodystring—
apps[].orgbodystring—
apps[].partOfbodystring—
apps[].pathbodystring—
apps[].projectbodystring—
apps[].replicasbodyinteger (int64)—
apps[].repositorybodystring—
apps[].secretsbodyplatform.SecretRef[]—
apps[].secrets[].envbodystring—Env is the KMS environment slug.
apps[].secrets[].keysbodystring[]—Keys are the names read from the path; empty means the whole path.
apps[].secrets[].pathbodystring—Path is the secret path, always absolute.
apps[].secrets[].projectbodystring—Project is the KMS project slug the path lives in.
apps[].tagbodystring—
cdUnavailablebodyplatform.unreadable—
cdUnavailable.reasonbodystring—Reason is why: the cause for a SuperAdmin, and which plane for anyone else.
orgbodystring—Org is the directory read — the caller's own, or another when a SuperAdmin asked to act as it.
unreadablebodyplatform.unreadableFile[]—Unreadable are the org's values files that do not parse, so they are not among apps.
unreadable[].pathbodystring—Path is the values file, relative to the repository root.
unreadable[].reasonbodystring—Reason is why it could not be read.

Failure carries the platform error shape — see Errors.

Examples

hanzo platform apps list
import { 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"
         }
       }
     }'

Platform API · All Hanzo APIs · Interactive reference

Was this page useful?