Reports whether the platform is up.
Reports whether the platform is up. It returns the public status document: the incidents currently open against Hanzo's own services, derived from the…
GET /v1/o11y/summary
| Address | https://api.hanzo.ai/v1/o11y/summary |
| Method | GET |
| Operation | get_o11y_summary |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Reports whether the platform is up. It returns the public status document: the incidents currently open against Hanzo's own services, derived from the fleet health probes, plus the address of the human status page. No authentication is required and no tenant data is involved — the answer is the same for every caller.
A service that fails its health probe becomes one incident naming that service. When the availability source itself cannot be read the endpoint answers 503 rather than an empty incident list, because "we cannot tell" and "everything is fine" are different answers and only one of them is true.
Request
GET /v1/o11y/summary takes no parameters and no body — the credential is the whole request.
Response
| Status | Body | Meaning |
|---|---|---|
200 | o11y.StatusSummary | ok |
200 body — 41 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
checked_at | body | string | — | CheckedAt is when the underlying availability read was taken, RFC3339 UTC. |
in_progress_maintenances | body | o11y.StatusMaintenance[] | — | InProgressMaintenances is always empty: this platform has no maintenance scheduling plane, so "nothing is running" is a true statement rather than a… |
in_progress_maintenances[].affected_components | body | o11y.StatusComponent[] | — | AffectedComponents is what the window touches. |
in_progress_maintenances[].affected_components[].current_status | body | string | — | CurrentStatus is this component's own condition: "full_outage" for a service that did not answer its health probe at all. |
in_progress_maintenances[].affected_components[].id | body | string | — | ID is the component's stable handle, which on this platform IS the service name — there is no separate component registry to allocate ids from. |
in_progress_maintenances[].affected_components[].name | body | string | — | Name is the service as the fleet prober knows it (the service label on hanzo_service_up), so a reader can match a component to what is being probed. |
in_progress_maintenances[].ends_at | body | string | — | EndsAt is when it is expected to finish, RFC3339 UTC. |
in_progress_maintenances[].id | body | string | — | ID is the window's handle. |
in_progress_maintenances[].last_update_at | body | string | — | LastUpdateAt is when the window was last revised, RFC3339 UTC. |
in_progress_maintenances[].last_update_message | body | string | — | LastUpdateMessage is the text of that revision. |
in_progress_maintenances[].name | body | string | — | Name is its one-line headline. |
in_progress_maintenances[].starts_at | body | string | — | StartsAt is when work begins, RFC3339 UTC. |
in_progress_maintenances[].status | body | string | — | Status is where the window is in its life, in the client's own vocabulary. |
in_progress_maintenances[].url | body | string | — | URL points at the human status page, as every link in this document does. |
ongoing_incidents | body | o11y.StatusIncident[] | — | OngoingIncidents is one entry per service that failed its health probe, sorted by name. |
ongoing_incidents[].affected_components | body | o11y.StatusComponent[] | — | AffectedComponents is what this incident covers. |
ongoing_incidents[].affected_components[].current_status | body | string | — | CurrentStatus is this component's own condition: "full_outage" for a service that did not answer its health probe at all. |
ongoing_incidents[].affected_components[].id | body | string | — | ID is the component's stable handle, which on this platform IS the service name — there is no separate component registry to allocate ids from. |
ongoing_incidents[].affected_components[].name | body | string | — | Name is the service as the fleet prober knows it (the service label on hanzo_service_up), so a reader can match a component to what is being probed. |
ongoing_incidents[].current_worst_impact | body | string | — | CurrentWorstImpact is the incident's impact on the PLATFORM, which is not the same question as the component's own condition above. |
ongoing_incidents[].id | body | string | — | ID is derived from the service, so the same outage keeps one id across reads rather than being reported as a new incident every 15 seconds. |
ongoing_incidents[].last_update_at | body | string | — | LastUpdateAt is when the failing measurement this incident reports was read, RFC3339 UTC. |
ongoing_incidents[].last_update_message | body | string | — | LastUpdateMessage says what was observed, not what is being done about it — there is no operator writing updates here, only the probe that failed. |
ongoing_incidents[].name | body | string | — | Name is the one-line headline, built from the service that stopped answering. |
ongoing_incidents[].status | body | string | — | Status is always "investigating" — the member of the client's closed set that means detected, cause not yet established, which is exactly what an automated… |
ongoing_incidents[].url | body | string | — | URL points at the HUMAN status page, not back at this JSON. |
page_title | body | string | — | PageTitle is the brand's own status-page title, resolved per request from the Host — a lux caller must never be shown Hanzo's. |
page_url | body | string | — | PageURL is the HUMAN status page — an HTML page for people, distinct from this JSON endpoint. |
scheduled_maintenances | body | o11y.StatusMaintenance[] | — | ScheduledMaintenances is always empty, for the same reason. |
scheduled_maintenances[].affected_components | body | o11y.StatusComponent[] | — | AffectedComponents is what the window touches. |
scheduled_maintenances[].affected_components[].current_status | body | string | — | CurrentStatus is this component's own condition: "full_outage" for a service that did not answer its health probe at all. |
scheduled_maintenances[].affected_components[].id | body | string | — | ID is the component's stable handle, which on this platform IS the service name — there is no separate component registry to allocate ids from. |
scheduled_maintenances[].affected_components[].name | body | string | — | Name is the service as the fleet prober knows it (the service label on hanzo_service_up), so a reader can match a component to what is being probed. |
scheduled_maintenances[].ends_at | body | string | — | EndsAt is when it is expected to finish, RFC3339 UTC. |
scheduled_maintenances[].id | body | string | — | ID is the window's handle. |
scheduled_maintenances[].last_update_at | body | string | — | LastUpdateAt is when the window was last revised, RFC3339 UTC. |
scheduled_maintenances[].last_update_message | body | string | — | LastUpdateMessage is the text of that revision. |
scheduled_maintenances[].name | body | string | — | Name is its one-line headline. |
scheduled_maintenances[].starts_at | body | string | — | StartsAt is when work begins, RFC3339 UTC. |
scheduled_maintenances[].status | body | string | — | Status is where the window is in its life, in the client's own vocabulary. |
scheduled_maintenances[].url | body | string | — | URL points at the human status page, as every link in this document does. |
Failure carries the platform error shape — see Errors.
Examples
hanzo has no subcommand for this operation — the CLI serves only what cloud's live route table confirms. Use HTTP or an SDK.
import { Configuration, O11yApi } from 'hanzoai';
const api = new O11yApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getO11ySummary();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import O11yApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = O11yApi(client).get_o11y_summary()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.O11yAPI.GetO11ySummary(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, o11y_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = o11y_api::get_o11y_summary(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.O11yApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new O11yApi(client).getO11ySummary();The method above is the one at the current release of the document. [email protected] (npm) and [email protected] (PyPI) were generated from an earlier release, where this operation carried a different id, so it spells the method differently — regenerating the clients is what makes the two agree. SDKs →
curl https://api.hanzo.ai/v1/o11y/summary \
-H "Authorization: Bearer $HANZO_API_KEY"The door reaches o11y through the o11y tool, which names its 340 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": "get_o11y_alert_last"
}
}
}'How is this guide?