Is whether the experiments subsystem is mounted and serving in this process.
Is whether the experiments subsystem is mounted and serving in this process. It answers unconditionally.
GET /v1/experiment/health
| Address | https://api.hanzo.ai/v1/experiment/health |
| Method | GET |
| Operation | get_experiment_health |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Is whether the experiments subsystem is mounted and serving in this process.
It answers unconditionally. It proves exactly one thing — that this binary registered the experiments routes and is dispatching them — and deliberately no more: it reads no principal, opens no per-org registry, and touches neither the flags engine nor the analytics plane, so a 200 here says nothing about whether a given tenant's store will open or whether an analysis can run. It is the only route on this surface that needs no org.
The static path is registered ahead of the /:id read, so it always wins the first-match scan. "health" is a legal experiment id, which means an experiment created under that id can never be fetched by id — pick another.
Request
GET /v1/experiment/health takes no parameters and no body — the credential is the whole request.
Response
| Status | Body | Meaning |
|---|---|---|
200 | health | ok |
200 body — 2 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
ok | body | boolean | — | OK is true whenever this route answers at all: reaching the handler IS the proof that the routes are registered and dispatching. |
subsystem | body | string | — | Subsystem names what answered, so a health response read out of context still says which surface it came from. |
Failure carries the platform error shape — see Errors.
Examples
hanzo experiments healthimport { Configuration, ExperimentApi } from 'hanzoai';
const api = new ExperimentApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getExperimentHealth();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import ExperimentApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = ExperimentApi(client).get_experiment_health()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.ExperimentAPI.GetExperimentHealth(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, experiment_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = experiment_api::get_experiment_health(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.ExperimentApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new ExperimentApi(client).getExperimentHealth();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/experiment/health \
-H "Authorization: Bearer $HANZO_API_KEY"Tool experiments, op get_experiment_health — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "experiments",
"arguments": {
"op": "get_experiment_health",
"input": {}
}
}
}'How is this guide?