Have the Business AI actually do the step for you
Executes one step of the caller org's journey through that principal's OWN tool plane and answers the action log — `{step, events, state}` — so the caller…
POST /v1/guide/steps/{id}/do
| Address | https://api.hanzo.ai/v1/guide/steps/{id}/do |
| Method | POST |
| Operation | post_guide_steps_by_id_do |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Executes one step of the caller org's journey through that principal's OWN tool plane and answers the action log — {step, events, state} — so the caller sees every tool call the agent made and where the step ended up. This is the ONE executing path in guide: suggest and chat advise, this acts, and the work is charged to the calling principal's ledger.
Ask for it live and the same actions arrive as Server-Sent Events instead, on either of two triggers — Accept: text/event-stream or ?stream=1. The stream opens with a comment, emits one frame per action as it happens, and closes with an end frame carrying ok and the final state. The streamed run is detached and bounded at 120 seconds, so it finishes on its own clock once the response has begun.
An agent that FAILS is not a failed request: the JSON answer still comes back 200 with error beside the events it did manage, and the stream still ends with ok:false. The refusals are the ones before the agent runs — 409 with {error, step, blockedBy} for a step whose dependencies are unfinished, 404 for an id the journey does not contain, 403 without a validated org.
Request
1 field.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes |
Response
The document declares no response body for this operation. It answers 200 on success and the platform error shape on failure — see Errors.
Examples
hanzo guide steps do <id>import { Configuration, GuideApi } from 'hanzoai';
const api = new GuideApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postGuideStepsByIdDo({ id: 'id' });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import GuideApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = GuideApi(client).post_guide_steps_by_id_do(id='id')cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.GuideAPI.PostGuideStepsByIdDo(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, guide_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = guide_api::post_guide_steps_by_id_do(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.GuideApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new GuideApi(client).postGuideStepsByIdDo();curl -X POST https://api.hanzo.ai/v1/guide/steps/<id>/do \
-H "Authorization: Bearer $HANZO_API_KEY"The door reaches guide through the guide tool, which names its 19 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_guide"
}
}
}'How is this guide?