Hanzo
OpenapiPlatform

Returns the platform's own service tier, and where it has drifted.

Returns the platform's own service tier, and where it has drifted.

GET /v1/platform/fleet

Addresshttps://api.hanzo.ai/v1/platform/fleet
MethodGET
Operationget_platform_fleet
AuthAuthorization: Bearer $HANZO_API_KEY

Returns the platform's own service tier, and where it has drifted.

It returns the board for the services the PLATFORM itself runs — iam, kms, gateway and the rest — as {apps, summary}: per service its environment, health, phase, the image tag its CR DECLARES, the tag actually running, and the drift between them, plus a summary counting the board green, yellow and red.

This is not a customer surface. /v1/platform/projects/:project/apps is a tenant's apps; this is the tier those tenants run ON, which is why the two are named differently rather than sharing a prefix.

Admission is scoped at the SCAN, before any CR is read: a platform SuperAdmin observes the whole fleet, an org admin observes only their own org's namespaces, and an org that owns none gets an empty board — a non-super caller never even lists another org's services. Narrow further with env, health, org, or drift=1 for only what has drifted.

It degrades honestly rather than failing whole: a namespace that does not exist is skipped, and a running-state read the caller cannot make leaves the running tag empty — an unknown, never a guess — while the declared, health and phase columns still render.

Request

4 fields.

FieldInTypeRequiredDescription
envquerystringEnv narrows to one lifecycle env: main, test or dev.
healthquerystringHealth narrows to one health colour: green, yellow or red.
orgquerystringOrg narrows to one image namespace.
driftquerystringDrift is 1 or true to show only rows that have actually drifted.

Response

StatusBodyMeaning
200driftBoardok

200 body — 28 fields.

FieldInTypeAlwaysDescription
appsbodyAppView[]Apps are the service rows, ordered by org, then app, then env.
apps[].appbodystringservice / CR name, e.g.
apps[].clusterbodystringalways "hanzo-k8s"; cross-cluster federation is a follow-up phase
apps[].declaredTagbodystringspec.image.tag — the tag the CR SAYS to run; anything but vX.Y.Z is red drift
apps[].driftbodyVerdict
apps[].drift.flagsbodyDriftFlag[]Flags are the findings behind the severity, in detection order: floating-declared, floating-running, stale, un-rolled, then the release-artifact ones.
apps[].drift.flags[].kindbodystringKind is which finding this is, one of stale, un-rolled, floating-declared, floating-running, no-release or zero-assets.
apps[].drift.flags[].messagebodystringMessage is the finding in words, naming the tags that produced it ("running v1.2.3 has not rolled to declared v1.2.4").
apps[].drift.flags[].severitybodystringSeverity is this ONE finding's weight — yellow for stale and un-rolled, red for the other four.
apps[].drift.severitybodystringSeverity is the roll-up over Flags — red if any flag is red, else yellow if any is yellow, else ok.
apps[].endpointsbodystring[]status.endpoints the operator published for this service; empty until it reconciles
apps[].envbodystringmain|test|dev
apps[].healthbodystringgreen|yellow|red|"" (unknown)
apps[].idbodystring<org>/<app>/<env>, e.g.
apps[].latestTagbodystringnewest released tag; "" until the GH release reader lands, so "stale" cannot fire yet
apps[].namespacebodystringnamespace the row was scanned from: a platform one (hanzo, hanzo-testnet, …) or a tenant-<org>
apps[].orgbodystringimage namespace, e.g.
apps[].phasebodystringoperator status.phase (Running/…)
apps[].registrybodystringspec.image.repository verbatim (ghcr.io/hanzoai/iam); Org and Repo are read off it
apps[].repobodystringowner/repo, e.g.
apps[].rolebodystringoperator spec.role (sql|kv|generic|ingress|…) or "" — the one declared class field
apps[].runningTagbodystringthe tag the live Deployment actually runs; "" when unreadable — unknown, not a guess
summarybodyfleetSummary
summary.byDriftbodydriftTally
summary.byDrift.okbodyintegerOK is how many rows run what they declare.
summary.byDrift.redbodyintegerRed is how many have drifted badly.
summary.byDrift.yellowbodyintegerYellow is how many have drifted within tolerance.
summary.totalbodyintegerTotal is how many rows the board returned, after filtering.

Failure carries the platform error shape — see Errors.

Examples

hanzo platform fleet list

Platform API · All Hanzo APIs · Interactive reference

How is this guide?

On this page